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

jackietien pushed a commit to branch rel/1.2
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/rel/1.2 by this push:
     new 4764aebfff6 [To rel/1.2][IOTDB-5970] Fix the info of order by when 
sortkey doesn't exist
4764aebfff6 is described below

commit 4764aebfff678547d73b15874c57b98e73830148
Author: YangCaiyin <[email protected]>
AuthorDate: Sat Jun 10 21:18:30 2023 +0800

    [To rel/1.2][IOTDB-5970] Fix the info of order by when sortkey doesn't exist
---
 .../iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java  | 39 ++++++++++++++++++----
 site/src/main/.vuepress/sidebar/V1.0.x/en.ts       |  1 -
 site/src/main/.vuepress/sidebar/V1.0.x/zh.ts       |  1 -
 site/src/main/.vuepress/sidebar/V1.1.x/en.ts       |  2 +-
 site/src/main/.vuepress/sidebar/V1.1.x/zh.ts       |  2 +-
 site/src/main/.vuepress/sidebar/en.ts              |  2 +-
 site/src/main/.vuepress/sidebar/zh.ts              |  2 +-
 7 files changed, 36 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 b20d445e3ba..717f7cf8408 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
@@ -210,6 +210,9 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
   private static final Expression endTimeExpression =
       TimeSeriesOperand.constructColumnHeaderExpression(ENDTIME, 
TSDataType.INT64);
 
+  private final List<String> lastQueryColumnNames =
+      new ArrayList<>(Arrays.asList("TIME", "TIMESERIES", "VALUE", 
"DATATYPE"));
+
   private final IPartitionFetcher partitionFetcher;
   private final ISchemaFetcher schemaFetcher;
 
@@ -1279,6 +1282,15 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
       analysis.setTimeseriesOrderingForLastQuery(
           queryStatement.getOrderByComponent().getTimeseriesOrder());
     }
+
+    for (SortItem sortItem : queryStatement.getSortItemList()) {
+      String sortKey = sortItem.getSortKey();
+      if (!lastQueryColumnNames.contains(sortKey.toUpperCase())) {
+        throw new SemanticException(
+            String.format(
+                "%s in order by clause doesn't exist in the result of last 
query.", sortKey));
+      }
+    }
   }
 
   private void analyzeOrderBy(
@@ -1290,14 +1302,22 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
       // Expression in a sortItem only indicates one column
       List<Expression> expressions =
           ExpressionAnalyzer.bindSchemaForExpression(expressionForItem, 
schemaTree);
-      if (expressions.size() != 1) {
-        throw new SemanticException("One sort item in order by should only 
indicate one value");
+      if (expressions.size() == 0) {
+        throw new SemanticException(
+            String.format(
+                "%s in order by clause doesn't exist.", 
expressionForItem.getExpressionString()));
+      }
+      if (expressions.size() > 1) {
+        throw new SemanticException(
+            String.format(
+                "%s in order by clause shouldn't refer to more than one 
timeseries.",
+                expressionForItem.getExpressionString()));
       }
       expressionForItem = 
ExpressionAnalyzer.removeAliasFromExpression(expressions.get(0));
       TSDataType dataType = analyzeExpression(analysis, expressionForItem);
       if (!dataType.isComparable()) {
         throw new SemanticException(
-            String.format("The data type of sort item %s is not comparable", 
dataType));
+            String.format("The data type of %s is not comparable", dataType));
       }
       orderByExpressions.add(expressionForItem);
     }
@@ -1400,17 +1420,22 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
         List<Expression> expressions =
             ExpressionAnalyzer.concatDeviceAndBindSchemaForExpression(
                 expressionForItem, device, schemaTree);
-        if (expressions.size() != 1) {
+        if (expressions.size() == 0) {
+          throw new SemanticException(
+              String.format(
+                  "%s in order by clause doesn't exist.", 
expressionForItem.getExpressionString()));
+        }
+        if (expressions.size() > 1) {
           throw new SemanticException(
               String.format(
-                  "One sort item in order by should only indicate one value, 
got %s value(s)",
-                  expressions.size()));
+                  "%s in order by clause shouldn't refer to more than one 
timeseries.",
+                  expressionForItem.getExpressionString()));
         }
         expressionForItem = expressions.get(0);
         TSDataType dataType = analyzeExpression(analysis, expressionForItem);
         if (!dataType.isComparable()) {
           throw new SemanticException(
-              String.format("The data type of sort item %s is not comparable", 
dataType));
+              String.format("The data type of %s is not comparable", 
dataType));
         }
 
         Expression devicerViewExpression =
diff --git a/site/src/main/.vuepress/sidebar/V1.0.x/en.ts 
b/site/src/main/.vuepress/sidebar/V1.0.x/en.ts
index 5b4d868b9bc..a9bf81f4d59 100644
--- a/site/src/main/.vuepress/sidebar/V1.0.x/en.ts
+++ b/site/src/main/.vuepress/sidebar/V1.0.x/en.ts
@@ -138,7 +138,6 @@ export const enSidebar = {
         { text: 'Where Condition', link: 'Where-Condition' },
         { text: 'Group By', link: 'Group-By' },
         { text: 'Having Condition', link: 'Having-Condition' },
-        // { text:  'Order By', link: 'Order-By' },
         { text: 'Fill Null Value', link: 'Fill' },
         { text: 'Pagination', link: 'Pagination' },
         { text: 'Select Into', link: 'Select-Into' },
diff --git a/site/src/main/.vuepress/sidebar/V1.0.x/zh.ts 
b/site/src/main/.vuepress/sidebar/V1.0.x/zh.ts
index 2f8a90d0b67..a5ecf9d16c7 100644
--- a/site/src/main/.vuepress/sidebar/V1.0.x/zh.ts
+++ b/site/src/main/.vuepress/sidebar/V1.0.x/zh.ts
@@ -138,7 +138,6 @@ export const zhSidebar = {
         { text: '查询过滤条件', link: 'Where-Condition' },
         { text: '分段分组聚合', link: 'Group-By' },
         { text: '聚合结果过滤', link: 'Having-Condition' },
-        // { text:'结果集排序', link: 'Order-By' },
         { text: '结果集补空值', link: 'Fill' },
         { text: '结果集分页', link: 'Pagination' },
         { text: '查询写回', link: 'Select-Into' },
diff --git a/site/src/main/.vuepress/sidebar/V1.1.x/en.ts 
b/site/src/main/.vuepress/sidebar/V1.1.x/en.ts
index f9619f0316a..6bcf03cf519 100644
--- a/site/src/main/.vuepress/sidebar/V1.1.x/en.ts
+++ b/site/src/main/.vuepress/sidebar/V1.1.x/en.ts
@@ -148,7 +148,7 @@ export const enSidebar = {
         { text: 'Where Condition', link: 'Where-Condition' },
         { text: 'Group By', link: 'Group-By' },
         { text: 'Having Condition', link: 'Having-Condition' },
-        // { text:  'Order By', link: 'Order-By' },
+        { text: 'Order By', link: 'Order-By' },
         { text: 'Fill Null Value', link: 'Fill' },
         { text: 'Pagination', link: 'Pagination' },
         { text: 'Select Into', link: 'Select-Into' },
diff --git a/site/src/main/.vuepress/sidebar/V1.1.x/zh.ts 
b/site/src/main/.vuepress/sidebar/V1.1.x/zh.ts
index d623ccadbab..1e8441f8422 100644
--- a/site/src/main/.vuepress/sidebar/V1.1.x/zh.ts
+++ b/site/src/main/.vuepress/sidebar/V1.1.x/zh.ts
@@ -148,7 +148,7 @@ export const zhSidebar = {
         { text: '查询过滤条件', link: 'Where-Condition' },
         { text: '分段分组聚合', link: 'Group-By' },
         { text: '聚合结果过滤', link: 'Having-Condition' },
-        // { text:'结果集排序', link: 'Order-By' },
+        { text: '结果集排序', link: 'Order-By' },
         { text: '结果集补空值', link: 'Fill' },
         { text: '结果集分页', link: 'Pagination' },
         { text: '查询写回', link: 'Select-Into' },
diff --git a/site/src/main/.vuepress/sidebar/en.ts 
b/site/src/main/.vuepress/sidebar/en.ts
index 97206aa7882..cdb26b81e0c 100644
--- a/site/src/main/.vuepress/sidebar/en.ts
+++ b/site/src/main/.vuepress/sidebar/en.ts
@@ -153,7 +153,7 @@ export const enSidebar = sidebar({
         { text: 'Where Condition', link: 'Where-Condition' },
         { text: 'Group By', link: 'Group-By' },
         { text: 'Having Condition', link: 'Having-Condition' },
-        // { text:  'Order By', link: 'Order-By' },
+        { text: 'Order By', link: 'Order-By' },
         { text: 'Fill Null Value', link: 'Fill' },
         { text: 'Pagination', link: 'Pagination' },
         { text: 'Select Into', link: 'Select-Into' },
diff --git a/site/src/main/.vuepress/sidebar/zh.ts 
b/site/src/main/.vuepress/sidebar/zh.ts
index 2115cbfc9b8..7dda3df39b4 100644
--- a/site/src/main/.vuepress/sidebar/zh.ts
+++ b/site/src/main/.vuepress/sidebar/zh.ts
@@ -153,7 +153,7 @@ export const zhSidebar = sidebar({
         { text: '查询过滤条件', link: 'Where-Condition' },
         { text: '分段分组聚合', link: 'Group-By' },
         { text: '聚合结果过滤', link: 'Having-Condition' },
-        // { text:'结果集排序', link: 'Order-By' },
+        { text: '结果集排序', link: 'Order-By' },
         { text: '结果集补空值', link: 'Fill' },
         { text: '结果集分页', link: 'Pagination' },
         { text: '查询写回', link: 'Select-Into' },

Reply via email to