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 93671e5a0e3 Check database by show databases (#15299)
93671e5a0e3 is described below

commit 93671e5a0e36ad73f5d5813bff030bf4851e1653
Author: Summer <[email protected]>
AuthorDate: Wed Apr 9 17:47:22 2025 +0800

    Check database by show databases (#15299)
    
    * check database by 'show databases'
    
    * check database by 'show databases'
    
    * add desc when have no table to export
    
    * Update 
iotdb-client/cli/src/main/java/org/apache/iotdb/tool/schema/ExportSchemaTable.java
    
    Co-authored-by: CritasWang <[email protected]>
    
    * Update 
iotdb-client/cli/src/main/java/org/apache/iotdb/tool/schema/ExportSchemaTable.java
    
    Co-authored-by: CritasWang <[email protected]>
    
    ---------
    
    Co-authored-by: 2b3c511 <[email protected]>
    Co-authored-by: CritasWang <[email protected]>
---
 .../org/apache/iotdb/tool/common/Constants.java    |  3 +
 .../org/apache/iotdb/tool/schema/ExportSchema.java | 16 +---
 .../iotdb/tool/schema/ExportSchemaTable.java       | 98 +++++++++++++++-------
 3 files changed, 73 insertions(+), 44 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 787cd6b3d18..c797bb0d27f 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
@@ -228,6 +228,8 @@ public class Constants {
       "The target database %s does not exist";
   public static final String TARGET_TABLE_NOT_EXIST_MSG =
       "There are no tables or the target table %s does not exist";
+  public static final String TARGET_TABLE_EMPTY_MSG =
+      "There are no tables to export. Please check if the tables in the target 
database exist and if you have permission to access them.";
 
   public static final String[] TIME_FORMAT =
       new String[] {"default", "long", "number", "timestamp"};
@@ -299,6 +301,7 @@ public class Constants {
   public static final String EXPORT_SCHEMA_TABLES_SELECT =
       "select * from information_schema.tables where database = '%s'";
   public static final String EXPORT_SCHEMA_TABLES_SHOW = "show tables details 
from %s";
+  public static final String EXPORT_SCHEMA_TABLES_SHOW_DATABASES = "show 
databases";
   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";
diff --git 
a/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/schema/ExportSchema.java 
b/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/schema/ExportSchema.java
index 9db300ddd12..fe6434ff06c 100644
--- 
a/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/schema/ExportSchema.java
+++ 
b/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/schema/ExportSchema.java
@@ -36,10 +36,7 @@ import org.apache.commons.cli.ParseException;
 import org.apache.commons.lang3.StringUtils;
 import org.jline.reader.LineReader;
 
-import java.io.BufferedReader;
 import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
 
 /** Export Schema CSV file. */
 public class ExportSchema extends AbstractSchemaTool {
@@ -121,6 +118,7 @@ public class ExportSchema extends AbstractSchemaTool {
         exportSchema.init();
         exportSchema.exportSchemaToSqlFile();
       }
+      ioTPrinter.println(Constants.EXPORT_COMPLETELY);
       return Constants.CODE_OK;
     } catch (InterruptedException e) {
       ioTPrinter.println(String.format("Export schema fail: %s", 
e.getMessage()));
@@ -132,18 +130,6 @@ public class ExportSchema extends AbstractSchemaTool {
     }
   }
 
-  private static void dumpFromPathFile(AbstractExportSchema exportSchema, 
String pathFile)
-      throws IOException {
-    try (BufferedReader reader = new BufferedReader(new FileReader(pathFile))) 
{
-      String path;
-      int index = 0;
-      while ((path = reader.readLine()) != null) {
-        exportSchema.exportSchemaToCsvFile(path, index);
-        index++;
-      }
-    }
-  }
-
   private static void parseSpecialParams(CommandLine commandLine) throws 
ArgsErrorException {
     targetDirectory =
         checkRequiredArg(Constants.TARGET_DIR_ARGS, Constants.TARGET_DIR_NAME, 
commandLine, null);
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 b7fc6a5ca2c..8644dac5adf 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
@@ -63,46 +63,72 @@ public class ExportSchemaTable extends AbstractExportSchema 
{
             .enableAutoFetch(false)
             .database(database)
             .build();
-    SessionDataSet sessionDataSet = null;
-    try (ITableSession session = sessionPool.getSession()) {
-      sessionDataSet =
-          session.executeQueryStatement(
-              String.format(Constants.EXPORT_SCHEMA_TABLES_SELECT, database));
-      checkDataBaseAndParseTablesBySelectSchema(sessionDataSet);
+    checkDatabase();
+    try {
+      
parseTablesBySelectSchema(String.format(Constants.EXPORT_SCHEMA_TABLES_SELECT, 
database));
     } catch (StatementExecutionException | IoTDBConnectionException e) {
       try {
-        sessionDataSet =
-            session.executeQueryStatement(
-                String.format(Constants.EXPORT_SCHEMA_TABLES_SHOW, database));
-        checkDataBaseAndParseTablesByShowSchema(sessionDataSet);
+        
parseTablesByShowSchema(String.format(Constants.EXPORT_SCHEMA_TABLES_SHOW, 
database));
       } catch (IoTDBConnectionException | StatementExecutionException e1) {
         ioTPrinter.println(Constants.INSERT_SQL_MEET_ERROR_MSG + 
e.getMessage());
         System.exit(1);
       }
+    }
+    if (MapUtils.isEmpty(tableCommentList)) {
+      ioTPrinter.println(Constants.TARGET_TABLE_EMPTY_MSG);
+      System.exit(1);
+    }
+  }
+
+  private void checkDatabase() {
+    Set<String> databases = new HashSet<>();
+    SessionDataSet sessionDataSet = null;
+    try (ITableSession session = sessionPool.getSession()) {
+      sessionDataSet = 
session.executeQueryStatement(Constants.EXPORT_SCHEMA_TABLES_SHOW_DATABASES);
+      while (sessionDataSet.hasNext()) {
+        RowRecord rowRecord = sessionDataSet.next();
+        databases.add(rowRecord.getField(0).getStringValue());
+      }
+    } catch (Exception e) {
+      ioTPrinter.println(Constants.INSERT_SQL_MEET_ERROR_MSG + e.getMessage());
+      System.exit(1);
     } finally {
       if (ObjectUtils.isNotEmpty(sessionDataSet)) {
         try {
           sessionDataSet.close();
-        } catch (Exception e) {
+        } catch (IoTDBConnectionException | StatementExecutionException e) {
+          ;
         }
       }
     }
+    if (!databases.contains(database)) {
+      
ioTPrinter.println(String.format(Constants.TARGET_DATABASE_NOT_EXIST_MSG, 
database));
+      System.exit(1);
+    }
   }
 
-  private static void checkDataBaseAndParseTablesBySelectSchema(SessionDataSet 
sessionDataSet)
+  private static void parseTablesBySelectSchema(String sql)
       throws StatementExecutionException, IoTDBConnectionException {
-    Set<String> databases = new HashSet<>();
+    SessionDataSet sessionDataSet = null;
     HashMap<String, String> tables = new HashMap<>();
-    while (sessionDataSet.hasNext()) {
-      RowRecord rowRecord = sessionDataSet.next();
-      databases.add(rowRecord.getField(0).getStringValue());
-      String comment = rowRecord.getField(4).getStringValue();
-      tables.putIfAbsent(
-          rowRecord.getField(1).getStringValue(), comment.equals("null") ? 
null : comment);
-    }
-    if (!databases.contains(database)) {
-      
ioTPrinter.println(String.format(Constants.TARGET_DATABASE_NOT_EXIST_MSG, 
database));
-      System.exit(1);
+    try (ITableSession session = sessionPool.getSession()) {
+      sessionDataSet = session.executeQueryStatement(sql);
+      while (sessionDataSet.hasNext()) {
+        RowRecord rowRecord = sessionDataSet.next();
+        String comment = rowRecord.getField(4).getStringValue();
+        tables.putIfAbsent(
+            rowRecord.getField(1).getStringValue(), comment.equals("null") ? 
null : comment);
+      }
+    } catch (Exception e) {
+      throw e;
+    } finally {
+      if (ObjectUtils.isNotEmpty(sessionDataSet)) {
+        try {
+          sessionDataSet.close();
+        } catch (IoTDBConnectionException | StatementExecutionException e) {
+          ;
+        }
+      }
     }
     if (StringUtils.isNotBlank(table)) {
       if (!tables.containsKey(table)) {
@@ -115,14 +141,28 @@ public class ExportSchemaTable extends 
AbstractExportSchema {
     }
   }
 
-  private static void checkDataBaseAndParseTablesByShowSchema(SessionDataSet 
sessionDataSet)
+  private static void parseTablesByShowSchema(String sql)
       throws StatementExecutionException, IoTDBConnectionException {
+    SessionDataSet sessionDataSet = null;
     HashMap<String, String> tables = new HashMap<>();
-    while (sessionDataSet.hasNext()) {
-      RowRecord rowRecord = sessionDataSet.next();
-      String comment = rowRecord.getField(3).getStringValue();
-      tables.putIfAbsent(
-          rowRecord.getField(0).getStringValue(), comment.equals("null") ? 
null : comment);
+    try (ITableSession session = sessionPool.getSession()) {
+      sessionDataSet = session.executeQueryStatement(sql);
+      while (sessionDataSet.hasNext()) {
+        RowRecord rowRecord = sessionDataSet.next();
+        String comment = rowRecord.getField(3).getStringValue();
+        tables.putIfAbsent(
+            rowRecord.getField(0).getStringValue(), comment.equals("null") ? 
null : comment);
+      }
+    } catch (Exception e) {
+      throw e;
+    } finally {
+      if (ObjectUtils.isNotEmpty(sessionDataSet)) {
+        try {
+          sessionDataSet.close();
+        } catch (IoTDBConnectionException | StatementExecutionException e) {
+          ;
+        }
+      }
     }
     if (MapUtils.isNotEmpty(tables)) {
       if (!tables.containsKey(table)) {

Reply via email to