Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

release-20.2: Add owners to SHOW commands, and dependant fix to modify SHOW ENUMS and SHOW TYPES to display empty ENUMS #56325

Merged
merged 1 commit into from Nov 9, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
7 changes: 5 additions & 2 deletions pkg/ccl/backupccl/backup_test.go
Expand Up @@ -6337,7 +6337,9 @@ CREATE TYPE sc.typ AS ENUM ('hello');
// first place. Right now we just settle for having some error reported, even
// if it's not the ideal error.

sqlDB.CheckQueryResults(t, `SHOW DATABASES`, [][]string{{"data"}, {"defaultdb"}, {"postgres"}, {"system"}})
sqlDB.CheckQueryResults(t, `SHOW DATABASES`, [][]string{
{"data", security.RootUser}, {"defaultdb", security.RootUser},
{"postgres", security.RootUser}, {"system", security.NodeUser}})

sqlDB.ExpectErr(t, `database "d" is offline: restoring`, `USE d`)

Expand Down Expand Up @@ -6433,7 +6435,8 @@ CREATE TYPE sc.typ AS ENUM ('hello');
sqlDB.CheckQueryResults(t, `SHOW TABLES`, [][]string{})
sqlDB.CheckQueryResults(t, `SHOW TYPES`, [][]string{})
sqlDB.CheckQueryResults(t, `SHOW SCHEMAS`, [][]string{
{"crdb_internal"}, {"information_schema"}, {"pg_catalog"}, {"pg_extension"}, {"public"},
{"crdb_internal", "NULL"}, {"information_schema", "NULL"}, {"pg_catalog", "NULL"}, {"pg_extension", "NULL"},
{"public", security.AdminRole},
})

sqlDB.ExpectErr(t, `target database or schema does not exist`, `SHOW TABLES FROM newdb.sc`)
Expand Down
11 changes: 6 additions & 5 deletions pkg/ccl/backupccl/full_cluster_backup_restore_test.go
Expand Up @@ -19,6 +19,7 @@ import (
_ "github.com/cockroachdb/cockroach/pkg/ccl/partitionccl"
"github.com/cockroachdb/cockroach/pkg/jobs"
"github.com/cockroachdb/cockroach/pkg/jobs/jobspb"
"github.com/cockroachdb/cockroach/pkg/security"
"github.com/cockroachdb/cockroach/pkg/sql"
"github.com/cockroachdb/cockroach/pkg/sql/catalog/systemschema"
"github.com/cockroachdb/cockroach/pkg/testutils/sqlutils"
Expand Down Expand Up @@ -140,11 +141,11 @@ CREATE TABLE data2.foo (a int);
sqlDBRestore.CheckQueryResults(t,
`SHOW DATABASES`,
[][]string{
{"data"},
{"data2"},
{"defaultdb"},
{"postgres"},
{"system"},
{"data", security.RootUser},
{"data2", security.RootUser},
{"defaultdb", security.RootUser},
{"postgres", security.RootUser},
{"system", security.NodeUser},
})
})

Expand Down
4 changes: 3 additions & 1 deletion pkg/ccl/importccl/exportcsv_test.go
Expand Up @@ -23,6 +23,7 @@ import (
"github.com/cockroachdb/cockroach/pkg/config"
"github.com/cockroachdb/cockroach/pkg/config/zonepb"
"github.com/cockroachdb/cockroach/pkg/keys"
"github.com/cockroachdb/cockroach/pkg/security"
"github.com/cockroachdb/cockroach/pkg/testutils"
"github.com/cockroachdb/cockroach/pkg/testutils/serverutils"
"github.com/cockroachdb/cockroach/pkg/testutils/sqlutils"
Expand Down Expand Up @@ -346,7 +347,8 @@ func TestExportShow(t *testing.T) {
sqlDB.Exec(t, `EXPORT INTO CSV 'nodelocal://0/show' FROM SELECT * FROM [SHOW DATABASES] ORDER BY database_name`)
content := readFileByGlob(t, filepath.Join(dir, "show", "export*-n1.0.csv"))

if expected, got := "defaultdb\npostgres\nsystem\n", string(content); expected != got {
if expected, got := "defaultdb,"+security.RootUser+"\npostgres,"+security.RootUser+"\nsystem,"+
security.NodeUser+"\n", string(content); expected != got {
t.Fatalf("expected %q, got %q", expected, got)
}
}
Expand Down
32 changes: 16 additions & 16 deletions pkg/cli/cli_test.go
Expand Up @@ -487,18 +487,18 @@ func Example_demo() {
// 123
// 123
// demo startrek -e show databases
// database_name
// defaultdb
// postgres
// startrek
// system
// database_name owner
// defaultdb root
// postgres root
// startrek root
// system node
// demo startrek -e show databases --format=table
// database_name
// -----------------
// defaultdb
// postgres
// startrek
// system
// database_name | owner
// ----------------+--------
// defaultdb | root
// postgres | root
// startrek | root
// system | node
// (4 rows)
// demo -e CREATE USER test WITH PASSWORD 'testpass'
// CREATE ROLE
Expand Down Expand Up @@ -559,11 +559,11 @@ func Example_sql() {
// x y
// 42 69
// sql --execute=show databases
// database_name
// defaultdb
// postgres
// system
// t
// database_name owner
// defaultdb root
// postgres root
// system node
// t root
// sql -e select 1 as "1"; select 2 as "2"
// 1
// 1
Expand Down
4 changes: 3 additions & 1 deletion pkg/sql/crdb_internal.go
Expand Up @@ -223,14 +223,16 @@ var crdbInternalDatabasesTable = virtualSchemaTable{
schema: `
CREATE TABLE crdb_internal.databases (
id INT NOT NULL,
name STRING NOT NULL
name STRING NOT NULL,
owner NAME NOT NULL
)`,
populate: func(ctx context.Context, p *planner, _ *dbdesc.Immutable, addRow func(...tree.Datum) error) error {
return forEachDatabaseDesc(ctx, p, nil /* all databases */, true, /* requiresPrivileges */
func(db *dbdesc.Immutable) error {
return addRow(
tree.NewDInt(tree.DInt(db.GetID())), // id
tree.NewDString(db.GetName()), // name
tree.NewDName(getOwnerOfDesc(db)), // owner
)
})
},
Expand Down
2 changes: 1 addition & 1 deletion pkg/sql/delegate/show_databases.go
Expand Up @@ -19,7 +19,7 @@ import (

func (d *delegator) delegateShowDatabases(stmt *tree.ShowDatabases) (tree.Statement, error) {
query := `SELECT
name AS database_name
name AS database_name, owner
`

if stmt.WithComment {
Expand Down
10 changes: 6 additions & 4 deletions pkg/sql/delegate/show_enums.go
Expand Up @@ -15,24 +15,26 @@ import "github.com/cockroachdb/cockroach/pkg/sql/sem/tree"
func (d *delegator) delegateShowEnums() (tree.Statement, error) {
query := `
SELECT
schema, name, string_agg(label, '|') AS value
schema, name, string_agg(label, '|'), owner AS value
FROM
(
SELECT
nsp.nspname AS schema,
type.typname AS name,
enum.enumlabel AS label
enum.enumlabel AS label,
rl.rolname AS owner
FROM
pg_catalog.pg_enum AS enum
JOIN pg_catalog.pg_type AS type ON (type.oid = enum.enumtypid)
LEFT JOIN pg_catalog.pg_roles AS rl on (type.typowner = rl.oid)
JOIN pg_catalog.pg_namespace AS nsp ON (type.typnamespace = nsp.oid)
ORDER BY
(enumtypid, enumsortorder)
)
GROUP BY
(schema, name)
(schema, name, owner)
ORDER BY
(schema, name);
(schema, name, owner);
`
return parse(query)
}
6 changes: 4 additions & 2 deletions pkg/sql/delegate/show_schemas.go
Expand Up @@ -27,8 +27,10 @@ func (d *delegator) delegateShowSchemas(n *tree.ShowSchemas) (tree.Statement, er
return nil, err
}
getSchemasQuery := fmt.Sprintf(`
SELECT schema_name
FROM %[1]s.information_schema.schemata
SELECT nspname AS schema_name, rolname AS owner
FROM %[1]s.information_schema.schemata i
INNER JOIN pg_catalog.pg_namespace n ON (n.nspname = i.schema_name)
LEFT JOIN pg_catalog.pg_roles r ON (n.nspowner = r.oid)
WHERE catalog_name = %[2]s
ORDER BY schema_name`,
name.String(), // note: (tree.Name).String() != string(name)
Expand Down
2 changes: 2 additions & 0 deletions pkg/sql/delegate/show_tables.go
Expand Up @@ -52,9 +52,11 @@ SELECT ns.nspname AS schema_name,
WHEN pc.relkind = 'S' THEN 'sequence'
ELSE 'table'
END AS type,
rl.rolname AS owner,
s.estimated_row_count AS estimated_row_count
%[3]s
FROM %[1]s.pg_catalog.pg_class AS pc
LEFT JOIN %[1]s.pg_catalog.pg_roles AS rl on (pc.relowner = rl.oid)
JOIN %[1]s.pg_catalog.pg_namespace AS ns ON (ns.oid = pc.relnamespace)
LEFT
JOIN %[1]s.pg_catalog.pg_description AS pd ON (pc.oid = pd.objoid AND pd.objsubid = 0)
Expand Down
84 changes: 42 additions & 42 deletions pkg/sql/logictest/testdata/logic_test/crdb_internal
Expand Up @@ -11,50 +11,50 @@ CREATE TABLE crdb_internal.t (x INT)
query error database "crdb_internal" does not exist
DROP DATABASE crdb_internal

query TTTI
query TTTTI
SHOW TABLES FROM crdb_internal
----
crdb_internal backward_dependencies table NULL
crdb_internal builtin_functions table NULL
crdb_internal cluster_queries table NULL
crdb_internal cluster_sessions table NULL
crdb_internal cluster_settings table NULL
crdb_internal cluster_transactions table NULL
crdb_internal create_statements table NULL
crdb_internal create_type_statements table NULL
crdb_internal databases table NULL
crdb_internal feature_usage table NULL
crdb_internal forward_dependencies table NULL
crdb_internal gossip_alerts table NULL
crdb_internal gossip_liveness table NULL
crdb_internal gossip_network table NULL
crdb_internal gossip_nodes table NULL
crdb_internal index_columns table NULL
crdb_internal jobs table NULL
crdb_internal kv_node_status table NULL
crdb_internal kv_store_status table NULL
crdb_internal leases table NULL
crdb_internal node_build_info table NULL
crdb_internal node_metrics table NULL
crdb_internal node_queries table NULL
crdb_internal node_runtime_info table NULL
crdb_internal node_sessions table NULL
crdb_internal node_statement_statistics table NULL
crdb_internal node_transaction_statistics table NULL
crdb_internal node_transactions table NULL
crdb_internal node_txn_stats table NULL
crdb_internal partitions table NULL
crdb_internal predefined_comments table NULL
crdb_internal ranges view NULL
crdb_internal ranges_no_leases table NULL
crdb_internal schema_changes table NULL
crdb_internal session_trace table NULL
crdb_internal session_variables table NULL
crdb_internal table_columns table NULL
crdb_internal table_indexes table NULL
crdb_internal table_row_statistics table NULL
crdb_internal tables table NULL
crdb_internal zones table NULL
crdb_internal backward_dependencies table NULL NULL
crdb_internal builtin_functions table NULL NULL
crdb_internal cluster_queries table NULL NULL
crdb_internal cluster_sessions table NULL NULL
crdb_internal cluster_settings table NULL NULL
crdb_internal cluster_transactions table NULL NULL
crdb_internal create_statements table NULL NULL
crdb_internal create_type_statements table NULL NULL
crdb_internal databases table NULL NULL
crdb_internal feature_usage table NULL NULL
crdb_internal forward_dependencies table NULL NULL
crdb_internal gossip_alerts table NULL NULL
crdb_internal gossip_liveness table NULL NULL
crdb_internal gossip_network table NULL NULL
crdb_internal gossip_nodes table NULL NULL
crdb_internal index_columns table NULL NULL
crdb_internal jobs table NULL NULL
crdb_internal kv_node_status table NULL NULL
crdb_internal kv_store_status table NULL NULL
crdb_internal leases table NULL NULL
crdb_internal node_build_info table NULL NULL
crdb_internal node_metrics table NULL NULL
crdb_internal node_queries table NULL NULL
crdb_internal node_runtime_info table NULL NULL
crdb_internal node_sessions table NULL NULL
crdb_internal node_statement_statistics table NULL NULL
crdb_internal node_transaction_statistics table NULL NULL
crdb_internal node_transactions table NULL NULL
crdb_internal node_txn_stats table NULL NULL
crdb_internal partitions table NULL NULL
crdb_internal predefined_comments table NULL NULL
crdb_internal ranges view NULL NULL
crdb_internal ranges_no_leases table NULL NULL
crdb_internal schema_changes table NULL NULL
crdb_internal session_trace table NULL NULL
crdb_internal session_variables table NULL NULL
crdb_internal table_columns table NULL NULL
crdb_internal table_indexes table NULL NULL
crdb_internal table_row_statistics table NULL NULL
crdb_internal tables table NULL NULL
crdb_internal zones table NULL NULL

statement ok
CREATE DATABASE testdb; CREATE TABLE testdb.foo(x INT)
Expand Down
85 changes: 43 additions & 42 deletions pkg/sql/logictest/testdata/logic_test/crdb_internal_tenant
Expand Up @@ -20,50 +20,51 @@ CREATE TABLE crdb_internal.t (x INT)
query error database "crdb_internal" does not exist
DROP DATABASE crdb_internal

query TTTI
query TTTTI
SHOW TABLES FROM crdb_internal
----
crdb_internal backward_dependencies table NULL
crdb_internal builtin_functions table NULL
crdb_internal cluster_queries table NULL
crdb_internal cluster_sessions table NULL
crdb_internal cluster_settings table NULL
crdb_internal cluster_transactions table NULL
crdb_internal create_statements table NULL
crdb_internal create_type_statements table NULL
crdb_internal databases table NULL
crdb_internal feature_usage table NULL
crdb_internal forward_dependencies table NULL
crdb_internal gossip_alerts table NULL
crdb_internal gossip_liveness table NULL
crdb_internal gossip_network table NULL
crdb_internal gossip_nodes table NULL
crdb_internal index_columns table NULL
crdb_internal jobs table NULL
crdb_internal kv_node_status table NULL
crdb_internal kv_store_status table NULL
crdb_internal leases table NULL
crdb_internal node_build_info table NULL
crdb_internal node_metrics table NULL
crdb_internal node_queries table NULL
crdb_internal node_runtime_info table NULL
crdb_internal node_sessions table NULL
crdb_internal node_statement_statistics table NULL
crdb_internal node_transaction_statistics table NULL
crdb_internal node_transactions table NULL
crdb_internal node_txn_stats table NULL
crdb_internal partitions table NULL
crdb_internal predefined_comments table NULL
crdb_internal ranges view NULL
crdb_internal ranges_no_leases table NULL
crdb_internal schema_changes table NULL
crdb_internal session_trace table NULL
crdb_internal session_variables table NULL
crdb_internal table_columns table NULL
crdb_internal table_indexes table NULL
crdb_internal table_row_statistics table NULL
crdb_internal tables table NULL
crdb_internal zones table NULL
crdb_internal backward_dependencies table NULL NULL
crdb_internal builtin_functions table NULL NULL
crdb_internal cluster_queries table NULL NULL
crdb_internal cluster_sessions table NULL NULL
crdb_internal cluster_settings table NULL NULL
crdb_internal cluster_transactions table NULL NULL
crdb_internal create_statements table NULL NULL
crdb_internal create_type_statements table NULL NULL
crdb_internal databases table NULL NULL
crdb_internal feature_usage table NULL NULL
crdb_internal forward_dependencies table NULL NULL
crdb_internal gossip_alerts table NULL NULL
crdb_internal gossip_liveness table NULL NULL
crdb_internal gossip_network table NULL NULL
crdb_internal gossip_nodes table NULL NULL
crdb_internal index_columns table NULL NULL
crdb_internal jobs table NULL NULL
crdb_internal kv_node_status table NULL NULL
crdb_internal kv_store_status table NULL NULL
crdb_internal leases table NULL NULL
crdb_internal node_build_info table NULL NULL
crdb_internal node_metrics table NULL NULL
crdb_internal node_queries table NULL NULL
crdb_internal node_runtime_info table NULL NULL
crdb_internal node_sessions table NULL NULL
crdb_internal node_statement_statistics table NULL NULL
crdb_internal node_transaction_statistics table NULL NULL
crdb_internal node_transactions table NULL NULL
crdb_internal node_txn_stats table NULL NULL
crdb_internal partitions table NULL NULL
crdb_internal predefined_comments table NULL NULL
crdb_internal ranges view NULL NULL
crdb_internal ranges_no_leases table NULL NULL
crdb_internal schema_changes table NULL NULL
crdb_internal session_trace table NULL NULL
crdb_internal session_variables table NULL NULL
crdb_internal table_columns table NULL NULL
crdb_internal table_indexes table NULL NULL
crdb_internal table_row_statistics table NULL NULL
crdb_internal tables table NULL NULL
crdb_internal zones table NULL NULL


statement ok
CREATE DATABASE testdb; CREATE TABLE testdb.foo(x INT)
Expand Down