You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kyuubi.apache.org by ul...@apache.org on 2023/01/03 07:18:32 UTC
[kyuubi] branch master updated: [KYUUBI #4053] Support GetTableTypes for trino fe
This is an automated email from the ASF dual-hosted git repository.
ulyssesyou pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kyuubi.git
The following commit(s) were added to refs/heads/master by this push:
new 5e9ef7a0d [KYUUBI #4053] Support GetTableTypes for trino fe
5e9ef7a0d is described below
commit 5e9ef7a0d1348498ef669bd8c31bfedf6efc7a4f
Author: Yikf <yi...@gmail.com>
AuthorDate: Tue Jan 3 15:18:20 2023 +0800
[KYUUBI #4053] Support GetTableTypes for trino fe
### _Why are the changes needed?_
We intend to introduce Trino FE at https://github.com/apache/kyuubi/issues/3901, This issue aims to support `GetTableTypes` as subtask.
### _How was this patch tested?_
- [x] Add some test cases that check the changes thoroughly including negative and positive cases if possible
- [ ] Add screenshots for manual tests if appropriate
- [x] [Run test](https://kyuubi.apache.org/docs/latest/develop_tools/testing.html#running-tests) locally before make a pull request
Closes #4054 from Yikf/getTableTypes.
Closes #4053
d702cf85 [Yikf] Support GetTableTypes for trino fe
Authored-by: Yikf <yi...@gmail.com>
Signed-off-by: ulysses-you <ul...@apache.org>
---
.../antlr4/org/apache/kyuubi/sql/KyuubiSqlBaseLexer.g4 | 2 ++
.../org/apache/kyuubi/sql/KyuubiTrinoFeBaseParser.g4 | 1 +
.../trino/api/KyuubiTrinoOperationTranslator.scala | 4 +++-
.../sql/parser/trino/KyuubiTrinoFeAstBuilder.scala | 17 +++++++++++------
.../kyuubi/sql/plan/trino/TrinoFeOperations.scala | 4 ++++
.../kyuubi/parser/trino/KyuubiTrinoFeParserSuite.scala | 11 ++++++++++-
6 files changed, 31 insertions(+), 8 deletions(-)
diff --git a/kyuubi-server/src/main/antlr4/org/apache/kyuubi/sql/KyuubiSqlBaseLexer.g4 b/kyuubi-server/src/main/antlr4/org/apache/kyuubi/sql/KyuubiSqlBaseLexer.g4
index bfdb9641d..494c2e847 100644
--- a/kyuubi-server/src/main/antlr4/org/apache/kyuubi/sql/KyuubiSqlBaseLexer.g4
+++ b/kyuubi-server/src/main/antlr4/org/apache/kyuubi/sql/KyuubiSqlBaseLexer.g4
@@ -74,9 +74,11 @@ SELECT: 'SELECT';
SESSION: 'SESSION';
SYSTEM_JDBC_CATALOGS: 'SYSTEM.JDBC.CATALOGS';
SYSTEM_JDBC_SCHEMAS: 'SYSTEM.JDBC.SCHEMAS';
+SYSTEM_JDBC_TABLE_TYPES: 'SYSTEM.JDBC.TABLE_TYPES';
TABLE_CAT: 'TABLE_CAT';
TABLE_CATALOG: 'TABLE_CATALOG';
TABLE_SCHEM: 'TABLE_SCHEM';
+TABLE_TYPE: 'TABLE_TYPE';
WHERE: 'WHERE';
diff --git a/kyuubi-server/src/main/antlr4/org/apache/kyuubi/sql/KyuubiTrinoFeBaseParser.g4 b/kyuubi-server/src/main/antlr4/org/apache/kyuubi/sql/KyuubiTrinoFeBaseParser.g4
index 0c2f5007f..87d1200b9 100644
--- a/kyuubi-server/src/main/antlr4/org/apache/kyuubi/sql/KyuubiTrinoFeBaseParser.g4
+++ b/kyuubi-server/src/main/antlr4/org/apache/kyuubi/sql/KyuubiTrinoFeBaseParser.g4
@@ -28,5 +28,6 @@ statement
(WHERE (TABLE_CATALOG EQ catalog=STRING+)? AND? (TABLE_SCHEM LIKE schema=STRING+)?)?
ORDER BY TABLE_CATALOG COMMA TABLE_SCHEM #getSchemas
| SELECT TABLE_CAT FROM SYSTEM_JDBC_CATALOGS ORDER BY TABLE_CAT #getCatalogs
+ | SELECT TABLE_TYPE FROM SYSTEM_JDBC_TABLE_TYPES ORDER BY TABLE_TYPE #getTableTypes
| .*? #passThrough
;
diff --git a/kyuubi-server/src/main/scala/org/apache/kyuubi/server/trino/api/KyuubiTrinoOperationTranslator.scala b/kyuubi-server/src/main/scala/org/apache/kyuubi/server/trino/api/KyuubiTrinoOperationTranslator.scala
index 4d64cf157..ee75b400f 100644
--- a/kyuubi-server/src/main/scala/org/apache/kyuubi/server/trino/api/KyuubiTrinoOperationTranslator.scala
+++ b/kyuubi-server/src/main/scala/org/apache/kyuubi/server/trino/api/KyuubiTrinoOperationTranslator.scala
@@ -23,7 +23,7 @@ import org.apache.kyuubi.operation.OperationHandle
import org.apache.kyuubi.service.BackendService
import org.apache.kyuubi.sql.parser.trino.KyuubiTrinoFeParser
import org.apache.kyuubi.sql.plan.PassThroughNode
-import org.apache.kyuubi.sql.plan.trino.{GetCatalogs, GetSchemas}
+import org.apache.kyuubi.sql.plan.trino.{GetCatalogs, GetSchemas, GetTableTypes}
class KyuubiTrinoOperationTranslator(backendService: BackendService) {
lazy val parser = new KyuubiTrinoFeParser()
@@ -46,6 +46,8 @@ class KyuubiTrinoOperationTranslator(backendService: BackendService) {
backendService.getSchemas(sessionHandle, catalogName, schemaPattern)
case GetCatalogs() =>
backendService.getCatalogs(sessionHandle)
+ case GetTableTypes() =>
+ backendService.getTableTypes(sessionHandle)
case PassThroughNode() =>
backendService.executeStatement(sessionHandle, statement, configs, runAsync, queryTimeout)
}
diff --git a/kyuubi-server/src/main/scala/org/apache/kyuubi/sql/parser/trino/KyuubiTrinoFeAstBuilder.scala b/kyuubi-server/src/main/scala/org/apache/kyuubi/sql/parser/trino/KyuubiTrinoFeAstBuilder.scala
index 14cac426a..3d83e6f96 100644
--- a/kyuubi-server/src/main/scala/org/apache/kyuubi/sql/parser/trino/KyuubiTrinoFeAstBuilder.scala
+++ b/kyuubi-server/src/main/scala/org/apache/kyuubi/sql/parser/trino/KyuubiTrinoFeAstBuilder.scala
@@ -17,23 +17,24 @@
package org.apache.kyuubi.sql.parser.trino
-import org.apache.kyuubi.sql.{KyuubiTrinoFeBaseParser, KyuubiTrinoFeBaseParserBaseVisitor}
+import org.apache.kyuubi.sql.KyuubiTrinoFeBaseParser._
+import org.apache.kyuubi.sql.KyuubiTrinoFeBaseParserBaseVisitor
import org.apache.kyuubi.sql.parser.KyuubiParser
import org.apache.kyuubi.sql.plan.{KyuubiTreeNode, PassThroughNode}
-import org.apache.kyuubi.sql.plan.trino.{GetCatalogs, GetSchemas}
+import org.apache.kyuubi.sql.plan.trino.{GetCatalogs, GetSchemas, GetTableTypes}
class KyuubiTrinoFeAstBuilder extends KyuubiTrinoFeBaseParserBaseVisitor[AnyRef] {
override def visitSingleStatement(
- ctx: KyuubiTrinoFeBaseParser.SingleStatementContext): KyuubiTreeNode = {
+ ctx: SingleStatementContext): KyuubiTreeNode = {
visit(ctx.statement).asInstanceOf[KyuubiTreeNode]
}
- override def visitPassThrough(ctx: KyuubiTrinoFeBaseParser.PassThroughContext): KyuubiTreeNode = {
+ override def visitPassThrough(ctx: PassThroughContext): KyuubiTreeNode = {
PassThroughNode()
}
- override def visitGetSchemas(ctx: KyuubiTrinoFeBaseParser.GetSchemasContext): KyuubiTreeNode = {
+ override def visitGetSchemas(ctx: GetSchemasContext): KyuubiTreeNode = {
val catalog = if (ctx.catalog == null) {
null
} else {
@@ -48,7 +49,11 @@ class KyuubiTrinoFeAstBuilder extends KyuubiTrinoFeBaseParserBaseVisitor[AnyRef]
GetSchemas(catalog, schema)
}
- override def visitGetCatalogs(ctx: KyuubiTrinoFeBaseParser.GetCatalogsContext): KyuubiTreeNode = {
+ override def visitGetCatalogs(ctx: GetCatalogsContext): KyuubiTreeNode = {
GetCatalogs()
}
+
+ override def visitGetTableTypes(ctx: GetTableTypesContext): KyuubiTreeNode = {
+ GetTableTypes()
+ }
}
diff --git a/kyuubi-server/src/main/scala/org/apache/kyuubi/sql/plan/trino/TrinoFeOperations.scala b/kyuubi-server/src/main/scala/org/apache/kyuubi/sql/plan/trino/TrinoFeOperations.scala
index d1d7ad424..afe9182f1 100644
--- a/kyuubi-server/src/main/scala/org/apache/kyuubi/sql/plan/trino/TrinoFeOperations.scala
+++ b/kyuubi-server/src/main/scala/org/apache/kyuubi/sql/plan/trino/TrinoFeOperations.scala
@@ -30,3 +30,7 @@ case class GetSchemas(catalogName: String, schemaPattern: String) extends Kyuubi
case class GetCatalogs() extends KyuubiTreeNode {
override def name(): String = "Get Catalogs"
}
+
+case class GetTableTypes() extends KyuubiTreeNode {
+ override def name(): String = "Get Table Types"
+}
diff --git a/kyuubi-server/src/test/scala/org/apache/kyuubi/parser/trino/KyuubiTrinoFeParserSuite.scala b/kyuubi-server/src/test/scala/org/apache/kyuubi/parser/trino/KyuubiTrinoFeParserSuite.scala
index 4c7d1e457..a1aa36d51 100644
--- a/kyuubi-server/src/test/scala/org/apache/kyuubi/parser/trino/KyuubiTrinoFeParserSuite.scala
+++ b/kyuubi-server/src/test/scala/org/apache/kyuubi/parser/trino/KyuubiTrinoFeParserSuite.scala
@@ -20,7 +20,7 @@ package org.apache.kyuubi.parser.trino
import org.apache.kyuubi.KyuubiFunSuite
import org.apache.kyuubi.sql.parser.trino.KyuubiTrinoFeParser
import org.apache.kyuubi.sql.plan.{KyuubiTreeNode, PassThroughNode}
-import org.apache.kyuubi.sql.plan.trino.{GetCatalogs, GetSchemas}
+import org.apache.kyuubi.sql.plan.trino.{GetCatalogs, GetSchemas, GetTableTypes}
class KyuubiTrinoFeParserSuite extends KyuubiFunSuite {
val parser = new KyuubiTrinoFeParser()
@@ -85,4 +85,13 @@ class KyuubiTrinoFeParserSuite extends KyuubiFunSuite {
assert(kyuubiTreeNode.isInstanceOf[GetCatalogs])
}
+
+ test("Support GetTableTypes for Trino Fe") {
+ val kyuubiTreeNode = parse(
+ """
+ |SELECT TABLE_TYPE FROM system.jdbc.table_types ORDER BY TABLE_TYPE
+ |""".stripMargin)
+
+ assert(kyuubiTreeNode.isInstanceOf[GetTableTypes])
+ }
}