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 6924ab0be4a Modified implementation of exporting table schema to sql
file using show create table (#16226)
6924ab0be4a is described below
commit 6924ab0be4a3552a724745819270502405bc0366
Author: LimJiaWenBrenda <[email protected]>
AuthorDate: Fri Aug 22 17:03:23 2025 +0800
Modified implementation of exporting table schema to sql file using show
create table (#16226)
* Modified implementation of exporting schema to sql file using show create
table
* Added double quotation marks to tableName dropped
* Used constant sql + escapeSqlIdentifier in sql sentence
---
.../org/apache/iotdb/tool/common/Constants.java | 2 +
.../iotdb/tool/schema/ExportSchemaTable.java | 44 +++++++++++++++++-----
2 files changed, 36 insertions(+), 10 deletions(-)
diff --git
a/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/common/Constants.java
b/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/common/Constants.java
index 049291ac248..fe354559a3a 100644
--- a/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/common/Constants.java
+++ b/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/common/Constants.java
@@ -304,6 +304,8 @@ public class Constants {
public static final String EXPORT_SCHEMA_COLUMNS_SELECT =
"select * from information_schema.columns where database like '%s' and
table_name like '%s'";
public static final String EXPORT_SCHEMA_COLUMNS_DESC = "desc %s.%s details";
+ public static final String SHOW_CREATE_TABLE = "SHOW CREATE TABLE %s.%s";
+ public static final String DROP_TABLE_IF_EXIST = "DROP TABLE IF EXISTS %s";
// import constants
public static final String IMPORT_SCHEMA_CLI_PREFIX = "ImportSchema";
diff --git
a/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/schema/ExportSchemaTable.java
b/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/schema/ExportSchemaTable.java
index 8a322665fca..41adc3b4cc7 100644
---
a/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/schema/ExportSchemaTable.java
+++
b/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/schema/ExportSchemaTable.java
@@ -176,6 +176,16 @@ public class ExportSchemaTable extends
AbstractExportSchema {
}
}
+ private String escapeSqlIdentifer(String identifier) {
+ if (StringUtils.isBlank(identifier)) {
+ return identifier;
+ }
+ if (identifier.contains("\"")) {
+ identifier = identifier.replace("\"", "\"\"");
+ }
+ return "\"" + identifier + "\"";
+ }
+
@Override
protected void exportSchemaToSqlFile() {
File file = new File(targetDirectory);
@@ -191,17 +201,13 @@ public class ExportSchemaTable extends
AbstractExportSchema {
try (ITableSession session = sessionPool.getSession()) {
sessionDataSet =
session.executeQueryStatement(
- String.format(Constants.EXPORT_SCHEMA_COLUMNS_SELECT,
database, tableName));
- exportSchemaBySelect(sessionDataSet, fileName, tableName, comment);
+ String.format(
+ Constants.SHOW_CREATE_TABLE,
+ escapeSqlIdentifer(database),
+ escapeSqlIdentifer(tableName)));
+ exportSchemaByShowCreate(sessionDataSet, fileName, tableName);
} catch (IoTDBConnectionException | StatementExecutionException |
IOException e) {
- try (ITableSession session = sessionPool.getSession()) {
- sessionDataSet =
- session.executeQueryStatement(
- String.format(Constants.EXPORT_SCHEMA_COLUMNS_DESC,
database, tableName));
- exportSchemaByDesc(sessionDataSet, fileName, tableName, comment);
- } catch (IoTDBConnectionException | StatementExecutionException |
IOException e1) {
- ioTPrinter.println(Constants.COLUMN_SQL_MEET_ERROR_MSG +
e.getMessage());
- }
+ ioTPrinter.println(Constants.COLUMN_SQL_MEET_ERROR_MSG +
e.getMessage());
} finally {
if (ObjectUtils.isNotEmpty(sessionDataSet)) {
try {
@@ -214,6 +220,24 @@ public class ExportSchemaTable extends
AbstractExportSchema {
}
}
+ private void exportSchemaByShowCreate(
+ SessionDataSet sessionDataSet, String fileName, String tableName)
+ throws IoTDBConnectionException, StatementExecutionException,
IOException {
+ String dropSql =
+ String.format(Constants.DROP_TABLE_IF_EXIST,
escapeSqlIdentifer(tableName)) + ";\n";
+ StringBuilder sb = new StringBuilder(dropSql);
+ try (FileWriter writer = new FileWriter(fileName, true)) {
+ while (sessionDataSet.hasNext()) {
+ RowRecord rowRecord = sessionDataSet.next();
+ String res = rowRecord.getField(1).getStringValue();
+ sb.append(res);
+ sb.append(";\n");
+ }
+ writer.append(sb.toString());
+ writer.flush();
+ }
+ }
+
private void exportSchemaByDesc(
SessionDataSet sessionDataSet, String fileName, String tableName, String
tableComment)
throws IoTDBConnectionException, StatementExecutionException,
IOException {