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

critas pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 421ed660bf6 Fix privilege bug in JDBC (#15141)
421ed660bf6 is described below

commit 421ed660bf61ddd5548eaf4ec90e7bd20a078ea1
Author: LimJiaWenBrenda <[email protected]>
AuthorDate: Fri Mar 21 11:01:00 2025 +0800

    Fix privilege bug in JDBC (#15141)
    
    * Modified pks, sversion, dbname
    
    * Added comment to tables and columns if exists
    
    * return schema term according to table or tree model
    
    * Added comments, fix privilege bug
    
    * change variable name to legacyMode
    
    * fixed spotless
---
 .../iotdb/jdbc/IoTDBAbstractDatabaseMetadata.java  |  5 +-
 .../apache/iotdb/jdbc/IoTDBDatabaseMetadata.java   |  5 ++
 .../IoTDBRelationalDatabaseMetadata.java           | 99 +++++++++++++++-------
 3 files changed, 76 insertions(+), 33 deletions(-)

diff --git 
a/iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBAbstractDatabaseMetadata.java
 
b/iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBAbstractDatabaseMetadata.java
index d6990a5a0b1..2948c93d389 100644
--- 
a/iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBAbstractDatabaseMetadata.java
+++ 
b/iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBAbstractDatabaseMetadata.java
@@ -849,10 +849,7 @@ public abstract class IoTDBAbstractDatabaseMetadata 
implements DatabaseMetaData
     return true;
   }
 
-  @Override
-  public String getSchemaTerm() throws SQLException {
-    return "database";
-  }
+  public abstract String getSchemaTerm() throws SQLException;
 
   @Override
   public String getProcedureTerm() throws SQLException {
diff --git 
a/iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBDatabaseMetadata.java
 
b/iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBDatabaseMetadata.java
index a827f35ead9..fa2a1c18da0 100644
--- 
a/iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBDatabaseMetadata.java
+++ 
b/iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBDatabaseMetadata.java
@@ -663,6 +663,11 @@ public class IoTDBDatabaseMetadata extends 
IoTDBAbstractDatabaseMetadata {
     return "`";
   }
 
+  @Override
+  public String getSchemaTerm() throws SQLException {
+    return "storage group";
+  }
+
   /**
    * @deprecated recommend using getMetadataInJson() instead of toString()
    */
diff --git 
a/iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/relational/IoTDBRelationalDatabaseMetadata.java
 
b/iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/relational/IoTDBRelationalDatabaseMetadata.java
index 0a1b074e68e..b4296c4c1d8 100644
--- 
a/iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/relational/IoTDBRelationalDatabaseMetadata.java
+++ 
b/iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/relational/IoTDBRelationalDatabaseMetadata.java
@@ -206,6 +206,7 @@ public class IoTDBRelationalDatabaseMetadata extends 
IoTDBAbstractDatabaseMetada
       throws SQLException {
 
     Statement stmt = this.connection.createStatement();
+    boolean legacyMode = true;
 
     ResultSet rs;
     try {
@@ -214,9 +215,18 @@ public class IoTDBRelationalDatabaseMetadata extends 
IoTDBAbstractDatabaseMetada
               "select * from information_schema.tables where database like 
'%s'", schemaPattern);
       rs = stmt.executeQuery(sql);
     } catch (SQLException e) {
-      stmt.close();
       LOGGER.error(SHOW_TABLES_ERROR_MSG, e.getMessage());
-      throw e;
+
+      try {
+        String sql = String.format("show tables details from %s", 
schemaPattern);
+        rs = stmt.executeQuery(sql);
+        legacyMode = false;
+      } catch (SQLException e1) {
+        LOGGER.error(SHOW_TABLES_ERROR_MSG, e.getMessage());
+        throw e;
+      }
+    } finally {
+      stmt.close();
     }
 
     // Setup Fields
@@ -255,14 +265,14 @@ public class IoTDBRelationalDatabaseMetadata extends 
IoTDBAbstractDatabaseMetada
           valueInRow.add(schemaPattern);
         } else if (i == 1) {
           // valueInRow.add(rs.getString(2));
-          valueInRow.add(rs.getString("table_name"));
+          valueInRow.add(legacyMode ? rs.getString("table_name") : 
rs.getString("TableName"));
         } else if (i == 2) {
           valueInRow.add("TABLE");
         } else if (i == 3) {
           // String tgtString = "";
           // String ttl = rs.getString("ttl(ms)");
           // tgtString += "TTL(ms): " + ttl;
-          String comment = rs.getString("comment");
+          String comment = legacyMode ? rs.getString("comment") : 
rs.getString("Comment");
           if (comment != null && !comment.isEmpty()) {
             valueInRow.add(comment);
           } else {
@@ -276,7 +286,6 @@ public class IoTDBRelationalDatabaseMetadata extends 
IoTDBAbstractDatabaseMetada
           valueInRow.add("TABLE");
         }
       }
-      LOGGER.info("Table: {}", valueInRow);
       valuesList.add(valueInRow);
     }
 
@@ -315,6 +324,7 @@ public class IoTDBRelationalDatabaseMetadata extends 
IoTDBAbstractDatabaseMetada
       throws SQLException {
 
     Statement stmt = this.connection.createStatement();
+    boolean legacyMode = true;
     ResultSet rs;
 
     // Get Table Metadata
@@ -325,9 +335,19 @@ public class IoTDBRelationalDatabaseMetadata extends 
IoTDBAbstractDatabaseMetada
               schemaPattern, tableNamePattern);
       rs = stmt.executeQuery(sql);
     } catch (SQLException e) {
-      stmt.close();
       LOGGER.error(SHOW_TABLES_ERROR_MSG, e.getMessage());
-      throw e;
+
+      try {
+        String sql = String.format("desc %s.%s details", schemaPattern, 
tableNamePattern);
+        rs = stmt.executeQuery(sql);
+        legacyMode = false;
+      } catch (SQLException e1) {
+        LOGGER.error(SHOW_TABLES_ERROR_MSG, e.getMessage());
+        throw e;
+      }
+
+    } finally {
+      stmt.close();
     }
 
     // Setup Fields
@@ -369,8 +389,9 @@ public class IoTDBRelationalDatabaseMetadata extends 
IoTDBAbstractDatabaseMetada
     // Extract Metadata
     int count = 1;
     while (rs.next()) {
-      String columnName = rs.getString("column_name"); // 3
-      String type = rs.getString("datatype"); // 4
+      String columnName =
+          legacyMode ? rs.getString("column_name") : 
rs.getString("ColumnName"); // 3
+      String type = legacyMode ? rs.getString("datatype") : 
rs.getString("DataType"); // 4
       List<Object> valueInRow = new ArrayList<>();
       for (int i = 0; i < fields.length; i++) {
         if (i == 0) {
@@ -396,11 +417,12 @@ public class IoTDBRelationalDatabaseMetadata extends 
IoTDBAbstractDatabaseMetada
             valueInRow.add(ResultSetMetaData.columnNoNulls);
           }
         } else if (i == 7) {
-          valueInRow.add(getTypePrecision(fields[i].getSqlType()));
+          // valueInRow.add(getTypePrecision(fields[i].getSqlType()));
+          valueInRow.add(0);
         } else if (i == 8) {
           valueInRow.add(getTypeScale(fields[i].getSqlType()));
         } else if (i == 9) {
-          String comment = rs.getString("comment");
+          String comment = legacyMode ? rs.getString("comment") : 
rs.getString("Comment");
           if (comment != null && !comment.isEmpty()) {
             valueInRow.add(comment);
           } else {
@@ -455,6 +477,7 @@ public class IoTDBRelationalDatabaseMetadata extends 
IoTDBAbstractDatabaseMetada
       throws SQLException {
 
     Statement stmt = connection.createStatement();
+    boolean legacyMode = true;
     ResultSet rs;
 
     try {
@@ -464,9 +487,19 @@ public class IoTDBRelationalDatabaseMetadata extends 
IoTDBAbstractDatabaseMetada
               schemaPattern, tableNamePattern);
       rs = stmt.executeQuery(sql);
     } catch (SQLException e) {
-      stmt.close();
       LOGGER.error(SHOW_TABLES_ERROR_MSG, e.getMessage());
-      throw e;
+
+      try {
+        String sql = String.format("desc %s.%s", schemaPattern, 
tableNamePattern);
+        rs = stmt.executeQuery(sql);
+        legacyMode = false;
+      } catch (SQLException e1) {
+        LOGGER.error(SHOW_TABLES_ERROR_MSG, e.getMessage());
+        throw e;
+      }
+
+    } finally {
+      stmt.close();
     }
 
     Field[] fields = new Field[6];
@@ -496,24 +529,27 @@ public class IoTDBRelationalDatabaseMetadata extends 
IoTDBAbstractDatabaseMetada
 
     int count = 1;
     while (rs.next()) {
-      String columnName = rs.getString("column_name");
-      List<Object> valueInRow = new ArrayList<>();
-      for (int i = 0; i < fields.length; ++i) {
-        if (i == 0) {
-          valueInRow.add("");
-        } else if (i == 1) {
-          valueInRow.add("");
-        } else if (i == 2) {
-          valueInRow.add("");
-        } else if (i == 3) {
-          valueInRow.add(columnName);
-        } else if (i == 4) {
-          valueInRow.add(count++);
-        } else {
-          valueInRow.add(PRIMARY);
+      String columnName = legacyMode ? rs.getString("column_name") : 
rs.getString("ColumnName");
+      String category = legacyMode ? rs.getString("category") : 
rs.getString("Category");
+      if (category.equals("TAG") || category.equals("TIME")) {
+        List<Object> valueInRow = new ArrayList<>();
+        for (int i = 0; i < fields.length; ++i) {
+          if (i == 0) {
+            valueInRow.add("");
+          } else if (i == 1) {
+            valueInRow.add("");
+          } else if (i == 2) {
+            valueInRow.add("");
+          } else if (i == 3) {
+            valueInRow.add(columnName);
+          } else if (i == 4) {
+            valueInRow.add(count++);
+          } else {
+            valueInRow.add(PRIMARY);
+          }
         }
+        valuesList.add(valueInRow);
       }
-      valuesList.add(valueInRow);
     }
 
     ByteBuffer tsBlock = null;
@@ -551,4 +587,9 @@ public class IoTDBRelationalDatabaseMetadata extends 
IoTDBAbstractDatabaseMetada
   public String getIdentifierQuoteString() throws SQLException {
     return "\"";
   }
+
+  @Override
+  public String getSchemaTerm() throws SQLException {
+    return "database";
+  }
 }

Reply via email to