This is an automated email from the ASF dual-hosted git repository. morningman pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push: new 1f2bf39140 [feature-wip](multi-catalog) get catalog name from TableName (#10435) 1f2bf39140 is described below commit 1f2bf3914034b798d9945fd2a4292b4f70ebb007 Author: Ashin Gau <ashin...@users.noreply.github.com> AuthorDate: Tue Jun 28 10:42:37 2022 +0800 [feature-wip](multi-catalog) get catalog name from TableName (#10435) --- fe/fe-core/src/main/cup/sql_parser.cup | 12 ++++++++++++ .../src/main/java/org/apache/doris/analysis/TableName.java | 4 ++++ .../test/java/org/apache/doris/analysis/SwitchStmtTest.java | 8 +++++++- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/fe/fe-core/src/main/cup/sql_parser.cup b/fe/fe-core/src/main/cup/sql_parser.cup index 0d562e1620..5268236f21 100644 --- a/fe/fe-core/src/main/cup/sql_parser.cup +++ b/fe/fe-core/src/main/cup/sql_parser.cup @@ -1977,6 +1977,10 @@ tbl_pattern ::= {: RESULT = new TablePattern(db, tbl); :} + | ident_or_star:ctl DOT ident_or_star:db DOT ident_or_star:tbl + {: + RESULT = new TablePattern(ctl, db, tbl); + :} ; resource_pattern ::= @@ -4157,6 +4161,10 @@ star_expr ::= {: RESULT = SelectListItem.createStarItem(new TableName(db, tbl)); :} + | ident:ctl DOT ident:db DOT ident:tbl DOT STAR + {: + RESULT = SelectListItem.createStarItem(new TableName(ctl, db, tbl)); + :} ; opt_table_name ::= @@ -4174,6 +4182,8 @@ table_name ::= {: RESULT = new TableName(null, tbl); :} | ident:db DOT ident:tbl {: RESULT = new TableName(db, tbl); :} + | ident:ctl DOT ident:db DOT ident:tbl + {: RESULT = new TableName(ctl, db, tbl); :} ; encryptkey_name ::= @@ -5292,6 +5302,8 @@ column_ref ::= {: RESULT = new SlotRef(new TableName(null, tbl), col); :} | ident:db DOT ident:tbl DOT ident:col {: RESULT = new SlotRef(new TableName(db, tbl), col); :} + | ident:ctl DOT ident:db DOT ident:tbl DOT ident:col + {: RESULT = new SlotRef(new TableName(ctl, db, tbl), col); :} ; column_subscript ::= diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/TableName.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/TableName.java index 5e71b26c82..52b8651ec6 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/TableName.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/TableName.java @@ -28,6 +28,7 @@ import org.apache.doris.common.ErrorReport; import org.apache.doris.common.FeMetaVersion; import org.apache.doris.common.io.Text; import org.apache.doris.common.io.Writable; +import org.apache.doris.common.util.Util; import org.apache.doris.datasource.InternalDataSource; import org.apache.doris.persist.gson.GsonUtils; @@ -76,6 +77,9 @@ public class TableName implements Writable { ctl = InternalDataSource.INTERNAL_DS_NAME; } } + if (!ctl.equals(InternalDataSource.INTERNAL_DS_NAME)) { + Util.checkCatalogEnabled(); + } if (Strings.isNullOrEmpty(db)) { db = analyzer.getDefaultDb(); if (Strings.isNullOrEmpty(db)) { diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/SwitchStmtTest.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/SwitchStmtTest.java index d90a8a68d2..3a2ac9cf84 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/analysis/SwitchStmtTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/SwitchStmtTest.java @@ -65,11 +65,17 @@ public class SwitchStmtTest { GrantStmt grantRole1 = (GrantStmt) UtFrameUtils.parseAndAnalyzeStmt( "grant grant_priv on tpch.* to role 'role1';", rootCtx); auth.grant(grantRole1); + // grant with ctl.db.tbl. grant can succeed even if the catalog does not exist + GrantStmt grantRole1WithCtl = (GrantStmt) UtFrameUtils.parseAndAnalyzeStmt( + "grant select_priv on testc.testdb.* to role 'role1';", rootCtx); + auth.grant(grantRole1WithCtl); // user1 can't switch to hive auth.createUser((CreateUserStmt) UtFrameUtils.parseAndAnalyzeStmt( "create user 'user1'@'%' identified by 'pwd1' default role 'role1';", rootCtx)); user1 = new UserIdentity("user1", "%"); user1.analyze(clusterName); + // user1 has the privileges of testc which is granted by ctl.db.tbl format. + Assert.assertTrue(auth.getDbPrivTable().hasPrivsOfCatalog(user1, "testc")); // create catalog CreateCatalogStmt hiveCatalog = (CreateCatalogStmt) UtFrameUtils.parseAndAnalyzeStmt( @@ -136,7 +142,7 @@ public class SwitchStmtTest { Assert.assertEquals(user1ShowResult.size(), 1); Assert.assertEquals(user1ShowResult.get(0).get(0), InternalDataSource.INTERNAL_DS_NAME); - // mock the login of user1 + // mock the login of user2 ConnectContext user2Ctx = UtFrameUtils.createDefaultCtx(user2, "127.0.0.1"); ShowCatalogStmt user2Show = (ShowCatalogStmt) UtFrameUtils.parseAndAnalyzeStmt("show catalogs;", user2Ctx); List<List<String>> user2ShowResult = catalog.getDataSourceMgr().showCatalogs(user2Show).getResultRows(); --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org