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 bf0307565 [KYUUBI #5081] Minor refactor JDBCMetadataStore
bf0307565 is described below
commit bf0307565cf1196447403c6a6f8e240ac01d1cd5
Author: Cheng Pan <[email protected]>
AuthorDate: Fri Jul 21 20:24:32 2023 +0800
[KYUUBI #5081] Minor refactor JDBCMetadataStore
### _Why are the changes needed?_
This is a pure code refactor extracted from
https://github.com/apache/kyuubi/pull/4790 to reduce the diff.
### _How was this patch tested?_
- [ ] 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.readthedocs.io/en/master/contributing/code/testing.html#running-tests)
locally before make a pull request
Closes #5081 from pan3793/dialect.
Closes #5081
537d62303 [Cheng Pan] Minor refactor JDBCMetadataStore
Authored-by: Cheng Pan <[email protected]>
Signed-off-by: Cheng Pan <[email protected]>
---
.../server/metadata/jdbc/JDBCMetadataStore.scala | 38 ++++++++++++----------
.../server/metadata/jdbc/JdbcDatabaseDialect.scala | 10 +++---
2 files changed, 26 insertions(+), 22 deletions(-)
diff --git
a/kyuubi-server/src/main/scala/org/apache/kyuubi/server/metadata/jdbc/JDBCMetadataStore.scala
b/kyuubi-server/src/main/scala/org/apache/kyuubi/server/metadata/jdbc/JDBCMetadataStore.scala
index 9f0bd6843..798e52d39 100644
---
a/kyuubi-server/src/main/scala/org/apache/kyuubi/server/metadata/jdbc/JDBCMetadataStore.scala
+++
b/kyuubi-server/src/main/scala/org/apache/kyuubi/server/metadata/jdbc/JDBCMetadataStore.scala
@@ -54,7 +54,7 @@ class JDBCMetadataStore(conf: KyuubiConf) extends
MetadataStore with Logging {
throw new IllegalArgumentException("No jdbc driver defined"))
}
- private val databaseAdaptor = dbType match {
+ private val dialect = dbType match {
case DERBY => new DerbyDatabaseDialect
case SQLITE => new SQLiteDatabaseDialect
case MYSQL => new MySQLDatabaseDialect
@@ -216,12 +216,24 @@ class JDBCMetadataStore(conf: KyuubiConf) extends
MetadataStore with Logging {
stateOnly: Boolean): Seq[Metadata] = {
val queryBuilder = new StringBuilder
val params = ListBuffer[Any]()
- if (stateOnly) {
- queryBuilder.append(s"SELECT $METADATA_STATE_ONLY_COLUMNS FROM
$METADATA_TABLE")
- } else {
- queryBuilder.append(s"SELECT $METADATA_ALL_COLUMNS FROM $METADATA_TABLE")
+ queryBuilder.append("SELECT ")
+ queryBuilder.append(if (stateOnly) METADATA_STATE_ONLY_COLUMNS else
METADATA_ALL_COLUMNS)
+ queryBuilder.append(s" FROM $METADATA_TABLE")
+ queryBuilder.append(s" ${assembleWhereClause(filter, params)}")
+ queryBuilder.append(" ORDER BY key_id ")
+ queryBuilder.append(dialect.limitClause(size, from))
+ val query = queryBuilder.toString
+ JdbcUtils.withConnection { connection =>
+ withResultSet(connection, query, params: _*) { rs =>
+ buildMetadata(rs, stateOnly)
+ }
}
- val whereConditions = ListBuffer[String]()
+ }
+
+ private def assembleWhereClause(
+ filter: MetadataFilter,
+ params: ListBuffer[Any]): String = {
+ val whereConditions = ListBuffer[String]("1 = 1")
Option(filter.sessionType).foreach { sessionType =>
whereConditions += "session_type = ?"
params += sessionType.toString
@@ -259,16 +271,7 @@ class JDBCMetadataStore(conf: KyuubiConf) extends
MetadataStore with Logging {
whereConditions += "peer_instance_closed = ?"
params += filter.peerInstanceClosed
}
- if (whereConditions.nonEmpty) {
- queryBuilder.append(whereConditions.mkString(" WHERE ", " AND ", ""))
- }
- queryBuilder.append(" ORDER BY key_id")
- val query =
databaseAdaptor.addLimitAndOffsetToQuery(queryBuilder.toString(), size, from)
- JdbcUtils.withConnection { connection =>
- withResultSet(connection, query, params: _*) { rs =>
- buildMetadata(rs, stateOnly)
- }
- }
+ whereConditions.mkString("WHERE ", " AND ", "")
}
override def updateMetadata(metadata: Metadata): Unit = {
@@ -324,7 +327,8 @@ class JDBCMetadataStore(conf: KyuubiConf) extends
MetadataStore with Logging {
withUpdateCount(connection, query, params: _*) { updateCount =>
if (updateCount == 0) {
throw new KyuubiException(
- s"Error updating metadata for ${metadata.identifier} with $query")
+ s"Error updating metadata for ${metadata.identifier} by SQL:
$query, " +
+ s"with params: ${params.mkString(", ")}")
}
}
}
diff --git
a/kyuubi-server/src/main/scala/org/apache/kyuubi/server/metadata/jdbc/JdbcDatabaseDialect.scala
b/kyuubi-server/src/main/scala/org/apache/kyuubi/server/metadata/jdbc/JdbcDatabaseDialect.scala
index 1fbfc1cbc..69bd36519 100644
---
a/kyuubi-server/src/main/scala/org/apache/kyuubi/server/metadata/jdbc/JdbcDatabaseDialect.scala
+++
b/kyuubi-server/src/main/scala/org/apache/kyuubi/server/metadata/jdbc/JdbcDatabaseDialect.scala
@@ -18,18 +18,18 @@
package org.apache.kyuubi.server.metadata.jdbc
trait JdbcDatabaseDialect {
- def addLimitAndOffsetToQuery(sql: String, limit: Int, offset: Int): String
+ def limitClause(limit: Int, offset: Int): String
}
class DerbyDatabaseDialect extends JdbcDatabaseDialect {
- override def addLimitAndOffsetToQuery(sql: String, limit: Int, offset: Int):
String = {
- s"$sql OFFSET $offset ROWS FETCH NEXT $limit ROWS ONLY"
+ override def limitClause(limit: Int, offset: Int): String = {
+ s"OFFSET $offset ROWS FETCH NEXT $limit ROWS ONLY"
}
}
class GenericDatabaseDialect extends JdbcDatabaseDialect {
- override def addLimitAndOffsetToQuery(sql: String, limit: Int, offset: Int):
String = {
- s"$sql LIMIT $limit OFFSET $offset"
+ override def limitClause(limit: Int, offset: Int): String = {
+ s"LIMIT $limit OFFSET $offset"
}
}