mirror of
https://github.com/zitadel/zitadel.git
synced 2025-08-11 20:57:31 +00:00
perf: query data AS OF SYSTEM TIME
(#5231)
Queries the data in the storage layser at the timestamp when the call hit the API layer
This commit is contained in:
@@ -11,13 +11,66 @@ import (
|
||||
|
||||
"github.com/DATA-DOG/go-sqlmock"
|
||||
|
||||
"github.com/zitadel/zitadel/internal/database"
|
||||
"github.com/zitadel/zitadel/internal/domain"
|
||||
"github.com/zitadel/zitadel/internal/errors"
|
||||
)
|
||||
|
||||
var (
|
||||
orgUniqueQuery = "SELECT COUNT(*) = 0 FROM projections.orgs LEFT JOIN projections.org_domains2 ON projections.orgs.id = projections.org_domains2.org_id AND projections.orgs.instance_id = projections.org_domains2.instance_id WHERE (projections.org_domains2.is_verified = $1 AND projections.orgs.instance_id = $2 AND (projections.org_domains2.domain ILIKE $3 OR projections.orgs.name ILIKE $4) AND projections.orgs.org_state <> $5)"
|
||||
orgUniqueQuery = "SELECT COUNT(*) = 0 FROM projections.orgs LEFT JOIN projections.org_domains2 ON projections.orgs.id = projections.org_domains2.org_id AND projections.orgs.instance_id = projections.org_domains2.instance_id AS OF SYSTEM TIME '-1 ms' WHERE (projections.org_domains2.is_verified = $1 AND projections.orgs.instance_id = $2 AND (projections.org_domains2.domain ILIKE $3 OR projections.orgs.name ILIKE $4) AND projections.orgs.org_state <> $5)"
|
||||
orgUniqueCols = []string{"is_unique"}
|
||||
|
||||
prepareOrgsQueryStmt = `SELECT projections.orgs.id,` +
|
||||
` projections.orgs.creation_date,` +
|
||||
` projections.orgs.change_date,` +
|
||||
` projections.orgs.resource_owner,` +
|
||||
` projections.orgs.org_state,` +
|
||||
` projections.orgs.sequence,` +
|
||||
` projections.orgs.name,` +
|
||||
` projections.orgs.primary_domain,` +
|
||||
` COUNT(*) OVER ()` +
|
||||
` FROM projections.orgs` +
|
||||
` AS OF SYSTEM TIME '-1 ms' `
|
||||
prepareOrgsQueryCols = []string{
|
||||
"id",
|
||||
"creation_date",
|
||||
"change_date",
|
||||
"resource_owner",
|
||||
"org_state",
|
||||
"sequence",
|
||||
"name",
|
||||
"primary_domain",
|
||||
"count",
|
||||
}
|
||||
|
||||
prepareOrgQueryStmt = `SELECT projections.orgs.id,` +
|
||||
` projections.orgs.creation_date,` +
|
||||
` projections.orgs.change_date,` +
|
||||
` projections.orgs.resource_owner,` +
|
||||
` projections.orgs.org_state,` +
|
||||
` projections.orgs.sequence,` +
|
||||
` projections.orgs.name,` +
|
||||
` projections.orgs.primary_domain` +
|
||||
` FROM projections.orgs` +
|
||||
` AS OF SYSTEM TIME '-1 ms' `
|
||||
prepareOrgQueryCols = []string{
|
||||
"id",
|
||||
"creation_date",
|
||||
"change_date",
|
||||
"resource_owner",
|
||||
"org_state",
|
||||
"sequence",
|
||||
"name",
|
||||
"primary_domain",
|
||||
}
|
||||
|
||||
prepareOrgUniqueStmt = `SELECT COUNT(*) = 0` +
|
||||
` FROM projections.orgs` +
|
||||
` LEFT JOIN projections.org_domains2 ON projections.orgs.id = projections.org_domains2.org_id AND projections.orgs.instance_id = projections.org_domains2.instance_id` +
|
||||
` AS OF SYSTEM TIME '-1 ms' `
|
||||
prepareOrgUniqueCols = []string{
|
||||
"count",
|
||||
}
|
||||
)
|
||||
|
||||
func Test_OrgPrepares(t *testing.T) {
|
||||
@@ -36,16 +89,7 @@ func Test_OrgPrepares(t *testing.T) {
|
||||
prepare: prepareOrgsQuery,
|
||||
want: want{
|
||||
sqlExpectations: mockQueries(
|
||||
regexp.QuoteMeta(`SELECT projections.orgs.id,`+
|
||||
` projections.orgs.creation_date,`+
|
||||
` projections.orgs.change_date,`+
|
||||
` projections.orgs.resource_owner,`+
|
||||
` projections.orgs.org_state,`+
|
||||
` projections.orgs.sequence,`+
|
||||
` projections.orgs.name,`+
|
||||
` projections.orgs.primary_domain,`+
|
||||
` COUNT(*) OVER ()`+
|
||||
` FROM projections.orgs`),
|
||||
regexp.QuoteMeta(prepareOrgsQueryStmt),
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
@@ -57,27 +101,8 @@ func Test_OrgPrepares(t *testing.T) {
|
||||
prepare: prepareOrgsQuery,
|
||||
want: want{
|
||||
sqlExpectations: mockQueries(
|
||||
regexp.QuoteMeta(`SELECT projections.orgs.id,`+
|
||||
` projections.orgs.creation_date,`+
|
||||
` projections.orgs.change_date,`+
|
||||
` projections.orgs.resource_owner,`+
|
||||
` projections.orgs.org_state,`+
|
||||
` projections.orgs.sequence,`+
|
||||
` projections.orgs.name,`+
|
||||
` projections.orgs.primary_domain,`+
|
||||
` COUNT(*) OVER ()`+
|
||||
` FROM projections.orgs`),
|
||||
[]string{
|
||||
"id",
|
||||
"creation_date",
|
||||
"change_date",
|
||||
"resource_owner",
|
||||
"org_state",
|
||||
"sequence",
|
||||
"name",
|
||||
"primary_domain",
|
||||
"count",
|
||||
},
|
||||
regexp.QuoteMeta(prepareOrgsQueryStmt),
|
||||
prepareOrgsQueryCols,
|
||||
[][]driver.Value{
|
||||
{
|
||||
"id",
|
||||
@@ -115,27 +140,8 @@ func Test_OrgPrepares(t *testing.T) {
|
||||
prepare: prepareOrgsQuery,
|
||||
want: want{
|
||||
sqlExpectations: mockQueries(
|
||||
regexp.QuoteMeta(`SELECT projections.orgs.id,`+
|
||||
` projections.orgs.creation_date,`+
|
||||
` projections.orgs.change_date,`+
|
||||
` projections.orgs.resource_owner,`+
|
||||
` projections.orgs.org_state,`+
|
||||
` projections.orgs.sequence,`+
|
||||
` projections.orgs.name,`+
|
||||
` projections.orgs.primary_domain,`+
|
||||
` COUNT(*) OVER ()`+
|
||||
` FROM projections.orgs`),
|
||||
[]string{
|
||||
"id",
|
||||
"creation_date",
|
||||
"change_date",
|
||||
"resource_owner",
|
||||
"org_state",
|
||||
"sequence",
|
||||
"name",
|
||||
"primary_domain",
|
||||
"count",
|
||||
},
|
||||
regexp.QuoteMeta(prepareOrgsQueryStmt),
|
||||
prepareOrgsQueryCols,
|
||||
[][]driver.Value{
|
||||
{
|
||||
"id-1",
|
||||
@@ -193,16 +199,7 @@ func Test_OrgPrepares(t *testing.T) {
|
||||
prepare: prepareOrgsQuery,
|
||||
want: want{
|
||||
sqlExpectations: mockQueryErr(
|
||||
regexp.QuoteMeta(`SELECT projections.orgs.id,`+
|
||||
` projections.orgs.creation_date,`+
|
||||
` projections.orgs.change_date,`+
|
||||
` projections.orgs.resource_owner,`+
|
||||
` projections.orgs.org_state,`+
|
||||
` projections.orgs.sequence,`+
|
||||
` projections.orgs.name,`+
|
||||
` projections.orgs.primary_domain,`+
|
||||
` COUNT(*) OVER ()`+
|
||||
` FROM projections.orgs`),
|
||||
regexp.QuoteMeta(prepareOrgsQueryStmt),
|
||||
sql.ErrConnDone,
|
||||
),
|
||||
err: func(err error) (error, bool) {
|
||||
@@ -219,15 +216,7 @@ func Test_OrgPrepares(t *testing.T) {
|
||||
prepare: prepareOrgQuery,
|
||||
want: want{
|
||||
sqlExpectations: mockQueries(
|
||||
regexp.QuoteMeta(`SELECT projections.orgs.id,`+
|
||||
` projections.orgs.creation_date,`+
|
||||
` projections.orgs.change_date,`+
|
||||
` projections.orgs.resource_owner,`+
|
||||
` projections.orgs.org_state,`+
|
||||
` projections.orgs.sequence,`+
|
||||
` projections.orgs.name,`+
|
||||
` projections.orgs.primary_domain`+
|
||||
` FROM projections.orgs`),
|
||||
regexp.QuoteMeta(prepareOrgQueryStmt),
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
@@ -245,25 +234,8 @@ func Test_OrgPrepares(t *testing.T) {
|
||||
prepare: prepareOrgQuery,
|
||||
want: want{
|
||||
sqlExpectations: mockQuery(
|
||||
regexp.QuoteMeta(`SELECT projections.orgs.id,`+
|
||||
` projections.orgs.creation_date,`+
|
||||
` projections.orgs.change_date,`+
|
||||
` projections.orgs.resource_owner,`+
|
||||
` projections.orgs.org_state,`+
|
||||
` projections.orgs.sequence,`+
|
||||
` projections.orgs.name,`+
|
||||
` projections.orgs.primary_domain`+
|
||||
` FROM projections.orgs`),
|
||||
[]string{
|
||||
"id",
|
||||
"creation_date",
|
||||
"change_date",
|
||||
"resource_owner",
|
||||
"org_state",
|
||||
"sequence",
|
||||
"name",
|
||||
"primary_domain",
|
||||
},
|
||||
regexp.QuoteMeta(prepareOrgQueryStmt),
|
||||
prepareOrgQueryCols,
|
||||
[]driver.Value{
|
||||
"id",
|
||||
testNow,
|
||||
@@ -292,15 +264,7 @@ func Test_OrgPrepares(t *testing.T) {
|
||||
prepare: prepareOrgQuery,
|
||||
want: want{
|
||||
sqlExpectations: mockQueryErr(
|
||||
regexp.QuoteMeta(`SELECT projections.orgs.id,`+
|
||||
` projections.orgs.creation_date,`+
|
||||
` projections.orgs.change_date,`+
|
||||
` projections.orgs.resource_owner,`+
|
||||
` projections.orgs.org_state,`+
|
||||
` projections.orgs.sequence,`+
|
||||
` projections.orgs.name,`+
|
||||
` projections.orgs.primary_domain`+
|
||||
` FROM projections.orgs`),
|
||||
regexp.QuoteMeta(prepareOrgQueryStmt),
|
||||
sql.ErrConnDone,
|
||||
),
|
||||
err: func(err error) (error, bool) {
|
||||
@@ -317,8 +281,7 @@ func Test_OrgPrepares(t *testing.T) {
|
||||
prepare: prepareOrgUniqueQuery,
|
||||
want: want{
|
||||
sqlExpectations: mockQueries(
|
||||
regexp.QuoteMeta(`SELECT COUNT(*) = 0`+
|
||||
` FROM projections.orgs`),
|
||||
regexp.QuoteMeta(prepareOrgUniqueStmt),
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
@@ -336,11 +299,8 @@ func Test_OrgPrepares(t *testing.T) {
|
||||
prepare: prepareOrgUniqueQuery,
|
||||
want: want{
|
||||
sqlExpectations: mockQuery(
|
||||
regexp.QuoteMeta(`SELECT COUNT(*) = 0`+
|
||||
` FROM projections.orgs`),
|
||||
[]string{
|
||||
"count",
|
||||
},
|
||||
regexp.QuoteMeta(prepareOrgUniqueStmt),
|
||||
prepareOrgUniqueCols,
|
||||
[]driver.Value{
|
||||
1,
|
||||
},
|
||||
@@ -353,8 +313,7 @@ func Test_OrgPrepares(t *testing.T) {
|
||||
prepare: prepareOrgUniqueQuery,
|
||||
want: want{
|
||||
sqlExpectations: mockQueryErr(
|
||||
regexp.QuoteMeta(`SELECT COUNT(*) = 0`+
|
||||
` FROM projections.orgs`),
|
||||
regexp.QuoteMeta(prepareOrgUniqueStmt),
|
||||
sql.ErrConnDone,
|
||||
),
|
||||
err: func(err error) (error, bool) {
|
||||
@@ -369,7 +328,7 @@ func Test_OrgPrepares(t *testing.T) {
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
assertPrepare(t, tt.prepare, tt.object, tt.want.sqlExpectations, tt.want.err)
|
||||
assertPrepare(t, tt.prepare, tt.object, tt.want.sqlExpectations, tt.want.err, defaultPrepareArgs...)
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -456,7 +415,10 @@ func TestQueries_IsOrgUnique(t *testing.T) {
|
||||
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
q := &Queries{
|
||||
client: client,
|
||||
client: &database.DB{
|
||||
DB: client,
|
||||
Database: new(prepareDB),
|
||||
},
|
||||
}
|
||||
|
||||
gotIsUnique, err := q.IsOrgUnique(context.Background(), tt.args.name, tt.args.domain)
|
||||
|
Reference in New Issue
Block a user