perf: remove owner removed columns from projections for oidc (#6925)

* fix: remove owner removed columns from login names projection

* fix: remove owner removed columns from flow projection

* fix: remove owner removed columns from project, projectgrant and member projections

* fix: correct unit tests for session projection

* fix: correct unit tests for session projection
This commit is contained in:
Stefan Benz
2023-11-20 16:21:08 +01:00
committed by GitHub
parent 3bed5f50a8
commit 0ec7a74877
65 changed files with 358 additions and 654 deletions

View File

@@ -52,10 +52,6 @@ var (
name: projection.FlowActionIDCol,
table: flowsTriggersTable,
}
FlowsTriggersOwnerRemovedCol = Column{
name: projection.FlowOwnerRemovedCol,
table: flowsTriggersTable,
}
)
type Flow struct {
@@ -67,7 +63,7 @@ type Flow struct {
TriggerActions map[domain.TriggerType][]*Action
}
func (q *Queries) GetFlow(ctx context.Context, flowType domain.FlowType, orgID string, withOwnerRemoved bool) (flow *Flow, err error) {
func (q *Queries) GetFlow(ctx context.Context, flowType domain.FlowType, orgID string) (flow *Flow, err error) {
ctx, span := tracing.NewSpan(ctx)
defer func() { span.EndWithError(err) }()
@@ -77,9 +73,6 @@ func (q *Queries) GetFlow(ctx context.Context, flowType domain.FlowType, orgID s
FlowsTriggersColumnResourceOwner.identifier(): orgID,
FlowsTriggersColumnInstanceID.identifier(): authz.GetInstance(ctx).InstanceID(),
}
if !withOwnerRemoved {
eq[FlowsTriggersOwnerRemovedCol.identifier()] = false
}
stmt, args, err := query.Where(eq).ToSql()
if err != nil {
return nil, errors.ThrowInvalidArgument(err, "QUERY-HBRh3", "Errors.Query.InvalidRequest")
@@ -92,7 +85,7 @@ func (q *Queries) GetFlow(ctx context.Context, flowType domain.FlowType, orgID s
return flow, err
}
func (q *Queries) GetActiveActionsByFlowAndTriggerType(ctx context.Context, flowType domain.FlowType, triggerType domain.TriggerType, orgID string, withOwnerRemoved bool) (actions []*Action, err error) {
func (q *Queries) GetActiveActionsByFlowAndTriggerType(ctx context.Context, flowType domain.FlowType, triggerType domain.TriggerType, orgID string) (actions []*Action, err error) {
ctx, span := tracing.NewSpan(ctx)
defer func() { span.EndWithError(err) }()
@@ -104,9 +97,6 @@ func (q *Queries) GetActiveActionsByFlowAndTriggerType(ctx context.Context, flow
FlowsTriggersColumnInstanceID.identifier(): authz.GetInstance(ctx).InstanceID(),
ActionColumnState.identifier(): domain.ActionStateActive,
}
if !withOwnerRemoved {
eq[FlowsTriggersOwnerRemovedCol.identifier()] = false
}
query, args, err := stmt.Where(eq).ToSql()
if err != nil {
return nil, errors.ThrowInternal(err, "QUERY-Dgff3", "Errors.Query.SQLStatement")
@@ -119,7 +109,7 @@ func (q *Queries) GetActiveActionsByFlowAndTriggerType(ctx context.Context, flow
return actions, err
}
func (q *Queries) GetFlowTypesOfActionID(ctx context.Context, actionID string, withOwnerRemoved bool) (types []domain.FlowType, err error) {
func (q *Queries) GetFlowTypesOfActionID(ctx context.Context, actionID string) (types []domain.FlowType, err error) {
ctx, span := tracing.NewSpan(ctx)
defer func() { span.EndWithError(err) }()
@@ -128,9 +118,6 @@ func (q *Queries) GetFlowTypesOfActionID(ctx context.Context, actionID string, w
FlowsTriggersColumnActionID.identifier(): actionID,
FlowsTriggersColumnInstanceID.identifier(): authz.GetInstance(ctx).InstanceID(),
}
if !withOwnerRemoved {
eq[FlowsTriggersOwnerRemovedCol.identifier()] = false
}
query, args, err := stmt.Where(eq).ToSql()
if err != nil {
return nil, errors.ThrowInvalidArgument(err, "QUERY-Dh311", "Errors.Query.InvalidRequest")

View File

@@ -26,15 +26,15 @@ var (
` projections.actions3.script,` +
` projections.actions3.allowed_to_fail,` +
` projections.actions3.timeout,` +
` projections.flow_triggers2.trigger_type,` +
` projections.flow_triggers2.trigger_sequence,` +
` projections.flow_triggers2.flow_type,` +
` projections.flow_triggers2.change_date,` +
` projections.flow_triggers2.sequence,` +
` projections.flow_triggers2.resource_owner` +
` FROM projections.flow_triggers2` +
` LEFT JOIN projections.actions3 ON projections.flow_triggers2.action_id = projections.actions3.id AND projections.flow_triggers2.instance_id = projections.actions3.instance_id`
// ` AS OF SYSTEM TIME '-1 ms'`
` projections.flow_triggers3.trigger_type,` +
` projections.flow_triggers3.trigger_sequence,` +
` projections.flow_triggers3.flow_type,` +
` projections.flow_triggers3.change_date,` +
` projections.flow_triggers3.sequence,` +
` projections.flow_triggers3.resource_owner` +
` FROM projections.flow_triggers3` +
` LEFT JOIN projections.actions3 ON projections.flow_triggers3.action_id = projections.actions3.id AND projections.flow_triggers3.instance_id = projections.actions3.instance_id`
// ` AS OF SYSTEM TIME '-1 ms'`
prepareFlowCols = []string{
"id",
"creation_date",
@@ -65,9 +65,9 @@ var (
` projections.actions3.script,` +
` projections.actions3.allowed_to_fail,` +
` projections.actions3.timeout` +
` FROM projections.flow_triggers2` +
` LEFT JOIN projections.actions3 ON projections.flow_triggers2.action_id = projections.actions3.id AND projections.flow_triggers2.instance_id = projections.actions3.instance_id`
// ` AS OF SYSTEM TIME '-1 ms'`
` FROM projections.flow_triggers3` +
` LEFT JOIN projections.actions3 ON projections.flow_triggers3.action_id = projections.actions3.id AND projections.flow_triggers3.instance_id = projections.actions3.instance_id`
// ` AS OF SYSTEM TIME '-1 ms'`
prepareTriggerActionCols = []string{
"id",
@@ -82,9 +82,9 @@ var (
"timeout",
}
prepareFlowTypeStmt = `SELECT projections.flow_triggers2.flow_type` +
` FROM projections.flow_triggers2`
// ` AS OF SYSTEM TIME '-1 ms'`
prepareFlowTypeStmt = `SELECT projections.flow_triggers3.flow_type` +
` FROM projections.flow_triggers3`
// ` AS OF SYSTEM TIME '-1 ms'`
prepareFlowTypeCols = []string{
"flow_type",

View File

@@ -329,15 +329,12 @@ func (q *Queries) AppBySAMLEntityID(ctx context.Context, entityID string, withOw
return app, err
}
func (q *Queries) ProjectByClientID(ctx context.Context, appID string, withOwnerRemoved bool) (project *Project, err error) {
func (q *Queries) ProjectByClientID(ctx context.Context, appID string) (project *Project, err error) {
ctx, span := tracing.NewSpan(ctx)
defer func() { span.EndWithError(err) }()
stmt, scan := prepareProjectByAppQuery(ctx, q.client)
eq := sq.Eq{AppColumnInstanceID.identifier(): authz.GetInstance(ctx).InstanceID()}
if !withOwnerRemoved {
eq[ProjectColumnOwnerRemoved.identifier()] = false
}
query, args, err := stmt.Where(sq.And{
eq,
sq.Or{

View File

@@ -108,19 +108,19 @@ var (
` LEFT JOIN projections.apps5_oidc_configs ON projections.apps5.id = projections.apps5_oidc_configs.app_id AND projections.apps5.instance_id = projections.apps5_oidc_configs.instance_id` +
` LEFT JOIN projections.apps5_saml_configs ON projections.apps5.id = projections.apps5_saml_configs.app_id AND projections.apps5.instance_id = projections.apps5_saml_configs.instance_id` +
` AS OF SYSTEM TIME '-1 ms'`)
expectedProjectByAppQuery = regexp.QuoteMeta(`SELECT projections.projects3.id,` +
` projections.projects3.creation_date,` +
` projections.projects3.change_date,` +
` projections.projects3.resource_owner,` +
` projections.projects3.state,` +
` projections.projects3.sequence,` +
` projections.projects3.name,` +
` projections.projects3.project_role_assertion,` +
` projections.projects3.project_role_check,` +
` projections.projects3.has_project_check,` +
` projections.projects3.private_labeling_setting` +
` FROM projections.projects3` +
` JOIN projections.apps5 ON projections.projects3.id = projections.apps5.project_id AND projections.projects3.instance_id = projections.apps5.instance_id` +
expectedProjectByAppQuery = regexp.QuoteMeta(`SELECT projections.projects4.id,` +
` projections.projects4.creation_date,` +
` projections.projects4.change_date,` +
` projections.projects4.resource_owner,` +
` projections.projects4.state,` +
` projections.projects4.sequence,` +
` projections.projects4.name,` +
` projections.projects4.project_role_assertion,` +
` projections.projects4.project_role_check,` +
` projections.projects4.has_project_check,` +
` projections.projects4.private_labeling_setting` +
` FROM projections.projects4` +
` JOIN projections.apps5 ON projections.projects4.id = projections.apps5.project_id AND projections.projects4.instance_id = projections.apps5.instance_id` +
` LEFT JOIN projections.apps5_api_configs ON projections.apps5.id = projections.apps5_api_configs.app_id AND projections.apps5.instance_id = projections.apps5_api_configs.instance_id` +
` LEFT JOIN projections.apps5_oidc_configs ON projections.apps5.id = projections.apps5_oidc_configs.app_id AND projections.apps5.instance_id = projections.apps5_oidc_configs.instance_id` +
` LEFT JOIN projections.apps5_saml_configs ON projections.apps5.id = projections.apps5_saml_configs.app_id AND projections.apps5.instance_id = projections.apps5_saml_configs.instance_id` +

View File

@@ -52,14 +52,6 @@ var (
name: projection.InstanceMemberIAMIDCol,
table: instanceMemberTable,
}
InstanceMemberOwnerRemoved = Column{
name: projection.MemberOwnerRemoved,
table: instanceMemberTable,
}
InstanceMemberOwnerRemovedUser = Column{
name: projection.MemberUserOwnerRemoved,
table: instanceMemberTable,
}
)
type IAMMembersQuery struct {
@@ -71,21 +63,12 @@ func (q *IAMMembersQuery) toQuery(query sq.SelectBuilder) sq.SelectBuilder {
toQuery(query)
}
func addIamMemberWithoutOwnerRemoved(eq map[string]interface{}) {
eq[InstanceMemberOwnerRemoved.identifier()] = false
eq[InstanceMemberOwnerRemovedUser.identifier()] = false
}
func (q *Queries) IAMMembers(ctx context.Context, queries *IAMMembersQuery, withOwnerRemoved bool) (members *Members, err error) {
func (q *Queries) IAMMembers(ctx context.Context, queries *IAMMembersQuery) (members *Members, err error) {
ctx, span := tracing.NewSpan(ctx)
defer func() { span.EndWithError(err) }()
query, scan := prepareInstanceMembersQuery(ctx, q.client)
eq := sq.Eq{InstanceMemberInstanceID.identifier(): authz.GetInstance(ctx).InstanceID()}
if !withOwnerRemoved {
addIamMemberWithoutOwnerRemoved(eq)
addLoginNameWithoutOwnerRemoved(eq)
}
stmt, args, err := queries.toQuery(query).Where(eq).ToSql()
if err != nil {
return nil, errors.ThrowInvalidArgument(err, "QUERY-USNwM", "Errors.Query.InvalidRequest")

View File

@@ -20,7 +20,7 @@ var (
", members.resource_owner" +
", members.user_id" +
", members.roles" +
", projections.login_names2.login_name" +
", projections.login_names3.login_name" +
", projections.users8_humans.email" +
", projections.users8_humans.first_name" +
", projections.users8_humans.last_name" +
@@ -29,17 +29,17 @@ var (
", projections.users8_humans.avatar_key" +
", projections.users8.type" +
", COUNT(*) OVER () " +
"FROM projections.instance_members3 AS members " +
"FROM projections.instance_members4 AS members " +
"LEFT JOIN projections.users8_humans " +
"ON members.user_id = projections.users8_humans.user_id AND members.instance_id = projections.users8_humans.instance_id " +
"LEFT JOIN projections.users8_machines " +
"ON members.user_id = projections.users8_machines.user_id AND members.instance_id = projections.users8_machines.instance_id " +
"LEFT JOIN projections.users8 " +
"ON members.user_id = projections.users8.id AND members.instance_id = projections.users8.instance_id " +
"LEFT JOIN projections.login_names2 " +
"ON members.user_id = projections.login_names2.user_id AND members.instance_id = projections.login_names2.instance_id " +
"LEFT JOIN projections.login_names3 " +
"ON members.user_id = projections.login_names3.user_id AND members.instance_id = projections.login_names3.instance_id " +
"AS OF SYSTEM TIME '-1 ms' " +
"WHERE projections.login_names2.is_primary = $1")
"WHERE projections.login_names3.is_primary = $1")
instanceMembersColumns = []string{
"creation_date",
"change_date",

View File

@@ -23,22 +23,4 @@ var (
name: projection.LoginNameInstanceIDCol,
table: loginNameTable,
}
LoginNameOwnerRemovedDomainCol = Column{
name: projection.LoginNameOwnerRemovedDomainCol,
table: loginNameTable,
}
LoginNameOwnerRemovedUserCol = Column{
name: projection.LoginNameOwnerRemovedUserCol,
table: loginNameTable,
}
LoginNameOwnerRemovedPolicyCol = Column{
name: projection.LoginNameOwnerRemovedPolicyCol,
table: loginNameTable,
}
)
func addLoginNameWithoutOwnerRemoved(eq map[string]interface{}) {
eq[LoginNameOwnerRemovedDomainCol.identifier()] = false
eq[LoginNameOwnerRemovedUserCol.identifier()] = false
eq[LoginNameOwnerRemovedPolicyCol.identifier()] = false
}

View File

@@ -52,14 +52,6 @@ var (
name: projection.OrgMemberOrgIDCol,
table: orgMemberTable,
}
OrgMemberOwnerRemoved = Column{
name: projection.MemberOwnerRemoved,
table: orgMemberTable,
}
OrgMemberOwnerRemovedUser = Column{
name: projection.MemberUserOwnerRemoved,
table: orgMemberTable,
}
)
type OrgMembersQuery struct {
@@ -73,21 +65,12 @@ func (q *OrgMembersQuery) toQuery(query sq.SelectBuilder) sq.SelectBuilder {
Where(sq.Eq{OrgMemberOrgID.identifier(): q.OrgID})
}
func addOrgMemberWithoutOwnerRemoved(eq map[string]interface{}) {
eq[OrgMemberOwnerRemoved.identifier()] = false
eq[OrgMemberOwnerRemovedUser.identifier()] = false
}
func (q *Queries) OrgMembers(ctx context.Context, queries *OrgMembersQuery, withOwnerRemoved bool) (members *Members, err error) {
func (q *Queries) OrgMembers(ctx context.Context, queries *OrgMembersQuery) (members *Members, err error) {
ctx, span := tracing.NewSpan(ctx)
defer func() { span.EndWithError(err) }()
query, scan := prepareOrgMembersQuery(ctx, q.client)
eq := sq.Eq{OrgMemberInstanceID.identifier(): authz.GetInstance(ctx).InstanceID()}
if !withOwnerRemoved {
addOrgMemberWithoutOwnerRemoved(eq)
addLoginNameWithoutOwnerRemoved(eq)
}
stmt, args, err := queries.toQuery(query).Where(eq).ToSql()
if err != nil {
return nil, errors.ThrowInvalidArgument(err, "QUERY-PDAVB", "Errors.Query.InvalidRequest")

View File

@@ -20,7 +20,7 @@ var (
", members.resource_owner" +
", members.user_id" +
", members.roles" +
", projections.login_names2.login_name" +
", projections.login_names3.login_name" +
", projections.users8_humans.email" +
", projections.users8_humans.first_name" +
", projections.users8_humans.last_name" +
@@ -29,7 +29,7 @@ var (
", projections.users8_humans.avatar_key" +
", projections.users8.type" +
", COUNT(*) OVER () " +
"FROM projections.org_members3 AS members " +
"FROM projections.org_members4 AS members " +
"LEFT JOIN projections.users8_humans " +
"ON members.user_id = projections.users8_humans.user_id " +
"AND members.instance_id = projections.users8_humans.instance_id " +
@@ -39,11 +39,11 @@ var (
"LEFT JOIN projections.users8 " +
"ON members.user_id = projections.users8.id " +
"AND members.instance_id = projections.users8.instance_id " +
"LEFT JOIN projections.login_names2 " +
"ON members.user_id = projections.login_names2.user_id " +
"AND members.instance_id = projections.login_names2.instance_id " +
"LEFT JOIN projections.login_names3 " +
"ON members.user_id = projections.login_names3.user_id " +
"AND members.instance_id = projections.login_names3.instance_id " +
"AS OF SYSTEM TIME '-1 ms' " +
"WHERE projections.login_names2.is_primary = $1")
"WHERE projections.login_names3.is_primary = $1")
orgMembersColumns = []string{
"creation_date",
"change_date",

View File

@@ -72,10 +72,6 @@ var (
name: projection.ProjectColumnState,
table: projectsTable,
}
ProjectColumnOwnerRemoved = Column{
name: projection.ProjectColumnOwnerRemoved,
table: projectsTable,
}
)
type Projects struct {
@@ -103,7 +99,7 @@ type ProjectSearchQueries struct {
Queries []SearchQuery
}
func (q *Queries) ProjectByID(ctx context.Context, shouldTriggerBulk bool, id string, withOwnerRemoved bool) (project *Project, err error) {
func (q *Queries) ProjectByID(ctx context.Context, shouldTriggerBulk bool, id string) (project *Project, err error) {
ctx, span := tracing.NewSpan(ctx)
defer func() { span.EndWithError(err) }()
@@ -119,9 +115,6 @@ func (q *Queries) ProjectByID(ctx context.Context, shouldTriggerBulk bool, id st
ProjectColumnID.identifier(): id,
ProjectColumnInstanceID.identifier(): authz.GetInstance(ctx).InstanceID(),
}
if !withOwnerRemoved {
eq[ProjectColumnOwnerRemoved.identifier()] = false
}
query, args, err := stmt.Where(eq).ToSql()
if err != nil {
return nil, errors.ThrowInternal(err, "QUERY-2m00Q", "Errors.Query.SQLStatment")
@@ -134,15 +127,12 @@ func (q *Queries) ProjectByID(ctx context.Context, shouldTriggerBulk bool, id st
return project, err
}
func (q *Queries) SearchProjects(ctx context.Context, queries *ProjectSearchQueries, withOwnerRemoved bool) (projects *Projects, err error) {
func (q *Queries) SearchProjects(ctx context.Context, queries *ProjectSearchQueries) (projects *Projects, err error) {
ctx, span := tracing.NewSpan(ctx)
defer func() { span.EndWithError(err) }()
query, scan := prepareProjectsQuery(ctx, q.client)
eq := sq.Eq{ProjectColumnInstanceID.identifier(): authz.GetInstance(ctx).InstanceID()}
if !withOwnerRemoved {
eq[ProjectColumnOwnerRemoved.identifier()] = false
}
stmt, args, err := queries.toQuery(query).Where(eq).ToSql()
if err != nil {
return nil, errors.ThrowInvalidArgument(err, "QUERY-fn9ew", "Errors.Query.InvalidRequest")

View File

@@ -78,14 +78,6 @@ var (
name: projection.OrgColumnName,
table: orgsTable.setAlias(ProjectGrantResourceOwnerTableAlias),
}
ProjectGrantColumnOwnerRemoved = Column{
name: projection.ProjectGrantColumnOwnerRemoved,
table: projectGrantsTable,
}
ProjectGrantColumnGrantGrantedOrgRemoved = Column{
name: projection.ProjectGrantColumnGrantedOrgRemoved,
table: projectGrantsTable,
}
)
type ProjectGrants struct {
@@ -114,7 +106,7 @@ type ProjectGrantSearchQueries struct {
Queries []SearchQuery
}
func (q *Queries) ProjectGrantByID(ctx context.Context, shouldTriggerBulk bool, id string, withOwnerRemoved bool) (grant *ProjectGrant, err error) {
func (q *Queries) ProjectGrantByID(ctx context.Context, shouldTriggerBulk bool, id string) (grant *ProjectGrant, err error) {
ctx, span := tracing.NewSpan(ctx)
defer func() { span.EndWithError(err) }()
@@ -130,10 +122,6 @@ func (q *Queries) ProjectGrantByID(ctx context.Context, shouldTriggerBulk bool,
ProjectGrantColumnGrantID.identifier(): id,
ProjectGrantColumnInstanceID.identifier(): authz.GetInstance(ctx).InstanceID(),
}
if !withOwnerRemoved {
eq[ProjectGrantColumnOwnerRemoved.identifier()] = false
eq[ProjectGrantColumnGrantGrantedOrgRemoved.identifier()] = false
}
query, args, err := stmt.Where(eq).ToSql()
if err != nil {
return nil, errors.ThrowInternal(err, "QUERY-Nf93d", "Errors.Query.SQLStatment")
@@ -146,7 +134,7 @@ func (q *Queries) ProjectGrantByID(ctx context.Context, shouldTriggerBulk bool,
return grant, err
}
func (q *Queries) ProjectGrantByIDAndGrantedOrg(ctx context.Context, id, grantedOrg string, withOwnerRemoved bool) (grant *ProjectGrant, err error) {
func (q *Queries) ProjectGrantByIDAndGrantedOrg(ctx context.Context, id, grantedOrg string) (grant *ProjectGrant, err error) {
ctx, span := tracing.NewSpan(ctx)
defer func() { span.EndWithError(err) }()
@@ -156,10 +144,6 @@ func (q *Queries) ProjectGrantByIDAndGrantedOrg(ctx context.Context, id, granted
ProjectGrantColumnGrantedOrgID.identifier(): grantedOrg,
ProjectGrantColumnInstanceID.identifier(): authz.GetInstance(ctx).InstanceID(),
}
if !withOwnerRemoved {
eq[ProjectGrantColumnOwnerRemoved.identifier()] = false
eq[ProjectGrantColumnGrantGrantedOrgRemoved.identifier()] = false
}
query, args, err := stmt.Where(eq).ToSql()
if err != nil {
return nil, errors.ThrowInternal(err, "QUERY-MO9fs", "Errors.Query.SQLStatment")
@@ -172,7 +156,7 @@ func (q *Queries) ProjectGrantByIDAndGrantedOrg(ctx context.Context, id, granted
return grant, err
}
func (q *Queries) SearchProjectGrants(ctx context.Context, queries *ProjectGrantSearchQueries, withOwnerRemoved bool) (grants *ProjectGrants, err error) {
func (q *Queries) SearchProjectGrants(ctx context.Context, queries *ProjectGrantSearchQueries) (grants *ProjectGrants, err error) {
ctx, span := tracing.NewSpan(ctx)
defer func() { span.EndWithError(err) }()
@@ -180,10 +164,6 @@ func (q *Queries) SearchProjectGrants(ctx context.Context, queries *ProjectGrant
eq := sq.Eq{
ProjectGrantColumnInstanceID.identifier(): authz.GetInstance(ctx).InstanceID(),
}
if !withOwnerRemoved {
eq[ProjectGrantColumnOwnerRemoved.identifier()] = false
eq[ProjectGrantColumnGrantGrantedOrgRemoved.identifier()] = false
}
stmt, args, err := queries.toQuery(query).Where(eq).ToSql()
if err != nil {
return nil, errors.ThrowInvalidArgument(err, "QUERY-N9fsg", "Errors.Query.InvalidRequest")
@@ -201,7 +181,7 @@ func (q *Queries) SearchProjectGrants(ctx context.Context, queries *ProjectGrant
return grants, err
}
func (q *Queries) SearchProjectGrantsByProjectIDAndRoleKey(ctx context.Context, projectID, roleKey string, withOwnerRemoved bool) (projects *ProjectGrants, err error) {
func (q *Queries) SearchProjectGrantsByProjectIDAndRoleKey(ctx context.Context, projectID, roleKey string) (projects *ProjectGrants, err error) {
ctx, span := tracing.NewSpan(ctx)
defer func() { span.EndWithError(err) }()
@@ -217,7 +197,7 @@ func (q *Queries) SearchProjectGrantsByProjectIDAndRoleKey(ctx context.Context,
if err != nil {
return nil, err
}
return q.SearchProjectGrants(ctx, searchQuery, withOwnerRemoved)
return q.SearchProjectGrants(ctx, searchQuery)
}
func NewProjectGrantProjectIDSearchQuery(value string) (SearchQuery, error) {

View File

@@ -55,18 +55,6 @@ var (
name: projection.ProjectGrantMemberGrantIDCol,
table: projectGrantMemberTable,
}
ProjectGrantMemberOwnerRemoved = Column{
name: projection.MemberOwnerRemoved,
table: projectGrantMemberTable,
}
ProjectGrantMemberUserOwnerRemoved = Column{
name: projection.MemberUserOwnerRemoved,
table: projectGrantMemberTable,
}
ProjectGrantMemberGrantedOrgRemoved = Column{
name: projection.ProjectGrantMemberGrantedOrgRemoved,
table: projectGrantMemberTable,
}
)
type ProjectGrantMembersQuery struct {
@@ -89,19 +77,9 @@ func (q *ProjectGrantMembersQuery) toQuery(query sq.SelectBuilder) sq.SelectBuil
})
}
func addProjectGrantMemberWithoutOwnerRemoved(eq map[string]interface{}) {
eq[ProjectGrantMemberOwnerRemoved.identifier()] = false
eq[ProjectGrantMemberUserOwnerRemoved.identifier()] = false
eq[ProjectGrantMemberGrantedOrgRemoved.identifier()] = false
}
func (q *Queries) ProjectGrantMembers(ctx context.Context, queries *ProjectGrantMembersQuery, withOwnerRemoved bool) (members *Members, err error) {
func (q *Queries) ProjectGrantMembers(ctx context.Context, queries *ProjectGrantMembersQuery) (members *Members, err error) {
query, scan := prepareProjectGrantMembersQuery(ctx, q.client)
eq := sq.Eq{ProjectGrantMemberInstanceID.identifier(): authz.GetInstance(ctx).InstanceID()}
if !withOwnerRemoved {
addProjectGrantMemberWithoutOwnerRemoved(eq)
addLoginNameWithoutOwnerRemoved(eq)
}
stmt, args, err := queries.toQuery(query).Where(eq).ToSql()
if err != nil {
return nil, errors.ThrowInvalidArgument(err, "QUERY-USNwM", "Errors.Query.InvalidRequest")

View File

@@ -20,7 +20,7 @@ var (
", members.resource_owner" +
", members.user_id" +
", members.roles" +
", projections.login_names2.login_name" +
", projections.login_names3.login_name" +
", projections.users8_humans.email" +
", projections.users8_humans.first_name" +
", projections.users8_humans.last_name" +
@@ -29,7 +29,7 @@ var (
", projections.users8_humans.avatar_key" +
", projections.users8.type" +
", COUNT(*) OVER () " +
"FROM projections.project_grant_members3 AS members " +
"FROM projections.project_grant_members4 AS members " +
"LEFT JOIN projections.users8_humans " +
"ON members.user_id = projections.users8_humans.user_id " +
"AND members.instance_id = projections.users8_humans.instance_id " +
@@ -39,14 +39,14 @@ var (
"LEFT JOIN projections.users8 " +
"ON members.user_id = projections.users8.id " +
"AND members.instance_id = projections.users8.instance_id " +
"LEFT JOIN projections.login_names2 " +
"ON members.user_id = projections.login_names2.user_id " +
"AND members.instance_id = projections.login_names2.instance_id " +
"LEFT JOIN projections.project_grants3 " +
"ON members.grant_id = projections.project_grants3.grant_id " +
"AND members.instance_id = projections.project_grants3.instance_id " +
"LEFT JOIN projections.login_names3 " +
"ON members.user_id = projections.login_names3.user_id " +
"AND members.instance_id = projections.login_names3.instance_id " +
"LEFT JOIN projections.project_grants4 " +
"ON members.grant_id = projections.project_grants4.grant_id " +
"AND members.instance_id = projections.project_grants4.instance_id " +
`AS OF SYSTEM TIME '-1 ms' ` +
"WHERE projections.login_names2.is_primary = $1")
"WHERE projections.login_names3.is_primary = $1")
projectGrantMembersColumns = []string{
"creation_date",
"change_date",

View File

@@ -14,23 +14,23 @@ import (
)
var (
projectGrantsQuery = `SELECT projections.project_grants3.project_id,` +
` projections.project_grants3.grant_id,` +
` projections.project_grants3.creation_date,` +
` projections.project_grants3.change_date,` +
` projections.project_grants3.resource_owner,` +
` projections.project_grants3.state,` +
` projections.project_grants3.sequence,` +
` projections.projects3.name,` +
` projections.project_grants3.granted_org_id,` +
projectGrantsQuery = `SELECT projections.project_grants4.project_id,` +
` projections.project_grants4.grant_id,` +
` projections.project_grants4.creation_date,` +
` projections.project_grants4.change_date,` +
` projections.project_grants4.resource_owner,` +
` projections.project_grants4.state,` +
` projections.project_grants4.sequence,` +
` projections.projects4.name,` +
` projections.project_grants4.granted_org_id,` +
` o.name,` +
` projections.project_grants3.granted_role_keys,` +
` projections.project_grants4.granted_role_keys,` +
` r.name,` +
` COUNT(*) OVER () ` +
` FROM projections.project_grants3 ` +
` LEFT JOIN projections.projects3 ON projections.project_grants3.project_id = projections.projects3.id AND projections.project_grants3.instance_id = projections.projects3.instance_id ` +
` LEFT JOIN projections.orgs1 AS r ON projections.project_grants3.resource_owner = r.id AND projections.project_grants3.instance_id = r.instance_id` +
` LEFT JOIN projections.orgs1 AS o ON projections.project_grants3.granted_org_id = o.id AND projections.project_grants3.instance_id = o.instance_id` +
` FROM projections.project_grants4 ` +
` LEFT JOIN projections.projects4 ON projections.project_grants4.project_id = projections.projects4.id AND projections.project_grants4.instance_id = projections.projects4.instance_id ` +
` LEFT JOIN projections.orgs1 AS r ON projections.project_grants4.resource_owner = r.id AND projections.project_grants4.instance_id = r.instance_id` +
` LEFT JOIN projections.orgs1 AS o ON projections.project_grants4.granted_org_id = o.id AND projections.project_grants4.instance_id = o.instance_id` +
` AS OF SYSTEM TIME '-1 ms'`
projectGrantsCols = []string{
"project_id",
@@ -47,22 +47,22 @@ var (
"name",
"count",
}
projectGrantQuery = `SELECT projections.project_grants3.project_id,` +
` projections.project_grants3.grant_id,` +
` projections.project_grants3.creation_date,` +
` projections.project_grants3.change_date,` +
` projections.project_grants3.resource_owner,` +
` projections.project_grants3.state,` +
` projections.project_grants3.sequence,` +
` projections.projects3.name,` +
` projections.project_grants3.granted_org_id,` +
projectGrantQuery = `SELECT projections.project_grants4.project_id,` +
` projections.project_grants4.grant_id,` +
` projections.project_grants4.creation_date,` +
` projections.project_grants4.change_date,` +
` projections.project_grants4.resource_owner,` +
` projections.project_grants4.state,` +
` projections.project_grants4.sequence,` +
` projections.projects4.name,` +
` projections.project_grants4.granted_org_id,` +
` o.name,` +
` projections.project_grants3.granted_role_keys,` +
` projections.project_grants4.granted_role_keys,` +
` r.name` +
` FROM projections.project_grants3 ` +
` LEFT JOIN projections.projects3 ON projections.project_grants3.project_id = projections.projects3.id AND projections.project_grants3.instance_id = projections.projects3.instance_id ` +
` LEFT JOIN projections.orgs1 AS r ON projections.project_grants3.resource_owner = r.id AND projections.project_grants3.instance_id = r.instance_id` +
` LEFT JOIN projections.orgs1 AS o ON projections.project_grants3.granted_org_id = o.id AND projections.project_grants3.instance_id = o.instance_id` +
` FROM projections.project_grants4 ` +
` LEFT JOIN projections.projects4 ON projections.project_grants4.project_id = projections.projects4.id AND projections.project_grants4.instance_id = projections.projects4.instance_id ` +
` LEFT JOIN projections.orgs1 AS r ON projections.project_grants4.resource_owner = r.id AND projections.project_grants4.instance_id = r.instance_id` +
` LEFT JOIN projections.orgs1 AS o ON projections.project_grants4.granted_org_id = o.id AND projections.project_grants4.instance_id = o.instance_id` +
` AS OF SYSTEM TIME '-1 ms'`
projectGrantCols = []string{
"project_id",

View File

@@ -52,14 +52,6 @@ var (
name: projection.ProjectMemberProjectIDCol,
table: projectMemberTable,
}
ProjectMemberOwnerRemoved = Column{
name: projection.MemberOwnerRemoved,
table: orgMemberTable,
}
ProjectMemberOwnerRemovedUser = Column{
name: projection.MemberUserOwnerRemoved,
table: orgMemberTable,
}
)
type ProjectMembersQuery struct {
@@ -73,21 +65,12 @@ func (q *ProjectMembersQuery) toQuery(query sq.SelectBuilder) sq.SelectBuilder {
Where(sq.Eq{ProjectMemberProjectID.identifier(): q.ProjectID})
}
func addProjectMemberWithoutOwnerRemoved(eq map[string]interface{}) {
eq[ProjectMemberOwnerRemoved.identifier()] = false
eq[ProjectMemberOwnerRemovedUser.identifier()] = false
}
func (q *Queries) ProjectMembers(ctx context.Context, queries *ProjectMembersQuery, withOwnerRemoved bool) (members *Members, err error) {
func (q *Queries) ProjectMembers(ctx context.Context, queries *ProjectMembersQuery) (members *Members, err error) {
ctx, span := tracing.NewSpan(ctx)
defer func() { span.EndWithError(err) }()
query, scan := prepareProjectMembersQuery(ctx, q.client)
eq := sq.Eq{ProjectMemberInstanceID.identifier(): authz.GetInstance(ctx).InstanceID()}
if !withOwnerRemoved {
addProjectMemberWithoutOwnerRemoved(eq)
addLoginNameWithoutOwnerRemoved(eq)
}
stmt, args, err := queries.toQuery(query).Where(eq).ToSql()
if err != nil {
return nil, errors.ThrowInvalidArgument(err, "QUERY-T8CuT", "Errors.Query.InvalidRequest")

View File

@@ -20,7 +20,7 @@ var (
", members.resource_owner" +
", members.user_id" +
", members.roles" +
", projections.login_names2.login_name" +
", projections.login_names3.login_name" +
", projections.users8_humans.email" +
", projections.users8_humans.first_name" +
", projections.users8_humans.last_name" +
@@ -29,7 +29,7 @@ var (
", projections.users8_humans.avatar_key" +
", projections.users8.type" +
", COUNT(*) OVER () " +
"FROM projections.project_members3 AS members " +
"FROM projections.project_members4 AS members " +
"LEFT JOIN projections.users8_humans " +
"ON members.user_id = projections.users8_humans.user_id " +
"AND members.instance_id = projections.users8_humans.instance_id " +
@@ -39,11 +39,11 @@ var (
"LEFT JOIN projections.users8 " +
"ON members.user_id = projections.users8.id " +
"AND members.instance_id = projections.users8.instance_id " +
"LEFT JOIN projections.login_names2 " +
"ON members.user_id = projections.login_names2.user_id " +
"AND members.instance_id = projections.login_names2.instance_id " +
"LEFT JOIN projections.login_names3 " +
"ON members.user_id = projections.login_names3.user_id " +
"AND members.instance_id = projections.login_names3.instance_id " +
`AS OF SYSTEM TIME '-1 ms' ` +
"WHERE projections.login_names2.is_primary = $1")
"WHERE projections.login_names3.is_primary = $1")
projectMembersColumns = []string{
"creation_date",
"change_date",

View File

@@ -58,10 +58,6 @@ var (
name: projection.ProjectRoleColumnGroupName,
table: projectRolesTable,
}
ProjectRoleColumnOwnerRemoved = Column{
name: projection.ProjectRoleColumnOwnerRemoved,
table: projectRolesTable,
}
)
type ProjectRoles struct {
@@ -86,7 +82,7 @@ type ProjectRoleSearchQueries struct {
Queries []SearchQuery
}
func (q *Queries) SearchProjectRoles(ctx context.Context, shouldTriggerBulk bool, queries *ProjectRoleSearchQueries, withOwnerRemoved bool) (roles *ProjectRoles, err error) {
func (q *Queries) SearchProjectRoles(ctx context.Context, shouldTriggerBulk bool, queries *ProjectRoleSearchQueries) (roles *ProjectRoles, err error) {
ctx, span := tracing.NewSpan(ctx)
defer func() { span.EndWithError(err) }()
@@ -98,9 +94,6 @@ func (q *Queries) SearchProjectRoles(ctx context.Context, shouldTriggerBulk bool
}
eq := sq.Eq{ProjectRoleColumnInstanceID.identifier(): authz.GetInstance(ctx).InstanceID()}
if !withOwnerRemoved {
eq[ProjectRoleColumnOwnerRemoved.identifier()] = false
}
query, scan := prepareProjectRolesQuery(ctx, q.client)
stmt, args, err := queries.toQuery(query).Where(eq).ToSql()
@@ -119,11 +112,11 @@ func (q *Queries) SearchProjectRoles(ctx context.Context, shouldTriggerBulk bool
return roles, err
}
func (q *Queries) SearchGrantedProjectRoles(ctx context.Context, grantID, grantedOrg string, queries *ProjectRoleSearchQueries, withOwnerRemoved bool) (roles *ProjectRoles, err error) {
func (q *Queries) SearchGrantedProjectRoles(ctx context.Context, grantID, grantedOrg string, queries *ProjectRoleSearchQueries) (roles *ProjectRoles, err error) {
ctx, span := tracing.NewSpan(ctx)
defer func() { span.EndWithError(err) }()
grant, err := q.ProjectGrantByIDAndGrantedOrg(ctx, grantID, grantedOrg, withOwnerRemoved)
grant, err := q.ProjectGrantByIDAndGrantedOrg(ctx, grantID, grantedOrg)
if err != nil {
return nil, err
}
@@ -133,9 +126,6 @@ func (q *Queries) SearchGrantedProjectRoles(ctx context.Context, grantID, grante
}
eq := sq.Eq{ProjectRoleColumnInstanceID.identifier(): authz.GetInstance(ctx).InstanceID()}
if !withOwnerRemoved {
eq[ProjectRoleColumnOwnerRemoved.identifier()] = false
}
query, scan := prepareProjectRolesQuery(ctx, q.client)
stmt, args, err := queries.toQuery(query).Where(eq).ToSql()

View File

@@ -10,16 +10,16 @@ import (
)
var (
prepareProjectRolesStmt = `SELECT projections.project_roles3.project_id,` +
` projections.project_roles3.creation_date,` +
` projections.project_roles3.change_date,` +
` projections.project_roles3.resource_owner,` +
` projections.project_roles3.sequence,` +
` projections.project_roles3.role_key,` +
` projections.project_roles3.display_name,` +
` projections.project_roles3.group_name,` +
prepareProjectRolesStmt = `SELECT projections.project_roles4.project_id,` +
` projections.project_roles4.creation_date,` +
` projections.project_roles4.change_date,` +
` projections.project_roles4.resource_owner,` +
` projections.project_roles4.sequence,` +
` projections.project_roles4.role_key,` +
` projections.project_roles4.display_name,` +
` projections.project_roles4.group_name,` +
` COUNT(*) OVER ()` +
` FROM projections.project_roles3` +
` FROM projections.project_roles4` +
` AS OF SYSTEM TIME '-1 ms'`
prepareProjectRolesCols = []string{
"project_id",

View File

@@ -27,19 +27,19 @@ var (
"private_labeling_setting",
}
prepareProjectsStmt = `SELECT projections.projects3.id,` +
` projections.projects3.creation_date,` +
` projections.projects3.change_date,` +
` projections.projects3.resource_owner,` +
` projections.projects3.state,` +
` projections.projects3.sequence,` +
` projections.projects3.name,` +
` projections.projects3.project_role_assertion,` +
` projections.projects3.project_role_check,` +
` projections.projects3.has_project_check,` +
` projections.projects3.private_labeling_setting,` +
prepareProjectsStmt = `SELECT projections.projects4.id,` +
` projections.projects4.creation_date,` +
` projections.projects4.change_date,` +
` projections.projects4.resource_owner,` +
` projections.projects4.state,` +
` projections.projects4.sequence,` +
` projections.projects4.name,` +
` projections.projects4.project_role_assertion,` +
` projections.projects4.project_role_check,` +
` projections.projects4.has_project_check,` +
` projections.projects4.private_labeling_setting,` +
` COUNT(*) OVER ()` +
` FROM projections.projects3` +
` FROM projections.projects4` +
` AS OF SYSTEM TIME '-1 ms'`
prepareProjectsCols = []string{
"id",
@@ -56,18 +56,18 @@ var (
"count",
}
prepareProjectStmt = `SELECT projections.projects3.id,` +
` projections.projects3.creation_date,` +
` projections.projects3.change_date,` +
` projections.projects3.resource_owner,` +
` projections.projects3.state,` +
` projections.projects3.sequence,` +
` projections.projects3.name,` +
` projections.projects3.project_role_assertion,` +
` projections.projects3.project_role_check,` +
` projections.projects3.has_project_check,` +
` projections.projects3.private_labeling_setting` +
` FROM projections.projects3` +
prepareProjectStmt = `SELECT projections.projects4.id,` +
` projections.projects4.creation_date,` +
` projections.projects4.change_date,` +
` projections.projects4.resource_owner,` +
` projections.projects4.state,` +
` projections.projects4.sequence,` +
` projections.projects4.name,` +
` projections.projects4.project_role_assertion,` +
` projections.projects4.project_role_check,` +
` projections.projects4.has_project_check,` +
` projections.projects4.private_labeling_setting` +
` FROM projections.projects4` +
` AS OF SYSTEM TIME '-1 ms'`
prepareProjectCols = []string{
"id",

View File

@@ -12,7 +12,7 @@ import (
)
const (
FlowTriggerTable = "projections.flow_triggers2"
FlowTriggerTable = "projections.flow_triggers3"
FlowTypeCol = "flow_type"
FlowChangeDateCol = "change_date"
FlowSequenceCol = "sequence"
@@ -21,7 +21,6 @@ const (
FlowInstanceIDCol = "instance_id"
FlowActionTriggerSequenceCol = "trigger_sequence"
FlowActionIDCol = "action_id"
FlowOwnerRemovedCol = "owner_removed"
)
type flowProjection struct{}
@@ -45,10 +44,8 @@ func (*flowProjection) Init() *old_handler.Check {
handler.NewColumn(FlowInstanceIDCol, handler.ColumnTypeText),
handler.NewColumn(FlowActionTriggerSequenceCol, handler.ColumnTypeInt64),
handler.NewColumn(FlowActionIDCol, handler.ColumnTypeText),
handler.NewColumn(FlowOwnerRemovedCol, handler.ColumnTypeBool, handler.Default(false)),
},
handler.NewPrimaryKey(FlowInstanceIDCol, FlowTypeCol, FlowTriggerTypeCol, FlowResourceOwnerCol, FlowActionIDCol),
handler.WithIndex(handler.NewIndex("owner_removed", []string{FlowOwnerRemovedCol})),
),
)
}

View File

@@ -38,7 +38,7 @@ func TestFlowProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.flow_triggers2 WHERE (flow_type = $1) AND (trigger_type = $2) AND (resource_owner = $3) AND (instance_id = $4)",
expectedStmt: "DELETE FROM projections.flow_triggers3 WHERE (flow_type = $1) AND (trigger_type = $2) AND (resource_owner = $3) AND (instance_id = $4)",
expectedArgs: []interface{}{
domain.FlowTypeExternalAuthentication,
domain.TriggerTypePostAuthentication,
@@ -47,7 +47,7 @@ func TestFlowProjection_reduces(t *testing.T) {
},
},
{
expectedStmt: "INSERT INTO projections.flow_triggers2 (resource_owner, instance_id, flow_type, change_date, sequence, trigger_type, action_id, trigger_sequence) VALUES ($1, $2, $3, $4, $5, $6, $7, $8)",
expectedStmt: "INSERT INTO projections.flow_triggers3 (resource_owner, instance_id, flow_type, change_date, sequence, trigger_type, action_id, trigger_sequence) VALUES ($1, $2, $3, $4, $5, $6, $7, $8)",
expectedArgs: []interface{}{
"ro-id",
"instance-id",
@@ -60,7 +60,7 @@ func TestFlowProjection_reduces(t *testing.T) {
},
},
{
expectedStmt: "INSERT INTO projections.flow_triggers2 (resource_owner, instance_id, flow_type, change_date, sequence, trigger_type, action_id, trigger_sequence) VALUES ($1, $2, $3, $4, $5, $6, $7, $8)",
expectedStmt: "INSERT INTO projections.flow_triggers3 (resource_owner, instance_id, flow_type, change_date, sequence, trigger_type, action_id, trigger_sequence) VALUES ($1, $2, $3, $4, $5, $6, $7, $8)",
expectedArgs: []interface{}{
"ro-id",
"instance-id",
@@ -93,7 +93,7 @@ func TestFlowProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.flow_triggers2 WHERE (flow_type = $1) AND (resource_owner = $2) AND (instance_id = $3)",
expectedStmt: "DELETE FROM projections.flow_triggers3 WHERE (flow_type = $1) AND (resource_owner = $2) AND (instance_id = $3)",
expectedArgs: []interface{}{
domain.FlowTypeExternalAuthentication,
"ro-id",
@@ -121,7 +121,7 @@ func TestFlowProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.flow_triggers2 WHERE (instance_id = $1) AND (resource_owner = $2)",
expectedStmt: "DELETE FROM projections.flow_triggers3 WHERE (instance_id = $1) AND (resource_owner = $2)",
expectedArgs: []interface{}{
"instance-id",
"agg-id",
@@ -148,7 +148,7 @@ func TestFlowProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.flow_triggers2 WHERE (instance_id = $1)",
expectedStmt: "DELETE FROM projections.flow_triggers3 WHERE (instance_id = $1)",
expectedArgs: []interface{}{
"agg-id",
},

View File

@@ -13,7 +13,7 @@ import (
)
const (
InstanceMemberProjectionTable = "projections.instance_members3"
InstanceMemberProjectionTable = "projections.instance_members4"
InstanceMemberIAMIDCol = "id"
)
@@ -36,17 +36,14 @@ func (*instanceMemberProjection) Init() *old_handler.Check {
append(memberColumns, handler.NewColumn(InstanceColumnID, handler.ColumnTypeText)),
handler.NewPrimaryKey(MemberInstanceID, InstanceColumnID, MemberUserIDCol),
handler.WithIndex(handler.NewIndex("user_id", []string{MemberUserIDCol})),
handler.WithIndex(handler.NewIndex("user_owner_removed", []string{MemberUserOwnerRemoved})),
handler.WithIndex(
handler.NewIndex("im_instance", []string{MemberInstanceID},
handler.WithInclude(
MemberCreationDate,
MemberChangeDate,
MemberUserOwnerRemoved,
MemberRolesCol,
MemberSequence,
MemberResourceOwner,
MemberOwnerRemoved,
),
),
),

View File

@@ -63,18 +63,16 @@ func TestInstanceMemberProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "INSERT INTO projections.instance_members3 (user_id, user_resource_owner, user_owner_removed, roles, creation_date, change_date, sequence, resource_owner, instance_id, owner_removed, id) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11)",
expectedStmt: "INSERT INTO projections.instance_members4 (user_id, user_resource_owner, roles, creation_date, change_date, sequence, resource_owner, instance_id, id) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)",
expectedArgs: []interface{}{
"user-id",
"org1",
false,
database.TextArray[string]{"role"},
anyArg{},
anyArg{},
uint64(15),
"ro-id",
"instance-id",
false,
"agg-id",
},
},
@@ -102,7 +100,7 @@ func TestInstanceMemberProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "UPDATE projections.instance_members3 SET (roles, change_date, sequence) = ($1, $2, $3) WHERE (instance_id = $4) AND (user_id = $5)",
expectedStmt: "UPDATE projections.instance_members4 SET (roles, change_date, sequence) = ($1, $2, $3) WHERE (instance_id = $4) AND (user_id = $5)",
expectedArgs: []interface{}{
database.TextArray[string]{"role", "changed"},
anyArg{},
@@ -134,7 +132,7 @@ func TestInstanceMemberProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.instance_members3 WHERE (instance_id = $1) AND (user_id = $2)",
expectedStmt: "DELETE FROM projections.instance_members4 WHERE (instance_id = $1) AND (user_id = $2)",
expectedArgs: []interface{}{
"instance-id",
"user-id",
@@ -163,7 +161,7 @@ func TestInstanceMemberProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.instance_members3 WHERE (instance_id = $1) AND (user_id = $2)",
expectedStmt: "DELETE FROM projections.instance_members4 WHERE (instance_id = $1) AND (user_id = $2)",
expectedArgs: []interface{}{
"instance-id",
"user-id",
@@ -190,7 +188,7 @@ func TestInstanceMemberProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.instance_members3 WHERE (instance_id = $1) AND (user_id = $2)",
expectedStmt: "DELETE FROM projections.instance_members4 WHERE (instance_id = $1) AND (user_id = $2)",
expectedArgs: []interface{}{
"instance-id",
"agg-id",
@@ -217,7 +215,7 @@ func TestInstanceMemberProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.instance_members3 WHERE (instance_id = $1) AND (user_resource_owner = $2)",
expectedStmt: "DELETE FROM projections.instance_members4 WHERE (instance_id = $1) AND (user_resource_owner = $2)",
expectedArgs: []interface{}{
"instance-id",
"agg-id",
@@ -244,7 +242,7 @@ func TestInstanceMemberProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.instance_members3 WHERE (instance_id = $1)",
expectedStmt: "DELETE FROM projections.instance_members4 WHERE (instance_id = $1)",
expectedArgs: []interface{}{
"agg-id",
},

View File

@@ -17,19 +17,16 @@ import (
)
const (
LoginNameTableAlias = "login_names2"
LoginNameTableAlias = "login_names3"
LoginNameProjectionTable = "projections." + LoginNameTableAlias
LoginNameUserProjectionTable = LoginNameProjectionTable + "_" + loginNameUserSuffix
LoginNamePolicyProjectionTable = LoginNameProjectionTable + "_" + loginNamePolicySuffix
LoginNameDomainProjectionTable = LoginNameProjectionTable + "_" + loginNameDomainSuffix
LoginNameCol = "login_name"
LoginNameUserCol = "user_id"
LoginNameIsPrimaryCol = "is_primary"
LoginNameInstanceIDCol = "instance_id"
LoginNameOwnerRemovedUserCol = "user_owner_removed"
LoginNameOwnerRemovedPolicyCol = "policy_owner_removed"
LoginNameOwnerRemovedDomainCol = "domain_owner_removed"
LoginNameCol = "login_name"
LoginNameUserCol = "user_id"
LoginNameIsPrimaryCol = "is_primary"
LoginNameInstanceIDCol = "instance_id"
usersAlias = "users"
policyCustomAlias = "policy_custom"
@@ -43,21 +40,18 @@ const (
LoginNameUserUserNameCol = "user_name"
LoginNameUserResourceOwnerCol = "resource_owner"
LoginNameUserInstanceIDCol = "instance_id"
LoginNameUserOwnerRemovedCol = "owner_removed"
loginNameDomainSuffix = "domains"
LoginNameDomainNameCol = "name"
LoginNameDomainIsPrimaryCol = "is_primary"
LoginNameDomainResourceOwnerCol = "resource_owner"
LoginNameDomainInstanceIDCol = "instance_id"
LoginNameDomainOwnerRemovedCol = "owner_removed"
loginNamePolicySuffix = "policies"
LoginNamePoliciesMustBeDomainCol = "must_be_domain"
LoginNamePoliciesIsDefaultCol = "is_default"
LoginNamePoliciesResourceOwnerCol = "resource_owner"
LoginNamePoliciesInstanceIDCol = "instance_id"
LoginNamePoliciesOwnerRemovedCol = "owner_removed"
)
var (
@@ -73,10 +67,6 @@ var (
coalesce(col(policyCustomAlias, LoginNamePoliciesMustBeDomainCol), col(policyDefaultAlias, LoginNamePoliciesMustBeDomainCol)),
LoginNamePoliciesMustBeDomainCol,
),
alias(col(usersAlias, LoginNameUserOwnerRemovedCol),
LoginNameOwnerRemovedUserCol),
alias(coalesce(col(policyCustomAlias, LoginNamePoliciesOwnerRemovedCol), "false"),
LoginNameOwnerRemovedPolicyCol),
).From(alias(LoginNameUserProjectionTable, usersAlias)).
LeftJoin(
leftJoin(LoginNamePolicyProjectionTable, policyCustomAlias,
@@ -101,10 +91,6 @@ var (
alias(col(domainsAlias, LoginNameDomainNameCol),
domainAlias),
col(domainsAlias, LoginNameDomainIsPrimaryCol),
col(policyUsersAlias, LoginNameOwnerRemovedUserCol),
col(policyUsersAlias, LoginNameOwnerRemovedPolicyCol),
alias(coalesce(col(domainsAlias, LoginNameDomainOwnerRemovedCol), "false"),
LoginNameOwnerRemovedDomainCol),
).FromSelect(policyUsers, policyUsersAlias).
LeftJoin(
leftJoin(LoginNameDomainProjectionTable, domainsAlias,
@@ -125,9 +111,6 @@ var (
alias(coalesce(LoginNameDomainIsPrimaryCol, "true"),
LoginNameIsPrimaryCol),
LoginNameInstanceIDCol,
LoginNameOwnerRemovedUserCol,
LoginNameOwnerRemovedPolicyCol,
LoginNameOwnerRemovedDomainCol,
).FromSelect(loginNamesTable, LoginNameTableAlias).MustSql()
)
@@ -190,17 +173,14 @@ func (*loginNameProjection) Init() *old_handler.Check {
handler.NewColumn(LoginNameUserUserNameCol, handler.ColumnTypeText),
handler.NewColumn(LoginNameUserResourceOwnerCol, handler.ColumnTypeText),
handler.NewColumn(LoginNameUserInstanceIDCol, handler.ColumnTypeText),
handler.NewColumn(LoginNameUserOwnerRemovedCol, handler.ColumnTypeBool, handler.Default(false)),
},
handler.NewPrimaryKey(LoginNameUserInstanceIDCol, LoginNameUserIDCol),
loginNameUserSuffix,
handler.WithIndex(handler.NewIndex("resource_owner", []string{LoginNameUserResourceOwnerCol})),
handler.WithIndex(handler.NewIndex("owner_removed", []string{LoginNameUserOwnerRemovedCol})),
handler.WithIndex(
handler.NewIndex("lnu_instance_ro_id", []string{LoginNameUserInstanceIDCol, LoginNameUserResourceOwnerCol, LoginNameUserIDCol},
handler.WithInclude(
LoginNameUserUserNameCol,
LoginNameUserOwnerRemovedCol,
),
),
),
@@ -211,11 +191,9 @@ func (*loginNameProjection) Init() *old_handler.Check {
handler.NewColumn(LoginNameDomainIsPrimaryCol, handler.ColumnTypeBool, handler.Default(false)),
handler.NewColumn(LoginNameDomainResourceOwnerCol, handler.ColumnTypeText),
handler.NewColumn(LoginNameDomainInstanceIDCol, handler.ColumnTypeText),
handler.NewColumn(LoginNameDomainOwnerRemovedCol, handler.ColumnTypeBool, handler.Default(false)),
},
handler.NewPrimaryKey(LoginNameDomainInstanceIDCol, LoginNameDomainResourceOwnerCol, LoginNameDomainNameCol),
loginNameDomainSuffix,
handler.WithIndex(handler.NewIndex("owner_removed", []string{LoginNameDomainOwnerRemovedCol})),
),
handler.NewSuffixedTable(
[]*handler.InitColumn{
@@ -223,12 +201,10 @@ func (*loginNameProjection) Init() *old_handler.Check {
handler.NewColumn(LoginNamePoliciesIsDefaultCol, handler.ColumnTypeBool),
handler.NewColumn(LoginNamePoliciesResourceOwnerCol, handler.ColumnTypeText),
handler.NewColumn(LoginNamePoliciesInstanceIDCol, handler.ColumnTypeText),
handler.NewColumn(LoginNamePoliciesOwnerRemovedCol, handler.ColumnTypeBool, handler.Default(false)),
},
handler.NewPrimaryKey(LoginNamePoliciesInstanceIDCol, LoginNamePoliciesResourceOwnerCol),
loginNamePolicySuffix,
handler.WithIndex(handler.NewIndex("is_default", []string{LoginNamePoliciesResourceOwnerCol, LoginNamePoliciesIsDefaultCol})),
handler.WithIndex(handler.NewIndex("owner_removed", []string{LoginNamePoliciesOwnerRemovedCol})),
),
)
}

View File

@@ -40,7 +40,7 @@ func TestLoginNameProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "INSERT INTO projections.login_names2_users (id, user_name, resource_owner, instance_id) VALUES ($1, $2, $3, $4)",
expectedStmt: "INSERT INTO projections.login_names3_users (id, user_name, resource_owner, instance_id) VALUES ($1, $2, $3, $4)",
expectedArgs: []interface{}{
"agg-id",
"human-added",
@@ -71,7 +71,7 @@ func TestLoginNameProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "INSERT INTO projections.login_names2_users (id, user_name, resource_owner, instance_id) VALUES ($1, $2, $3, $4)",
expectedStmt: "INSERT INTO projections.login_names3_users (id, user_name, resource_owner, instance_id) VALUES ($1, $2, $3, $4)",
expectedArgs: []interface{}{
"agg-id",
"human-registered",
@@ -102,7 +102,7 @@ func TestLoginNameProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "INSERT INTO projections.login_names2_users (id, user_name, resource_owner, instance_id) VALUES ($1, $2, $3, $4)",
expectedStmt: "INSERT INTO projections.login_names3_users (id, user_name, resource_owner, instance_id) VALUES ($1, $2, $3, $4)",
expectedArgs: []interface{}{
"agg-id",
"machine-added",
@@ -131,7 +131,7 @@ func TestLoginNameProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.login_names2_users WHERE (id = $1) AND (instance_id = $2)",
expectedStmt: "DELETE FROM projections.login_names3_users WHERE (id = $1) AND (instance_id = $2)",
expectedArgs: []interface{}{
"agg-id",
"instance-id",
@@ -160,7 +160,7 @@ func TestLoginNameProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "UPDATE projections.login_names2_users SET user_name = $1 WHERE (id = $2) AND (instance_id = $3)",
expectedStmt: "UPDATE projections.login_names3_users SET user_name = $1 WHERE (id = $2) AND (instance_id = $3)",
expectedArgs: []interface{}{
"changed",
"agg-id",
@@ -190,7 +190,7 @@ func TestLoginNameProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "UPDATE projections.login_names2_users SET user_name = $1 WHERE (id = $2) AND (instance_id = $3)",
expectedStmt: "UPDATE projections.login_names3_users SET user_name = $1 WHERE (id = $2) AND (instance_id = $3)",
expectedArgs: []interface{}{
"claimed",
"agg-id",
@@ -220,7 +220,7 @@ func TestLoginNameProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "INSERT INTO projections.login_names2_policies (must_be_domain, is_default, resource_owner, instance_id) VALUES ($1, $2, $3, $4)",
expectedStmt: "INSERT INTO projections.login_names3_policies (must_be_domain, is_default, resource_owner, instance_id) VALUES ($1, $2, $3, $4)",
expectedArgs: []interface{}{
true,
false,
@@ -251,7 +251,7 @@ func TestLoginNameProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "UPDATE projections.login_names2_policies SET must_be_domain = $1 WHERE (resource_owner = $2) AND (instance_id = $3)",
expectedStmt: "UPDATE projections.login_names3_policies SET must_be_domain = $1 WHERE (resource_owner = $2) AND (instance_id = $3)",
expectedArgs: []interface{}{
false,
"ro-id",
@@ -298,7 +298,7 @@ func TestLoginNameProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.login_names2_policies WHERE (resource_owner = $1) AND (instance_id = $2)",
expectedStmt: "DELETE FROM projections.login_names3_policies WHERE (resource_owner = $1) AND (instance_id = $2)",
expectedArgs: []interface{}{
"ro-id",
"instance-id",
@@ -327,7 +327,7 @@ func TestLoginNameProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "INSERT INTO projections.login_names2_domains (name, resource_owner, instance_id) VALUES ($1, $2, $3)",
expectedStmt: "INSERT INTO projections.login_names3_domains (name, resource_owner, instance_id) VALUES ($1, $2, $3)",
expectedArgs: []interface{}{
"verified",
"ro-id",
@@ -357,7 +357,7 @@ func TestLoginNameProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.login_names2_domains WHERE (name = $1) AND (resource_owner = $2) AND (instance_id = $3)",
expectedStmt: "DELETE FROM projections.login_names3_domains WHERE (name = $1) AND (resource_owner = $2) AND (instance_id = $3)",
expectedArgs: []interface{}{
"remove",
"ro-id",
@@ -387,7 +387,7 @@ func TestLoginNameProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "UPDATE projections.login_names2_domains SET is_primary = $1 WHERE (resource_owner = $2) AND (is_primary = $3) AND (instance_id = $4)",
expectedStmt: "UPDATE projections.login_names3_domains SET is_primary = $1 WHERE (resource_owner = $2) AND (is_primary = $3) AND (instance_id = $4)",
expectedArgs: []interface{}{
false,
"ro-id",
@@ -396,7 +396,7 @@ func TestLoginNameProjection_reduces(t *testing.T) {
},
},
{
expectedStmt: "UPDATE projections.login_names2_domains SET is_primary = $1 WHERE (name = $2) AND (resource_owner = $3) AND (instance_id = $4)",
expectedStmt: "UPDATE projections.login_names3_domains SET is_primary = $1 WHERE (name = $2) AND (resource_owner = $3) AND (instance_id = $4)",
expectedArgs: []interface{}{
true,
"primary",
@@ -427,7 +427,7 @@ func TestLoginNameProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "INSERT INTO projections.login_names2_policies (must_be_domain, is_default, resource_owner, instance_id) VALUES ($1, $2, $3, $4)",
expectedStmt: "INSERT INTO projections.login_names3_policies (must_be_domain, is_default, resource_owner, instance_id) VALUES ($1, $2, $3, $4)",
expectedArgs: []interface{}{
true,
true,
@@ -458,7 +458,7 @@ func TestLoginNameProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "UPDATE projections.login_names2_policies SET must_be_domain = $1 WHERE (resource_owner = $2) AND (instance_id = $3)",
expectedStmt: "UPDATE projections.login_names3_policies SET must_be_domain = $1 WHERE (resource_owner = $2) AND (instance_id = $3)",
expectedArgs: []interface{}{
false,
"ro-id",
@@ -505,19 +505,19 @@ func TestLoginNameProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.login_names2_domains WHERE (instance_id = $1)",
expectedStmt: "DELETE FROM projections.login_names3_domains WHERE (instance_id = $1)",
expectedArgs: []interface{}{
"agg-id",
},
},
{
expectedStmt: "DELETE FROM projections.login_names2_policies WHERE (instance_id = $1)",
expectedStmt: "DELETE FROM projections.login_names3_policies WHERE (instance_id = $1)",
expectedArgs: []interface{}{
"agg-id",
},
},
{
expectedStmt: "DELETE FROM projections.login_names2_users WHERE (instance_id = $1)",
expectedStmt: "DELETE FROM projections.login_names3_users WHERE (instance_id = $1)",
expectedArgs: []interface{}{
"agg-id",
},
@@ -543,21 +543,21 @@ func TestLoginNameProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.login_names2_domains WHERE (instance_id = $1) AND (resource_owner = $2)",
expectedStmt: "DELETE FROM projections.login_names3_domains WHERE (instance_id = $1) AND (resource_owner = $2)",
expectedArgs: []interface{}{
"instance-id",
"agg-id",
},
},
{
expectedStmt: "DELETE FROM projections.login_names2_policies WHERE (instance_id = $1) AND (resource_owner = $2)",
expectedStmt: "DELETE FROM projections.login_names3_policies WHERE (instance_id = $1) AND (resource_owner = $2)",
expectedArgs: []interface{}{
"instance-id",
"agg-id",
},
},
{
expectedStmt: "DELETE FROM projections.login_names2_users WHERE (instance_id = $1) AND (resource_owner = $2)",
expectedStmt: "DELETE FROM projections.login_names3_users WHERE (instance_id = $1) AND (resource_owner = $2)",
expectedArgs: []interface{}{
"instance-id",
"agg-id",

View File

@@ -14,14 +14,12 @@ const (
MemberUserIDCol = "user_id"
MemberRolesCol = "roles"
MemberUserResourceOwner = "user_resource_owner"
MemberUserOwnerRemoved = "user_owner_removed"
MemberCreationDate = "creation_date"
MemberChangeDate = "change_date"
MemberSequence = "sequence"
MemberResourceOwner = "resource_owner"
MemberInstanceID = "instance_id"
MemberOwnerRemoved = "owner_removed"
)
var (
@@ -30,12 +28,10 @@ var (
handler.NewColumn(MemberChangeDate, handler.ColumnTypeTimestamp),
handler.NewColumn(MemberUserIDCol, handler.ColumnTypeText),
handler.NewColumn(MemberUserResourceOwner, handler.ColumnTypeText),
handler.NewColumn(MemberUserOwnerRemoved, handler.ColumnTypeBool, handler.Default(false)),
handler.NewColumn(MemberRolesCol, handler.ColumnTypeTextArray, handler.Nullable()),
handler.NewColumn(MemberSequence, handler.ColumnTypeInt64),
handler.NewColumn(MemberResourceOwner, handler.ColumnTypeText),
handler.NewColumn(MemberInstanceID, handler.ColumnTypeText),
handler.NewColumn(MemberOwnerRemoved, handler.ColumnTypeBool, handler.Default(false)),
}
)
@@ -65,14 +61,12 @@ func reduceMemberAdded(e member.MemberAddedEvent, userResourceOwner string, opts
cols: []handler.Column{
handler.NewCol(MemberUserIDCol, e.UserID),
handler.NewCol(MemberUserResourceOwner, userResourceOwner),
handler.NewCol(MemberUserOwnerRemoved, false),
handler.NewCol(MemberRolesCol, database.TextArray[string](e.Roles)),
handler.NewCol(MemberCreationDate, e.CreatedAt()),
handler.NewCol(MemberChangeDate, e.CreatedAt()),
handler.NewCol(MemberSequence, e.Sequence()),
handler.NewCol(MemberResourceOwner, e.Aggregate().ResourceOwner),
handler.NewCol(MemberInstanceID, e.Aggregate().InstanceID),
handler.NewCol(MemberOwnerRemoved, false),
}}
for _, opt := range opts {
@@ -158,14 +152,6 @@ func memberUserOwnerRemovedConds(e eventstore.Event, opts ...reduceMemberOpt) []
return config.conds
}
func memberUserOwnerRemovedCols(e eventstore.Event) []handler.Column {
return []handler.Column{
handler.NewCol(MemberChangeDate, e.CreatedAt()),
handler.NewCol(MemberSequence, e.Sequence()),
handler.NewCol(MemberUserOwnerRemoved, true),
}
}
func reduceMemberUserOwnerRemoved(e eventstore.Event, opts ...reduceMemberOpt) (*handler.Statement, error) {
return handler.NewDeleteStatement(
e,

View File

@@ -13,7 +13,7 @@ import (
)
const (
OrgMemberProjectionTable = "projections.org_members3"
OrgMemberProjectionTable = "projections.org_members4"
OrgMemberOrgIDCol = "org_id"
)
@@ -35,18 +35,14 @@ func (*orgMemberProjection) Init() *old_handler.Check {
append(memberColumns, handler.NewColumn(OrgMemberOrgIDCol, handler.ColumnTypeText)),
handler.NewPrimaryKey(MemberInstanceID, OrgMemberOrgIDCol, MemberUserIDCol),
handler.WithIndex(handler.NewIndex("user_id", []string{MemberUserIDCol})),
handler.WithIndex(handler.NewIndex("owner_removed", []string{MemberOwnerRemoved})),
handler.WithIndex(handler.NewIndex("user_owner_removed", []string{MemberUserOwnerRemoved})),
handler.WithIndex(
handler.NewIndex("om_instance", []string{MemberInstanceID},
handler.WithInclude(
MemberCreationDate,
MemberChangeDate,
MemberUserOwnerRemoved,
MemberRolesCol,
MemberSequence,
MemberResourceOwner,
MemberOwnerRemoved,
),
),
),

View File

@@ -61,18 +61,16 @@ func TestOrgMemberProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "INSERT INTO projections.org_members3 (user_id, user_resource_owner, user_owner_removed, roles, creation_date, change_date, sequence, resource_owner, instance_id, owner_removed, org_id) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11)",
expectedStmt: "INSERT INTO projections.org_members4 (user_id, user_resource_owner, roles, creation_date, change_date, sequence, resource_owner, instance_id, org_id) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)",
expectedArgs: []interface{}{
"user-id",
"org1",
false,
database.TextArray[string]{"role"},
anyArg{},
anyArg{},
uint64(15),
"ro-id",
"instance-id",
false,
"agg-id",
},
},
@@ -100,7 +98,7 @@ func TestOrgMemberProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "UPDATE projections.org_members3 SET (roles, change_date, sequence) = ($1, $2, $3) WHERE (instance_id = $4) AND (user_id = $5) AND (org_id = $6)",
expectedStmt: "UPDATE projections.org_members4 SET (roles, change_date, sequence) = ($1, $2, $3) WHERE (instance_id = $4) AND (user_id = $5) AND (org_id = $6)",
expectedArgs: []interface{}{
database.TextArray[string]{"role", "changed"},
anyArg{},
@@ -133,7 +131,7 @@ func TestOrgMemberProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.org_members3 WHERE (instance_id = $1) AND (user_id = $2) AND (org_id = $3)",
expectedStmt: "DELETE FROM projections.org_members4 WHERE (instance_id = $1) AND (user_id = $2) AND (org_id = $3)",
expectedArgs: []interface{}{
"instance-id",
"user-id",
@@ -163,7 +161,7 @@ func TestOrgMemberProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.org_members3 WHERE (instance_id = $1) AND (user_id = $2) AND (org_id = $3)",
expectedStmt: "DELETE FROM projections.org_members4 WHERE (instance_id = $1) AND (user_id = $2) AND (org_id = $3)",
expectedArgs: []interface{}{
"instance-id",
"user-id",
@@ -191,7 +189,7 @@ func TestOrgMemberProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.org_members3 WHERE (instance_id = $1) AND (user_id = $2)",
expectedStmt: "DELETE FROM projections.org_members4 WHERE (instance_id = $1) AND (user_id = $2)",
expectedArgs: []interface{}{
"instance-id",
"agg-id",
@@ -218,14 +216,14 @@ func TestOrgMemberProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.org_members3 WHERE (instance_id = $1) AND (resource_owner = $2)",
expectedStmt: "DELETE FROM projections.org_members4 WHERE (instance_id = $1) AND (resource_owner = $2)",
expectedArgs: []interface{}{
"instance-id",
"agg-id",
},
},
{
expectedStmt: "DELETE FROM projections.org_members3 WHERE (instance_id = $1) AND (user_resource_owner = $2)",
expectedStmt: "DELETE FROM projections.org_members4 WHERE (instance_id = $1) AND (user_resource_owner = $2)",
expectedArgs: []interface{}{
"instance-id",
"agg-id",
@@ -252,7 +250,7 @@ func TestOrgMemberProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.org_members3 WHERE (instance_id = $1)",
expectedStmt: "DELETE FROM projections.org_members4 WHERE (instance_id = $1)",
expectedArgs: []interface{}{
"agg-id",
},

View File

@@ -14,7 +14,7 @@ import (
)
const (
ProjectProjectionTable = "projections.projects3"
ProjectProjectionTable = "projections.projects4"
ProjectColumnID = "id"
ProjectColumnCreationDate = "creation_date"
@@ -28,7 +28,6 @@ const (
ProjectColumnProjectRoleCheck = "project_role_check"
ProjectColumnHasProjectCheck = "has_project_check"
ProjectColumnPrivateLabelingSetting = "private_labeling_setting"
ProjectColumnOwnerRemoved = "owner_removed"
)
type projectProjection struct{}
@@ -56,11 +55,9 @@ func (*projectProjection) Init() *old_handler.Check {
handler.NewColumn(ProjectColumnProjectRoleCheck, handler.ColumnTypeBool),
handler.NewColumn(ProjectColumnHasProjectCheck, handler.ColumnTypeBool),
handler.NewColumn(ProjectColumnPrivateLabelingSetting, handler.ColumnTypeEnum),
handler.NewColumn(ProjectColumnOwnerRemoved, handler.ColumnTypeBool, handler.Default(false)),
},
handler.NewPrimaryKey(ProjectColumnInstanceID, ProjectColumnID),
handler.WithIndex(handler.NewIndex("resource_owner", []string{ProjectColumnResourceOwner})),
handler.WithIndex(handler.NewIndex("owner_removed", []string{ProjectColumnOwnerRemoved})),
),
)
}

View File

@@ -15,20 +15,18 @@ import (
)
const (
ProjectGrantProjectionTable = "projections.project_grants3"
ProjectGrantProjectionTable = "projections.project_grants4"
ProjectGrantColumnGrantID = "grant_id"
ProjectGrantColumnCreationDate = "creation_date"
ProjectGrantColumnChangeDate = "change_date"
ProjectGrantColumnSequence = "sequence"
ProjectGrantColumnState = "state"
ProjectGrantColumnResourceOwner = "resource_owner"
ProjectGrantColumnInstanceID = "instance_id"
ProjectGrantColumnProjectID = "project_id"
ProjectGrantColumnGrantedOrgID = "granted_org_id"
ProjectGrantColumnRoleKeys = "granted_role_keys"
ProjectGrantColumnOwnerRemoved = "owner_removed"
ProjectGrantColumnGrantedOrgRemoved = "granted_org_removed"
ProjectGrantColumnGrantID = "grant_id"
ProjectGrantColumnCreationDate = "creation_date"
ProjectGrantColumnChangeDate = "change_date"
ProjectGrantColumnSequence = "sequence"
ProjectGrantColumnState = "state"
ProjectGrantColumnResourceOwner = "resource_owner"
ProjectGrantColumnInstanceID = "instance_id"
ProjectGrantColumnProjectID = "project_id"
ProjectGrantColumnGrantedOrgID = "granted_org_id"
ProjectGrantColumnRoleKeys = "granted_role_keys"
)
type projectGrantProjection struct{}
@@ -54,14 +52,10 @@ func (*projectGrantProjection) Init() *old_handler.Check {
handler.NewColumn(ProjectGrantColumnProjectID, handler.ColumnTypeText),
handler.NewColumn(ProjectGrantColumnGrantedOrgID, handler.ColumnTypeText),
handler.NewColumn(ProjectGrantColumnRoleKeys, handler.ColumnTypeTextArray, handler.Nullable()),
handler.NewColumn(ProjectGrantColumnOwnerRemoved, handler.ColumnTypeBool, handler.Default(false)),
handler.NewColumn(ProjectGrantColumnGrantedOrgRemoved, handler.ColumnTypeBool, handler.Default(false)),
},
handler.NewPrimaryKey(ProjectGrantColumnInstanceID, ProjectGrantColumnGrantID),
handler.WithIndex(handler.NewIndex("resource_owner", []string{ProjectGrantColumnResourceOwner})),
handler.WithIndex(handler.NewIndex("granted_org", []string{ProjectGrantColumnGrantedOrgID})),
handler.WithIndex(handler.NewIndex("owner_removed", []string{ProjectGrantColumnOwnerRemoved})),
handler.WithIndex(handler.NewIndex("granted_org_removed", []string{ProjectGrantColumnGrantedOrgRemoved})),
),
)
}

View File

@@ -15,11 +15,10 @@ import (
)
const (
ProjectGrantMemberProjectionTable = "projections.project_grant_members3"
ProjectGrantMemberProjectIDCol = "project_id"
ProjectGrantMemberGrantIDCol = "grant_id"
ProjectGrantMemberGrantedOrg = "granted_org"
ProjectGrantMemberGrantedOrgRemoved = "granted_org_removed"
ProjectGrantMemberProjectionTable = "projections.project_grant_members4"
ProjectGrantMemberProjectIDCol = "project_id"
ProjectGrantMemberGrantIDCol = "grant_id"
ProjectGrantMemberGrantedOrg = "granted_org"
)
type projectGrantMemberProjection struct {
@@ -41,24 +40,17 @@ func (*projectGrantMemberProjection) Init() *old_handler.Check {
handler.NewColumn(ProjectGrantMemberProjectIDCol, handler.ColumnTypeText),
handler.NewColumn(ProjectGrantMemberGrantIDCol, handler.ColumnTypeText),
handler.NewColumn(ProjectGrantMemberGrantedOrg, handler.ColumnTypeText),
handler.NewColumn(ProjectGrantMemberGrantedOrgRemoved, handler.ColumnTypeBool, handler.Default(false)),
),
handler.NewPrimaryKey(MemberInstanceID, ProjectGrantMemberProjectIDCol, ProjectGrantMemberGrantIDCol, MemberUserIDCol),
handler.WithIndex(handler.NewIndex("user_id", []string{MemberUserIDCol})),
handler.WithIndex(handler.NewIndex("owner_removed", []string{MemberOwnerRemoved})),
handler.WithIndex(handler.NewIndex("user_owner_removed", []string{MemberUserOwnerRemoved})),
handler.WithIndex(handler.NewIndex("granted_org_removed", []string{ProjectGrantMemberGrantedOrgRemoved})),
handler.WithIndex(
handler.NewIndex("pgm_instance", []string{MemberInstanceID},
handler.WithInclude(
MemberCreationDate,
MemberChangeDate,
MemberUserOwnerRemoved,
MemberRolesCol,
MemberSequence,
MemberResourceOwner,
MemberOwnerRemoved,
ProjectGrantMemberGrantedOrgRemoved,
),
),
),
@@ -147,7 +139,6 @@ func (p *projectGrantMemberProjection) reduceAdded(event eventstore.Event) (*han
withMemberCol(ProjectGrantMemberProjectIDCol, e.Aggregate().ID),
withMemberCol(ProjectGrantMemberGrantIDCol, e.GrantID),
withMemberCol(ProjectGrantMemberGrantedOrg, grantedOrg),
withMemberCol(ProjectGrantMemberGrantedOrgRemoved, false),
)
}

View File

@@ -72,22 +72,19 @@ func TestProjectGrantMemberProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "INSERT INTO projections.project_grant_members3 (user_id, user_resource_owner, user_owner_removed, roles, creation_date, change_date, sequence, resource_owner, instance_id, owner_removed, project_id, grant_id, granted_org, granted_org_removed) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14)",
expectedStmt: "INSERT INTO projections.project_grant_members4 (user_id, user_resource_owner, roles, creation_date, change_date, sequence, resource_owner, instance_id, project_id, grant_id, granted_org) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11)",
expectedArgs: []interface{}{
"user-id",
"org1",
false,
database.TextArray[string]{"role"},
anyArg{},
anyArg{},
uint64(15),
"ro-id",
"instance-id",
false,
"agg-id",
"grant-id",
"org3",
false,
},
},
},
@@ -115,7 +112,7 @@ func TestProjectGrantMemberProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "UPDATE projections.project_grant_members3 SET (roles, change_date, sequence) = ($1, $2, $3) WHERE (instance_id = $4) AND (user_id = $5) AND (project_id = $6) AND (grant_id = $7)",
expectedStmt: "UPDATE projections.project_grant_members4 SET (roles, change_date, sequence) = ($1, $2, $3) WHERE (instance_id = $4) AND (user_id = $5) AND (project_id = $6) AND (grant_id = $7)",
expectedArgs: []interface{}{
database.TextArray[string]{"role", "changed"},
anyArg{},
@@ -150,7 +147,7 @@ func TestProjectGrantMemberProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.project_grant_members3 WHERE (instance_id = $1) AND (user_id = $2) AND (project_id = $3) AND (grant_id = $4)",
expectedStmt: "DELETE FROM projections.project_grant_members4 WHERE (instance_id = $1) AND (user_id = $2) AND (project_id = $3) AND (grant_id = $4)",
expectedArgs: []interface{}{
"instance-id",
"user-id",
@@ -182,7 +179,7 @@ func TestProjectGrantMemberProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.project_grant_members3 WHERE (instance_id = $1) AND (user_id = $2) AND (project_id = $3) AND (grant_id = $4)",
expectedStmt: "DELETE FROM projections.project_grant_members4 WHERE (instance_id = $1) AND (user_id = $2) AND (project_id = $3) AND (grant_id = $4)",
expectedArgs: []interface{}{
"instance-id",
"user-id",
@@ -211,7 +208,7 @@ func TestProjectGrantMemberProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.project_grant_members3 WHERE (instance_id = $1) AND (user_id = $2)",
expectedStmt: "DELETE FROM projections.project_grant_members4 WHERE (instance_id = $1) AND (user_id = $2)",
expectedArgs: []interface{}{
"instance-id",
"agg-id",
@@ -238,7 +235,7 @@ func TestProjectGrantMemberProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.project_grant_members3 WHERE (instance_id = $1) AND (project_id = $2)",
expectedStmt: "DELETE FROM projections.project_grant_members4 WHERE (instance_id = $1) AND (project_id = $2)",
expectedArgs: []interface{}{
"instance-id",
"agg-id",
@@ -264,7 +261,7 @@ func TestProjectGrantMemberProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.project_grant_members3 WHERE (instance_id = $1)",
expectedStmt: "DELETE FROM projections.project_grant_members4 WHERE (instance_id = $1)",
expectedArgs: []interface{}{
"agg-id",
},
@@ -290,7 +287,7 @@ func TestProjectGrantMemberProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.project_grant_members3 WHERE (instance_id = $1) AND (grant_id = $2) AND (project_id = $3)",
expectedStmt: "DELETE FROM projections.project_grant_members4 WHERE (instance_id = $1) AND (grant_id = $2) AND (project_id = $3)",
expectedArgs: []interface{}{
"instance-id",
"grant-id",
@@ -318,21 +315,21 @@ func TestProjectGrantMemberProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.project_grant_members3 WHERE (instance_id = $1) AND (resource_owner = $2)",
expectedStmt: "DELETE FROM projections.project_grant_members4 WHERE (instance_id = $1) AND (resource_owner = $2)",
expectedArgs: []interface{}{
"instance-id",
"agg-id",
},
},
{
expectedStmt: "DELETE FROM projections.project_grant_members3 WHERE (instance_id = $1) AND (user_resource_owner = $2)",
expectedStmt: "DELETE FROM projections.project_grant_members4 WHERE (instance_id = $1) AND (user_resource_owner = $2)",
expectedArgs: []interface{}{
"instance-id",
"agg-id",
},
},
{
expectedStmt: "DELETE FROM projections.project_grant_members3 WHERE (instance_id = $1) AND (granted_org = $2)",
expectedStmt: "DELETE FROM projections.project_grant_members4 WHERE (instance_id = $1) AND (granted_org = $2)",
expectedArgs: []interface{}{
"instance-id",
"agg-id",

View File

@@ -40,7 +40,7 @@ func TestProjectGrantProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.project_grants3 WHERE (project_id = $1) AND (instance_id = $2)",
expectedStmt: "DELETE FROM projections.project_grants4 WHERE (project_id = $1) AND (instance_id = $2)",
expectedArgs: []interface{}{
"agg-id",
"instance-id",
@@ -67,7 +67,7 @@ func TestProjectGrantProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.project_grants3 WHERE (instance_id = $1)",
expectedStmt: "DELETE FROM projections.project_grants4 WHERE (instance_id = $1)",
expectedArgs: []interface{}{
"agg-id",
},
@@ -93,7 +93,7 @@ func TestProjectGrantProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.project_grants3 WHERE (grant_id = $1) AND (project_id = $2) AND (instance_id = $3)",
expectedStmt: "DELETE FROM projections.project_grants4 WHERE (grant_id = $1) AND (project_id = $2) AND (instance_id = $3)",
expectedArgs: []interface{}{
"grant-id",
"agg-id",
@@ -121,7 +121,7 @@ func TestProjectGrantProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "UPDATE projections.project_grants3 SET (change_date, sequence, state) = ($1, $2, $3) WHERE (grant_id = $4) AND (project_id = $5) AND (instance_id = $6)",
expectedStmt: "UPDATE projections.project_grants4 SET (change_date, sequence, state) = ($1, $2, $3) WHERE (grant_id = $4) AND (project_id = $5) AND (instance_id = $6)",
expectedArgs: []interface{}{
anyArg{},
uint64(15),
@@ -152,7 +152,7 @@ func TestProjectGrantProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "UPDATE projections.project_grants3 SET (change_date, sequence, state) = ($1, $2, $3) WHERE (grant_id = $4) AND (project_id = $5) AND (instance_id = $6)",
expectedStmt: "UPDATE projections.project_grants4 SET (change_date, sequence, state) = ($1, $2, $3) WHERE (grant_id = $4) AND (project_id = $5) AND (instance_id = $6)",
expectedArgs: []interface{}{
anyArg{},
uint64(15),
@@ -183,7 +183,7 @@ func TestProjectGrantProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "UPDATE projections.project_grants3 SET (change_date, sequence, granted_role_keys) = ($1, $2, $3) WHERE (grant_id = $4) AND (project_id = $5) AND (instance_id = $6)",
expectedStmt: "UPDATE projections.project_grants4 SET (change_date, sequence, granted_role_keys) = ($1, $2, $3) WHERE (grant_id = $4) AND (project_id = $5) AND (instance_id = $6)",
expectedArgs: []interface{}{
anyArg{},
uint64(15),
@@ -214,7 +214,7 @@ func TestProjectGrantProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "UPDATE projections.project_grants3 SET (change_date, sequence, granted_role_keys) = ($1, $2, $3) WHERE (grant_id = $4) AND (project_id = $5) AND (instance_id = $6)",
expectedStmt: "UPDATE projections.project_grants4 SET (change_date, sequence, granted_role_keys) = ($1, $2, $3) WHERE (grant_id = $4) AND (project_id = $5) AND (instance_id = $6)",
expectedArgs: []interface{}{
anyArg{},
uint64(15),
@@ -245,7 +245,7 @@ func TestProjectGrantProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "INSERT INTO projections.project_grants3 (grant_id, project_id, creation_date, change_date, resource_owner, instance_id, state, sequence, granted_org_id, granted_role_keys) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)",
expectedStmt: "INSERT INTO projections.project_grants4 (grant_id, project_id, creation_date, change_date, resource_owner, instance_id, state, sequence, granted_org_id, granted_role_keys) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)",
expectedArgs: []interface{}{
"grant-id",
"agg-id",
@@ -280,14 +280,14 @@ func TestProjectGrantProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.project_grants3 WHERE (instance_id = $1) AND (resource_owner = $2)",
expectedStmt: "DELETE FROM projections.project_grants4 WHERE (instance_id = $1) AND (resource_owner = $2)",
expectedArgs: []interface{}{
"instance-id",
"agg-id",
},
},
{
expectedStmt: "DELETE FROM projections.project_grants3 WHERE (instance_id = $1) AND (granted_org_id = $2)",
expectedStmt: "DELETE FROM projections.project_grants4 WHERE (instance_id = $1) AND (granted_org_id = $2)",
expectedArgs: []interface{}{
"instance-id",
"agg-id",

View File

@@ -15,7 +15,7 @@ import (
)
const (
ProjectMemberProjectionTable = "projections.project_members3"
ProjectMemberProjectionTable = "projections.project_members4"
ProjectMemberProjectIDCol = "project_id"
)
@@ -39,18 +39,14 @@ func (*projectMemberProjection) Init() *old_handler.Check {
),
handler.NewPrimaryKey(MemberInstanceID, ProjectMemberProjectIDCol, MemberUserIDCol),
handler.WithIndex(handler.NewIndex("user_id", []string{MemberUserIDCol})),
handler.WithIndex(handler.NewIndex("owner_removed", []string{MemberOwnerRemoved})),
handler.WithIndex(handler.NewIndex("user_owner_removed", []string{MemberUserOwnerRemoved})),
handler.WithIndex(
handler.NewIndex("pm_instance", []string{MemberInstanceID},
handler.WithInclude(
MemberCreationDate,
MemberChangeDate,
MemberUserOwnerRemoved,
MemberRolesCol,
MemberSequence,
MemberResourceOwner,
MemberOwnerRemoved,
),
),
),

View File

@@ -64,18 +64,16 @@ func TestProjectMemberProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "INSERT INTO projections.project_members3 (user_id, user_resource_owner, user_owner_removed, roles, creation_date, change_date, sequence, resource_owner, instance_id, owner_removed, project_id) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11)",
expectedStmt: "INSERT INTO projections.project_members4 (user_id, user_resource_owner, roles, creation_date, change_date, sequence, resource_owner, instance_id, project_id) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)",
expectedArgs: []interface{}{
"user-id",
"org1",
false,
database.TextArray[string]{"role"},
anyArg{},
anyArg{},
uint64(15),
"ro-id",
"instance-id",
false,
"agg-id",
},
},
@@ -103,7 +101,7 @@ func TestProjectMemberProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "UPDATE projections.project_members3 SET (roles, change_date, sequence) = ($1, $2, $3) WHERE (instance_id = $4) AND (user_id = $5) AND (project_id = $6)",
expectedStmt: "UPDATE projections.project_members4 SET (roles, change_date, sequence) = ($1, $2, $3) WHERE (instance_id = $4) AND (user_id = $5) AND (project_id = $6)",
expectedArgs: []interface{}{
database.TextArray[string]{"role", "changed"},
anyArg{},
@@ -136,7 +134,7 @@ func TestProjectMemberProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.project_members3 WHERE (instance_id = $1) AND (user_id = $2) AND (project_id = $3)",
expectedStmt: "DELETE FROM projections.project_members4 WHERE (instance_id = $1) AND (user_id = $2) AND (project_id = $3)",
expectedArgs: []interface{}{
"instance-id",
"user-id",
@@ -166,7 +164,7 @@ func TestProjectMemberProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.project_members3 WHERE (instance_id = $1) AND (user_id = $2) AND (project_id = $3)",
expectedStmt: "DELETE FROM projections.project_members4 WHERE (instance_id = $1) AND (user_id = $2) AND (project_id = $3)",
expectedArgs: []interface{}{
"instance-id",
"user-id",
@@ -194,7 +192,7 @@ func TestProjectMemberProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.project_members3 WHERE (instance_id = $1) AND (user_id = $2)",
expectedStmt: "DELETE FROM projections.project_members4 WHERE (instance_id = $1) AND (user_id = $2)",
expectedArgs: []interface{}{
"instance-id",
"agg-id",
@@ -221,7 +219,7 @@ func TestProjectMemberProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.project_members3 WHERE (instance_id = $1) AND (project_id = $2)",
expectedStmt: "DELETE FROM projections.project_members4 WHERE (instance_id = $1) AND (project_id = $2)",
expectedArgs: []interface{}{
"instance-id",
"agg-id",
@@ -248,7 +246,7 @@ func TestProjectMemberProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.project_members3 WHERE (instance_id = $1)",
expectedStmt: "DELETE FROM projections.project_members4 WHERE (instance_id = $1)",
expectedArgs: []interface{}{
"agg-id",
},
@@ -274,14 +272,14 @@ func TestProjectMemberProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.project_members3 WHERE (instance_id = $1) AND (resource_owner = $2)",
expectedStmt: "DELETE FROM projections.project_members4 WHERE (instance_id = $1) AND (resource_owner = $2)",
expectedArgs: []interface{}{
"instance-id",
"agg-id",
},
},
{
expectedStmt: "DELETE FROM projections.project_members3 WHERE (instance_id = $1) AND (user_resource_owner = $2)",
expectedStmt: "DELETE FROM projections.project_members4 WHERE (instance_id = $1) AND (user_resource_owner = $2)",
expectedArgs: []interface{}{
"instance-id",
"agg-id",

View File

@@ -13,7 +13,7 @@ import (
)
const (
ProjectRoleProjectionTable = "projections.project_roles3"
ProjectRoleProjectionTable = "projections.project_roles4"
ProjectRoleColumnProjectID = "project_id"
ProjectRoleColumnKey = "role_key"
@@ -24,7 +24,6 @@ const (
ProjectRoleColumnInstanceID = "instance_id"
ProjectRoleColumnDisplayName = "display_name"
ProjectRoleColumnGroupName = "group_name"
ProjectRoleColumnOwnerRemoved = "owner_removed"
)
type projectRoleProjection struct{}
@@ -45,10 +44,8 @@ func (*projectRoleProjection) Init() *old_handler.Check {
handler.NewColumn(ProjectRoleColumnInstanceID, handler.ColumnTypeText),
handler.NewColumn(ProjectRoleColumnDisplayName, handler.ColumnTypeText),
handler.NewColumn(ProjectRoleColumnGroupName, handler.ColumnTypeText),
handler.NewColumn(ProjectRoleColumnOwnerRemoved, handler.ColumnTypeBool, handler.Default(false)),
},
handler.NewPrimaryKey(ProjectRoleColumnInstanceID, ProjectRoleColumnProjectID, ProjectRoleColumnKey),
handler.WithIndex(handler.NewIndex("owner_removed", []string{ProjectRoleColumnOwnerRemoved})),
),
)
}

View File

@@ -38,7 +38,7 @@ func TestProjectRoleProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.project_roles3 WHERE (project_id = $1) AND (instance_id = $2)",
expectedStmt: "DELETE FROM projections.project_roles4 WHERE (project_id = $1) AND (instance_id = $2)",
expectedArgs: []interface{}{
"agg-id",
"instance-id",
@@ -65,7 +65,7 @@ func TestProjectRoleProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.project_roles3 WHERE (instance_id = $1)",
expectedStmt: "DELETE FROM projections.project_roles4 WHERE (instance_id = $1)",
expectedArgs: []interface{}{
"agg-id",
},
@@ -91,7 +91,7 @@ func TestProjectRoleProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.project_roles3 WHERE (role_key = $1) AND (project_id = $2) AND (instance_id = $3)",
expectedStmt: "DELETE FROM projections.project_roles4 WHERE (role_key = $1) AND (project_id = $2) AND (instance_id = $3)",
expectedArgs: []interface{}{
"key",
"agg-id",
@@ -119,7 +119,7 @@ func TestProjectRoleProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "UPDATE projections.project_roles3 SET (change_date, sequence, display_name, group_name) = ($1, $2, $3, $4) WHERE (role_key = $5) AND (project_id = $6) AND (instance_id = $7)",
expectedStmt: "UPDATE projections.project_roles4 SET (change_date, sequence, display_name, group_name) = ($1, $2, $3, $4) WHERE (role_key = $5) AND (project_id = $6) AND (instance_id = $7)",
expectedArgs: []interface{}{
anyArg{},
uint64(15),
@@ -168,7 +168,7 @@ func TestProjectRoleProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "INSERT INTO projections.project_roles3 (role_key, project_id, creation_date, change_date, resource_owner, instance_id, sequence, display_name, group_name) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)",
expectedStmt: "INSERT INTO projections.project_roles4 (role_key, project_id, creation_date, change_date, resource_owner, instance_id, sequence, display_name, group_name) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)",
expectedArgs: []interface{}{
"key",
"agg-id",
@@ -202,7 +202,7 @@ func TestProjectRoleProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.project_roles3 WHERE (instance_id = $1) AND (resource_owner = $2)",
expectedStmt: "DELETE FROM projections.project_roles4 WHERE (instance_id = $1) AND (resource_owner = $2)",
expectedArgs: []interface{}{
"instance-id",
"agg-id",

View File

@@ -39,7 +39,7 @@ func TestProjectProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.projects3 WHERE (id = $1) AND (instance_id = $2)",
expectedStmt: "DELETE FROM projections.projects4 WHERE (id = $1) AND (instance_id = $2)",
expectedArgs: []interface{}{
"agg-id",
"instance-id",
@@ -66,7 +66,7 @@ func TestProjectProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.projects3 WHERE (instance_id = $1)",
expectedStmt: "DELETE FROM projections.projects4 WHERE (instance_id = $1)",
expectedArgs: []interface{}{
"agg-id",
},
@@ -92,7 +92,7 @@ func TestProjectProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "UPDATE projections.projects3 SET (change_date, sequence, state) = ($1, $2, $3) WHERE (id = $4) AND (instance_id = $5)",
expectedStmt: "UPDATE projections.projects4 SET (change_date, sequence, state) = ($1, $2, $3) WHERE (id = $4) AND (instance_id = $5)",
expectedArgs: []interface{}{
anyArg{},
uint64(15),
@@ -122,7 +122,7 @@ func TestProjectProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "UPDATE projections.projects3 SET (change_date, sequence, state) = ($1, $2, $3) WHERE (id = $4) AND (instance_id = $5)",
expectedStmt: "UPDATE projections.projects4 SET (change_date, sequence, state) = ($1, $2, $3) WHERE (id = $4) AND (instance_id = $5)",
expectedArgs: []interface{}{
anyArg{},
uint64(15),
@@ -152,7 +152,7 @@ func TestProjectProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "UPDATE projections.projects3 SET (change_date, sequence, name, project_role_assertion, project_role_check, has_project_check, private_labeling_setting) = ($1, $2, $3, $4, $5, $6, $7) WHERE (id = $8) AND (instance_id = $9)",
expectedStmt: "UPDATE projections.projects4 SET (change_date, sequence, name, project_role_assertion, project_role_check, has_project_check, private_labeling_setting) = ($1, $2, $3, $4, $5, $6, $7) WHERE (id = $8) AND (instance_id = $9)",
expectedArgs: []interface{}{
anyArg{},
uint64(15),
@@ -203,7 +203,7 @@ func TestProjectProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "INSERT INTO projections.projects3 (id, creation_date, change_date, resource_owner, instance_id, sequence, name, project_role_assertion, project_role_check, has_project_check, private_labeling_setting, state) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12)",
expectedStmt: "INSERT INTO projections.projects4 (id, creation_date, change_date, resource_owner, instance_id, sequence, name, project_role_assertion, project_role_check, has_project_check, private_labeling_setting, state) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12)",
expectedArgs: []interface{}{
"agg-id",
anyArg{},
@@ -240,7 +240,7 @@ func TestProjectProjection_reduces(t *testing.T) {
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "DELETE FROM projections.projects3 WHERE (instance_id = $1) AND (resource_owner = $2)",
expectedStmt: "DELETE FROM projections.projects4 WHERE (instance_id = $1) AND (resource_owner = $2)",
expectedArgs: []interface{}{
"instance-id",
"agg-id",

View File

@@ -30,7 +30,7 @@ var (
` projections.sessions8.user_id,` +
` projections.sessions8.user_resource_owner,` +
` projections.sessions8.user_checked_at,` +
` projections.login_names2.login_name,` +
` projections.login_names3.login_name,` +
` projections.users8_humans.display_name,` +
` projections.sessions8.password_checked_at,` +
` projections.sessions8.intent_checked_at,` +
@@ -47,7 +47,7 @@ var (
` projections.sessions8.user_agent_header,` +
` projections.sessions8.expiration` +
` FROM projections.sessions8` +
` LEFT JOIN projections.login_names2 ON projections.sessions8.user_id = projections.login_names2.user_id AND projections.sessions8.instance_id = projections.login_names2.instance_id` +
` LEFT JOIN projections.login_names3 ON projections.sessions8.user_id = projections.login_names3.user_id AND projections.sessions8.instance_id = projections.login_names3.instance_id` +
` LEFT JOIN projections.users8_humans ON projections.sessions8.user_id = projections.users8_humans.user_id AND projections.sessions8.instance_id = projections.users8_humans.instance_id` +
` LEFT JOIN projections.users8 ON projections.sessions8.user_id = projections.users8.id AND projections.sessions8.instance_id = projections.users8.instance_id` +
` AS OF SYSTEM TIME '-1 ms'`)
@@ -61,7 +61,7 @@ var (
` projections.sessions8.user_id,` +
` projections.sessions8.user_resource_owner,` +
` projections.sessions8.user_checked_at,` +
` projections.login_names2.login_name,` +
` projections.login_names3.login_name,` +
` projections.users8_humans.display_name,` +
` projections.sessions8.password_checked_at,` +
` projections.sessions8.intent_checked_at,` +
@@ -74,7 +74,7 @@ var (
` projections.sessions8.expiration,` +
` COUNT(*) OVER ()` +
` FROM projections.sessions8` +
` LEFT JOIN projections.login_names2 ON projections.sessions8.user_id = projections.login_names2.user_id AND projections.sessions8.instance_id = projections.login_names2.instance_id` +
` LEFT JOIN projections.login_names3 ON projections.sessions8.user_id = projections.login_names3.user_id AND projections.sessions8.instance_id = projections.login_names3.instance_id` +
` LEFT JOIN projections.users8_humans ON projections.sessions8.user_id = projections.users8_humans.user_id AND projections.sessions8.instance_id = projections.users8_humans.instance_id` +
` LEFT JOIN projections.users8 ON projections.sessions8.user_id = projections.users8.id AND projections.sessions8.instance_id = projections.users8.instance_id` +
` AS OF SYSTEM TIME '-1 ms'`)

View File

@@ -175,14 +175,11 @@ var (
table: userTable,
}
userLoginNamesTable = loginNameTable.setAlias("login_names")
userLoginNamesUserIDCol = LoginNameUserIDCol.setTable(userLoginNamesTable)
userLoginNamesNameCol = LoginNameNameCol.setTable(userLoginNamesTable)
userLoginNamesInstanceIDCol = LoginNameInstanceIDCol.setTable(userLoginNamesTable)
userLoginNamesOwnerRemovedUserCol = LoginNameOwnerRemovedUserCol.setTable(userLoginNamesTable)
userLoginNamesOwnerRemovedPolicyCol = LoginNameOwnerRemovedPolicyCol.setTable(userLoginNamesTable)
userLoginNamesOwnerRemovedDomainCol = LoginNameOwnerRemovedDomainCol.setTable(userLoginNamesTable)
userLoginNamesListCol = Column{
userLoginNamesTable = loginNameTable.setAlias("login_names")
userLoginNamesUserIDCol = LoginNameUserIDCol.setTable(userLoginNamesTable)
userLoginNamesNameCol = LoginNameNameCol.setTable(userLoginNamesTable)
userLoginNamesInstanceIDCol = LoginNameInstanceIDCol.setTable(userLoginNamesTable)
userLoginNamesListCol = Column{
name: "loginnames",
table: userLoginNamesTable,
}
@@ -190,14 +187,11 @@ var (
name: "loginnames_lower",
table: userLoginNamesTable,
}
userPreferredLoginNameTable = loginNameTable.setAlias("preferred_login_name")
userPreferredLoginNameUserIDCol = LoginNameUserIDCol.setTable(userPreferredLoginNameTable)
userPreferredLoginNameCol = LoginNameNameCol.setTable(userPreferredLoginNameTable)
userPreferredLoginNameIsPrimaryCol = LoginNameIsPrimaryCol.setTable(userPreferredLoginNameTable)
userPreferredLoginNameInstanceIDCol = LoginNameInstanceIDCol.setTable(userPreferredLoginNameTable)
userPreferredLoginNameOwnerRemovedUserCol = LoginNameOwnerRemovedUserCol.setTable(userPreferredLoginNameTable)
userPreferredLoginNameOwnerRemovedPolicyCol = LoginNameOwnerRemovedPolicyCol.setTable(userPreferredLoginNameTable)
userPreferredLoginNameOwnerRemovedDomainCol = LoginNameOwnerRemovedDomainCol.setTable(userPreferredLoginNameTable)
userPreferredLoginNameTable = loginNameTable.setAlias("preferred_login_name")
userPreferredLoginNameUserIDCol = LoginNameUserIDCol.setTable(userPreferredLoginNameTable)
userPreferredLoginNameCol = LoginNameNameCol.setTable(userPreferredLoginNameTable)
userPreferredLoginNameIsPrimaryCol = LoginNameIsPrimaryCol.setTable(userPreferredLoginNameTable)
userPreferredLoginNameInstanceIDCol = LoginNameInstanceIDCol.setTable(userPreferredLoginNameTable)
)
var (
@@ -328,12 +322,6 @@ var (
func addUserWithoutOwnerRemoved(eq map[string]interface{}) {
eq[UserOwnerRemovedCol.identifier()] = false
eq[userLoginNamesOwnerRemovedUserCol.identifier()] = false
eq[userLoginNamesOwnerRemovedPolicyCol.identifier()] = false
eq[userLoginNamesOwnerRemovedDomainCol.identifier()] = false
eq[userPreferredLoginNameOwnerRemovedUserCol.identifier()] = false
eq[userPreferredLoginNameOwnerRemovedPolicyCol.identifier()] = false
eq[userPreferredLoginNameOwnerRemovedDomainCol.identifier()] = false
}
func (q *Queries) GetUserByID(ctx context.Context, shouldTriggerBulk bool, userID string, withOwnerRemoved bool, queries ...SearchQuery) (user *User, err error) {
@@ -752,16 +740,10 @@ func prepareLoginNamesQuery() (string, []interface{}, error) {
"ARRAY_AGG("+userLoginNamesNameCol.identifier()+")::TEXT[] AS "+userLoginNamesListCol.name,
"ARRAY_AGG(LOWER("+userLoginNamesNameCol.identifier()+"))::TEXT[] AS "+userLoginNamesLowerListCol.name,
userLoginNamesInstanceIDCol.identifier(),
userLoginNamesOwnerRemovedUserCol.identifier(),
userLoginNamesOwnerRemovedPolicyCol.identifier(),
userLoginNamesOwnerRemovedDomainCol.identifier(),
).From(userLoginNamesTable.identifier()).
GroupBy(
userLoginNamesUserIDCol.identifier(),
userLoginNamesInstanceIDCol.identifier(),
userLoginNamesOwnerRemovedUserCol.identifier(),
userLoginNamesOwnerRemovedPolicyCol.identifier(),
userLoginNamesOwnerRemovedDomainCol.identifier(),
).ToSql()
}
@@ -770,9 +752,6 @@ func preparePreferredLoginNamesQuery() (string, []interface{}, error) {
userPreferredLoginNameUserIDCol.identifier(),
userPreferredLoginNameCol.identifier(),
userPreferredLoginNameInstanceIDCol.identifier(),
userPreferredLoginNameOwnerRemovedUserCol.identifier(),
userPreferredLoginNameOwnerRemovedPolicyCol.identifier(),
userPreferredLoginNameOwnerRemovedDomainCol.identifier(),
).From(userPreferredLoginNameTable.identifier()).
Where(sq.Eq{
userPreferredLoginNameIsPrimaryCol.identifier(): true,

View File

@@ -232,7 +232,6 @@ func addUserGrantWithoutOwnerRemoved(eq map[string]interface{}) {
eq[UserGrantUserOwnerRemoved.identifier()] = false
eq[UserGrantProjectOwnerRemoved.identifier()] = false
eq[UserGrantGrantGrantedOrgRemoved.identifier()] = false
addLoginNameWithoutOwnerRemoved(eq)
}
func (q *Queries) UserGrant(ctx context.Context, shouldTriggerBulk bool, withOwnerRemoved bool, queries ...SearchQuery) (grant *UserGrant, err error) {

View File

@@ -31,20 +31,20 @@ var (
", projections.users8_humans.email" +
", projections.users8_humans.display_name" +
", projections.users8_humans.avatar_key" +
", projections.login_names2.login_name" +
", projections.login_names3.login_name" +
", projections.user_grants3.resource_owner" +
", projections.orgs1.name" +
", projections.orgs1.primary_domain" +
", projections.user_grants3.project_id" +
", projections.projects3.name" +
", projections.projects4.name" +
" FROM projections.user_grants3" +
" LEFT JOIN projections.users8 ON projections.user_grants3.user_id = projections.users8.id AND projections.user_grants3.instance_id = projections.users8.instance_id" +
" LEFT JOIN projections.users8_humans ON projections.user_grants3.user_id = projections.users8_humans.user_id AND projections.user_grants3.instance_id = projections.users8_humans.instance_id" +
" LEFT JOIN projections.orgs1 ON projections.user_grants3.resource_owner = projections.orgs1.id AND projections.user_grants3.instance_id = projections.orgs1.instance_id" +
" LEFT JOIN projections.projects3 ON projections.user_grants3.project_id = projections.projects3.id AND projections.user_grants3.instance_id = projections.projects3.instance_id" +
" LEFT JOIN projections.login_names2 ON projections.user_grants3.user_id = projections.login_names2.user_id AND projections.user_grants3.instance_id = projections.login_names2.instance_id" +
" LEFT JOIN projections.projects4 ON projections.user_grants3.project_id = projections.projects4.id AND projections.user_grants3.instance_id = projections.projects4.instance_id" +
" LEFT JOIN projections.login_names3 ON projections.user_grants3.user_id = projections.login_names3.user_id AND projections.user_grants3.instance_id = projections.login_names3.instance_id" +
` AS OF SYSTEM TIME '-1 ms' ` +
" WHERE projections.login_names2.is_primary = $1")
" WHERE projections.login_names3.is_primary = $1")
userGrantCols = []string{
"id",
"creation_date",
@@ -86,21 +86,21 @@ var (
", projections.users8_humans.email" +
", projections.users8_humans.display_name" +
", projections.users8_humans.avatar_key" +
", projections.login_names2.login_name" +
", projections.login_names3.login_name" +
", projections.user_grants3.resource_owner" +
", projections.orgs1.name" +
", projections.orgs1.primary_domain" +
", projections.user_grants3.project_id" +
", projections.projects3.name" +
", projections.projects4.name" +
", COUNT(*) OVER ()" +
" FROM projections.user_grants3" +
" LEFT JOIN projections.users8 ON projections.user_grants3.user_id = projections.users8.id AND projections.user_grants3.instance_id = projections.users8.instance_id" +
" LEFT JOIN projections.users8_humans ON projections.user_grants3.user_id = projections.users8_humans.user_id AND projections.user_grants3.instance_id = projections.users8_humans.instance_id" +
" LEFT JOIN projections.orgs1 ON projections.user_grants3.resource_owner = projections.orgs1.id AND projections.user_grants3.instance_id = projections.orgs1.instance_id" +
" LEFT JOIN projections.projects3 ON projections.user_grants3.project_id = projections.projects3.id AND projections.user_grants3.instance_id = projections.projects3.instance_id" +
" LEFT JOIN projections.login_names2 ON projections.user_grants3.user_id = projections.login_names2.user_id AND projections.user_grants3.instance_id = projections.login_names2.instance_id" +
" LEFT JOIN projections.projects4 ON projections.user_grants3.project_id = projections.projects4.id AND projections.user_grants3.instance_id = projections.projects4.instance_id" +
" LEFT JOIN projections.login_names3 ON projections.user_grants3.user_id = projections.login_names3.user_id AND projections.user_grants3.instance_id = projections.login_names3.instance_id" +
` AS OF SYSTEM TIME '-1 ms' ` +
" WHERE projections.login_names2.is_primary = $1")
" WHERE projections.login_names3.is_primary = $1")
userGrantsCols = append(
userGrantCols,
"count",

View File

@@ -67,10 +67,6 @@ func NewMembershipUserIDQuery(userID string) (SearchQuery, error) {
return NewTextQuery(membershipUserID.setTable(membershipAlias), userID, TextEquals)
}
func NewMembershipResourceOwnerQuery(value string) (SearchQuery, error) {
return NewTextQuery(membershipResourceOwner.setTable(membershipAlias), value, TextEquals)
}
func NewMembershipOrgIDQuery(value string) (SearchQuery, error) {
return NewTextQuery(membershipOrgID, value, TextEquals)
}
@@ -107,7 +103,7 @@ func (q *MembershipSearchQuery) toQuery(query sq.SelectBuilder) sq.SelectBuilder
return query
}
func (q *Queries) Memberships(ctx context.Context, queries *MembershipSearchQuery, withOwnerRemoved, shouldTrigger bool) (memberships *Memberships, err error) {
func (q *Queries) Memberships(ctx context.Context, queries *MembershipSearchQuery, shouldTrigger bool) (memberships *Memberships, err error) {
ctx, span := tracing.NewSpan(ctx)
defer func() { span.EndWithError(err) }()
@@ -142,7 +138,7 @@ func (q *Queries) Memberships(ctx context.Context, queries *MembershipSearchQuer
wg.Wait()
}
query, queryArgs, scan := prepareMembershipsQuery(ctx, q.client, withOwnerRemoved, queries)
query, queryArgs, scan := prepareMembershipsQuery(ctx, q.client, queries)
eq := sq.Eq{membershipInstanceID.identifier(): authz.GetInstance(ctx).InstanceID()}
stmt, args, err := queries.toQuery(query).Where(eq).ToSql()
if err != nil {
@@ -219,26 +215,13 @@ var (
name: projection.ProjectGrantColumnGrantedOrgID,
table: membershipAlias,
}
membershipOwnerRemoved = Column{
name: projection.MemberOwnerRemoved,
table: membershipAlias,
}
membershipOwnerRemovedUser = Column{
name: projection.MemberUserOwnerRemoved,
table: membershipAlias,
}
membershipGrantedOrgRemoved = Column{
name: projection.ProjectGrantMemberGrantedOrgRemoved,
table: membershipAlias,
}
)
func getMembershipFromQuery(withOwnerRemoved bool, queries *MembershipSearchQuery) (string, []interface{}) {
orgMembers, orgMembersArgs := prepareOrgMember(withOwnerRemoved, queries)
iamMembers, iamMembersArgs := prepareIAMMember(withOwnerRemoved, queries)
projectMembers, projectMembersArgs := prepareProjectMember(withOwnerRemoved, queries)
projectGrantMembers, projectGrantMembersArgs := prepareProjectGrantMember(withOwnerRemoved, queries)
func getMembershipFromQuery(queries *MembershipSearchQuery) (string, []interface{}) {
orgMembers, orgMembersArgs := prepareOrgMember(queries)
iamMembers, iamMembersArgs := prepareIAMMember(queries)
projectMembers, projectMembersArgs := prepareProjectMember(queries)
projectGrantMembers, projectGrantMembersArgs := prepareProjectGrantMember(queries)
args := make([]interface{}, 0)
args = append(append(append(append(args, orgMembersArgs...), iamMembersArgs...), projectMembersArgs...), projectGrantMembersArgs...)
@@ -254,8 +237,8 @@ func getMembershipFromQuery(withOwnerRemoved bool, queries *MembershipSearchQuer
args
}
func prepareMembershipsQuery(ctx context.Context, db prepareDatabase, withOwnerRemoved bool, queries *MembershipSearchQuery) (sq.SelectBuilder, []interface{}, func(*sql.Rows) (*Memberships, error)) {
query, args := getMembershipFromQuery(withOwnerRemoved, queries)
func prepareMembershipsQuery(ctx context.Context, db prepareDatabase, queries *MembershipSearchQuery) (sq.SelectBuilder, []interface{}, func(*sql.Rows) (*Memberships, error)) {
query, args := getMembershipFromQuery(queries)
return sq.Select(
membershipUserID.identifier(),
membershipRoles.identifier(),
@@ -358,7 +341,7 @@ func prepareMembershipsQuery(ctx context.Context, db prepareDatabase, withOwnerR
}
}
func prepareOrgMember(withOwnerRemoved bool, query *MembershipSearchQuery) (string, []interface{}) {
func prepareOrgMember(query *MembershipSearchQuery) (string, []interface{}) {
builder := sq.Select(
OrgMemberUserID.identifier(),
OrgMemberRoles.identifier(),
@@ -378,17 +361,10 @@ func prepareOrgMember(withOwnerRemoved bool, query *MembershipSearchQuery) (stri
builder = q.toQuery(builder)
}
}
if !withOwnerRemoved {
eq := sq.Eq{}
addOrgMemberWithoutOwnerRemoved(eq)
builder = builder.Where(eq)
}
return builder.MustSql()
}
func prepareIAMMember(withOwnerRemoved bool, query *MembershipSearchQuery) (string, []interface{}) {
func prepareIAMMember(query *MembershipSearchQuery) (string, []interface{}) {
builder := sq.Select(
InstanceMemberUserID.identifier(),
InstanceMemberRoles.identifier(),
@@ -408,16 +384,10 @@ func prepareIAMMember(withOwnerRemoved bool, query *MembershipSearchQuery) (stri
builder = q.toQuery(builder)
}
}
if !withOwnerRemoved {
eq := sq.Eq{}
addIamMemberWithoutOwnerRemoved(eq)
builder = builder.Where(eq)
}
return builder.MustSql()
}
func prepareProjectMember(withOwnerRemoved bool, query *MembershipSearchQuery) (string, []interface{}) {
func prepareProjectMember(query *MembershipSearchQuery) (string, []interface{}) {
builder := sq.Select(
ProjectMemberUserID.identifier(),
ProjectMemberRoles.identifier(),
@@ -438,15 +408,10 @@ func prepareProjectMember(withOwnerRemoved bool, query *MembershipSearchQuery) (
}
}
if !withOwnerRemoved {
eq := sq.Eq{}
addProjectMemberWithoutOwnerRemoved(eq)
builder = builder.Where(eq)
}
return builder.MustSql()
}
func prepareProjectGrantMember(withOwnerRemoved bool, query *MembershipSearchQuery) (string, []interface{}) {
func prepareProjectGrantMember(query *MembershipSearchQuery) (string, []interface{}) {
builder := sq.Select(
ProjectGrantMemberUserID.identifier(),
ProjectGrantMemberRoles.identifier(),
@@ -466,11 +431,5 @@ func prepareProjectGrantMember(withOwnerRemoved bool, query *MembershipSearchQue
builder = q.toQuery(builder)
}
}
if !withOwnerRemoved {
eq := sq.Eq{}
addProjectGrantMemberWithoutOwnerRemoved(eq)
builder = builder.Where(eq)
}
return builder.MustSql()
}

View File

@@ -26,8 +26,8 @@ var (
", members.id" +
", members.project_id" +
", members.grant_id" +
", projections.project_grants3.granted_org_id" +
", projections.projects3.name" +
", projections.project_grants4.granted_org_id" +
", projections.projects4.name" +
", projections.orgs1.name" +
", projections.instances.name" +
", COUNT(*) OVER ()" +
@@ -43,8 +43,7 @@ var (
", NULL::TEXT AS id" +
", NULL::TEXT AS project_id" +
", NULL::TEXT AS grant_id" +
" FROM projections.org_members3 AS members" +
" WHERE members.owner_removed = $1 AND members.user_owner_removed = $2" +
" FROM projections.org_members4 AS members" +
" UNION ALL " +
"SELECT members.user_id" +
", members.roles" +
@@ -57,8 +56,7 @@ var (
", members.id" +
", NULL::TEXT AS project_id" +
", NULL::TEXT AS grant_id" +
" FROM projections.instance_members3 AS members" +
" WHERE members.owner_removed = $3 AND members.user_owner_removed = $4" +
" FROM projections.instance_members4 AS members" +
" UNION ALL " +
"SELECT members.user_id" +
", members.roles" +
@@ -71,8 +69,7 @@ var (
", NULL::TEXT AS id" +
", members.project_id" +
", NULL::TEXT AS grant_id" +
" FROM projections.project_members3 AS members" +
" WHERE members.owner_removed = $5 AND members.user_owner_removed = $6" +
" FROM projections.project_members4 AS members" +
" UNION ALL " +
"SELECT members.user_id" +
", members.roles" +
@@ -85,12 +82,11 @@ var (
", NULL::TEXT AS id" +
", members.project_id" +
", members.grant_id" +
" FROM projections.project_grant_members3 AS members" +
" WHERE members.granted_org_removed = $7 AND members.owner_removed = $8 AND members.user_owner_removed = $9" +
" FROM projections.project_grant_members4 AS members" +
") AS members" +
" LEFT JOIN projections.projects3 ON members.project_id = projections.projects3.id AND members.instance_id = projections.projects3.instance_id" +
" LEFT JOIN projections.projects4 ON members.project_id = projections.projects4.id AND members.instance_id = projections.projects4.instance_id" +
" LEFT JOIN projections.orgs1 ON members.org_id = projections.orgs1.id AND members.instance_id = projections.orgs1.instance_id" +
" LEFT JOIN projections.project_grants3 ON members.grant_id = projections.project_grants3.grant_id AND members.instance_id = projections.project_grants3.instance_id" +
" LEFT JOIN projections.project_grants4 ON members.grant_id = projections.project_grants4.grant_id AND members.instance_id = projections.project_grants4.instance_id" +
" LEFT JOIN projections.instances ON members.instance_id = projections.instances.id" +
` AS OF SYSTEM TIME '-1 ms'`)
membershipCols = []string{
@@ -125,7 +121,7 @@ func Test_MembershipPrepares(t *testing.T) {
}{
{
name: "prepareMembershipsQuery no result",
prepare: prepareMembershipWrapper(false),
prepare: prepareMembershipWrapper(),
want: want{
sqlExpectations: mockQueries(
membershipsStmt,
@@ -137,7 +133,7 @@ func Test_MembershipPrepares(t *testing.T) {
},
{
name: "prepareMembershipsQuery one org member",
prepare: prepareMembershipWrapper(false),
prepare: prepareMembershipWrapper(),
want: want{
sqlExpectations: mockQueries(
membershipsStmt,
@@ -181,7 +177,7 @@ func Test_MembershipPrepares(t *testing.T) {
},
{
name: "prepareMembershipsQuery one instance member",
prepare: prepareMembershipWrapper(false),
prepare: prepareMembershipWrapper(),
want: want{
sqlExpectations: mockQueries(
membershipsStmt,
@@ -225,7 +221,7 @@ func Test_MembershipPrepares(t *testing.T) {
},
{
name: "prepareMembershipsQuery one project member",
prepare: prepareMembershipWrapper(false),
prepare: prepareMembershipWrapper(),
want: want{
sqlExpectations: mockQueries(
membershipsStmt,
@@ -269,7 +265,7 @@ func Test_MembershipPrepares(t *testing.T) {
},
{
name: "prepareMembershipsQuery one project grant member",
prepare: prepareMembershipWrapper(false),
prepare: prepareMembershipWrapper(),
want: want{
sqlExpectations: mockQueries(
membershipsStmt,
@@ -318,7 +314,7 @@ func Test_MembershipPrepares(t *testing.T) {
},
{
name: "prepareMembershipsQuery one for each member type",
prepare: prepareMembershipWrapper(false),
prepare: prepareMembershipWrapper(),
want: want{
sqlExpectations: mockQueries(
membershipsStmt,
@@ -442,7 +438,7 @@ func Test_MembershipPrepares(t *testing.T) {
},
{
name: "prepareMembershipsQuery sql err",
prepare: prepareMembershipWrapper(false),
prepare: prepareMembershipWrapper(),
want: want{
sqlExpectations: mockQueryErr(
membershipsStmt,
@@ -465,9 +461,9 @@ func Test_MembershipPrepares(t *testing.T) {
}
}
func prepareMembershipWrapper(withOwnerRemoved bool) func(ctx context.Context, db prepareDatabase) (sq.SelectBuilder, func(*sql.Rows) (*Memberships, error)) {
func prepareMembershipWrapper() func(ctx context.Context, db prepareDatabase) (sq.SelectBuilder, func(*sql.Rows) (*Memberships, error)) {
return func(ctx context.Context, db prepareDatabase) (sq.SelectBuilder, func(*sql.Rows) (*Memberships, error)) {
builder, _, fun := prepareMembershipsQuery(ctx, db, withOwnerRemoved, &MembershipSearchQuery{})
builder, _, fun := prepareMembershipsQuery(ctx, db, &MembershipSearchQuery{})
return builder, fun
}
}

View File

@@ -16,11 +16,11 @@ import (
)
var (
loginNamesQuery = `SELECT login_names.user_id, ARRAY_AGG(login_names.login_name)::TEXT[] AS loginnames, ARRAY_AGG(LOWER(login_names.login_name))::TEXT[] AS loginnames_lower, login_names.instance_id, login_names.user_owner_removed, login_names.policy_owner_removed, login_names.domain_owner_removed` +
` FROM projections.login_names2 AS login_names` +
` GROUP BY login_names.user_id, login_names.instance_id, login_names.user_owner_removed, login_names.policy_owner_removed, login_names.domain_owner_removed`
preferredLoginNameQuery = `SELECT preferred_login_name.user_id, preferred_login_name.login_name, preferred_login_name.instance_id, preferred_login_name.user_owner_removed, preferred_login_name.policy_owner_removed, preferred_login_name.domain_owner_removed` +
` FROM projections.login_names2 AS preferred_login_name` +
loginNamesQuery = `SELECT login_names.user_id, ARRAY_AGG(login_names.login_name)::TEXT[] AS loginnames, ARRAY_AGG(LOWER(login_names.login_name))::TEXT[] AS loginnames_lower, login_names.instance_id` +
` FROM projections.login_names3 AS login_names` +
` GROUP BY login_names.user_id, login_names.instance_id`
preferredLoginNameQuery = `SELECT preferred_login_name.user_id, preferred_login_name.login_name, preferred_login_name.instance_id` +
` FROM projections.login_names3 AS preferred_login_name` +
` WHERE preferred_login_name.is_primary = $1`
userQuery = `SELECT projections.users8.id,` +
` projections.users8.creation_date,` +

View File

@@ -26,7 +26,7 @@ func (q *Queries) MyZitadelPermissions(ctx context.Context, orgID, userID string
}
memberships, err := q.Memberships(ctx, &MembershipSearchQuery{
Queries: []SearchQuery{userIDQuery, Or(orgIDsQuery, grantedOrgIDQuery)},
}, false, false)
}, false)
if err != nil {
return nil, err
}