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