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 <[email protected]>
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 <[email protected]>
    Signed-off-by: ulysses-you <[email protected]>
---
 .../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])
+  }
 }

Reply via email to