From 95672753652e8db171b2a8e8e39b63cea1775a0d Mon Sep 17 00:00:00 2001 From: Ryan McKinley Date: Mon, 19 Aug 2024 12:15:43 +0300 Subject: [PATCH] SQL: Add more legacy helpers (#92006) --- pkg/registry/apis/dashboard/legacy/queries.go | 18 +++ .../apis/dashboard/legacy/queries_test.go | 72 +++++------ .../dashboard/legacy/query_dashboards.sql | 18 +-- .../apis/dashboard/legacy/sql_dashboards.go | 37 ++---- pkg/registry/apis/dashboard/legacy/storage.go | 23 +++- .../mysql--query_dashboards-dashboard.sql | 16 +-- ...--query_dashboards-dashboard_next_page.sql | 16 +-- .../mysql--query_dashboards-history_uid.sql | 16 +-- ...uery_dashboards-history_uid_at_version.sql | 18 +-- ...ery_dashboards-history_uid_second_page.sql | 16 +-- .../postgres--query_dashboards-dashboard.sql | 16 +-- ...--query_dashboards-dashboard_next_page.sql | 16 +-- ...postgres--query_dashboards-history_uid.sql | 16 +-- ...uery_dashboards-history_uid_at_version.sql | 18 +-- ...ery_dashboards-history_uid_second_page.sql | 16 +-- .../sqlite--query_dashboards-dashboard.sql | 16 +-- ...--query_dashboards-dashboard_next_page.sql | 16 +-- .../sqlite--query_dashboards-history_uid.sql | 16 +-- ...uery_dashboards-history_uid_at_version.sql | 18 +-- ...ery_dashboards-history_uid_second_page.sql | 16 +-- pkg/registry/apis/dashboard/register.go | 4 +- .../apis/identity/legacy/legacy_sql.go | 93 ++++++-------- pkg/registry/apis/identity/legacy/queries.go | 38 +++++- .../apis/identity/legacy/queries_test.go | 120 +++++++++--------- .../apis/identity/legacy/query_display.sql | 6 +- .../apis/identity/legacy/query_teams.sql | 2 +- .../apis/identity/legacy/query_users.sql | 6 +- .../mysql--query_display-display_ids.sql | 6 +- .../mysql--query_display-display_ids_uids.sql | 6 +- .../mysql--query_display-display_uids.sql | 6 +- .../mysql--query_teams-teams_page_1.sql | 2 +- .../mysql--query_teams-teams_page_2.sql | 2 +- .../testdata/mysql--query_teams-teams_uid.sql | 2 +- .../mysql--query_users-users_page_1.sql | 6 +- .../mysql--query_users-users_page_2.sql | 6 +- .../testdata/mysql--query_users-users_uid.sql | 6 +- .../postgres--query_display-display_ids.sql | 6 +- ...stgres--query_display-display_ids_uids.sql | 6 +- .../postgres--query_display-display_uids.sql | 6 +- .../postgres--query_teams-teams_page_1.sql | 2 +- .../postgres--query_teams-teams_page_2.sql | 2 +- .../postgres--query_teams-teams_uid.sql | 2 +- .../postgres--query_users-users_page_1.sql | 6 +- .../postgres--query_users-users_page_2.sql | 6 +- .../postgres--query_users-users_uid.sql | 6 +- .../sqlite--query_display-display_ids.sql | 6 +- ...sqlite--query_display-display_ids_uids.sql | 6 +- .../sqlite--query_display-display_uids.sql | 6 +- .../sqlite--query_teams-teams_page_1.sql | 2 +- .../sqlite--query_teams-teams_page_2.sql | 2 +- .../sqlite--query_teams-teams_uid.sql | 2 +- .../sqlite--query_users-users_page_1.sql | 6 +- .../sqlite--query_users-users_page_2.sql | 6 +- .../sqlite--query_users-users_uid.sql | 6 +- pkg/registry/apis/identity/register.go | 10 +- pkg/storage/legacysql/db.go | 69 ++++++++++ pkg/storage/legacysql/rv.go | 51 -------- 57 files changed, 491 insertions(+), 448 deletions(-) create mode 100644 pkg/storage/legacysql/db.go delete mode 100644 pkg/storage/legacysql/rv.go diff --git a/pkg/registry/apis/dashboard/legacy/queries.go b/pkg/registry/apis/dashboard/legacy/queries.go index 38ebd4c67cd..6032e791b90 100644 --- a/pkg/registry/apis/dashboard/legacy/queries.go +++ b/pkg/registry/apis/dashboard/legacy/queries.go @@ -5,6 +5,7 @@ import ( "fmt" "text/template" + "github.com/grafana/grafana/pkg/storage/legacysql" "github.com/grafana/grafana/pkg/storage/unified/sql/sqltemplate" ) @@ -31,8 +32,25 @@ var ( type sqlQuery struct { sqltemplate.SQLTemplate Query *DashboardQuery + + DashboardTable string + VersionTable string + ProvisioningTable string + UserTable string } func (r sqlQuery) Validate() error { return nil // TODO } + +func newQueryReq(sql *legacysql.LegacyDatabaseHelper, query *DashboardQuery) sqlQuery { + return sqlQuery{ + SQLTemplate: sqltemplate.New(sql.DialectForDriver()), + Query: query, + + DashboardTable: sql.Table("dashboard"), + VersionTable: sql.Table("dashboard_version"), + ProvisioningTable: sql.Table("dashboard_provisioning"), + UserTable: sql.Table("user"), + } +} diff --git a/pkg/registry/apis/dashboard/legacy/queries_test.go b/pkg/registry/apis/dashboard/legacy/queries_test.go index 2978c506e26..5560cc4dd94 100644 --- a/pkg/registry/apis/dashboard/legacy/queries_test.go +++ b/pkg/registry/apis/dashboard/legacy/queries_test.go @@ -4,64 +4,64 @@ import ( "testing" "text/template" + "github.com/grafana/grafana/pkg/storage/legacysql" + "github.com/grafana/grafana/pkg/storage/unified/sql/sqltemplate" "github.com/grafana/grafana/pkg/storage/unified/sql/sqltemplate/mocks" ) func TestQueries(t *testing.T) { + // prefix tables with grafana + nodb := &legacysql.LegacyDatabaseHelper{ + Table: func(n string) string { + return "grafana." + n + }, + } + + getQuery := func(q *DashboardQuery) sqltemplate.SQLTemplate { + v := newQueryReq(nodb, q) + v.SQLTemplate = mocks.NewTestingSQLTemplate() + return &v + } + mocks.CheckQuerySnapshots(t, mocks.TemplateTestSetup{ RootDir: "testdata", Templates: map[*template.Template][]mocks.TemplateTestCase{ sqlQueryDashboards: { { Name: "history_uid", - Data: &sqlQuery{ - SQLTemplate: mocks.NewTestingSQLTemplate(), - Query: &DashboardQuery{ - OrgID: 2, - UID: "UUU", - }, - }, + Data: getQuery(&DashboardQuery{ + OrgID: 2, + UID: "UUU", + }), }, { Name: "history_uid_at_version", - Data: &sqlQuery{ - SQLTemplate: mocks.NewTestingSQLTemplate(), - Query: &DashboardQuery{ - OrgID: 2, - UID: "UUU", - Version: 3, - }, - }, + Data: getQuery(&DashboardQuery{ + OrgID: 2, + UID: "UUU", + Version: 3, + }), }, { Name: "history_uid_second_page", - Data: &sqlQuery{ - SQLTemplate: mocks.NewTestingSQLTemplate(), - Query: &DashboardQuery{ - OrgID: 2, - UID: "UUU", - LastID: 7, - }, - }, + Data: getQuery(&DashboardQuery{ + OrgID: 2, + UID: "UUU", + LastID: 7, + }), }, { Name: "dashboard", - Data: &sqlQuery{ - SQLTemplate: mocks.NewTestingSQLTemplate(), - Query: &DashboardQuery{ - OrgID: 2, - }, - }, + Data: getQuery(&DashboardQuery{ + OrgID: 2, + }), }, { Name: "dashboard_next_page", - Data: &sqlQuery{ - SQLTemplate: mocks.NewTestingSQLTemplate(), - Query: &DashboardQuery{ - OrgID: 2, - LastID: 22, - }, - }, + Data: getQuery(&DashboardQuery{ + OrgID: 2, + LastID: 22, + }), }, }, }, diff --git a/pkg/registry/apis/dashboard/legacy/query_dashboards.sql b/pkg/registry/apis/dashboard/legacy/query_dashboards.sql index 1d09adef307..594aedd9ce9 100644 --- a/pkg/registry/apis/dashboard/legacy/query_dashboards.sql +++ b/pkg/registry/apis/dashboard/legacy/query_dashboards.sql @@ -2,10 +2,10 @@ SELECT dashboard.org_id, dashboard.id, dashboard.uid, dashboard.folder_uid, dashboard.deleted, plugin_id, - dashboard_provisioning.name as origin_name, - dashboard_provisioning.external_id as origin_path, - dashboard_provisioning.check_sum as origin_key, - dashboard_provisioning.updated as origin_ts, + provisioning.name as origin_name, + provisioning.external_id as origin_path, + provisioning.check_sum as origin_key, + provisioning.updated as origin_ts, dashboard.created, created_user.uid as created_by, dashboard.created_by as created_by_id, {{ if .Query.UseHistoryTable }} dashboard_version.created, updated_user.uid as updated_by,updated_user.id as created_by_id, @@ -14,13 +14,13 @@ SELECT dashboard.updated, updated_user.uid as updated_by, dashboard.updated_by as updated_by_id, dashboard.version, '' as message, dashboard.data {{ end }} - FROM dashboard + FROM {{ .Ident .DashboardTable }} as dashboard {{ if .Query.UseHistoryTable }} - LEFT OUTER JOIN dashboard_version ON dashboard.id = dashboard_version.dashboard_id + LEFT OUTER JOIN {{ .Ident .VersionTable }} as dashboard_version ON dashboard.id = dashboard_version.dashboard_id {{ end }} - LEFT OUTER JOIN dashboard_provisioning ON dashboard.id = dashboard_provisioning.dashboard_id - LEFT OUTER JOIN {{ .Ident "user" }} AS created_user ON dashboard.created_by = created_user.id - LEFT OUTER JOIN {{ .Ident "user" }} AS updated_user ON dashboard.updated_by = updated_user.id + LEFT OUTER JOIN {{ .Ident .ProvisioningTable }} as provisioning ON dashboard.id = provisioning.dashboard_id + LEFT OUTER JOIN {{ .Ident .UserTable }} as created_user ON dashboard.created_by = created_user.id + LEFT OUTER JOIN {{ .Ident .UserTable }} as updated_user ON dashboard.updated_by = updated_user.id WHERE dashboard.is_folder = false AND dashboard.org_id = {{ .Arg .Query.OrgID }} {{ if .Query.UseHistoryTable }} diff --git a/pkg/registry/apis/dashboard/legacy/sql_dashboards.go b/pkg/registry/apis/dashboard/legacy/sql_dashboards.go index 93e6bbd401a..b47a952d0c4 100644 --- a/pkg/registry/apis/dashboard/legacy/sql_dashboards.go +++ b/pkg/registry/apis/dashboard/legacy/sql_dashboards.go @@ -14,7 +14,6 @@ import ( "github.com/grafana/grafana/pkg/apimachinery/utils" dashboardsV0 "github.com/grafana/grafana/pkg/apis/dashboard/v0alpha1" "github.com/grafana/grafana/pkg/components/simplejson" - "github.com/grafana/grafana/pkg/infra/db" "github.com/grafana/grafana/pkg/services/apiserver/endpoints/request" gapiutil "github.com/grafana/grafana/pkg/services/apiserver/utils" "github.com/grafana/grafana/pkg/services/dashboards" @@ -46,43 +45,32 @@ type dashboardRow struct { } type dashboardSqlAccess struct { - sql legacysql.NamespacedDBProvider - dialect sqltemplate.Dialect + sql legacysql.LegacyDatabaseProvider namespacer request.NamespaceMapper - dashStore dashboards.Store provisioning provisioning.ProvisioningService - currentRV legacysql.ResourceVersionLookup + + // Use for writing (not reading) + dashStore dashboards.Store // Typically one... the server wrapper subscribers []chan *resource.WrittenEvent mutex sync.Mutex } -func NewDashboardAccess(sql db.DB, +func NewDashboardAccess(sql legacysql.LegacyDatabaseProvider, namespacer request.NamespaceMapper, dashStore dashboards.Store, provisioning provisioning.ProvisioningService, ) DashboardAccess { - dialect := sqltemplate.DialectForDriver(string(sql.GetDBType())) - if dialect == nil { - // panic? - // fmt.Errorf("no dialect for driver %q", driverName) - fmt.Printf("ERROR: NO DIALECT") - } - - nssql := func(ctx context.Context) (db.DB, error) { return sql, nil } - return &dashboardSqlAccess{ - sql: nssql, - dialect: dialect, + sql: sql, namespacer: namespacer, dashStore: dashStore, provisioning: provisioning, - currentRV: legacysql.GetResourceVersionLookup(nssql, "dashboard", "updated"), } } -func (a *dashboardSqlAccess) getRows(ctx context.Context, query *DashboardQuery) (*rowsWrapper, error) { +func (a *dashboardSqlAccess) getRows(ctx context.Context, sql *legacysql.LegacyDatabaseHelper, query *DashboardQuery) (*rowsWrapper, error) { if len(query.Labels) > 0 { return nil, fmt.Errorf("labels not yet supported") // if query.Requirements.Folder != nil { @@ -91,10 +79,7 @@ func (a *dashboardSqlAccess) getRows(ctx context.Context, query *DashboardQuery) // } } - req := sqlQuery{ - SQLTemplate: sqltemplate.New(a.dialect), - Query: query, - } + req := newQueryReq(sql, query) tmpl := sqlQueryDashboards if query.UseHistoryTable() && query.GetTrash { @@ -109,11 +94,7 @@ func (a *dashboardSqlAccess) getRows(ctx context.Context, query *DashboardQuery) // q = sqltemplate.RemoveEmptyLines(rawQuery) // fmt.Printf(">>%s [%+v]", q, req.GetArgs()) - db, err := a.sql(ctx) - if err != nil { - return nil, err - } - rows, err := db.GetSqlxSession().Query(ctx, q, req.GetArgs()...) + rows, err := sql.DB.GetSqlxSession().Query(ctx, q, req.GetArgs()...) if err != nil { if rows != nil { _ = rows.Close() diff --git a/pkg/registry/apis/dashboard/legacy/storage.go b/pkg/registry/apis/dashboard/legacy/storage.go index f42a41b666c..03cf09e225d 100644 --- a/pkg/registry/apis/dashboard/legacy/storage.go +++ b/pkg/registry/apis/dashboard/legacy/storage.go @@ -102,7 +102,12 @@ func (a *dashboardSqlAccess) WriteEvent(ctx context.Context, event resource.Writ } func (a *dashboardSqlAccess) GetDashboard(ctx context.Context, orgId int64, uid string, v int64) (*dashboard.Dashboard, int64, error) { - rows, err := a.getRows(ctx, &DashboardQuery{ + sql, err := a.sql(ctx) + if err != nil { + return nil, 0, err + } + + rows, err := a.getRows(ctx, sql, &DashboardQuery{ OrgID: orgId, UID: uid, Limit: 2, // will only be one! @@ -183,11 +188,16 @@ func (a *dashboardSqlAccess) ListIterator(ctx context.Context, req *resource.Lis Labels: req.Options.Labels, } - listRV, err := a.currentRV(ctx) + sql, err := a.sql(ctx) if err != nil { return 0, err } - rows, err := a.getRows(ctx, query) + + listRV, err := sql.GetResourceVersion(ctx, "dashboard", "updated") + if err != nil { + return 0, err + } + rows, err := a.getRows(ctx, sql, query) if rows != nil { defer func() { _ = rows.Close() @@ -268,7 +278,12 @@ func (a *dashboardSqlAccess) History(ctx context.Context, req *resource.HistoryR query.GetHistory = true } - rows, err := a.getRows(ctx, query) + sql, err := a.sql(ctx) + if err != nil { + return nil, err + } + + rows, err := a.getRows(ctx, sql, query) if err != nil { return nil, err } diff --git a/pkg/registry/apis/dashboard/legacy/testdata/mysql--query_dashboards-dashboard.sql b/pkg/registry/apis/dashboard/legacy/testdata/mysql--query_dashboards-dashboard.sql index c5da8ec1fea..c93f8d09a95 100755 --- a/pkg/registry/apis/dashboard/legacy/testdata/mysql--query_dashboards-dashboard.sql +++ b/pkg/registry/apis/dashboard/legacy/testdata/mysql--query_dashboards-dashboard.sql @@ -2,17 +2,17 @@ SELECT dashboard.org_id, dashboard.id, dashboard.uid, dashboard.folder_uid, dashboard.deleted, plugin_id, - dashboard_provisioning.name as origin_name, - dashboard_provisioning.external_id as origin_path, - dashboard_provisioning.check_sum as origin_key, - dashboard_provisioning.updated as origin_ts, + provisioning.name as origin_name, + provisioning.external_id as origin_path, + provisioning.check_sum as origin_key, + provisioning.updated as origin_ts, dashboard.created, created_user.uid as created_by, dashboard.created_by as created_by_id, dashboard.updated, updated_user.uid as updated_by, dashboard.updated_by as updated_by_id, dashboard.version, '' as message, dashboard.data - FROM dashboard - LEFT OUTER JOIN dashboard_provisioning ON dashboard.id = dashboard_provisioning.dashboard_id - LEFT OUTER JOIN `user` AS created_user ON dashboard.created_by = created_user.id - LEFT OUTER JOIN `user` AS updated_user ON dashboard.updated_by = updated_user.id + FROM "grafana.dashboard" as dashboard + LEFT OUTER JOIN "grafana.dashboard_provisioning" as provisioning ON dashboard.id = provisioning.dashboard_id + LEFT OUTER JOIN "grafana.user" as created_user ON dashboard.created_by = created_user.id + LEFT OUTER JOIN "grafana.user" as updated_user ON dashboard.updated_by = updated_user.id WHERE dashboard.is_folder = false AND dashboard.org_id = 2 ORDER BY dashboard.id DESC diff --git a/pkg/registry/apis/dashboard/legacy/testdata/mysql--query_dashboards-dashboard_next_page.sql b/pkg/registry/apis/dashboard/legacy/testdata/mysql--query_dashboards-dashboard_next_page.sql index 0fc8146965f..9e475b052f0 100755 --- a/pkg/registry/apis/dashboard/legacy/testdata/mysql--query_dashboards-dashboard_next_page.sql +++ b/pkg/registry/apis/dashboard/legacy/testdata/mysql--query_dashboards-dashboard_next_page.sql @@ -2,17 +2,17 @@ SELECT dashboard.org_id, dashboard.id, dashboard.uid, dashboard.folder_uid, dashboard.deleted, plugin_id, - dashboard_provisioning.name as origin_name, - dashboard_provisioning.external_id as origin_path, - dashboard_provisioning.check_sum as origin_key, - dashboard_provisioning.updated as origin_ts, + provisioning.name as origin_name, + provisioning.external_id as origin_path, + provisioning.check_sum as origin_key, + provisioning.updated as origin_ts, dashboard.created, created_user.uid as created_by, dashboard.created_by as created_by_id, dashboard.updated, updated_user.uid as updated_by, dashboard.updated_by as updated_by_id, dashboard.version, '' as message, dashboard.data - FROM dashboard - LEFT OUTER JOIN dashboard_provisioning ON dashboard.id = dashboard_provisioning.dashboard_id - LEFT OUTER JOIN `user` AS created_user ON dashboard.created_by = created_user.id - LEFT OUTER JOIN `user` AS updated_user ON dashboard.updated_by = updated_user.id + FROM "grafana.dashboard" as dashboard + LEFT OUTER JOIN "grafana.dashboard_provisioning" as provisioning ON dashboard.id = provisioning.dashboard_id + LEFT OUTER JOIN "grafana.user" as created_user ON dashboard.created_by = created_user.id + LEFT OUTER JOIN "grafana.user" as updated_user ON dashboard.updated_by = updated_user.id WHERE dashboard.is_folder = false AND dashboard.org_id = 2 AND dashboard.id > 22 diff --git a/pkg/registry/apis/dashboard/legacy/testdata/mysql--query_dashboards-history_uid.sql b/pkg/registry/apis/dashboard/legacy/testdata/mysql--query_dashboards-history_uid.sql index c2385d49c1d..f0dce1ffa9b 100755 --- a/pkg/registry/apis/dashboard/legacy/testdata/mysql--query_dashboards-history_uid.sql +++ b/pkg/registry/apis/dashboard/legacy/testdata/mysql--query_dashboards-history_uid.sql @@ -2,17 +2,17 @@ SELECT dashboard.org_id, dashboard.id, dashboard.uid, dashboard.folder_uid, dashboard.deleted, plugin_id, - dashboard_provisioning.name as origin_name, - dashboard_provisioning.external_id as origin_path, - dashboard_provisioning.check_sum as origin_key, - dashboard_provisioning.updated as origin_ts, + provisioning.name as origin_name, + provisioning.external_id as origin_path, + provisioning.check_sum as origin_key, + provisioning.updated as origin_ts, dashboard.created, created_user.uid as created_by, dashboard.created_by as created_by_id, dashboard.updated, updated_user.uid as updated_by, dashboard.updated_by as updated_by_id, dashboard.version, '' as message, dashboard.data - FROM dashboard - LEFT OUTER JOIN dashboard_provisioning ON dashboard.id = dashboard_provisioning.dashboard_id - LEFT OUTER JOIN `user` AS created_user ON dashboard.created_by = created_user.id - LEFT OUTER JOIN `user` AS updated_user ON dashboard.updated_by = updated_user.id + FROM "grafana.dashboard" as dashboard + LEFT OUTER JOIN "grafana.dashboard_provisioning" as provisioning ON dashboard.id = provisioning.dashboard_id + LEFT OUTER JOIN "grafana.user" as created_user ON dashboard.created_by = created_user.id + LEFT OUTER JOIN "grafana.user" as updated_user ON dashboard.updated_by = updated_user.id WHERE dashboard.is_folder = false AND dashboard.org_id = 2 AND dashboard.uid = 'UUU' diff --git a/pkg/registry/apis/dashboard/legacy/testdata/mysql--query_dashboards-history_uid_at_version.sql b/pkg/registry/apis/dashboard/legacy/testdata/mysql--query_dashboards-history_uid_at_version.sql index 93be3353bc8..db81b1d9d8f 100755 --- a/pkg/registry/apis/dashboard/legacy/testdata/mysql--query_dashboards-history_uid_at_version.sql +++ b/pkg/registry/apis/dashboard/legacy/testdata/mysql--query_dashboards-history_uid_at_version.sql @@ -2,18 +2,18 @@ SELECT dashboard.org_id, dashboard.id, dashboard.uid, dashboard.folder_uid, dashboard.deleted, plugin_id, - dashboard_provisioning.name as origin_name, - dashboard_provisioning.external_id as origin_path, - dashboard_provisioning.check_sum as origin_key, - dashboard_provisioning.updated as origin_ts, + provisioning.name as origin_name, + provisioning.external_id as origin_path, + provisioning.check_sum as origin_key, + provisioning.updated as origin_ts, dashboard.created, created_user.uid as created_by, dashboard.created_by as created_by_id, dashboard_version.created, updated_user.uid as updated_by,updated_user.id as created_by_id, dashboard_version.version, dashboard_version.message, dashboard_version.data - FROM dashboard - LEFT OUTER JOIN dashboard_version ON dashboard.id = dashboard_version.dashboard_id - LEFT OUTER JOIN dashboard_provisioning ON dashboard.id = dashboard_provisioning.dashboard_id - LEFT OUTER JOIN `user` AS created_user ON dashboard.created_by = created_user.id - LEFT OUTER JOIN `user` AS updated_user ON dashboard.updated_by = updated_user.id + FROM "grafana.dashboard" as dashboard + LEFT OUTER JOIN "grafana.dashboard_version" as dashboard_version ON dashboard.id = dashboard_version.dashboard_id + LEFT OUTER JOIN "grafana.dashboard_provisioning" as provisioning ON dashboard.id = provisioning.dashboard_id + LEFT OUTER JOIN "grafana.user" as created_user ON dashboard.created_by = created_user.id + LEFT OUTER JOIN "grafana.user" as updated_user ON dashboard.updated_by = updated_user.id WHERE dashboard.is_folder = false AND dashboard.org_id = 2 AND dashboard_version.version = 3 diff --git a/pkg/registry/apis/dashboard/legacy/testdata/mysql--query_dashboards-history_uid_second_page.sql b/pkg/registry/apis/dashboard/legacy/testdata/mysql--query_dashboards-history_uid_second_page.sql index dcdfa47e3f7..47319aa715a 100755 --- a/pkg/registry/apis/dashboard/legacy/testdata/mysql--query_dashboards-history_uid_second_page.sql +++ b/pkg/registry/apis/dashboard/legacy/testdata/mysql--query_dashboards-history_uid_second_page.sql @@ -2,17 +2,17 @@ SELECT dashboard.org_id, dashboard.id, dashboard.uid, dashboard.folder_uid, dashboard.deleted, plugin_id, - dashboard_provisioning.name as origin_name, - dashboard_provisioning.external_id as origin_path, - dashboard_provisioning.check_sum as origin_key, - dashboard_provisioning.updated as origin_ts, + provisioning.name as origin_name, + provisioning.external_id as origin_path, + provisioning.check_sum as origin_key, + provisioning.updated as origin_ts, dashboard.created, created_user.uid as created_by, dashboard.created_by as created_by_id, dashboard.updated, updated_user.uid as updated_by, dashboard.updated_by as updated_by_id, dashboard.version, '' as message, dashboard.data - FROM dashboard - LEFT OUTER JOIN dashboard_provisioning ON dashboard.id = dashboard_provisioning.dashboard_id - LEFT OUTER JOIN `user` AS created_user ON dashboard.created_by = created_user.id - LEFT OUTER JOIN `user` AS updated_user ON dashboard.updated_by = updated_user.id + FROM "grafana.dashboard" as dashboard + LEFT OUTER JOIN "grafana.dashboard_provisioning" as provisioning ON dashboard.id = provisioning.dashboard_id + LEFT OUTER JOIN "grafana.user" as created_user ON dashboard.created_by = created_user.id + LEFT OUTER JOIN "grafana.user" as updated_user ON dashboard.updated_by = updated_user.id WHERE dashboard.is_folder = false AND dashboard.org_id = 2 AND dashboard.uid = 'UUU' diff --git a/pkg/registry/apis/dashboard/legacy/testdata/postgres--query_dashboards-dashboard.sql b/pkg/registry/apis/dashboard/legacy/testdata/postgres--query_dashboards-dashboard.sql index 64a659963b8..c93f8d09a95 100755 --- a/pkg/registry/apis/dashboard/legacy/testdata/postgres--query_dashboards-dashboard.sql +++ b/pkg/registry/apis/dashboard/legacy/testdata/postgres--query_dashboards-dashboard.sql @@ -2,17 +2,17 @@ SELECT dashboard.org_id, dashboard.id, dashboard.uid, dashboard.folder_uid, dashboard.deleted, plugin_id, - dashboard_provisioning.name as origin_name, - dashboard_provisioning.external_id as origin_path, - dashboard_provisioning.check_sum as origin_key, - dashboard_provisioning.updated as origin_ts, + provisioning.name as origin_name, + provisioning.external_id as origin_path, + provisioning.check_sum as origin_key, + provisioning.updated as origin_ts, dashboard.created, created_user.uid as created_by, dashboard.created_by as created_by_id, dashboard.updated, updated_user.uid as updated_by, dashboard.updated_by as updated_by_id, dashboard.version, '' as message, dashboard.data - FROM dashboard - LEFT OUTER JOIN dashboard_provisioning ON dashboard.id = dashboard_provisioning.dashboard_id - LEFT OUTER JOIN "user" AS created_user ON dashboard.created_by = created_user.id - LEFT OUTER JOIN "user" AS updated_user ON dashboard.updated_by = updated_user.id + FROM "grafana.dashboard" as dashboard + LEFT OUTER JOIN "grafana.dashboard_provisioning" as provisioning ON dashboard.id = provisioning.dashboard_id + LEFT OUTER JOIN "grafana.user" as created_user ON dashboard.created_by = created_user.id + LEFT OUTER JOIN "grafana.user" as updated_user ON dashboard.updated_by = updated_user.id WHERE dashboard.is_folder = false AND dashboard.org_id = 2 ORDER BY dashboard.id DESC diff --git a/pkg/registry/apis/dashboard/legacy/testdata/postgres--query_dashboards-dashboard_next_page.sql b/pkg/registry/apis/dashboard/legacy/testdata/postgres--query_dashboards-dashboard_next_page.sql index cda07bd2fd5..9e475b052f0 100755 --- a/pkg/registry/apis/dashboard/legacy/testdata/postgres--query_dashboards-dashboard_next_page.sql +++ b/pkg/registry/apis/dashboard/legacy/testdata/postgres--query_dashboards-dashboard_next_page.sql @@ -2,17 +2,17 @@ SELECT dashboard.org_id, dashboard.id, dashboard.uid, dashboard.folder_uid, dashboard.deleted, plugin_id, - dashboard_provisioning.name as origin_name, - dashboard_provisioning.external_id as origin_path, - dashboard_provisioning.check_sum as origin_key, - dashboard_provisioning.updated as origin_ts, + provisioning.name as origin_name, + provisioning.external_id as origin_path, + provisioning.check_sum as origin_key, + provisioning.updated as origin_ts, dashboard.created, created_user.uid as created_by, dashboard.created_by as created_by_id, dashboard.updated, updated_user.uid as updated_by, dashboard.updated_by as updated_by_id, dashboard.version, '' as message, dashboard.data - FROM dashboard - LEFT OUTER JOIN dashboard_provisioning ON dashboard.id = dashboard_provisioning.dashboard_id - LEFT OUTER JOIN "user" AS created_user ON dashboard.created_by = created_user.id - LEFT OUTER JOIN "user" AS updated_user ON dashboard.updated_by = updated_user.id + FROM "grafana.dashboard" as dashboard + LEFT OUTER JOIN "grafana.dashboard_provisioning" as provisioning ON dashboard.id = provisioning.dashboard_id + LEFT OUTER JOIN "grafana.user" as created_user ON dashboard.created_by = created_user.id + LEFT OUTER JOIN "grafana.user" as updated_user ON dashboard.updated_by = updated_user.id WHERE dashboard.is_folder = false AND dashboard.org_id = 2 AND dashboard.id > 22 diff --git a/pkg/registry/apis/dashboard/legacy/testdata/postgres--query_dashboards-history_uid.sql b/pkg/registry/apis/dashboard/legacy/testdata/postgres--query_dashboards-history_uid.sql index 71f0756bb3f..f0dce1ffa9b 100755 --- a/pkg/registry/apis/dashboard/legacy/testdata/postgres--query_dashboards-history_uid.sql +++ b/pkg/registry/apis/dashboard/legacy/testdata/postgres--query_dashboards-history_uid.sql @@ -2,17 +2,17 @@ SELECT dashboard.org_id, dashboard.id, dashboard.uid, dashboard.folder_uid, dashboard.deleted, plugin_id, - dashboard_provisioning.name as origin_name, - dashboard_provisioning.external_id as origin_path, - dashboard_provisioning.check_sum as origin_key, - dashboard_provisioning.updated as origin_ts, + provisioning.name as origin_name, + provisioning.external_id as origin_path, + provisioning.check_sum as origin_key, + provisioning.updated as origin_ts, dashboard.created, created_user.uid as created_by, dashboard.created_by as created_by_id, dashboard.updated, updated_user.uid as updated_by, dashboard.updated_by as updated_by_id, dashboard.version, '' as message, dashboard.data - FROM dashboard - LEFT OUTER JOIN dashboard_provisioning ON dashboard.id = dashboard_provisioning.dashboard_id - LEFT OUTER JOIN "user" AS created_user ON dashboard.created_by = created_user.id - LEFT OUTER JOIN "user" AS updated_user ON dashboard.updated_by = updated_user.id + FROM "grafana.dashboard" as dashboard + LEFT OUTER JOIN "grafana.dashboard_provisioning" as provisioning ON dashboard.id = provisioning.dashboard_id + LEFT OUTER JOIN "grafana.user" as created_user ON dashboard.created_by = created_user.id + LEFT OUTER JOIN "grafana.user" as updated_user ON dashboard.updated_by = updated_user.id WHERE dashboard.is_folder = false AND dashboard.org_id = 2 AND dashboard.uid = 'UUU' diff --git a/pkg/registry/apis/dashboard/legacy/testdata/postgres--query_dashboards-history_uid_at_version.sql b/pkg/registry/apis/dashboard/legacy/testdata/postgres--query_dashboards-history_uid_at_version.sql index 002d1e9fdae..db81b1d9d8f 100755 --- a/pkg/registry/apis/dashboard/legacy/testdata/postgres--query_dashboards-history_uid_at_version.sql +++ b/pkg/registry/apis/dashboard/legacy/testdata/postgres--query_dashboards-history_uid_at_version.sql @@ -2,18 +2,18 @@ SELECT dashboard.org_id, dashboard.id, dashboard.uid, dashboard.folder_uid, dashboard.deleted, plugin_id, - dashboard_provisioning.name as origin_name, - dashboard_provisioning.external_id as origin_path, - dashboard_provisioning.check_sum as origin_key, - dashboard_provisioning.updated as origin_ts, + provisioning.name as origin_name, + provisioning.external_id as origin_path, + provisioning.check_sum as origin_key, + provisioning.updated as origin_ts, dashboard.created, created_user.uid as created_by, dashboard.created_by as created_by_id, dashboard_version.created, updated_user.uid as updated_by,updated_user.id as created_by_id, dashboard_version.version, dashboard_version.message, dashboard_version.data - FROM dashboard - LEFT OUTER JOIN dashboard_version ON dashboard.id = dashboard_version.dashboard_id - LEFT OUTER JOIN dashboard_provisioning ON dashboard.id = dashboard_provisioning.dashboard_id - LEFT OUTER JOIN "user" AS created_user ON dashboard.created_by = created_user.id - LEFT OUTER JOIN "user" AS updated_user ON dashboard.updated_by = updated_user.id + FROM "grafana.dashboard" as dashboard + LEFT OUTER JOIN "grafana.dashboard_version" as dashboard_version ON dashboard.id = dashboard_version.dashboard_id + LEFT OUTER JOIN "grafana.dashboard_provisioning" as provisioning ON dashboard.id = provisioning.dashboard_id + LEFT OUTER JOIN "grafana.user" as created_user ON dashboard.created_by = created_user.id + LEFT OUTER JOIN "grafana.user" as updated_user ON dashboard.updated_by = updated_user.id WHERE dashboard.is_folder = false AND dashboard.org_id = 2 AND dashboard_version.version = 3 diff --git a/pkg/registry/apis/dashboard/legacy/testdata/postgres--query_dashboards-history_uid_second_page.sql b/pkg/registry/apis/dashboard/legacy/testdata/postgres--query_dashboards-history_uid_second_page.sql index f28d6fac178..47319aa715a 100755 --- a/pkg/registry/apis/dashboard/legacy/testdata/postgres--query_dashboards-history_uid_second_page.sql +++ b/pkg/registry/apis/dashboard/legacy/testdata/postgres--query_dashboards-history_uid_second_page.sql @@ -2,17 +2,17 @@ SELECT dashboard.org_id, dashboard.id, dashboard.uid, dashboard.folder_uid, dashboard.deleted, plugin_id, - dashboard_provisioning.name as origin_name, - dashboard_provisioning.external_id as origin_path, - dashboard_provisioning.check_sum as origin_key, - dashboard_provisioning.updated as origin_ts, + provisioning.name as origin_name, + provisioning.external_id as origin_path, + provisioning.check_sum as origin_key, + provisioning.updated as origin_ts, dashboard.created, created_user.uid as created_by, dashboard.created_by as created_by_id, dashboard.updated, updated_user.uid as updated_by, dashboard.updated_by as updated_by_id, dashboard.version, '' as message, dashboard.data - FROM dashboard - LEFT OUTER JOIN dashboard_provisioning ON dashboard.id = dashboard_provisioning.dashboard_id - LEFT OUTER JOIN "user" AS created_user ON dashboard.created_by = created_user.id - LEFT OUTER JOIN "user" AS updated_user ON dashboard.updated_by = updated_user.id + FROM "grafana.dashboard" as dashboard + LEFT OUTER JOIN "grafana.dashboard_provisioning" as provisioning ON dashboard.id = provisioning.dashboard_id + LEFT OUTER JOIN "grafana.user" as created_user ON dashboard.created_by = created_user.id + LEFT OUTER JOIN "grafana.user" as updated_user ON dashboard.updated_by = updated_user.id WHERE dashboard.is_folder = false AND dashboard.org_id = 2 AND dashboard.uid = 'UUU' diff --git a/pkg/registry/apis/dashboard/legacy/testdata/sqlite--query_dashboards-dashboard.sql b/pkg/registry/apis/dashboard/legacy/testdata/sqlite--query_dashboards-dashboard.sql index 64a659963b8..c93f8d09a95 100755 --- a/pkg/registry/apis/dashboard/legacy/testdata/sqlite--query_dashboards-dashboard.sql +++ b/pkg/registry/apis/dashboard/legacy/testdata/sqlite--query_dashboards-dashboard.sql @@ -2,17 +2,17 @@ SELECT dashboard.org_id, dashboard.id, dashboard.uid, dashboard.folder_uid, dashboard.deleted, plugin_id, - dashboard_provisioning.name as origin_name, - dashboard_provisioning.external_id as origin_path, - dashboard_provisioning.check_sum as origin_key, - dashboard_provisioning.updated as origin_ts, + provisioning.name as origin_name, + provisioning.external_id as origin_path, + provisioning.check_sum as origin_key, + provisioning.updated as origin_ts, dashboard.created, created_user.uid as created_by, dashboard.created_by as created_by_id, dashboard.updated, updated_user.uid as updated_by, dashboard.updated_by as updated_by_id, dashboard.version, '' as message, dashboard.data - FROM dashboard - LEFT OUTER JOIN dashboard_provisioning ON dashboard.id = dashboard_provisioning.dashboard_id - LEFT OUTER JOIN "user" AS created_user ON dashboard.created_by = created_user.id - LEFT OUTER JOIN "user" AS updated_user ON dashboard.updated_by = updated_user.id + FROM "grafana.dashboard" as dashboard + LEFT OUTER JOIN "grafana.dashboard_provisioning" as provisioning ON dashboard.id = provisioning.dashboard_id + LEFT OUTER JOIN "grafana.user" as created_user ON dashboard.created_by = created_user.id + LEFT OUTER JOIN "grafana.user" as updated_user ON dashboard.updated_by = updated_user.id WHERE dashboard.is_folder = false AND dashboard.org_id = 2 ORDER BY dashboard.id DESC diff --git a/pkg/registry/apis/dashboard/legacy/testdata/sqlite--query_dashboards-dashboard_next_page.sql b/pkg/registry/apis/dashboard/legacy/testdata/sqlite--query_dashboards-dashboard_next_page.sql index cda07bd2fd5..9e475b052f0 100755 --- a/pkg/registry/apis/dashboard/legacy/testdata/sqlite--query_dashboards-dashboard_next_page.sql +++ b/pkg/registry/apis/dashboard/legacy/testdata/sqlite--query_dashboards-dashboard_next_page.sql @@ -2,17 +2,17 @@ SELECT dashboard.org_id, dashboard.id, dashboard.uid, dashboard.folder_uid, dashboard.deleted, plugin_id, - dashboard_provisioning.name as origin_name, - dashboard_provisioning.external_id as origin_path, - dashboard_provisioning.check_sum as origin_key, - dashboard_provisioning.updated as origin_ts, + provisioning.name as origin_name, + provisioning.external_id as origin_path, + provisioning.check_sum as origin_key, + provisioning.updated as origin_ts, dashboard.created, created_user.uid as created_by, dashboard.created_by as created_by_id, dashboard.updated, updated_user.uid as updated_by, dashboard.updated_by as updated_by_id, dashboard.version, '' as message, dashboard.data - FROM dashboard - LEFT OUTER JOIN dashboard_provisioning ON dashboard.id = dashboard_provisioning.dashboard_id - LEFT OUTER JOIN "user" AS created_user ON dashboard.created_by = created_user.id - LEFT OUTER JOIN "user" AS updated_user ON dashboard.updated_by = updated_user.id + FROM "grafana.dashboard" as dashboard + LEFT OUTER JOIN "grafana.dashboard_provisioning" as provisioning ON dashboard.id = provisioning.dashboard_id + LEFT OUTER JOIN "grafana.user" as created_user ON dashboard.created_by = created_user.id + LEFT OUTER JOIN "grafana.user" as updated_user ON dashboard.updated_by = updated_user.id WHERE dashboard.is_folder = false AND dashboard.org_id = 2 AND dashboard.id > 22 diff --git a/pkg/registry/apis/dashboard/legacy/testdata/sqlite--query_dashboards-history_uid.sql b/pkg/registry/apis/dashboard/legacy/testdata/sqlite--query_dashboards-history_uid.sql index 71f0756bb3f..f0dce1ffa9b 100755 --- a/pkg/registry/apis/dashboard/legacy/testdata/sqlite--query_dashboards-history_uid.sql +++ b/pkg/registry/apis/dashboard/legacy/testdata/sqlite--query_dashboards-history_uid.sql @@ -2,17 +2,17 @@ SELECT dashboard.org_id, dashboard.id, dashboard.uid, dashboard.folder_uid, dashboard.deleted, plugin_id, - dashboard_provisioning.name as origin_name, - dashboard_provisioning.external_id as origin_path, - dashboard_provisioning.check_sum as origin_key, - dashboard_provisioning.updated as origin_ts, + provisioning.name as origin_name, + provisioning.external_id as origin_path, + provisioning.check_sum as origin_key, + provisioning.updated as origin_ts, dashboard.created, created_user.uid as created_by, dashboard.created_by as created_by_id, dashboard.updated, updated_user.uid as updated_by, dashboard.updated_by as updated_by_id, dashboard.version, '' as message, dashboard.data - FROM dashboard - LEFT OUTER JOIN dashboard_provisioning ON dashboard.id = dashboard_provisioning.dashboard_id - LEFT OUTER JOIN "user" AS created_user ON dashboard.created_by = created_user.id - LEFT OUTER JOIN "user" AS updated_user ON dashboard.updated_by = updated_user.id + FROM "grafana.dashboard" as dashboard + LEFT OUTER JOIN "grafana.dashboard_provisioning" as provisioning ON dashboard.id = provisioning.dashboard_id + LEFT OUTER JOIN "grafana.user" as created_user ON dashboard.created_by = created_user.id + LEFT OUTER JOIN "grafana.user" as updated_user ON dashboard.updated_by = updated_user.id WHERE dashboard.is_folder = false AND dashboard.org_id = 2 AND dashboard.uid = 'UUU' diff --git a/pkg/registry/apis/dashboard/legacy/testdata/sqlite--query_dashboards-history_uid_at_version.sql b/pkg/registry/apis/dashboard/legacy/testdata/sqlite--query_dashboards-history_uid_at_version.sql index 002d1e9fdae..db81b1d9d8f 100755 --- a/pkg/registry/apis/dashboard/legacy/testdata/sqlite--query_dashboards-history_uid_at_version.sql +++ b/pkg/registry/apis/dashboard/legacy/testdata/sqlite--query_dashboards-history_uid_at_version.sql @@ -2,18 +2,18 @@ SELECT dashboard.org_id, dashboard.id, dashboard.uid, dashboard.folder_uid, dashboard.deleted, plugin_id, - dashboard_provisioning.name as origin_name, - dashboard_provisioning.external_id as origin_path, - dashboard_provisioning.check_sum as origin_key, - dashboard_provisioning.updated as origin_ts, + provisioning.name as origin_name, + provisioning.external_id as origin_path, + provisioning.check_sum as origin_key, + provisioning.updated as origin_ts, dashboard.created, created_user.uid as created_by, dashboard.created_by as created_by_id, dashboard_version.created, updated_user.uid as updated_by,updated_user.id as created_by_id, dashboard_version.version, dashboard_version.message, dashboard_version.data - FROM dashboard - LEFT OUTER JOIN dashboard_version ON dashboard.id = dashboard_version.dashboard_id - LEFT OUTER JOIN dashboard_provisioning ON dashboard.id = dashboard_provisioning.dashboard_id - LEFT OUTER JOIN "user" AS created_user ON dashboard.created_by = created_user.id - LEFT OUTER JOIN "user" AS updated_user ON dashboard.updated_by = updated_user.id + FROM "grafana.dashboard" as dashboard + LEFT OUTER JOIN "grafana.dashboard_version" as dashboard_version ON dashboard.id = dashboard_version.dashboard_id + LEFT OUTER JOIN "grafana.dashboard_provisioning" as provisioning ON dashboard.id = provisioning.dashboard_id + LEFT OUTER JOIN "grafana.user" as created_user ON dashboard.created_by = created_user.id + LEFT OUTER JOIN "grafana.user" as updated_user ON dashboard.updated_by = updated_user.id WHERE dashboard.is_folder = false AND dashboard.org_id = 2 AND dashboard_version.version = 3 diff --git a/pkg/registry/apis/dashboard/legacy/testdata/sqlite--query_dashboards-history_uid_second_page.sql b/pkg/registry/apis/dashboard/legacy/testdata/sqlite--query_dashboards-history_uid_second_page.sql index f28d6fac178..47319aa715a 100755 --- a/pkg/registry/apis/dashboard/legacy/testdata/sqlite--query_dashboards-history_uid_second_page.sql +++ b/pkg/registry/apis/dashboard/legacy/testdata/sqlite--query_dashboards-history_uid_second_page.sql @@ -2,17 +2,17 @@ SELECT dashboard.org_id, dashboard.id, dashboard.uid, dashboard.folder_uid, dashboard.deleted, plugin_id, - dashboard_provisioning.name as origin_name, - dashboard_provisioning.external_id as origin_path, - dashboard_provisioning.check_sum as origin_key, - dashboard_provisioning.updated as origin_ts, + provisioning.name as origin_name, + provisioning.external_id as origin_path, + provisioning.check_sum as origin_key, + provisioning.updated as origin_ts, dashboard.created, created_user.uid as created_by, dashboard.created_by as created_by_id, dashboard.updated, updated_user.uid as updated_by, dashboard.updated_by as updated_by_id, dashboard.version, '' as message, dashboard.data - FROM dashboard - LEFT OUTER JOIN dashboard_provisioning ON dashboard.id = dashboard_provisioning.dashboard_id - LEFT OUTER JOIN "user" AS created_user ON dashboard.created_by = created_user.id - LEFT OUTER JOIN "user" AS updated_user ON dashboard.updated_by = updated_user.id + FROM "grafana.dashboard" as dashboard + LEFT OUTER JOIN "grafana.dashboard_provisioning" as provisioning ON dashboard.id = provisioning.dashboard_id + LEFT OUTER JOIN "grafana.user" as created_user ON dashboard.created_by = created_user.id + LEFT OUTER JOIN "grafana.user" as updated_user ON dashboard.updated_by = updated_user.id WHERE dashboard.is_folder = false AND dashboard.org_id = 2 AND dashboard.uid = 'UUU' diff --git a/pkg/registry/apis/dashboard/register.go b/pkg/registry/apis/dashboard/register.go index f693b42f346..2c3c5f5621c 100644 --- a/pkg/registry/apis/dashboard/register.go +++ b/pkg/registry/apis/dashboard/register.go @@ -26,6 +26,7 @@ import ( "github.com/grafana/grafana/pkg/services/featuremgmt" "github.com/grafana/grafana/pkg/services/provisioning" "github.com/grafana/grafana/pkg/setting" + "github.com/grafana/grafana/pkg/storage/legacysql" "github.com/grafana/grafana/pkg/storage/unified/apistore" ) @@ -55,6 +56,7 @@ func RegisterAPIService(cfg *setting.Cfg, features featuremgmt.FeatureToggles, return nil // skip registration unless opting into experimental apis } + dbp := legacysql.NewDatabaseProvider(sql) namespacer := request.GetNamespaceMapper(cfg) builder := &DashboardsAPIBuilder{ log: log.New("grafana-apiserver.dashboards"), @@ -64,7 +66,7 @@ func RegisterAPIService(cfg *setting.Cfg, features featuremgmt.FeatureToggles, legacy: &dashboardStorage{ resource: dashboard.DashboardResourceInfo, - access: legacy.NewDashboardAccess(sql, namespacer, dashStore, provisioning), + access: legacy.NewDashboardAccess(dbp, namespacer, dashStore, provisioning), tableConverter: dashboard.DashboardResourceInfo.TableConverter(), }, } diff --git a/pkg/registry/apis/identity/legacy/legacy_sql.go b/pkg/registry/apis/identity/legacy/legacy_sql.go index 22dab11ea25..b768b39b5a6 100644 --- a/pkg/registry/apis/identity/legacy/legacy_sql.go +++ b/pkg/registry/apis/identity/legacy/legacy_sql.go @@ -17,28 +17,13 @@ var ( ) type legacySQLStore struct { - dialect sqltemplate.Dialect - sql legacysql.NamespacedDBProvider - teamsRV legacysql.ResourceVersionLookup - usersRV legacysql.ResourceVersionLookup + sql legacysql.LegacyDatabaseProvider } -func NewLegacySQLStores(sql legacysql.NamespacedDBProvider) (LegacyIdentityStore, error) { - db, err := sql(context.Background()) - if err != nil { - return nil, err - } - dialect := sqltemplate.DialectForDriver(string(db.GetDBType())) - if dialect == nil { - return nil, fmt.Errorf("unknown dialect") - } - +func NewLegacySQLStores(sql legacysql.LegacyDatabaseProvider) LegacyIdentityStore { return &legacySQLStore{ - sql: sql, - dialect: dialect, - teamsRV: legacysql.GetResourceVersionLookup(sql, "team", "updated"), - usersRV: legacysql.GetResourceVersionLookup(sql, "user", "updated"), - }, nil + sql: sql, + } } // ListTeams implements LegacyIdentityStore. @@ -54,11 +39,12 @@ func (s *legacySQLStore) ListTeams(ctx context.Context, ns claims.NamespaceInfo, return nil, fmt.Errorf("expected non zero orgID") } - req := sqlQueryListTeams{ - SQLTemplate: sqltemplate.New(s.dialect), - Query: &query, + sql, err := s.sql(ctx) + if err != nil { + return nil, err } + req := newListTeams(sql, &query) rawQuery, err := sqltemplate.Execute(sqlQueryTeams, req) if err != nil { return nil, fmt.Errorf("execute template %q: %w", sqlQueryTeams.Name(), err) @@ -67,13 +53,8 @@ func (s *legacySQLStore) ListTeams(ctx context.Context, ns claims.NamespaceInfo, // fmt.Printf("%s // %v\n", rawQuery, req.GetArgs()) - db, err := s.sql(ctx) - if err != nil { - return nil, err - } - res := &ListTeamResult{} - rows, err := db.GetSqlxSession().Query(ctx, q, req.GetArgs()...) + rows, err := sql.DB.GetSqlxSession().Query(ctx, q, req.GetArgs()...) defer func() { if rows != nil { _ = rows.Close() @@ -97,7 +78,7 @@ func (s *legacySQLStore) ListTeams(ctx context.Context, ns claims.NamespaceInfo, } } if query.UID == "" { - res.RV, err = s.teamsRV(ctx) + res.RV, err = sql.GetResourceVersion(ctx, "team", "updated") } } return res, err @@ -116,13 +97,35 @@ func (s *legacySQLStore) ListUsers(ctx context.Context, ns claims.NamespaceInfo, return nil, fmt.Errorf("expected non zero orgID") } - return s.queryUsers(ctx, sqlQueryUsers, sqlQueryListUsers{ - SQLTemplate: sqltemplate.New(s.dialect), - Query: &query, - }, limit, query.UID != "") + sql, err := s.sql(ctx) + if err != nil { + return nil, err + } + + res, err := s.queryUsers(ctx, sql, sqlQueryUsers, newListUser(sql, &query), limit) + + if err == nil && query.UID != "" { + res.RV, err = sql.GetResourceVersion(ctx, "user", "updated") + } + return res, err } -func (s *legacySQLStore) queryUsers(ctx context.Context, t *template.Template, req sqltemplate.Args, limit int, getRV bool) (*ListUserResult, error) { +// GetDisplay implements LegacyIdentityStore. +func (s *legacySQLStore) GetDisplay(ctx context.Context, ns claims.NamespaceInfo, query GetUserDisplayQuery) (*ListUserResult, error) { + query.OrgID = ns.OrgID + if ns.OrgID == 0 { + return nil, fmt.Errorf("expected non zero orgID") + } + + sql, err := s.sql(ctx) + if err != nil { + return nil, err + } + + return s.queryUsers(ctx, sql, sqlQueryDisplay, newGetDisplay(sql, &query), 10000) +} + +func (s *legacySQLStore) queryUsers(ctx context.Context, sql *legacysql.LegacyDatabaseHelper, t *template.Template, req sqltemplate.Args, limit int) (*ListUserResult, error) { rawQuery, err := sqltemplate.Execute(t, req) if err != nil { return nil, fmt.Errorf("execute template %q: %w", sqlQueryUsers.Name(), err) @@ -130,13 +133,9 @@ func (s *legacySQLStore) queryUsers(ctx context.Context, t *template.Template, r q := rawQuery // fmt.Printf("%s // %v\n", rawQuery, req.GetArgs()) - db, err := s.sql(ctx) - if err != nil { - return nil, err - } res := &ListUserResult{} - rows, err := db.GetSqlxSession().Query(ctx, q, req.GetArgs()...) + rows, err := sql.DB.GetSqlxSession().Query(ctx, q, req.GetArgs()...) defer func() { if rows != nil { _ = rows.Close() @@ -160,9 +159,6 @@ func (s *legacySQLStore) queryUsers(ctx context.Context, t *template.Template, r break } } - if getRV { - res.RV, err = s.usersRV(ctx) - } } return res, err } @@ -171,16 +167,3 @@ func (s *legacySQLStore) queryUsers(ctx context.Context, t *template.Template, r func (s *legacySQLStore) GetUserTeams(ctx context.Context, ns claims.NamespaceInfo, uid string) ([]team.Team, error) { panic("unimplemented") } - -// GetDisplay implements LegacyIdentityStore. -func (s *legacySQLStore) GetDisplay(ctx context.Context, ns claims.NamespaceInfo, query GetUserDisplayQuery) (*ListUserResult, error) { - query.OrgID = ns.OrgID - if ns.OrgID == 0 { - return nil, fmt.Errorf("expected non zero orgID") - } - - return s.queryUsers(ctx, sqlQueryDisplay, sqlQueryGetDisplay{ - SQLTemplate: sqltemplate.New(s.dialect), - Query: &query, - }, 10000, false) -} diff --git a/pkg/registry/apis/identity/legacy/queries.go b/pkg/registry/apis/identity/legacy/queries.go index 98a7468719d..442e2a8b0f1 100644 --- a/pkg/registry/apis/identity/legacy/queries.go +++ b/pkg/registry/apis/identity/legacy/queries.go @@ -5,6 +5,7 @@ import ( "fmt" "text/template" + "github.com/grafana/grafana/pkg/storage/legacysql" "github.com/grafana/grafana/pkg/storage/unified/sql/sqltemplate" ) @@ -32,7 +33,18 @@ var ( type sqlQueryListUsers struct { sqltemplate.SQLTemplate - Query *ListUserQuery + Query *ListUserQuery + UserTable string + OrgUserTable string +} + +func newListUser(sql *legacysql.LegacyDatabaseHelper, q *ListUserQuery) sqlQueryListUsers { + return sqlQueryListUsers{ + SQLTemplate: sqltemplate.New(sql.DialectForDriver()), + UserTable: sql.Table("user"), + OrgUserTable: sql.Table("org_user"), + Query: q, + } } func (r sqlQueryListUsers) Validate() error { @@ -41,7 +53,16 @@ func (r sqlQueryListUsers) Validate() error { type sqlQueryListTeams struct { sqltemplate.SQLTemplate - Query *ListTeamQuery + Query *ListTeamQuery + TeamTable string +} + +func newListTeams(sql *legacysql.LegacyDatabaseHelper, q *ListTeamQuery) sqlQueryListTeams { + return sqlQueryListTeams{ + SQLTemplate: sqltemplate.New(sql.DialectForDriver()), + TeamTable: sql.Table("team"), + Query: q, + } } func (r sqlQueryListTeams) Validate() error { @@ -50,7 +71,18 @@ func (r sqlQueryListTeams) Validate() error { type sqlQueryGetDisplay struct { sqltemplate.SQLTemplate - Query *GetUserDisplayQuery + Query *GetUserDisplayQuery + UserTable string + OrgUserTable string +} + +func newGetDisplay(sql *legacysql.LegacyDatabaseHelper, q *GetUserDisplayQuery) sqlQueryGetDisplay { + return sqlQueryGetDisplay{ + SQLTemplate: sqltemplate.New(sql.DialectForDriver()), + UserTable: sql.Table("user"), + OrgUserTable: sql.Table("org_user"), + Query: q, + } } func (r sqlQueryGetDisplay) Validate() error { diff --git a/pkg/registry/apis/identity/legacy/queries_test.go b/pkg/registry/apis/identity/legacy/queries_test.go index 5c4b57e0c39..7cc0baf6e20 100644 --- a/pkg/registry/apis/identity/legacy/queries_test.go +++ b/pkg/registry/apis/identity/legacy/queries_test.go @@ -4,104 +4,104 @@ import ( "testing" "text/template" + "github.com/grafana/grafana/pkg/storage/legacysql" + "github.com/grafana/grafana/pkg/storage/unified/sql/sqltemplate" "github.com/grafana/grafana/pkg/storage/unified/sql/sqltemplate/mocks" ) func TestQueries(t *testing.T) { + // prefix tables with grafana + nodb := &legacysql.LegacyDatabaseHelper{ + Table: func(n string) string { + return "grafana." + n + }, + } + + getDisplay := func(q *GetUserDisplayQuery) sqltemplate.SQLTemplate { + v := newGetDisplay(nodb, q) + v.SQLTemplate = mocks.NewTestingSQLTemplate() + return &v + } + + listUsers := func(q *ListUserQuery) sqltemplate.SQLTemplate { + v := newListUser(nodb, q) + v.SQLTemplate = mocks.NewTestingSQLTemplate() + return &v + } + + listTeams := func(q *ListTeamQuery) sqltemplate.SQLTemplate { + v := newListTeams(nodb, q) + v.SQLTemplate = mocks.NewTestingSQLTemplate() + return &v + } + mocks.CheckQuerySnapshots(t, mocks.TemplateTestSetup{ RootDir: "testdata", Templates: map[*template.Template][]mocks.TemplateTestCase{ sqlQueryTeams: { { Name: "teams_uid", - Data: &sqlQueryListTeams{ - SQLTemplate: mocks.NewTestingSQLTemplate(), - Query: &ListTeamQuery{ - UID: "abc", - }, - }, + Data: listTeams(&ListTeamQuery{ + UID: "abc", + }), }, { Name: "teams_page_1", - Data: &sqlQueryListTeams{ - SQLTemplate: mocks.NewTestingSQLTemplate(), - Query: &ListTeamQuery{ - Limit: 5, - }, - }, + Data: listTeams(&ListTeamQuery{ + Limit: 5, + }), }, { Name: "teams_page_2", - Data: &sqlQueryListTeams{ - SQLTemplate: mocks.NewTestingSQLTemplate(), - Query: &ListTeamQuery{ - ContinueID: 1, - Limit: 2, - }, - }, + Data: listTeams(&ListTeamQuery{ + ContinueID: 1, + Limit: 2, + }), }, }, sqlQueryUsers: { { Name: "users_uid", - Data: &sqlQueryListUsers{ - SQLTemplate: mocks.NewTestingSQLTemplate(), - Query: &ListUserQuery{ - UID: "abc", - }, - }, + Data: listUsers(&ListUserQuery{ + UID: "abc", + }), }, { Name: "users_page_1", - Data: &sqlQueryListUsers{ - SQLTemplate: mocks.NewTestingSQLTemplate(), - Query: &ListUserQuery{ - Limit: 5, - }, - }, + Data: listUsers(&ListUserQuery{ + Limit: 5, + }), }, { Name: "users_page_2", - Data: &sqlQueryListUsers{ - SQLTemplate: mocks.NewTestingSQLTemplate(), - Query: &ListUserQuery{ - ContinueID: 1, - Limit: 2, - }, - }, + Data: listUsers(&ListUserQuery{ + ContinueID: 1, + Limit: 2, + }), }, }, sqlQueryDisplay: { { Name: "display_uids", - Data: &sqlQueryGetDisplay{ - SQLTemplate: mocks.NewTestingSQLTemplate(), - Query: &GetUserDisplayQuery{ - OrgID: 2, - UIDs: []string{"a", "b"}, - }, - }, + Data: getDisplay(&GetUserDisplayQuery{ + OrgID: 2, + UIDs: []string{"a", "b"}, + }), }, { Name: "display_ids", - Data: &sqlQueryGetDisplay{ - SQLTemplate: mocks.NewTestingSQLTemplate(), - Query: &GetUserDisplayQuery{ - OrgID: 2, - IDs: []int64{1, 2}, - }, - }, + Data: getDisplay(&GetUserDisplayQuery{ + OrgID: 2, + IDs: []int64{1, 2}, + }), }, { Name: "display_ids_uids", - Data: &sqlQueryGetDisplay{ - SQLTemplate: mocks.NewTestingSQLTemplate(), - Query: &GetUserDisplayQuery{ - OrgID: 2, - UIDs: []string{"a", "b"}, - IDs: []int64{1, 2}, - }, - }, + Data: getDisplay(&GetUserDisplayQuery{ + OrgID: 2, + UIDs: []string{"a", "b"}, + IDs: []int64{1, 2}, + }), }, }, }, diff --git a/pkg/registry/apis/identity/legacy/query_display.sql b/pkg/registry/apis/identity/legacy/query_display.sql index 51293d76f17..c6364f0afa5 100644 --- a/pkg/registry/apis/identity/legacy/query_display.sql +++ b/pkg/registry/apis/identity/legacy/query_display.sql @@ -1,7 +1,7 @@ -SELECT org_user.org_id, u.id, u.uid, u.login, u.email, u.name, +SELECT o.org_id, u.id, u.uid, u.login, u.email, u.name, u.created, u.updated, u.is_service_account, u.is_disabled, u.is_admin - FROM {{ .Ident "user" }} as u JOIN org_user ON u.id = org_user.user_id - WHERE org_user.org_id = {{ .Arg .Query.OrgID }} AND ( 1=2 + FROM {{ .Ident .UserTable }} as u JOIN {{ .Ident .OrgUserTable }} as o ON u.id = o.user_id + WHERE o.org_id = {{ .Arg .Query.OrgID }} AND ( 1=2 {{ if .Query.UIDs }} OR uid IN ({{ .ArgList .Query.UIDs }}) {{ end }} diff --git a/pkg/registry/apis/identity/legacy/query_teams.sql b/pkg/registry/apis/identity/legacy/query_teams.sql index 4a535530ac0..27af9537b0d 100644 --- a/pkg/registry/apis/identity/legacy/query_teams.sql +++ b/pkg/registry/apis/identity/legacy/query_teams.sql @@ -1,5 +1,5 @@ SELECT id, uid, name, email, created, updated - FROM {{ .Ident "team" }} + FROM {{ .Ident .TeamTable }} WHERE org_id = {{ .Arg .Query.OrgID }} {{ if .Query.UID }} AND uid = {{ .Arg .Query.UID }} diff --git a/pkg/registry/apis/identity/legacy/query_users.sql b/pkg/registry/apis/identity/legacy/query_users.sql index 03e66270c7f..4d7cf0a4693 100644 --- a/pkg/registry/apis/identity/legacy/query_users.sql +++ b/pkg/registry/apis/identity/legacy/query_users.sql @@ -1,7 +1,7 @@ -SELECT org_user.org_id, u.id, u.uid, u.login, u.email, u.name, +SELECT o.org_id, u.id, u.uid, u.login, u.email, u.name, u.created, u.updated, u.is_service_account, u.is_disabled, u.is_admin - FROM {{ .Ident "user" }} as u JOIN org_user ON u.id = org_user.user_id - WHERE org_user.org_id = {{ .Arg .Query.OrgID }} + FROM {{ .Ident .UserTable }} as u JOIN {{ .Ident .OrgUserTable }} as o ON u.id = o.user_id + WHERE o.org_id = {{ .Arg .Query.OrgID }} AND u.is_service_account = {{ .Arg .Query.IsServiceAccount }} {{ if .Query.UID }} AND uid = {{ .Arg .Query.UID }} diff --git a/pkg/registry/apis/identity/legacy/testdata/mysql--query_display-display_ids.sql b/pkg/registry/apis/identity/legacy/testdata/mysql--query_display-display_ids.sql index d82de71a1df..5f466df2848 100755 --- a/pkg/registry/apis/identity/legacy/testdata/mysql--query_display-display_ids.sql +++ b/pkg/registry/apis/identity/legacy/testdata/mysql--query_display-display_ids.sql @@ -1,7 +1,7 @@ -SELECT org_user.org_id, u.id, u.uid, u.login, u.email, u.name, +SELECT o.org_id, u.id, u.uid, u.login, u.email, u.name, u.created, u.updated, u.is_service_account, u.is_disabled, u.is_admin - FROM `user` as u JOIN org_user ON u.id = org_user.user_id - WHERE org_user.org_id = 2 AND ( 1=2 + FROM "grafana.user" as u JOIN "grafana.org_user" as o ON u.id = o.user_id + WHERE o.org_id = 2 AND ( 1=2 OR u.id IN (1, 2) ) ORDER BY u.id asc diff --git a/pkg/registry/apis/identity/legacy/testdata/mysql--query_display-display_ids_uids.sql b/pkg/registry/apis/identity/legacy/testdata/mysql--query_display-display_ids_uids.sql index 7dfe9de371c..fa586d54340 100755 --- a/pkg/registry/apis/identity/legacy/testdata/mysql--query_display-display_ids_uids.sql +++ b/pkg/registry/apis/identity/legacy/testdata/mysql--query_display-display_ids_uids.sql @@ -1,7 +1,7 @@ -SELECT org_user.org_id, u.id, u.uid, u.login, u.email, u.name, +SELECT o.org_id, u.id, u.uid, u.login, u.email, u.name, u.created, u.updated, u.is_service_account, u.is_disabled, u.is_admin - FROM `user` as u JOIN org_user ON u.id = org_user.user_id - WHERE org_user.org_id = 2 AND ( 1=2 + FROM "grafana.user" as u JOIN "grafana.org_user" as o ON u.id = o.user_id + WHERE o.org_id = 2 AND ( 1=2 OR uid IN ('a', 'b') OR u.id IN (1, 2) ) diff --git a/pkg/registry/apis/identity/legacy/testdata/mysql--query_display-display_uids.sql b/pkg/registry/apis/identity/legacy/testdata/mysql--query_display-display_uids.sql index fd1d8da6a9f..eb841cd1863 100755 --- a/pkg/registry/apis/identity/legacy/testdata/mysql--query_display-display_uids.sql +++ b/pkg/registry/apis/identity/legacy/testdata/mysql--query_display-display_uids.sql @@ -1,7 +1,7 @@ -SELECT org_user.org_id, u.id, u.uid, u.login, u.email, u.name, +SELECT o.org_id, u.id, u.uid, u.login, u.email, u.name, u.created, u.updated, u.is_service_account, u.is_disabled, u.is_admin - FROM `user` as u JOIN org_user ON u.id = org_user.user_id - WHERE org_user.org_id = 2 AND ( 1=2 + FROM "grafana.user" as u JOIN "grafana.org_user" as o ON u.id = o.user_id + WHERE o.org_id = 2 AND ( 1=2 OR uid IN ('a', 'b') ) ORDER BY u.id asc diff --git a/pkg/registry/apis/identity/legacy/testdata/mysql--query_teams-teams_page_1.sql b/pkg/registry/apis/identity/legacy/testdata/mysql--query_teams-teams_page_1.sql index d216e8bbead..8ff48c15223 100755 --- a/pkg/registry/apis/identity/legacy/testdata/mysql--query_teams-teams_page_1.sql +++ b/pkg/registry/apis/identity/legacy/testdata/mysql--query_teams-teams_page_1.sql @@ -1,5 +1,5 @@ SELECT id, uid, name, email, created, updated - FROM "team" + FROM "grafana.team" WHERE org_id = 0 ORDER BY id asc LIMIT 5 diff --git a/pkg/registry/apis/identity/legacy/testdata/mysql--query_teams-teams_page_2.sql b/pkg/registry/apis/identity/legacy/testdata/mysql--query_teams-teams_page_2.sql index cb147eeb524..42a1ee6dc92 100755 --- a/pkg/registry/apis/identity/legacy/testdata/mysql--query_teams-teams_page_2.sql +++ b/pkg/registry/apis/identity/legacy/testdata/mysql--query_teams-teams_page_2.sql @@ -1,5 +1,5 @@ SELECT id, uid, name, email, created, updated - FROM "team" + FROM "grafana.team" WHERE org_id = 0 AND id > 1 ORDER BY id asc diff --git a/pkg/registry/apis/identity/legacy/testdata/mysql--query_teams-teams_uid.sql b/pkg/registry/apis/identity/legacy/testdata/mysql--query_teams-teams_uid.sql index 49cb5588bef..746104926aa 100755 --- a/pkg/registry/apis/identity/legacy/testdata/mysql--query_teams-teams_uid.sql +++ b/pkg/registry/apis/identity/legacy/testdata/mysql--query_teams-teams_uid.sql @@ -1,5 +1,5 @@ SELECT id, uid, name, email, created, updated - FROM "team" + FROM "grafana.team" WHERE org_id = 0 AND uid = 'abc' ORDER BY id asc diff --git a/pkg/registry/apis/identity/legacy/testdata/mysql--query_users-users_page_1.sql b/pkg/registry/apis/identity/legacy/testdata/mysql--query_users-users_page_1.sql index e09464e6e8b..cb0ddccca37 100755 --- a/pkg/registry/apis/identity/legacy/testdata/mysql--query_users-users_page_1.sql +++ b/pkg/registry/apis/identity/legacy/testdata/mysql--query_users-users_page_1.sql @@ -1,7 +1,7 @@ -SELECT org_user.org_id, u.id, u.uid, u.login, u.email, u.name, +SELECT o.org_id, u.id, u.uid, u.login, u.email, u.name, u.created, u.updated, u.is_service_account, u.is_disabled, u.is_admin - FROM `user` as u JOIN org_user ON u.id = org_user.user_id - WHERE org_user.org_id = 0 + FROM "grafana.user" as u JOIN "grafana.org_user" as o ON u.id = o.user_id + WHERE o.org_id = 0 AND u.is_service_account = FALSE ORDER BY u.id asc LIMIT 5 diff --git a/pkg/registry/apis/identity/legacy/testdata/mysql--query_users-users_page_2.sql b/pkg/registry/apis/identity/legacy/testdata/mysql--query_users-users_page_2.sql index 44e68ce09a1..6ac810aa0eb 100755 --- a/pkg/registry/apis/identity/legacy/testdata/mysql--query_users-users_page_2.sql +++ b/pkg/registry/apis/identity/legacy/testdata/mysql--query_users-users_page_2.sql @@ -1,7 +1,7 @@ -SELECT org_user.org_id, u.id, u.uid, u.login, u.email, u.name, +SELECT o.org_id, u.id, u.uid, u.login, u.email, u.name, u.created, u.updated, u.is_service_account, u.is_disabled, u.is_admin - FROM `user` as u JOIN org_user ON u.id = org_user.user_id - WHERE org_user.org_id = 0 + FROM "grafana.user" as u JOIN "grafana.org_user" as o ON u.id = o.user_id + WHERE o.org_id = 0 AND u.is_service_account = FALSE AND id > 1 ORDER BY u.id asc diff --git a/pkg/registry/apis/identity/legacy/testdata/mysql--query_users-users_uid.sql b/pkg/registry/apis/identity/legacy/testdata/mysql--query_users-users_uid.sql index ddc7286907d..0c5d93628f6 100755 --- a/pkg/registry/apis/identity/legacy/testdata/mysql--query_users-users_uid.sql +++ b/pkg/registry/apis/identity/legacy/testdata/mysql--query_users-users_uid.sql @@ -1,7 +1,7 @@ -SELECT org_user.org_id, u.id, u.uid, u.login, u.email, u.name, +SELECT o.org_id, u.id, u.uid, u.login, u.email, u.name, u.created, u.updated, u.is_service_account, u.is_disabled, u.is_admin - FROM `user` as u JOIN org_user ON u.id = org_user.user_id - WHERE org_user.org_id = 0 + FROM "grafana.user" as u JOIN "grafana.org_user" as o ON u.id = o.user_id + WHERE o.org_id = 0 AND u.is_service_account = FALSE AND uid = 'abc' ORDER BY u.id asc diff --git a/pkg/registry/apis/identity/legacy/testdata/postgres--query_display-display_ids.sql b/pkg/registry/apis/identity/legacy/testdata/postgres--query_display-display_ids.sql index 1b5d33427cd..5f466df2848 100755 --- a/pkg/registry/apis/identity/legacy/testdata/postgres--query_display-display_ids.sql +++ b/pkg/registry/apis/identity/legacy/testdata/postgres--query_display-display_ids.sql @@ -1,7 +1,7 @@ -SELECT org_user.org_id, u.id, u.uid, u.login, u.email, u.name, +SELECT o.org_id, u.id, u.uid, u.login, u.email, u.name, u.created, u.updated, u.is_service_account, u.is_disabled, u.is_admin - FROM "user" as u JOIN org_user ON u.id = org_user.user_id - WHERE org_user.org_id = 2 AND ( 1=2 + FROM "grafana.user" as u JOIN "grafana.org_user" as o ON u.id = o.user_id + WHERE o.org_id = 2 AND ( 1=2 OR u.id IN (1, 2) ) ORDER BY u.id asc diff --git a/pkg/registry/apis/identity/legacy/testdata/postgres--query_display-display_ids_uids.sql b/pkg/registry/apis/identity/legacy/testdata/postgres--query_display-display_ids_uids.sql index 20b3ce0a36a..fa586d54340 100755 --- a/pkg/registry/apis/identity/legacy/testdata/postgres--query_display-display_ids_uids.sql +++ b/pkg/registry/apis/identity/legacy/testdata/postgres--query_display-display_ids_uids.sql @@ -1,7 +1,7 @@ -SELECT org_user.org_id, u.id, u.uid, u.login, u.email, u.name, +SELECT o.org_id, u.id, u.uid, u.login, u.email, u.name, u.created, u.updated, u.is_service_account, u.is_disabled, u.is_admin - FROM "user" as u JOIN org_user ON u.id = org_user.user_id - WHERE org_user.org_id = 2 AND ( 1=2 + FROM "grafana.user" as u JOIN "grafana.org_user" as o ON u.id = o.user_id + WHERE o.org_id = 2 AND ( 1=2 OR uid IN ('a', 'b') OR u.id IN (1, 2) ) diff --git a/pkg/registry/apis/identity/legacy/testdata/postgres--query_display-display_uids.sql b/pkg/registry/apis/identity/legacy/testdata/postgres--query_display-display_uids.sql index 70832ccd97e..eb841cd1863 100755 --- a/pkg/registry/apis/identity/legacy/testdata/postgres--query_display-display_uids.sql +++ b/pkg/registry/apis/identity/legacy/testdata/postgres--query_display-display_uids.sql @@ -1,7 +1,7 @@ -SELECT org_user.org_id, u.id, u.uid, u.login, u.email, u.name, +SELECT o.org_id, u.id, u.uid, u.login, u.email, u.name, u.created, u.updated, u.is_service_account, u.is_disabled, u.is_admin - FROM "user" as u JOIN org_user ON u.id = org_user.user_id - WHERE org_user.org_id = 2 AND ( 1=2 + FROM "grafana.user" as u JOIN "grafana.org_user" as o ON u.id = o.user_id + WHERE o.org_id = 2 AND ( 1=2 OR uid IN ('a', 'b') ) ORDER BY u.id asc diff --git a/pkg/registry/apis/identity/legacy/testdata/postgres--query_teams-teams_page_1.sql b/pkg/registry/apis/identity/legacy/testdata/postgres--query_teams-teams_page_1.sql index d216e8bbead..8ff48c15223 100755 --- a/pkg/registry/apis/identity/legacy/testdata/postgres--query_teams-teams_page_1.sql +++ b/pkg/registry/apis/identity/legacy/testdata/postgres--query_teams-teams_page_1.sql @@ -1,5 +1,5 @@ SELECT id, uid, name, email, created, updated - FROM "team" + FROM "grafana.team" WHERE org_id = 0 ORDER BY id asc LIMIT 5 diff --git a/pkg/registry/apis/identity/legacy/testdata/postgres--query_teams-teams_page_2.sql b/pkg/registry/apis/identity/legacy/testdata/postgres--query_teams-teams_page_2.sql index cb147eeb524..42a1ee6dc92 100755 --- a/pkg/registry/apis/identity/legacy/testdata/postgres--query_teams-teams_page_2.sql +++ b/pkg/registry/apis/identity/legacy/testdata/postgres--query_teams-teams_page_2.sql @@ -1,5 +1,5 @@ SELECT id, uid, name, email, created, updated - FROM "team" + FROM "grafana.team" WHERE org_id = 0 AND id > 1 ORDER BY id asc diff --git a/pkg/registry/apis/identity/legacy/testdata/postgres--query_teams-teams_uid.sql b/pkg/registry/apis/identity/legacy/testdata/postgres--query_teams-teams_uid.sql index 49cb5588bef..746104926aa 100755 --- a/pkg/registry/apis/identity/legacy/testdata/postgres--query_teams-teams_uid.sql +++ b/pkg/registry/apis/identity/legacy/testdata/postgres--query_teams-teams_uid.sql @@ -1,5 +1,5 @@ SELECT id, uid, name, email, created, updated - FROM "team" + FROM "grafana.team" WHERE org_id = 0 AND uid = 'abc' ORDER BY id asc diff --git a/pkg/registry/apis/identity/legacy/testdata/postgres--query_users-users_page_1.sql b/pkg/registry/apis/identity/legacy/testdata/postgres--query_users-users_page_1.sql index fcc0399e261..cb0ddccca37 100755 --- a/pkg/registry/apis/identity/legacy/testdata/postgres--query_users-users_page_1.sql +++ b/pkg/registry/apis/identity/legacy/testdata/postgres--query_users-users_page_1.sql @@ -1,7 +1,7 @@ -SELECT org_user.org_id, u.id, u.uid, u.login, u.email, u.name, +SELECT o.org_id, u.id, u.uid, u.login, u.email, u.name, u.created, u.updated, u.is_service_account, u.is_disabled, u.is_admin - FROM "user" as u JOIN org_user ON u.id = org_user.user_id - WHERE org_user.org_id = 0 + FROM "grafana.user" as u JOIN "grafana.org_user" as o ON u.id = o.user_id + WHERE o.org_id = 0 AND u.is_service_account = FALSE ORDER BY u.id asc LIMIT 5 diff --git a/pkg/registry/apis/identity/legacy/testdata/postgres--query_users-users_page_2.sql b/pkg/registry/apis/identity/legacy/testdata/postgres--query_users-users_page_2.sql index dba81cfb64b..6ac810aa0eb 100755 --- a/pkg/registry/apis/identity/legacy/testdata/postgres--query_users-users_page_2.sql +++ b/pkg/registry/apis/identity/legacy/testdata/postgres--query_users-users_page_2.sql @@ -1,7 +1,7 @@ -SELECT org_user.org_id, u.id, u.uid, u.login, u.email, u.name, +SELECT o.org_id, u.id, u.uid, u.login, u.email, u.name, u.created, u.updated, u.is_service_account, u.is_disabled, u.is_admin - FROM "user" as u JOIN org_user ON u.id = org_user.user_id - WHERE org_user.org_id = 0 + FROM "grafana.user" as u JOIN "grafana.org_user" as o ON u.id = o.user_id + WHERE o.org_id = 0 AND u.is_service_account = FALSE AND id > 1 ORDER BY u.id asc diff --git a/pkg/registry/apis/identity/legacy/testdata/postgres--query_users-users_uid.sql b/pkg/registry/apis/identity/legacy/testdata/postgres--query_users-users_uid.sql index 3e2429254e7..0c5d93628f6 100755 --- a/pkg/registry/apis/identity/legacy/testdata/postgres--query_users-users_uid.sql +++ b/pkg/registry/apis/identity/legacy/testdata/postgres--query_users-users_uid.sql @@ -1,7 +1,7 @@ -SELECT org_user.org_id, u.id, u.uid, u.login, u.email, u.name, +SELECT o.org_id, u.id, u.uid, u.login, u.email, u.name, u.created, u.updated, u.is_service_account, u.is_disabled, u.is_admin - FROM "user" as u JOIN org_user ON u.id = org_user.user_id - WHERE org_user.org_id = 0 + FROM "grafana.user" as u JOIN "grafana.org_user" as o ON u.id = o.user_id + WHERE o.org_id = 0 AND u.is_service_account = FALSE AND uid = 'abc' ORDER BY u.id asc diff --git a/pkg/registry/apis/identity/legacy/testdata/sqlite--query_display-display_ids.sql b/pkg/registry/apis/identity/legacy/testdata/sqlite--query_display-display_ids.sql index 1b5d33427cd..5f466df2848 100755 --- a/pkg/registry/apis/identity/legacy/testdata/sqlite--query_display-display_ids.sql +++ b/pkg/registry/apis/identity/legacy/testdata/sqlite--query_display-display_ids.sql @@ -1,7 +1,7 @@ -SELECT org_user.org_id, u.id, u.uid, u.login, u.email, u.name, +SELECT o.org_id, u.id, u.uid, u.login, u.email, u.name, u.created, u.updated, u.is_service_account, u.is_disabled, u.is_admin - FROM "user" as u JOIN org_user ON u.id = org_user.user_id - WHERE org_user.org_id = 2 AND ( 1=2 + FROM "grafana.user" as u JOIN "grafana.org_user" as o ON u.id = o.user_id + WHERE o.org_id = 2 AND ( 1=2 OR u.id IN (1, 2) ) ORDER BY u.id asc diff --git a/pkg/registry/apis/identity/legacy/testdata/sqlite--query_display-display_ids_uids.sql b/pkg/registry/apis/identity/legacy/testdata/sqlite--query_display-display_ids_uids.sql index 20b3ce0a36a..fa586d54340 100755 --- a/pkg/registry/apis/identity/legacy/testdata/sqlite--query_display-display_ids_uids.sql +++ b/pkg/registry/apis/identity/legacy/testdata/sqlite--query_display-display_ids_uids.sql @@ -1,7 +1,7 @@ -SELECT org_user.org_id, u.id, u.uid, u.login, u.email, u.name, +SELECT o.org_id, u.id, u.uid, u.login, u.email, u.name, u.created, u.updated, u.is_service_account, u.is_disabled, u.is_admin - FROM "user" as u JOIN org_user ON u.id = org_user.user_id - WHERE org_user.org_id = 2 AND ( 1=2 + FROM "grafana.user" as u JOIN "grafana.org_user" as o ON u.id = o.user_id + WHERE o.org_id = 2 AND ( 1=2 OR uid IN ('a', 'b') OR u.id IN (1, 2) ) diff --git a/pkg/registry/apis/identity/legacy/testdata/sqlite--query_display-display_uids.sql b/pkg/registry/apis/identity/legacy/testdata/sqlite--query_display-display_uids.sql index 70832ccd97e..eb841cd1863 100755 --- a/pkg/registry/apis/identity/legacy/testdata/sqlite--query_display-display_uids.sql +++ b/pkg/registry/apis/identity/legacy/testdata/sqlite--query_display-display_uids.sql @@ -1,7 +1,7 @@ -SELECT org_user.org_id, u.id, u.uid, u.login, u.email, u.name, +SELECT o.org_id, u.id, u.uid, u.login, u.email, u.name, u.created, u.updated, u.is_service_account, u.is_disabled, u.is_admin - FROM "user" as u JOIN org_user ON u.id = org_user.user_id - WHERE org_user.org_id = 2 AND ( 1=2 + FROM "grafana.user" as u JOIN "grafana.org_user" as o ON u.id = o.user_id + WHERE o.org_id = 2 AND ( 1=2 OR uid IN ('a', 'b') ) ORDER BY u.id asc diff --git a/pkg/registry/apis/identity/legacy/testdata/sqlite--query_teams-teams_page_1.sql b/pkg/registry/apis/identity/legacy/testdata/sqlite--query_teams-teams_page_1.sql index d216e8bbead..8ff48c15223 100755 --- a/pkg/registry/apis/identity/legacy/testdata/sqlite--query_teams-teams_page_1.sql +++ b/pkg/registry/apis/identity/legacy/testdata/sqlite--query_teams-teams_page_1.sql @@ -1,5 +1,5 @@ SELECT id, uid, name, email, created, updated - FROM "team" + FROM "grafana.team" WHERE org_id = 0 ORDER BY id asc LIMIT 5 diff --git a/pkg/registry/apis/identity/legacy/testdata/sqlite--query_teams-teams_page_2.sql b/pkg/registry/apis/identity/legacy/testdata/sqlite--query_teams-teams_page_2.sql index cb147eeb524..42a1ee6dc92 100755 --- a/pkg/registry/apis/identity/legacy/testdata/sqlite--query_teams-teams_page_2.sql +++ b/pkg/registry/apis/identity/legacy/testdata/sqlite--query_teams-teams_page_2.sql @@ -1,5 +1,5 @@ SELECT id, uid, name, email, created, updated - FROM "team" + FROM "grafana.team" WHERE org_id = 0 AND id > 1 ORDER BY id asc diff --git a/pkg/registry/apis/identity/legacy/testdata/sqlite--query_teams-teams_uid.sql b/pkg/registry/apis/identity/legacy/testdata/sqlite--query_teams-teams_uid.sql index 49cb5588bef..746104926aa 100755 --- a/pkg/registry/apis/identity/legacy/testdata/sqlite--query_teams-teams_uid.sql +++ b/pkg/registry/apis/identity/legacy/testdata/sqlite--query_teams-teams_uid.sql @@ -1,5 +1,5 @@ SELECT id, uid, name, email, created, updated - FROM "team" + FROM "grafana.team" WHERE org_id = 0 AND uid = 'abc' ORDER BY id asc diff --git a/pkg/registry/apis/identity/legacy/testdata/sqlite--query_users-users_page_1.sql b/pkg/registry/apis/identity/legacy/testdata/sqlite--query_users-users_page_1.sql index fcc0399e261..cb0ddccca37 100755 --- a/pkg/registry/apis/identity/legacy/testdata/sqlite--query_users-users_page_1.sql +++ b/pkg/registry/apis/identity/legacy/testdata/sqlite--query_users-users_page_1.sql @@ -1,7 +1,7 @@ -SELECT org_user.org_id, u.id, u.uid, u.login, u.email, u.name, +SELECT o.org_id, u.id, u.uid, u.login, u.email, u.name, u.created, u.updated, u.is_service_account, u.is_disabled, u.is_admin - FROM "user" as u JOIN org_user ON u.id = org_user.user_id - WHERE org_user.org_id = 0 + FROM "grafana.user" as u JOIN "grafana.org_user" as o ON u.id = o.user_id + WHERE o.org_id = 0 AND u.is_service_account = FALSE ORDER BY u.id asc LIMIT 5 diff --git a/pkg/registry/apis/identity/legacy/testdata/sqlite--query_users-users_page_2.sql b/pkg/registry/apis/identity/legacy/testdata/sqlite--query_users-users_page_2.sql index dba81cfb64b..6ac810aa0eb 100755 --- a/pkg/registry/apis/identity/legacy/testdata/sqlite--query_users-users_page_2.sql +++ b/pkg/registry/apis/identity/legacy/testdata/sqlite--query_users-users_page_2.sql @@ -1,7 +1,7 @@ -SELECT org_user.org_id, u.id, u.uid, u.login, u.email, u.name, +SELECT o.org_id, u.id, u.uid, u.login, u.email, u.name, u.created, u.updated, u.is_service_account, u.is_disabled, u.is_admin - FROM "user" as u JOIN org_user ON u.id = org_user.user_id - WHERE org_user.org_id = 0 + FROM "grafana.user" as u JOIN "grafana.org_user" as o ON u.id = o.user_id + WHERE o.org_id = 0 AND u.is_service_account = FALSE AND id > 1 ORDER BY u.id asc diff --git a/pkg/registry/apis/identity/legacy/testdata/sqlite--query_users-users_uid.sql b/pkg/registry/apis/identity/legacy/testdata/sqlite--query_users-users_uid.sql index 3e2429254e7..0c5d93628f6 100755 --- a/pkg/registry/apis/identity/legacy/testdata/sqlite--query_users-users_uid.sql +++ b/pkg/registry/apis/identity/legacy/testdata/sqlite--query_users-users_uid.sql @@ -1,7 +1,7 @@ -SELECT org_user.org_id, u.id, u.uid, u.login, u.email, u.name, +SELECT o.org_id, u.id, u.uid, u.login, u.email, u.name, u.created, u.updated, u.is_service_account, u.is_disabled, u.is_admin - FROM "user" as u JOIN org_user ON u.id = org_user.user_id - WHERE org_user.org_id = 0 + FROM "grafana.user" as u JOIN "grafana.org_user" as o ON u.id = o.user_id + WHERE o.org_id = 0 AND u.is_service_account = FALSE AND uid = 'abc' ORDER BY u.id asc diff --git a/pkg/registry/apis/identity/register.go b/pkg/registry/apis/identity/register.go index 3e06dd3fa5e..778602f35a7 100644 --- a/pkg/registry/apis/identity/register.go +++ b/pkg/registry/apis/identity/register.go @@ -20,6 +20,7 @@ import ( "github.com/grafana/grafana/pkg/registry/apis/identity/legacy" "github.com/grafana/grafana/pkg/services/apiserver/builder" "github.com/grafana/grafana/pkg/services/featuremgmt" + "github.com/grafana/grafana/pkg/storage/legacysql" ) var _ builder.APIGroupBuilder = (*IdentityAPIBuilder)(nil) @@ -40,15 +41,8 @@ func RegisterAPIService( return nil, nil // skip registration unless opting into experimental apis } - store, err := legacy.NewLegacySQLStores(func(context.Context) (db.DB, error) { - return sql, nil - }) - if err != nil { - return nil, err - } - builder := &IdentityAPIBuilder{ - Store: store, + Store: legacy.NewLegacySQLStores(legacysql.NewDatabaseProvider(sql)), } apiregistration.RegisterAPI(builder) return builder, nil diff --git a/pkg/storage/legacysql/db.go b/pkg/storage/legacysql/db.go new file mode 100644 index 00000000000..446950c39d2 --- /dev/null +++ b/pkg/storage/legacysql/db.go @@ -0,0 +1,69 @@ +package legacysql + +import ( + "context" + "time" + + "github.com/grafana/grafana/pkg/infra/db" + "github.com/grafana/grafana/pkg/services/sqlstore" + "github.com/grafana/grafana/pkg/storage/unified/sql/sqltemplate" +) + +// The database may depend on the request context +type LegacyDatabaseProvider func(ctx context.Context) (*LegacyDatabaseHelper, error) + +// NewDatabaseProvider returns a simple provider that always uses the same database implementation +func NewDatabaseProvider(db db.DB) LegacyDatabaseProvider { + helper := &LegacyDatabaseHelper{ + DB: db, + Table: func(n string) string { + return n + }, + } + return func(ctx context.Context) (*LegacyDatabaseHelper, error) { + return helper, nil + } +} + +type LegacyDatabaseHelper struct { + // The database connection + DB db.DB + + // table name locator + Table func(n string) string +} + +// Helper to pick the correct dialect +func (h *LegacyDatabaseHelper) DialectForDriver() sqltemplate.Dialect { + if h.DB == nil { + return nil + } + return sqltemplate.DialectForDriver(string(h.DB.GetDBType())) +} + +// Get a resource version from the max value the updated field +func (h *LegacyDatabaseHelper) GetResourceVersion(ctx context.Context, table string, column string) (int64, error) { + table = h.Table(table) + column = h.DB.Quote(column) + + var rv int64 + _ = h.DB.WithDbSession(ctx, func(sess *sqlstore.DBSession) error { + v := struct { + M time.Time `db:"m"` // xorm date parsing magic + }{} + ok, err := sess.Table(h.Table(table)).Select("MAX(" + column + ") as m").Get(&v) + if ok { + rv = v.M.UnixMilli() + return nil + } + return err + }) + + // When no RV, use a stable non-zero number + if rv < 1 { + return startup, nil + } + return rv, nil +} + +var startup = time.Now().UnixMilli() diff --git a/pkg/storage/legacysql/rv.go b/pkg/storage/legacysql/rv.go deleted file mode 100644 index a38fa4c9ea3..00000000000 --- a/pkg/storage/legacysql/rv.go +++ /dev/null @@ -1,51 +0,0 @@ -package legacysql - -import ( - "context" - "time" - - "github.com/grafana/grafana/pkg/infra/db" - "github.com/grafana/grafana/pkg/services/sqlstore/migrator" -) - -// The database may depend on the request context -type NamespacedDBProvider func(ctx context.Context) (db.DB, error) - -// Get the list RV from the maximum updated time -type ResourceVersionLookup = func(ctx context.Context) (int64, error) - -// Get a resource version from the max value the updated field -func GetResourceVersionLookup(sql NamespacedDBProvider, table string, column string) ResourceVersionLookup { - return func(ctx context.Context) (int64, error) { - db, err := sql(ctx) - if err != nil { - return 1, err - } - - table = db.GetDialect().Quote(table) - column = db.GetDialect().Quote(column) - switch db.GetDBType() { - case migrator.Postgres: - max := time.Now() - err := db.GetSqlxSession().Get(ctx, &max, "SELECT MAX("+column+") FROM "+table) - if err != nil { - return 1, nil - } - return max.UnixMilli(), nil - case migrator.MySQL: - max := int64(1) - _ = db.GetSqlxSession().Get(ctx, &max, "SELECT UNIX_TIMESTAMP(MAX("+column+")) FROM "+table) - return max, nil - default: - // fallthrough to string version - } - - max := "" - err = db.GetSqlxSession().Get(ctx, &max, "SELECT MAX("+column+") FROM "+table) - if err == nil && max != "" { - t, _ := time.Parse(time.DateTime, max) // ignore null errors - return t.UnixMilli(), nil - } - return 1, nil - } -}