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])
+  }
 }