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