fix: join on instanceIDs in queries (#4612)

This commit is contained in:
Livio Spring
2022-10-27 08:08:36 +02:00
committed by GitHub
parent d721f725fd
commit 441f215513
61 changed files with 555 additions and 1243 deletions

View File

@@ -13,6 +13,71 @@ import (
errs "github.com/zitadel/zitadel/internal/errors"
)
var (
projectGrantsQuery = `SELECT projections.project_grants2.project_id,` +
` projections.project_grants2.grant_id,` +
` projections.project_grants2.creation_date,` +
` projections.project_grants2.change_date,` +
` projections.project_grants2.resource_owner,` +
` projections.project_grants2.state,` +
` projections.project_grants2.sequence,` +
` projections.projects2.name,` +
` projections.project_grants2.granted_org_id,` +
` o.name,` +
` projections.project_grants2.granted_role_keys,` +
` r.name,` +
` COUNT(*) OVER () ` +
` FROM projections.project_grants2 ` +
` LEFT JOIN projections.projects2 ON projections.project_grants2.project_id = projections.projects2.id AND projections.project_grants2.instance_id = projections.projects2.instance_id ` +
` LEFT JOIN projections.orgs AS r ON projections.project_grants2.resource_owner = r.id AND projections.project_grants2.instance_id = r.instance_id` +
` LEFT JOIN projections.orgs AS o ON projections.project_grants2.granted_org_id = o.id AND projections.project_grants2.instance_id = o.instance_id`
projectGrantsCols = []string{
"project_id",
"grant_id",
"creation_date",
"change_date",
"resource_owner",
"state",
"sequence",
"name",
"granted_org_id",
"name",
"granted_role_keys",
"name",
"count",
}
projectGrantQuery = `SELECT projections.project_grants2.project_id,` +
` projections.project_grants2.grant_id,` +
` projections.project_grants2.creation_date,` +
` projections.project_grants2.change_date,` +
` projections.project_grants2.resource_owner,` +
` projections.project_grants2.state,` +
` projections.project_grants2.sequence,` +
` projections.projects2.name,` +
` projections.project_grants2.granted_org_id,` +
` o.name,` +
` projections.project_grants2.granted_role_keys,` +
` r.name` +
` FROM projections.project_grants2 ` +
` LEFT JOIN projections.projects2 ON projections.project_grants2.project_id = projections.projects2.id AND projections.project_grants2.instance_id = projections.projects2.instance_id ` +
` LEFT JOIN projections.orgs AS r ON projections.project_grants2.resource_owner = r.id AND projections.project_grants2.instance_id = r.instance_id` +
` LEFT JOIN projections.orgs AS o ON projections.project_grants2.granted_org_id = o.id AND projections.project_grants2.instance_id = o.instance_id`
projectGrantCols = []string{
"project_id",
"grant_id",
"creation_date",
"change_date",
"resource_owner",
"state",
"sequence",
"name",
"granted_org_id",
"name",
"granted_role_keys",
"name",
}
)
func Test_ProjectGrantPrepares(t *testing.T) {
type want struct {
sqlExpectations sqlExpectation
@@ -29,23 +94,7 @@ func Test_ProjectGrantPrepares(t *testing.T) {
prepare: prepareProjectGrantsQuery,
want: want{
sqlExpectations: mockQueries(
regexp.QuoteMeta(` SELECT projections.project_grants2.project_id,`+
` projections.project_grants2.grant_id,`+
` projections.project_grants2.creation_date,`+
` projections.project_grants2.change_date,`+
` projections.project_grants2.resource_owner,`+
` projections.project_grants2.state,`+
` projections.project_grants2.sequence,`+
` projections.projects2.name,`+
` projections.project_grants2.granted_org_id,`+
` o.name,`+
` projections.project_grants2.granted_role_keys,`+
` r.name,`+
` COUNT(*) OVER () `+
` FROM projections.project_grants2 `+
` LEFT JOIN projections.projects2 ON projections.project_grants2.project_id = projections.projects2.id `+
` LEFT JOIN projections.orgs AS r ON projections.project_grants2.resource_owner = r.id`+
` LEFT JOIN projections.orgs AS o ON projections.project_grants2.granted_org_id = o.id`),
regexp.QuoteMeta(projectGrantsQuery),
nil,
nil,
),
@@ -57,38 +106,8 @@ func Test_ProjectGrantPrepares(t *testing.T) {
prepare: prepareProjectGrantsQuery,
want: want{
sqlExpectations: mockQueries(
regexp.QuoteMeta(` SELECT projections.project_grants2.project_id,`+
` projections.project_grants2.grant_id,`+
` projections.project_grants2.creation_date,`+
` projections.project_grants2.change_date,`+
` projections.project_grants2.resource_owner,`+
` projections.project_grants2.state,`+
` projections.project_grants2.sequence,`+
` projections.projects2.name,`+
` projections.project_grants2.granted_org_id,`+
` o.name,`+
` projections.project_grants2.granted_role_keys,`+
` r.name,`+
` COUNT(*) OVER ()`+
` FROM projections.project_grants2`+
` LEFT JOIN projections.projects2 ON projections.project_grants2.project_id = projections.projects2.id`+
` LEFT JOIN projections.orgs AS r ON projections.project_grants2.resource_owner = r.id`+
` LEFT JOIN projections.orgs AS o ON projections.project_grants2.granted_org_id = o.id`),
[]string{
"project_id",
"grant_id",
"creation_date",
"change_date",
"resource_owner",
"state",
"sequence",
"name",
"granted_org_id",
"name",
"granted_role_keys",
"name",
"count",
},
regexp.QuoteMeta(projectGrantsQuery),
projectGrantsCols,
[][]driver.Value{
{
"project-id",
@@ -134,38 +153,8 @@ func Test_ProjectGrantPrepares(t *testing.T) {
prepare: prepareProjectGrantsQuery,
want: want{
sqlExpectations: mockQueries(
regexp.QuoteMeta(` SELECT projections.project_grants2.project_id,`+
` projections.project_grants2.grant_id,`+
` projections.project_grants2.creation_date,`+
` projections.project_grants2.change_date,`+
` projections.project_grants2.resource_owner,`+
` projections.project_grants2.state,`+
` projections.project_grants2.sequence,`+
` projections.projects2.name,`+
` projections.project_grants2.granted_org_id,`+
` o.name,`+
` projections.project_grants2.granted_role_keys,`+
` r.name,`+
` COUNT(*) OVER () `+
` FROM projections.project_grants2 `+
` LEFT JOIN projections.projects2 ON projections.project_grants2.project_id = projections.projects2.id `+
` LEFT JOIN projections.orgs AS r ON projections.project_grants2.resource_owner = r.id`+
` LEFT JOIN projections.orgs AS o ON projections.project_grants2.granted_org_id = o.id`),
[]string{
"project_id",
"grant_id",
"creation_date",
"change_date",
"resource_owner",
"state",
"sequence",
"name",
"granted_org_id",
"name",
"granted_role_keys",
"name",
"count",
},
regexp.QuoteMeta(projectGrantsQuery),
projectGrantsCols,
[][]driver.Value{
{
"project-id",
@@ -211,38 +200,8 @@ func Test_ProjectGrantPrepares(t *testing.T) {
prepare: prepareProjectGrantsQuery,
want: want{
sqlExpectations: mockQueries(
regexp.QuoteMeta(` SELECT projections.project_grants2.project_id,`+
` projections.project_grants2.grant_id,`+
` projections.project_grants2.creation_date,`+
` projections.project_grants2.change_date,`+
` projections.project_grants2.resource_owner,`+
` projections.project_grants2.state,`+
` projections.project_grants2.sequence,`+
` projections.projects2.name,`+
` projections.project_grants2.granted_org_id,`+
` o.name,`+
` projections.project_grants2.granted_role_keys,`+
` r.name,`+
` COUNT(*) OVER () `+
` FROM projections.project_grants2 `+
` LEFT JOIN projections.projects2 ON projections.project_grants2.project_id = projections.projects2.id `+
` LEFT JOIN projections.orgs AS r ON projections.project_grants2.resource_owner = r.id`+
` LEFT JOIN projections.orgs AS o ON projections.project_grants2.granted_org_id = o.id`),
[]string{
"project_id",
"grant_id",
"creation_date",
"change_date",
"resource_owner",
"state",
"sequence",
"name",
"granted_org_id",
"name",
"granted_role_keys",
"name",
"count",
},
regexp.QuoteMeta(projectGrantsQuery),
projectGrantsCols,
[][]driver.Value{
{
"project-id",
@@ -288,38 +247,8 @@ func Test_ProjectGrantPrepares(t *testing.T) {
prepare: prepareProjectGrantsQuery,
want: want{
sqlExpectations: mockQueries(
regexp.QuoteMeta(` SELECT projections.project_grants2.project_id,`+
` projections.project_grants2.grant_id,`+
` projections.project_grants2.creation_date,`+
` projections.project_grants2.change_date,`+
` projections.project_grants2.resource_owner,`+
` projections.project_grants2.state,`+
` projections.project_grants2.sequence,`+
` projections.projects2.name,`+
` projections.project_grants2.granted_org_id,`+
` o.name,`+
` projections.project_grants2.granted_role_keys,`+
` r.name,`+
` COUNT(*) OVER () `+
` FROM projections.project_grants2 `+
` LEFT JOIN projections.projects2 ON projections.project_grants2.project_id = projections.projects2.id `+
` LEFT JOIN projections.orgs AS r ON projections.project_grants2.resource_owner = r.id`+
` LEFT JOIN projections.orgs AS o ON projections.project_grants2.granted_org_id = o.id`),
[]string{
"project_id",
"grant_id",
"creation_date",
"change_date",
"resource_owner",
"state",
"sequence",
"name",
"granted_org_id",
"name",
"granted_role_keys",
"name",
"count",
},
regexp.QuoteMeta(projectGrantsQuery),
projectGrantsCols,
[][]driver.Value{
{
"project-id",
@@ -365,38 +294,8 @@ func Test_ProjectGrantPrepares(t *testing.T) {
prepare: prepareProjectGrantsQuery,
want: want{
sqlExpectations: mockQueries(
regexp.QuoteMeta(` SELECT projections.project_grants2.project_id,`+
` projections.project_grants2.grant_id,`+
` projections.project_grants2.creation_date,`+
` projections.project_grants2.change_date,`+
` projections.project_grants2.resource_owner,`+
` projections.project_grants2.state,`+
` projections.project_grants2.sequence,`+
` projections.projects2.name,`+
` projections.project_grants2.granted_org_id,`+
` o.name,`+
` projections.project_grants2.granted_role_keys,`+
` r.name,`+
` COUNT(*) OVER () `+
` FROM projections.project_grants2 `+
` LEFT JOIN projections.projects2 ON projections.project_grants2.project_id = projections.projects2.id `+
` LEFT JOIN projections.orgs AS r ON projections.project_grants2.resource_owner = r.id`+
` LEFT JOIN projections.orgs AS o ON projections.project_grants2.granted_org_id = o.id`),
[]string{
"project_id",
"grant_id",
"creation_date",
"change_date",
"resource_owner",
"state",
"sequence",
"name",
"granted_org_id",
"name",
"granted_role_keys",
"name",
"count",
},
regexp.QuoteMeta(projectGrantsQuery),
projectGrantsCols,
[][]driver.Value{
{
"project-id",
@@ -470,23 +369,7 @@ func Test_ProjectGrantPrepares(t *testing.T) {
prepare: prepareProjectGrantsQuery,
want: want{
sqlExpectations: mockQueryErr(
regexp.QuoteMeta(` SELECT projections.project_grants2.project_id,`+
` projections.project_grants2.grant_id,`+
` projections.project_grants2.creation_date,`+
` projections.project_grants2.change_date,`+
` projections.project_grants2.resource_owner,`+
` projections.project_grants2.state,`+
` projections.project_grants2.sequence,`+
` projections.projects2.name,`+
` projections.project_grants2.granted_org_id,`+
` o.name,`+
` projections.project_grants2.granted_role_keys,`+
` r.name,`+
` COUNT(*) OVER () `+
` FROM projections.project_grants2 `+
` LEFT JOIN projections.projects2 ON projections.project_grants2.project_id = projections.projects2.id `+
` LEFT JOIN projections.orgs AS r ON projections.project_grants2.resource_owner = r.id`+
` LEFT JOIN projections.orgs AS o ON projections.project_grants2.granted_org_id = o.id`),
regexp.QuoteMeta(projectGrantsQuery),
sql.ErrConnDone,
),
err: func(err error) (error, bool) {
@@ -503,22 +386,7 @@ func Test_ProjectGrantPrepares(t *testing.T) {
prepare: prepareProjectGrantQuery,
want: want{
sqlExpectations: mockQueries(
regexp.QuoteMeta(` SELECT projections.project_grants2.project_id,`+
` projections.project_grants2.grant_id,`+
` projections.project_grants2.creation_date,`+
` projections.project_grants2.change_date,`+
` projections.project_grants2.resource_owner,`+
` projections.project_grants2.state,`+
` projections.project_grants2.sequence,`+
` projections.projects2.name,`+
` projections.project_grants2.granted_org_id,`+
` o.name,`+
` projections.project_grants2.granted_role_keys,`+
` r.name`+
` FROM projections.project_grants2 `+
` LEFT JOIN projections.projects2 ON projections.project_grants2.project_id = projections.projects2.id `+
` LEFT JOIN projections.orgs AS r ON projections.project_grants2.resource_owner = r.id`+
` LEFT JOIN projections.orgs AS o ON projections.project_grants2.granted_org_id = o.id`),
regexp.QuoteMeta(projectGrantQuery),
nil,
nil,
),
@@ -536,36 +404,8 @@ func Test_ProjectGrantPrepares(t *testing.T) {
prepare: prepareProjectGrantQuery,
want: want{
sqlExpectations: mockQuery(
regexp.QuoteMeta(` SELECT projections.project_grants2.project_id,`+
` projections.project_grants2.grant_id,`+
` projections.project_grants2.creation_date,`+
` projections.project_grants2.change_date,`+
` projections.project_grants2.resource_owner,`+
` projections.project_grants2.state,`+
` projections.project_grants2.sequence,`+
` projections.projects2.name,`+
` projections.project_grants2.granted_org_id,`+
` o.name,`+
` projections.project_grants2.granted_role_keys,`+
` r.name`+
` FROM projections.project_grants2 `+
` LEFT JOIN projections.projects2 ON projections.project_grants2.project_id = projections.projects2.id `+
` LEFT JOIN projections.orgs AS r ON projections.project_grants2.resource_owner = r.id`+
` LEFT JOIN projections.orgs AS o ON projections.project_grants2.granted_org_id = o.id`),
[]string{
"project_id",
"grant_id",
"creation_date",
"change_date",
"resource_owner",
"state",
"sequence",
"name",
"granted_org_id",
"name",
"granted_role_keys",
"name",
},
regexp.QuoteMeta(projectGrantQuery),
projectGrantCols,
[]driver.Value{
"project-id",
"grant-id",
@@ -602,36 +442,8 @@ func Test_ProjectGrantPrepares(t *testing.T) {
prepare: prepareProjectGrantQuery,
want: want{
sqlExpectations: mockQuery(
regexp.QuoteMeta(` SELECT projections.project_grants2.project_id,`+
` projections.project_grants2.grant_id,`+
` projections.project_grants2.creation_date,`+
` projections.project_grants2.change_date,`+
` projections.project_grants2.resource_owner,`+
` projections.project_grants2.state,`+
` projections.project_grants2.sequence,`+
` projections.projects2.name,`+
` projections.project_grants2.granted_org_id,`+
` o.name,`+
` projections.project_grants2.granted_role_keys,`+
` r.name`+
` FROM projections.project_grants2 `+
` LEFT JOIN projections.projects2 ON projections.project_grants2.project_id = projections.projects2.id `+
` LEFT JOIN projections.orgs AS r ON projections.project_grants2.resource_owner = r.id`+
` LEFT JOIN projections.orgs AS o ON projections.project_grants2.granted_org_id = o.id`),
[]string{
"project_id",
"grant_id",
"creation_date",
"change_date",
"resource_owner",
"state",
"sequence",
"name",
"granted_org_id",
"name",
"granted_role_keys",
"name",
},
regexp.QuoteMeta(projectGrantQuery),
projectGrantCols,
[]driver.Value{
"project-id",
"grant-id",
@@ -668,36 +480,8 @@ func Test_ProjectGrantPrepares(t *testing.T) {
prepare: prepareProjectGrantQuery,
want: want{
sqlExpectations: mockQuery(
regexp.QuoteMeta(` SELECT projections.project_grants2.project_id,`+
` projections.project_grants2.grant_id,`+
` projections.project_grants2.creation_date,`+
` projections.project_grants2.change_date,`+
` projections.project_grants2.resource_owner,`+
` projections.project_grants2.state,`+
` projections.project_grants2.sequence,`+
` projections.projects2.name,`+
` projections.project_grants2.granted_org_id,`+
` o.name,`+
` projections.project_grants2.granted_role_keys,`+
` r.name`+
` FROM projections.project_grants2 `+
` LEFT JOIN projections.projects2 ON projections.project_grants2.project_id = projections.projects2.id `+
` LEFT JOIN projections.orgs AS r ON projections.project_grants2.resource_owner = r.id`+
` LEFT JOIN projections.orgs AS o ON projections.project_grants2.granted_org_id = o.id`),
[]string{
"project_id",
"grant_id",
"creation_date",
"change_date",
"resource_owner",
"state",
"sequence",
"name",
"granted_org_id",
"name",
"granted_role_keys",
"name",
},
regexp.QuoteMeta(projectGrantQuery),
projectGrantCols,
[]driver.Value{
"project-id",
"grant-id",
@@ -734,36 +518,8 @@ func Test_ProjectGrantPrepares(t *testing.T) {
prepare: prepareProjectGrantQuery,
want: want{
sqlExpectations: mockQuery(
regexp.QuoteMeta(` SELECT projections.project_grants2.project_id,`+
` projections.project_grants2.grant_id,`+
` projections.project_grants2.creation_date,`+
` projections.project_grants2.change_date,`+
` projections.project_grants2.resource_owner,`+
` projections.project_grants2.state,`+
` projections.project_grants2.sequence,`+
` projections.projects2.name,`+
` projections.project_grants2.granted_org_id,`+
` o.name,`+
` projections.project_grants2.granted_role_keys,`+
` r.name`+
` FROM projections.project_grants2 `+
` LEFT JOIN projections.projects2 ON projections.project_grants2.project_id = projections.projects2.id `+
` LEFT JOIN projections.orgs AS r ON projections.project_grants2.resource_owner = r.id`+
` LEFT JOIN projections.orgs AS o ON projections.project_grants2.granted_org_id = o.id`),
[]string{
"project_id",
"grant_id",
"creation_date",
"change_date",
"resource_owner",
"state",
"sequence",
"name",
"granted_org_id",
"name",
"granted_role_keys",
"name",
},
regexp.QuoteMeta(projectGrantQuery),
projectGrantCols,
[]driver.Value{
"project-id",
"grant-id",
@@ -800,22 +556,7 @@ func Test_ProjectGrantPrepares(t *testing.T) {
prepare: prepareProjectGrantQuery,
want: want{
sqlExpectations: mockQueryErr(
regexp.QuoteMeta(` SELECT projections.project_grants2.project_id,`+
` projections.project_grants2.grant_id,`+
` projections.project_grants2.creation_date,`+
` projections.project_grants2.change_date,`+
` projections.project_grants2.resource_owner,`+
` projections.project_grants2.state,`+
` projections.project_grants2.sequence,`+
` projections.projects2.name,`+
` projections.project_grants2.granted_org_id,`+
` o.name,`+
` projections.project_grants2.granted_role_keys,`+
` r.name`+
` FROM projections.project_grants2 `+
` LEFT JOIN projections.projects2 ON projections.project_grants2.project_id = projections.projects2.id `+
` LEFT JOIN projections.orgs AS r ON projections.project_grants2.resource_owner = r.id`+
` LEFT JOIN projections.orgs AS o ON projections.project_grants2.granted_org_id = o.id`),
regexp.QuoteMeta(projectGrantQuery),
sql.ErrConnDone,
),
err: func(err error) (error, bool) {