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