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

Reply via email to