Skip to content

Commit 865f478

Browse files
committed
api: refactor query logic for get databases/table metadata
pull the left join condition on role_members out into the where clause Epic: None Release: None
1 parent 9d2b6d9 commit 865f478

File tree

1 file changed

+25
-11
lines changed

1 file changed

+25
-11
lines changed

pkg/server/api_v2_databases_metadata.go

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -465,13 +465,20 @@ func getTableMetadataBaseQuery(userName string) *safesql.Query {
465465
FROM system.table_metadata tbm,
466466
(SELECT "sql.stats.automatic_collection.enabled" as auto_stats_enabled
467467
FROM [SHOW CLUSTER SETTING sql.stats.automatic_collection.enabled]) csc
468-
LEFT JOIN system.role_members rm ON rm.role = 'admin' AND member = $
469-
WHERE (rm.role = 'admin' OR tbm.db_name IN (
468+
WHERE (
469+
EXISTS (
470+
SELECT 1
471+
FROM system.role_members rm
472+
WHERE rm.member = $
473+
AND rm.role = 'admin'
474+
)
475+
OR tbm.db_name IN (
470476
SELECT cdp.database_name
471477
FROM "".crdb_internal.cluster_database_privileges cdp
472478
WHERE (grantee = $ OR grantee = 'public')
473479
AND privilege_type = 'CONNECT'
474-
))
480+
)
481+
)
475482
AND tbm.table_type = 'TABLE'
476483
`, userName, userName)
477484

@@ -859,19 +866,26 @@ func getDatabaseMetadataBaseQuery(userName string) *safesql.Query {
859866
COALESCE(s.store_ids, ARRAY[]) as store_ids,
860867
count(*) OVER() as total_row_count
861868
FROM system.namespace n
862-
LEFT JOIN system.table_metadata tbm ON n.id = tbm.db_id
863-
LEFT JOIN system.role_members rm ON rm.role = 'admin' AND member = $
869+
LEFT JOIN system.table_metadata tbm ON n.id = tbm.db_id
864870
LEFT JOIN (
865871
SELECT db_id, array_agg(DISTINCT unnested_ids) as store_ids
866872
FROM system.table_metadata, unnest(store_ids) as unnested_ids
867873
GROUP BY db_id
868874
) s ON s.db_id = tbm.db_id
869-
WHERE (rm.role = 'admin' OR n.name IN (
870-
SELECT cdp.database_name
871-
FROM "".crdb_internal.cluster_database_privileges cdp
872-
WHERE (grantee = $ OR grantee = 'public')
873-
AND privilege_type = 'CONNECT'
874-
))
875+
WHERE (
876+
EXISTS (
877+
SELECT 1
878+
FROM system.role_members rm
879+
WHERE rm.member = $
880+
AND rm.role = 'admin'
881+
)
882+
OR n.name IN (
883+
SELECT cdp.database_name
884+
FROM "".crdb_internal.cluster_database_privileges AS cdp
885+
WHERE (cdp.grantee = $ OR cdp.grantee = 'public')
886+
AND cdp.privilege_type = 'CONNECT'
887+
)
888+
)
875889
AND n."parentID" = 0
876890
AND n."parentSchemaID" = 0
877891
`, userName, userName)

0 commit comments

Comments
 (0)