This is an automated email from the ASF dual-hosted git repository.

chengpan 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 4cceb1dbd [KYUUBI #5797] Support to describe engine with command in 
current session
4cceb1dbd is described below

commit 4cceb1dbd72ec9d6ac0c9dc9a5b2b21f0600ba9b
Author: wangjunbo <[email protected]>
AuthorDate: Thu Jan 4 17:59:06 2024 +0800

    [KYUUBI #5797] Support to describe engine with command in current session
    
    # :mag: Description
    ## Issue References ๐Ÿ”—
    
    This pull request fixes #5797 ,impl `describe engine` first, `restart 
engine` will impl soon.
    
    ## Describe Your Solution ๐Ÿ”ง
    
    Support to describe engine with command in current session.
    
    ## Types of changes :bookmark:
    
    - [ ] Bugfix (non-breaking change which fixes an issue)
    - [x] New feature (non-breaking change which adds functionality)
    - [ ] Breaking change (fix or feature that would cause existing 
functionality to change)
    
    ## Test Plan ๐Ÿงช
    
    #### Behavior Without This Pull Request :coffin:
    
    #### Behavior With This Pull Request :tada:
    
    user can use sql `KYUUBI DESCRIBE[DESC] ENGINE` to show engine info.
    
    #### Related Unit Tests
    
    ---
    
    # Checklist ๐Ÿ“
    
    - [ ] This patch was not authored or co-authored using [Generative 
Tooling](https://www.apache.org/legal/generative-tooling.html)
    
    **Be nice. Be informative.**
    
    Closes #5931 from Kwafoor/kyuubi_5797_desc_engine.
    
    Closes #5797
    
    f768fb5ad [wangjunbo] [KYUUBI #5797] fix
    4746fa6b0 [wangjunbo] [KYUUBI #5797] Support to describe engine with 
command in current session
    
    Authored-by: wangjunbo <[email protected]>
    Signed-off-by: Cheng Pan <[email protected]>
---
 .../org/apache/kyuubi/sql/KyuubiSqlBaseLexer.g4    |  2 ++
 .../org/apache/kyuubi/sql/KyuubiSqlBaseParser.g4   |  1 +
 .../sql/parser/server/KyuubiAstBuilder.scala       |  7 +++++-
 ...{DescribeSession.scala => DescribeEngine.scala} | 27 +++++++++++-----------
 .../kyuubi/sql/plan/command/DescribeSession.scala  |  6 ++---
 ...essionSuite.scala => DescribeEngineSuite.scala} | 20 ++++++++--------
 .../operation/parser/DescribeSessionSuite.scala    | 18 ++++++++-------
 .../apache/kyuubi/parser/KyuubiParserSuite.scala   |  9 +++++++-
 8 files changed, 55 insertions(+), 35 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 7e7dee0e3..c6fd6676b 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
@@ -51,6 +51,8 @@ KYUUBIADMIN: 'KYUUBIADMIN';
 
 SESSION: 'SESSION';
 
+ENGINE: 'ENGINE';
+
 BACKQUOTED_IDENTIFIER
     : '`' ( ~'`' | '``' )* '`'
     ;
diff --git 
a/kyuubi-server/src/main/antlr4/org/apache/kyuubi/sql/KyuubiSqlBaseParser.g4 
b/kyuubi-server/src/main/antlr4/org/apache/kyuubi/sql/KyuubiSqlBaseParser.g4
index 7360c8410..67bb7e35a 100644
--- a/kyuubi-server/src/main/antlr4/org/apache/kyuubi/sql/KyuubiSqlBaseParser.g4
+++ b/kyuubi-server/src/main/antlr4/org/apache/kyuubi/sql/KyuubiSqlBaseParser.g4
@@ -30,4 +30,5 @@ statement
 
 runnableCommand
     : (DESC | DESCRIBE) SESSION                                     
#describeSession
+    | (DESC | DESCRIBE) ENGINE                                      
#describeEngine
     ;
diff --git 
a/kyuubi-server/src/main/scala/org/apache/kyuubi/sql/parser/server/KyuubiAstBuilder.scala
 
b/kyuubi-server/src/main/scala/org/apache/kyuubi/sql/parser/server/KyuubiAstBuilder.scala
index 6c5f6a395..b29b57cbd 100644
--- 
a/kyuubi-server/src/main/scala/org/apache/kyuubi/sql/parser/server/KyuubiAstBuilder.scala
+++ 
b/kyuubi-server/src/main/scala/org/apache/kyuubi/sql/parser/server/KyuubiAstBuilder.scala
@@ -20,7 +20,7 @@ package org.apache.kyuubi.sql.parser.server
 import org.apache.kyuubi.sql.{KyuubiSqlBaseParser, 
KyuubiSqlBaseParserBaseVisitor}
 import org.apache.kyuubi.sql.KyuubiSqlBaseParser.SingleStatementContext
 import org.apache.kyuubi.sql.plan.{KyuubiTreeNode, PassThroughNode}
-import org.apache.kyuubi.sql.plan.command.{DescribeSession, RunnableCommand}
+import org.apache.kyuubi.sql.plan.command.{DescribeEngine, DescribeSession, 
RunnableCommand}
 
 class KyuubiAstBuilder extends KyuubiSqlBaseParserBaseVisitor[AnyRef] {
 
@@ -44,4 +44,9 @@ class KyuubiAstBuilder extends 
KyuubiSqlBaseParserBaseVisitor[AnyRef] {
       : RunnableCommand = {
     DescribeSession()
   }
+
+  override def visitDescribeEngine(ctx: 
KyuubiSqlBaseParser.DescribeEngineContext)
+      : RunnableCommand = {
+    DescribeEngine()
+  }
 }
diff --git 
a/kyuubi-server/src/main/scala/org/apache/kyuubi/sql/plan/command/DescribeSession.scala
 
b/kyuubi-server/src/main/scala/org/apache/kyuubi/sql/plan/command/DescribeEngine.scala
similarity index 65%
copy from 
kyuubi-server/src/main/scala/org/apache/kyuubi/sql/plan/command/DescribeSession.scala
copy to 
kyuubi-server/src/main/scala/org/apache/kyuubi/sql/plan/command/DescribeEngine.scala
index e1d77f296..85ec53685 100644
--- 
a/kyuubi-server/src/main/scala/org/apache/kyuubi/sql/plan/command/DescribeSession.scala
+++ 
b/kyuubi-server/src/main/scala/org/apache/kyuubi/sql/plan/command/DescribeEngine.scala
@@ -20,44 +20,45 @@ package org.apache.kyuubi.sql.plan.command
 import scala.collection.mutable.ListBuffer
 
 import org.apache.kyuubi.operation.IterableFetchIterator
-import org.apache.kyuubi.session.KyuubiSession
+import org.apache.kyuubi.session.{KyuubiSession, KyuubiSessionImpl}
 import org.apache.kyuubi.shaded.hive.service.rpc.thrift.TTypeId
 import org.apache.kyuubi.sql.schema.{Column, Row, Schema}
 
 /**
- * A runnable node for description the current session.
+ * A runnable node for description the current session engine.
  *
  * The syntax of using this command in SQL is:
  * {{{
- *   [DESC|DESCRIBE] SESSION;
+ *   [DESC|DESCRIBE] ENGINE;
  * }}}
  */
-case class DescribeSession() extends RunnableCommand {
+case class DescribeEngine() extends RunnableCommand {
 
   override def run(kyuubiSession: KyuubiSession): Unit = {
     val rows = Seq(kyuubiSession).map { session =>
+      lazy val client = session.asInstanceOf[KyuubiSessionImpl].client
       val values = new ListBuffer[String]()
-      values += session.handle.identifier.toString
-      values += session.user
-      values += session.sessionType.toString
+      values += client.engineId.getOrElse("")
+      values += client.engineName.getOrElse("")
+      values += client.engineUrl.getOrElse("")
       Row(values.toList)
     }
     iter = new IterableFetchIterator(rows)
   }
 
   override def resultSchema: Schema = {
-    Schema(DescribeSession.outputCols().toList)
+    Schema(DescribeEngine.outputCols().toList)
   }
 
-  override def name(): String = "Describe Session Node"
+  override def name(): String = "Describe Engine Node"
 }
 
-object DescribeSession {
+object DescribeEngine {
 
   def outputCols(): Seq[Column] = {
     Seq(
-      Column("id", TTypeId.STRING_TYPE, Some("Kyuubi session identify")),
-      Column("user", TTypeId.STRING_TYPE, Some("Kyuubi session user")),
-      Column("type", TTypeId.STRING_TYPE, Some("Kyuubi session type")))
+      Column("ENGINE_ID", TTypeId.STRING_TYPE, Some("Kyuubi engine identify")),
+      Column("ENGINE_NAME", TTypeId.STRING_TYPE, Some("Kyuubi engine name")),
+      Column("ENGINE_URL", TTypeId.STRING_TYPE, Some("Kyuubi engine url")))
   }
 }
diff --git 
a/kyuubi-server/src/main/scala/org/apache/kyuubi/sql/plan/command/DescribeSession.scala
 
b/kyuubi-server/src/main/scala/org/apache/kyuubi/sql/plan/command/DescribeSession.scala
index e1d77f296..8abe93e17 100644
--- 
a/kyuubi-server/src/main/scala/org/apache/kyuubi/sql/plan/command/DescribeSession.scala
+++ 
b/kyuubi-server/src/main/scala/org/apache/kyuubi/sql/plan/command/DescribeSession.scala
@@ -56,8 +56,8 @@ object DescribeSession {
 
   def outputCols(): Seq[Column] = {
     Seq(
-      Column("id", TTypeId.STRING_TYPE, Some("Kyuubi session identify")),
-      Column("user", TTypeId.STRING_TYPE, Some("Kyuubi session user")),
-      Column("type", TTypeId.STRING_TYPE, Some("Kyuubi session type")))
+      Column("SESSION_ID", TTypeId.STRING_TYPE, Some("Kyuubi session 
identify")),
+      Column("SESSION_USER", TTypeId.STRING_TYPE, Some("Kyuubi session user")),
+      Column("SESSION_TYPE", TTypeId.STRING_TYPE, Some("Kyuubi session type")))
   }
 }
diff --git 
a/kyuubi-server/src/test/scala/org/apache/kyuubi/operation/parser/DescribeSessionSuite.scala
 
b/kyuubi-server/src/test/scala/org/apache/kyuubi/operation/parser/DescribeEngineSuite.scala
similarity index 60%
copy from 
kyuubi-server/src/test/scala/org/apache/kyuubi/operation/parser/DescribeSessionSuite.scala
copy to 
kyuubi-server/src/test/scala/org/apache/kyuubi/operation/parser/DescribeEngineSuite.scala
index e6f42ed62..d9488abd6 100644
--- 
a/kyuubi-server/src/test/scala/org/apache/kyuubi/operation/parser/DescribeSessionSuite.scala
+++ 
b/kyuubi-server/src/test/scala/org/apache/kyuubi/operation/parser/DescribeEngineSuite.scala
@@ -17,17 +17,19 @@
 
 package org.apache.kyuubi.operation.parser
 
-class DescribeSessionSuite extends ExecutedCommandExecSuite {
+class DescribeEngineSuite extends ExecutedCommandExecSuite {
 
-  test("desc kyuubi session") {
-    withJdbcStatement() { statement =>
-      val resultSet = statement.executeQuery("KYUUBI DESC SESSION")
-      assert(resultSet.next())
+  test("desc/describe kyuubi engine") {
+    Seq("DESC", "DESCRIBE").foreach { desc =>
+      withJdbcStatement() { statement =>
+        val resultSet = statement.executeQuery(s"KYUUBI $desc ENGINE")
+        assert(resultSet.next())
 
-      assert(resultSet.getMetaData.getColumnCount == 3)
-      assert(resultSet.getMetaData.getColumnName(1) == "id")
-      assert(resultSet.getMetaData.getColumnName(2) == "user")
-      assert(resultSet.getMetaData.getColumnName(3) == "type")
+        assert(resultSet.getMetaData.getColumnCount == 3)
+        assert(resultSet.getMetaData.getColumnName(1) == "ENGINE_ID")
+        assert(resultSet.getMetaData.getColumnName(2) == "ENGINE_NAME")
+        assert(resultSet.getMetaData.getColumnName(3) == "ENGINE_URL")
+      }
     }
   }
 }
diff --git 
a/kyuubi-server/src/test/scala/org/apache/kyuubi/operation/parser/DescribeSessionSuite.scala
 
b/kyuubi-server/src/test/scala/org/apache/kyuubi/operation/parser/DescribeSessionSuite.scala
index e6f42ed62..b4eb0893d 100644
--- 
a/kyuubi-server/src/test/scala/org/apache/kyuubi/operation/parser/DescribeSessionSuite.scala
+++ 
b/kyuubi-server/src/test/scala/org/apache/kyuubi/operation/parser/DescribeSessionSuite.scala
@@ -19,15 +19,17 @@ package org.apache.kyuubi.operation.parser
 
 class DescribeSessionSuite extends ExecutedCommandExecSuite {
 
-  test("desc kyuubi session") {
-    withJdbcStatement() { statement =>
-      val resultSet = statement.executeQuery("KYUUBI DESC SESSION")
-      assert(resultSet.next())
+  test("desc/describe kyuubi session") {
+    Seq("DESC", "DESCRIBE").foreach { desc =>
+      withJdbcStatement() { statement =>
+        val resultSet = statement.executeQuery(s"KYUUBI $desc SESSION")
+        assert(resultSet.next())
 
-      assert(resultSet.getMetaData.getColumnCount == 3)
-      assert(resultSet.getMetaData.getColumnName(1) == "id")
-      assert(resultSet.getMetaData.getColumnName(2) == "user")
-      assert(resultSet.getMetaData.getColumnName(3) == "type")
+        assert(resultSet.getMetaData.getColumnCount == 3)
+        assert(resultSet.getMetaData.getColumnName(1) == "SESSION_ID")
+        assert(resultSet.getMetaData.getColumnName(2) == "SESSION_USER")
+        assert(resultSet.getMetaData.getColumnName(3) == "SESSION_TYPE")
+      }
     }
   }
 }
diff --git 
a/kyuubi-server/src/test/scala/org/apache/kyuubi/parser/KyuubiParserSuite.scala 
b/kyuubi-server/src/test/scala/org/apache/kyuubi/parser/KyuubiParserSuite.scala
index 6858ea0c0..b2ddfdfcd 100644
--- 
a/kyuubi-server/src/test/scala/org/apache/kyuubi/parser/KyuubiParserSuite.scala
+++ 
b/kyuubi-server/src/test/scala/org/apache/kyuubi/parser/KyuubiParserSuite.scala
@@ -20,7 +20,7 @@ package org.apache.kyuubi.parser
 import org.apache.kyuubi.KyuubiFunSuite
 import org.apache.kyuubi.sql.parser.server.KyuubiParser
 import org.apache.kyuubi.sql.plan.PassThroughNode
-import org.apache.kyuubi.sql.plan.command.DescribeSession
+import org.apache.kyuubi.sql.plan.command.{DescribeEngine, DescribeSession}
 
 class KyuubiParserSuite extends KyuubiFunSuite {
 
@@ -51,4 +51,11 @@ class KyuubiParserSuite extends KyuubiFunSuite {
     assert(node.isInstanceOf[DescribeSession])
     assert(node.name() == "Describe Session Node")
   }
+
+  test("Describe session engine") {
+    val node = parser.parsePlan("KYUUBI DESC ENGINE")
+
+    assert(node.isInstanceOf[DescribeEngine])
+    assert(node.name() == "Describe Engine Node")
+  }
 }

Reply via email to