Skip to content

Commit

Permalink
feat: support information_schema.schemata (#18709)
Browse files Browse the repository at this point in the history
  • Loading branch information
chenzl25 authored Sep 25, 2024
1 parent 7f39b6a commit 1993bae
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 15 deletions.
30 changes: 15 additions & 15 deletions e2e_test/batch/catalog/pg_class.slt.part
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,22 @@ query ITIT
SELECT oid,relname,relowner,relkind FROM pg_catalog.pg_class ORDER BY oid limit 15;
----
2147478647 columns 1 v
2147478648 tables 1 v
2147478649 views 1 v
2147478650 pg_am 1 v
2147478651 pg_attrdef 1 v
2147478652 pg_attribute 1 v
2147478653 pg_auth_members 1 v
2147478654 pg_cast 1 r
2147478655 pg_class 1 v
2147478656 pg_collation 1 v
2147478657 pg_constraint 1 r
2147478658 pg_conversion 1 v
2147478659 pg_database 1 v
2147478660 pg_depend 1 v
2147478661 pg_description 1 v
2147478648 schemata 1 v
2147478649 tables 1 v
2147478650 views 1 v
2147478651 pg_am 1 v
2147478652 pg_attrdef 1 v
2147478653 pg_attribute 1 v
2147478654 pg_auth_members 1 v
2147478655 pg_cast 1 r
2147478656 pg_class 1 v
2147478657 pg_collation 1 v
2147478658 pg_constraint 1 r
2147478659 pg_conversion 1 v
2147478660 pg_database 1 v
2147478661 pg_depend 1 v

query ITIT
SELECT oid,relname,relowner,relkind FROM pg_catalog.pg_class WHERE oid = 'pg_namespace'::regclass;
----
2147478670 pg_namespace 1 v
2147478671 pg_namespace 1 v
10 changes: 10 additions & 0 deletions e2e_test/ddl/schema.slt
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,16 @@ public
rw_catalog
user_for_authorization

query T rowsort
select schema_name from information_schema.schemata;
----
information_schema
myschema
pg_catalog
public
rw_catalog
user_for_authorization

statement error Permission denied
drop user user_for_authorization;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,6 @@
// limitations under the License.

mod columns;
mod schemata;
mod tables;
mod views;
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
// Copyright 2024 RisingWave Labs
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

use risingwave_common::types::Fields;
use risingwave_frontend_macro::system_catalog;

/// The view schemata contains all schemas in the current database that the current user has access to (by way of being the owner or having some privilege).
/// Ref: [`https://www.postgresql.org/docs/current/infoschema-schemata.html`]
#[system_catalog(
view,
"information_schema.schemata",
"SELECT CURRENT_DATABASE() AS catalog_name,
s.name AS schema_name,
u.name AS schema_owner,
NULL,
NULL,
NULL,
NULL
FROM rw_catalog.rw_schemas s
JOIN rw_catalog.rw_users u ON s.owner = u.id
WHERE has_schema_privilege(s.name, 'CREATE, USAGE')
ORDER BY catalog_name, schema_name"
)]
#[derive(Fields)]
struct Schemata {
catalog_name: String,
schema_name: String,
schema_owner: String,
default_character_set_catalog: String,
default_character_set_schema: String,
default_character_set_name: String,
sql_path: String,
}

0 comments on commit 1993bae

Please sign in to comment.