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

zyk 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 127cdbe2449 Fix error msg when select into view and normal timeseries 
failed (#10260)
127cdbe2449 is described below

commit 127cdbe244945db1e41f15939965e36edad26655
Author: Marcos_Zyk <[email protected]>
AuthorDate: Wed Jun 21 23:17:55 2023 +0800

    Fix error msg when select into view and normal timeseries failed (#10260)
---
 .../iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java  | 38 ++++++++++++++++------
 .../plan/statement/crud/InsertBaseStatement.java   |  3 +-
 .../crud/InsertMultiTabletsStatement.java          |  3 +-
 .../plan/statement/crud/InsertRowsStatement.java   |  3 +-
 4 files changed, 34 insertions(+), 13 deletions(-)

diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java
index f39d2cb4b14..4d9f1d343da 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java
@@ -2133,11 +2133,11 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
     context.setQueryType(QueryType.WRITE);
     Analysis analysis = new Analysis();
     validateSchema(analysis, insertTabletStatement);
-    InsertBaseStatement realStatement = 
insertTabletStatement.removeLogicalView();
-    analysis.setStatement(realStatement);
+    InsertBaseStatement realStatement = removeLogicalView(analysis, 
insertTabletStatement);
     if (analysis.isFinishQueryAfterAnalyze()) {
       return analysis;
     }
+    analysis.setStatement(realStatement);
 
     if (realStatement instanceof InsertTabletStatement) {
       InsertTabletStatement realInsertTabletStatement = 
(InsertTabletStatement) realStatement;
@@ -2158,11 +2158,11 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
     context.setQueryType(QueryType.WRITE);
     Analysis analysis = new Analysis();
     validateSchema(analysis, insertRowStatement);
-    InsertBaseStatement realInsertStatement = 
insertRowStatement.removeLogicalView();
-    analysis.setStatement(realInsertStatement);
+    InsertBaseStatement realInsertStatement = removeLogicalView(analysis, 
insertRowStatement);
     if (analysis.isFinishQueryAfterAnalyze()) {
       return analysis;
     }
+    analysis.setStatement(realInsertStatement);
 
     if (realInsertStatement instanceof InsertRowStatement) {
       InsertRowStatement realInsertRowStatement = (InsertRowStatement) 
realInsertStatement;
@@ -2205,11 +2205,11 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
     Analysis analysis = new Analysis();
     validateSchema(analysis, insertRowsStatement);
     InsertRowsStatement realInsertRowsStatement =
-        (InsertRowsStatement) insertRowsStatement.removeLogicalView();
-    analysis.setStatement(realInsertRowsStatement);
+        (InsertRowsStatement) removeLogicalView(analysis, insertRowsStatement);
     if (analysis.isFinishQueryAfterAnalyze()) {
       return analysis;
     }
+    analysis.setStatement(realInsertRowsStatement);
 
     return computeAnalysisForInsertRows(analysis, realInsertRowsStatement);
   }
@@ -2243,11 +2243,11 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
     Analysis analysis = new Analysis();
     validateSchema(analysis, insertMultiTabletsStatement);
     InsertMultiTabletsStatement realStatement =
-        (InsertMultiTabletsStatement) 
insertMultiTabletsStatement.removeLogicalView();
-    analysis.setStatement(realStatement);
+        (InsertMultiTabletsStatement) removeLogicalView(analysis, 
insertMultiTabletsStatement);
     if (analysis.isFinishQueryAfterAnalyze()) {
       return analysis;
     }
+    analysis.setStatement(realStatement);
 
     return computeAnalysisForMultiTablets(analysis, realStatement);
   }
@@ -2258,11 +2258,12 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
     context.setQueryType(QueryType.WRITE);
     Analysis analysis = new Analysis();
     validateSchema(analysis, insertRowsOfOneDeviceStatement);
-    InsertBaseStatement realInsertStatement = 
insertRowsOfOneDeviceStatement.removeLogicalView();
-    analysis.setStatement(realInsertStatement);
+    InsertBaseStatement realInsertStatement =
+        removeLogicalView(analysis, insertRowsOfOneDeviceStatement);
     if (analysis.isFinishQueryAfterAnalyze()) {
       return analysis;
     }
+    analysis.setStatement(realInsertStatement);
 
     if (realInsertStatement instanceof InsertRowsOfOneDeviceStatement) {
       InsertRowsOfOneDeviceStatement realStatement =
@@ -2307,6 +2308,23 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
     }
   }
 
+  private InsertBaseStatement removeLogicalView(
+      Analysis analysis, InsertBaseStatement insertBaseStatement) {
+    try {
+      return insertBaseStatement.removeLogicalView();
+    } catch (SemanticException e) {
+      analysis.setFinishQueryAfterAnalyze(true);
+      if (e.getCause() instanceof IoTDBException) {
+        IoTDBException exception = (IoTDBException) e.getCause();
+        analysis.setFailStatus(
+            RpcUtils.getStatus(exception.getErrorCode(), 
exception.getMessage()));
+      } else {
+        analysis.setFailStatus(RpcUtils.getStatus(TSStatusCode.METADATA_ERROR, 
e.getMessage()));
+      }
+      return insertBaseStatement;
+    }
+  }
+
   @Override
   public Analysis visitLoadFile(LoadTsFileStatement loadTsFileStatement, 
MPPQueryContext context) {
     context.setQueryType(QueryType.WRITE);
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertBaseStatement.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertBaseStatement.java
index 181a072bedb..59d4462e437 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertBaseStatement.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertBaseStatement.java
@@ -25,6 +25,7 @@ import 
org.apache.iotdb.db.exception.metadata.DataTypeMismatchException;
 import org.apache.iotdb.db.exception.metadata.DuplicateInsertException;
 import org.apache.iotdb.db.exception.metadata.PathNotExistException;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
+import org.apache.iotdb.db.exception.sql.SemanticException;
 import org.apache.iotdb.db.mpp.plan.analyze.schema.ISchemaValidation;
 import org.apache.iotdb.db.mpp.plan.statement.Statement;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
@@ -340,7 +341,7 @@ public abstract class InsertBaseStatement extends Statement 
{
         boolean measurementNotExists = measurementSet.add(thisPair.left);
         if (!measurementNotExists) {
           PartialPath devicePath = entry.getKey();
-          throw new RuntimeException(
+          throw new SemanticException(
               new DuplicateInsertException(devicePath.getFullPath(), 
thisPair.left));
         }
       }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertMultiTabletsStatement.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertMultiTabletsStatement.java
index 3d9b4f2bb14..d7c7cebad25 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertMultiTabletsStatement.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertMultiTabletsStatement.java
@@ -21,6 +21,7 @@ package org.apache.iotdb.db.mpp.plan.statement.crud;
 
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.exception.metadata.DuplicateInsertException;
+import org.apache.iotdb.db.exception.sql.SemanticException;
 import org.apache.iotdb.db.mpp.plan.analyze.schema.ISchemaValidation;
 import org.apache.iotdb.db.mpp.plan.statement.StatementType;
 import org.apache.iotdb.db.mpp.plan.statement.StatementVisitor;
@@ -167,7 +168,7 @@ public class InsertMultiTabletsStatement extends 
InsertBaseStatement {
       for (String measurement : insertTablet.measurements) {
         boolean notExist = measurementSet.add(measurement);
         if (!notExist) {
-          throw new RuntimeException(new DuplicateInsertException(device, 
measurement));
+          throw new SemanticException(new DuplicateInsertException(device, 
measurement));
         }
       }
       mapFromDeviceToMeasurements.put(device, measurementSet);
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertRowsStatement.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertRowsStatement.java
index f639c95455e..50d31b2c43a 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertRowsStatement.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertRowsStatement.java
@@ -22,6 +22,7 @@ package org.apache.iotdb.db.mpp.plan.statement.crud;
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.exception.metadata.DuplicateInsertException;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
+import org.apache.iotdb.db.exception.sql.SemanticException;
 import org.apache.iotdb.db.mpp.plan.analyze.schema.ISchemaValidation;
 import org.apache.iotdb.db.mpp.plan.statement.StatementType;
 import org.apache.iotdb.db.mpp.plan.statement.StatementVisitor;
@@ -178,7 +179,7 @@ public class InsertRowsStatement extends 
InsertBaseStatement {
       for (String measurement : insertRow.measurements) {
         boolean notExist = measurementSet.add(measurement);
         if (!notExist) {
-          throw new RuntimeException(new DuplicateInsertException(device, 
measurement));
+          throw new SemanticException(new DuplicateInsertException(device, 
measurement));
         }
       }
       mapFromDeviceToMeasurements.put(device, measurementSet);

Reply via email to