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

yiguolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 027b06059a7 [Feature](materialized-view) support count(1) on 
materialized view (#28135)
027b06059a7 is described below

commit 027b06059a79f1c45e4ba58362cdd709a15c3c16
Author: Pxl <[email protected]>
AuthorDate: Sat Dec 9 01:36:46 2023 +0800

    [Feature](materialized-view) support count(1) on materialized view (#28135)
    
    support count(1) on materialized view
    fix match failed like select k1, sum(k1) from t group by k1
---
 be/src/olap/schema_change.cpp                      |  30 ++-----
 be/src/vec/data_types/data_type_decimal.h          |  21 +++--
 .../doris/analysis/CreateMaterializedViewStmt.java |  15 ++--
 .../mv/SelectMaterializedIndexWithAggregate.java   | 100 +++++++++++----------
 .../org/apache/doris/task/AlterReplicaTask.java    |   1 -
 .../data/mv_p0/ssb/multiple_ssb/multiple_ssb.out   |  10 ++-
 .../test_agg_keys_schema_change_decimalv3.out      |  13 +--
 .../mv_p0/ssb/multiple_ssb/multiple_ssb.groovy     |  19 +++-
 .../test_agg_keys_schema_change_decimalv3.groovy   |  16 ++--
 9 files changed, 115 insertions(+), 110 deletions(-)

diff --git a/be/src/olap/schema_change.cpp b/be/src/olap/schema_change.cpp
index a11a7a2af99..e910eaffa89 100644
--- a/be/src/olap/schema_change.cpp
+++ b/be/src/olap/schema_change.cpp
@@ -903,13 +903,6 @@ Status 
SchemaChangeHandler::_do_process_alter_tablet_v2(const TAlterTabletReqV2&
             for (auto item : request.materialized_view_params) {
                 AlterMaterializedViewParam mv_param;
                 mv_param.column_name = item.column_name;
-                /*
-                 * origin_column_name is always be set now,
-                 * but origin_column_name may be not set in some materialized 
view function. eg:count(1)
-                */
-                if (item.__isset.origin_column_name) {
-                    mv_param.origin_column_name = item.origin_column_name;
-                }
 
                 if (item.__isset.mv_expr) {
                     mv_param.expr = std::make_shared<TExpr>(item.mv_expr);
@@ -1206,9 +1199,7 @@ Status SchemaChangeHandler::_parse_request(const 
SchemaChangeParams& sc_params,
         if (materialized_function_map.find(column_name_lower) != 
materialized_function_map.end()) {
             auto mv_param = 
materialized_function_map.find(column_name_lower)->second;
             column_mapping->expr = mv_param.expr;
-            int32_t column_index = 
base_tablet_schema->field_index(mv_param.origin_column_name);
-            column_mapping->ref_column = column_index;
-            if (column_index >= 0 || column_mapping->expr != nullptr) {
+            if (column_mapping->expr != nullptr) {
                 continue;
             }
         }
@@ -1264,7 +1255,7 @@ Status SchemaChangeHandler::_parse_request(const 
SchemaChangeParams& sc_params,
     for (int i = 0, new_schema_size = new_tablet->num_key_columns(); i < 
new_schema_size; ++i) {
         ColumnMapping* column_mapping = changer->get_mutable_column_mapping(i);
 
-        if (column_mapping->ref_column < 0) {
+        if (column_mapping->expr == nullptr) {
             num_default_value++;
             continue;
         }
@@ -1312,22 +1303,11 @@ Status SchemaChangeHandler::_parse_request(const 
SchemaChangeParams& sc_params,
 
     for (size_t i = 0; i < new_tablet->num_columns(); ++i) {
         ColumnMapping* column_mapping = changer->get_mutable_column_mapping(i);
-        if (column_mapping->ref_column < 0) {
+        if (column_mapping->expr == nullptr) {
             continue;
         } else {
-            auto column_new = new_tablet_schema->column(i);
-            auto column_old = 
base_tablet_schema->column(column_mapping->ref_column);
-            if (column_new.type() != column_old.type() ||
-                column_new.precision() != column_old.precision() ||
-                column_new.frac() != column_old.frac() ||
-                column_new.length() != column_old.length() ||
-                column_new.is_bf_column() != column_old.is_bf_column() ||
-                column_new.has_bitmap_index() != column_old.has_bitmap_index() 
||
-                new_tablet_schema->has_inverted_index(column_new) !=
-                        base_tablet_schema->has_inverted_index(column_old)) {
-                *sc_directly = true;
-                return Status::OK();
-            }
+            *sc_directly = true;
+            return Status::OK();
         }
     }
 
diff --git a/be/src/vec/data_types/data_type_decimal.h 
b/be/src/vec/data_types/data_type_decimal.h
index 74be8f59921..fb89c68ec61 100644
--- a/be/src/vec/data_types/data_type_decimal.h
+++ b/be/src/vec/data_types/data_type_decimal.h
@@ -514,7 +514,9 @@ void convert_decimal_cols(
                             } else {
                                 if (UNLIKELY(res > max_result.value || res < 
-max_result.value)) {
                                     throw 
Exception(ErrorCode::ARITHMETIC_OVERFLOW_ERRROR,
-                                                    "Arithmetic overflow");
+                                                    "Arithmetic overflow, 
convert failed from {}, "
+                                                    "expected data is [{}, 
{}]",
+                                                    res, -max_result.value, 
max_result.value);
                                 } else {
                                     vec_to[i] = ToFieldType(res);
                                 }
@@ -524,7 +526,9 @@ void convert_decimal_cols(
                             if constexpr (narrow_integral) {
                                 if (UNLIKELY(res > max_result.value || res < 
-max_result.value)) {
                                     throw 
Exception(ErrorCode::ARITHMETIC_OVERFLOW_ERRROR,
-                                                    "Arithmetic overflow");
+                                                    "Arithmetic overflow, 
convert failed from {}, "
+                                                    "expected data is [{}, 
{}]",
+                                                    res, -max_result.value, 
max_result.value);
                                 }
                             }
                             vec_to[i] = ToFieldType(res);
@@ -540,7 +544,10 @@ void convert_decimal_cols(
                             if (UNLIKELY(vec_from[i].value > max_result.value 
||
                                          vec_from[i].value < 
-max_result.value)) {
                                 throw 
Exception(ErrorCode::ARITHMETIC_OVERFLOW_ERRROR,
-                                                "Arithmetic overflow");
+                                                "Arithmetic overflow, convert 
failed from {}, "
+                                                "expected data is [{}, {}]",
+                                                vec_from[i].value, 
-max_result.value,
+                                                max_result.value);
                             }
                         }
                         vec_to[i] = ToFieldType(vec_from[i].value);
@@ -559,7 +566,9 @@ void convert_decimal_cols(
                                 res = (vec_from[i].value + multiplier / 2) / 
multiplier;
                                 if (UNLIKELY(res > max_result.value)) {
                                     throw 
Exception(ErrorCode::ARITHMETIC_OVERFLOW_ERRROR,
-                                                    "Arithmetic overflow");
+                                                    "Arithmetic overflow, 
convert failed from {}, "
+                                                    "expected data is [{}, 
{}]",
+                                                    res, -max_result.value, 
max_result.value);
                                 }
                                 vec_to[i] = ToFieldType(res);
                             } else {
@@ -571,7 +580,9 @@ void convert_decimal_cols(
                                 res = (vec_from[i].value - multiplier / 2) / 
multiplier;
                                 if (UNLIKELY(res < -max_result.value)) {
                                     throw 
Exception(ErrorCode::ARITHMETIC_OVERFLOW_ERRROR,
-                                                    "Arithmetic overflow");
+                                                    "Arithmetic overflow, 
convert failed from {}, "
+                                                    "expected data is [{}, 
{}]",
+                                                    res, -max_result.value, 
max_result.value);
                                 }
                                 vec_to[i] = ToFieldType(res);
                             } else {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMaterializedViewStmt.java
 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMaterializedViewStmt.java
index a248d1404b5..f40033ed3cd 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMaterializedViewStmt.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMaterializedViewStmt.java
@@ -258,14 +258,6 @@ public class CreateMaterializedViewStmt extends DdlStmt {
                 throw new AnalysisException("The materialized view only 
support the single column or function expr. "
                         + "Error column: " + selectListItemExpr.toSql());
             }
-            List<SlotRef> slots = new ArrayList<>();
-            selectListItemExpr.collect(SlotRef.class, slots);
-            if (!isReplay && slots.size() == 0) {
-                throw new AnalysisException(
-                        "The materialized view contain constant expr is 
disallowed, expr: "
-                                + selectListItemExpr.toSql());
-            }
-
 
             if (selectListItemExpr instanceof FunctionCallExpr
                     && ((FunctionCallExpr) 
selectListItemExpr).isAggregateFunction()) {
@@ -278,6 +270,13 @@ public class CreateMaterializedViewStmt extends DdlStmt {
                 // build mv column item
                 mvColumnItemList.add(buildMVColumnItem(analyzer, 
functionCallExpr));
             } else {
+                List<SlotRef> slots = new ArrayList<>();
+                selectListItemExpr.collect(SlotRef.class, slots);
+                if (!isReplay && slots.size() == 0) {
+                    throw new AnalysisException(
+                            "The materialized view contain constant expr is 
disallowed, expr: "
+                                    + selectListItemExpr.toSql());
+                }
                 if (meetAggregate) {
                     throw new AnalysisException("The aggregate column should 
be after the single column");
                 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/SelectMaterializedIndexWithAggregate.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/SelectMaterializedIndexWithAggregate.java
index 67dd0e68a33..2cf0797a311 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/SelectMaterializedIndexWithAggregate.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/SelectMaterializedIndexWithAggregate.java
@@ -55,6 +55,7 @@ import 
org.apache.doris.nereids.trees.expressions.functions.scalar.BitmapHash;
 import org.apache.doris.nereids.trees.expressions.functions.scalar.HllHash;
 import org.apache.doris.nereids.trees.expressions.functions.scalar.ToBitmap;
 import 
org.apache.doris.nereids.trees.expressions.functions.scalar.ToBitmapWithCheck;
+import org.apache.doris.nereids.trees.expressions.literal.TinyIntLiteral;
 import 
org.apache.doris.nereids.trees.expressions.visitor.DefaultExpressionRewriter;
 import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
 import org.apache.doris.nereids.trees.plans.Plan;
@@ -1072,24 +1073,26 @@ public class SelectMaterializedIndexWithAggregate 
extends AbstractSelectMaterial
 
         // has rewritten agg functions
         Map<Slot, Slot> slotMap = exprRewriteMap.slotMap;
-        if (!slotMap.isEmpty()) {
-            // Note that the slots in the rewritten agg functions shouldn't 
appear in filters or grouping expressions.
-            // For example: we have a duplicated-type table t(c1, c2) and a 
materialized index that has
-            // a bitmap_union column `mv_bitmap_union_c2` for the column c2.
-            // The query `select c1, count(distinct c2) from t where c2 > 0 
group by c1` can't use the materialized
-            // index because we have a filter `c2 > 0` for the aggregated 
column c2.
-            Set<Slot> slotsToReplace = slotMap.keySet();
-            Set<String> indexConjuncts = PlanNode
+        // Note that the slots in the rewritten agg functions shouldn't appear 
in filters or grouping expressions.
+        // For example: we have a duplicated-type table t(c1, c2) and a 
materialized index that has
+        // a bitmap_union column `mv_bitmap_union_c2` for the column c2.
+        // The query `select c1, count(distinct c2) from t where c2 > 0 group 
by c1` can't use the materialized
+        // index because we have a filter `c2 > 0` for the aggregated column 
c2.
+        Set<Slot> slotsToReplace = slotMap.keySet();
+        Set<String> indexConjuncts;
+        try {
+            indexConjuncts = PlanNode
                     
.splitAndCompoundPredicateToConjuncts(context.checkContext.getMeta().getWhereClause()).stream()
                     .map(e -> new 
NereidsParser().parseExpression(e.toSql()).toSql()).collect(Collectors.toSet());
-            if (isInputSlotsContainsNone(
-                    predicates.stream().filter(e -> 
!indexConjuncts.contains(e.toSql())).collect(Collectors.toList()),
-                    slotsToReplace) && isInputSlotsContainsNone(groupingExprs, 
slotsToReplace)) {
-                ImmutableSet<Slot> newRequiredSlots = 
requiredScanOutput.stream()
-                        .map(slot -> (Slot) ExpressionUtils.replace(slot, 
slotMap))
-                        .collect(ImmutableSet.toImmutableSet());
-                return new AggRewriteResult(index, true, newRequiredSlots, 
exprRewriteMap);
-            }
+        } catch (Exception e) {
+            return new AggRewriteResult(index, false, null, null);
+        }
+        if (isInputSlotsContainsNone(
+                predicates.stream().filter(e -> 
!indexConjuncts.contains(e.toSql())).collect(Collectors.toList()),
+                slotsToReplace) && isInputSlotsContainsNone(groupingExprs, 
slotsToReplace)) {
+            ImmutableSet<Slot> newRequiredSlots = requiredScanOutput.stream()
+                    .map(slot -> (Slot) ExpressionUtils.replace(slot, 
slotMap)).collect(ImmutableSet.toImmutableSet());
+            return new AggRewriteResult(index, true, newRequiredSlots, 
exprRewriteMap);
         }
 
         return new AggRewriteResult(index, false, null, null);
@@ -1207,8 +1210,7 @@ public class SelectMaterializedIndexWithAggregate extends 
AbstractSelectMaterial
 
                 Expression expr = new 
ToBitmapWithCheck(castIfNeed(count.child(0), BigIntType.INSTANCE));
                 // count distinct a value column.
-                if (slotOpt.isPresent() && 
!context.checkContext.keyNameToColumn.containsKey(
-                        normalizeName(expr.toSql()))) {
+                if (slotOpt.isPresent()) {
                     String bitmapUnionColumn = 
normalizeName(CreateMaterializedViewStmt.mvColumnBuilder(
                             AggregateType.BITMAP_UNION, 
CreateMaterializedViewStmt.mvColumnBuilder(expr.toSql())));
 
@@ -1229,33 +1231,37 @@ public class SelectMaterializedIndexWithAggregate 
extends AbstractSelectMaterial
                         return bitmapUnionCount;
                     }
                 }
-            } else if (!count.isDistinct() && count.arity() == 1) {
-                // count(col) -> sum(mva_SUM__CASE WHEN col IS NULL THEN 0 
ELSE 1 END)
+            }
 
+            Expression child = null;
+            if (!count.isDistinct() && count.arity() == 1) {
+                // count(col) -> sum(mva_SUM__CASE WHEN col IS NULL THEN 0 
ELSE 1 END)
                 Optional<Slot> slotOpt = 
ExpressionUtils.extractSlotOrCastOnSlot(count.child(0));
-                // count a value column.
-                if (slotOpt.isPresent() && 
!context.checkContext.keyNameToColumn.containsKey(
-                        normalizeName(slotOpt.get().toSql()))) {
-                    String countColumn = 
normalizeName(CreateMaterializedViewStmt
-                            .mvColumnBuilder(AggregateType.SUM,
-                                
CreateMaterializedViewStmt.mvColumnBuilder(slotToCaseWhen(slotOpt.get()).toSql())));
-
-                    Column mvColumn = 
context.checkContext.getColumn(countColumn);
-                    // has bitmap_union_count column
-                    if (mvColumn != null && 
context.checkContext.valueNameToColumn.containsValue(mvColumn)) {
-                        Slot countSlot = 
context.checkContext.scan.getOutputByIndex(context.checkContext.index)
-                                .stream()
-                                .filter(s -> 
countColumn.equalsIgnoreCase(normalizeName(s.getName())))
-                                .findFirst()
-                                .orElseThrow(() -> new AnalysisException(
-                                        "cannot find count slot when select 
mv"));
+                if (slotOpt.isPresent()) {
+                    child = slotOpt.get();
+                }
+            } else if (count.arity() == 0) {
+                // count(*) / count(1) -> sum(mva_SUM__CASE WHEN 1 IS NULL 
THEN 0 ELSE 1 END)
+                child = new TinyIntLiteral((byte) 1);
+            }
 
-                        context.exprRewriteMap.slotMap.put(slotOpt.get(), 
countSlot);
-                        
context.exprRewriteMap.projectExprMap.put(slotOpt.get(), countSlot);
-                        Sum sum = new Sum(countSlot);
-                        context.exprRewriteMap.aggFuncMap.put(count, sum);
-                        return sum;
+            if (child != null) {
+                String countColumn = 
normalizeName(CreateMaterializedViewStmt.mvColumnBuilder(AggregateType.SUM,
+                        
CreateMaterializedViewStmt.mvColumnBuilder(slotToCaseWhen(child).toSql())));
+
+                Column mvColumn = context.checkContext.getColumn(countColumn);
+                if (mvColumn != null && 
context.checkContext.valueNameToColumn.containsValue(mvColumn)) {
+                    Slot countSlot = 
context.checkContext.scan.getOutputByIndex(context.checkContext.index).stream()
+                            .filter(s -> 
countColumn.equalsIgnoreCase(normalizeName(s.getName()))).findFirst()
+                            .orElseThrow(() -> new AnalysisException("cannot 
find count slot when select mv"));
+
+                    if (child instanceof Slot) {
+                        context.exprRewriteMap.slotMap.put((Slot) child, 
countSlot);
                     }
+                    context.exprRewriteMap.projectExprMap.put(child, 
countSlot);
+                    Sum sum = new Sum(countSlot);
+                    context.exprRewriteMap.aggFuncMap.put(count, sum);
+                    return sum;
                 }
             }
             return count;
@@ -1416,8 +1422,7 @@ public class SelectMaterializedIndexWithAggregate extends 
AbstractSelectMaterial
             }
             Optional<Slot> slotOpt = 
ExpressionUtils.extractSlotOrCastOnSlot(ndv.child(0));
             // ndv on a value column.
-            if (slotOpt.isPresent() && 
!context.checkContext.keyNameToColumn.containsKey(
-                    normalizeName(slotOpt.get().toSql()))) {
+            if (slotOpt.isPresent()) {
                 Expression expr = castIfNeed(ndv.child(), 
VarcharType.SYSTEM_DEFAULT);
                 String hllUnionColumn = normalizeName(
                         
CreateMaterializedViewStmt.mvColumnBuilder(AggregateType.HLL_UNION,
@@ -1450,8 +1455,7 @@ public class SelectMaterializedIndexWithAggregate extends 
AbstractSelectMaterial
                 return result;
             }
             Optional<Slot> slotOpt = 
ExpressionUtils.extractSlotOrCastOnSlot(sum.child(0));
-            if (!sum.isDistinct() && slotOpt.isPresent()
-                    && 
!context.checkContext.keyNameToColumn.containsKey(normalizeName(slotOpt.get().toSql())))
 {
+            if (!sum.isDistinct() && slotOpt.isPresent()) {
                 Expression expr = castIfNeed(sum.child(), BigIntType.INSTANCE);
                 String sumColumn = 
normalizeName(CreateMaterializedViewStmt.mvColumnBuilder(AggregateType.SUM,
                         
CreateMaterializedViewStmt.mvColumnBuilder(expr.toSql())));
@@ -1487,10 +1491,8 @@ public class SelectMaterializedIndexWithAggregate 
extends AbstractSelectMaterial
 
                 Set<Slot> slots = 
aggregateFunction.collect(SlotReference.class::isInstance);
                 for (Slot slot : slots) {
-                    if 
(!context.checkContext.keyNameToColumn.containsKey(normalizeName(slot.toSql())))
 {
-                        context.exprRewriteMap.slotMap.put(slot, aggStateSlot);
-                        context.exprRewriteMap.projectExprMap.put(slot, 
aggStateSlot);
-                    }
+                    context.exprRewriteMap.slotMap.put(slot, aggStateSlot);
+                    context.exprRewriteMap.projectExprMap.put(slot, 
aggStateSlot);
                 }
 
                 MergeCombinator mergeCombinator = new 
MergeCombinator(Arrays.asList(aggStateSlot), aggregateFunction);
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/task/AlterReplicaTask.java 
b/fe/fe-core/src/main/java/org/apache/doris/task/AlterReplicaTask.java
index 178550dd229..cd6502da762 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/task/AlterReplicaTask.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/task/AlterReplicaTask.java
@@ -128,7 +128,6 @@ public class AlterReplicaTask extends AgentTask {
                 List<SlotRef> slots = Lists.newArrayList();
                 entry.getValue().collect(SlotRef.class, slots);
                 TAlterMaterializedViewParam mvParam = new 
TAlterMaterializedViewParam(entry.getKey());
-                mvParam.setOriginColumnName(slots.get(0).getColumnName());
                 mvParam.setMvExpr(entry.getValue().treeToThrift());
                 req.addToMaterializedViewParams(mvParam);
             }
diff --git a/regression-test/data/mv_p0/ssb/multiple_ssb/multiple_ssb.out 
b/regression-test/data/mv_p0/ssb/multiple_ssb/multiple_ssb.out
index 00e05ab400e..8cdb12f0f50 100644
--- a/regression-test/data/mv_p0/ssb/multiple_ssb/multiple_ssb.out
+++ b/regression-test/data/mv_p0/ssb/multiple_ssb/multiple_ssb.out
@@ -2,7 +2,7 @@
 -- !select_star --
 1      1       1       1       1       1       1       1       1       1       
1       1       1       1       1       2023-06-09      shipmode        name    
address city    nation  AMERICA phone   mktsegment      name    address city    
nation  AMERICA phone   name    MFGR#1  category        brand   color   type    
4       container
 2      2       2       2       2       2       2       2       2       2       
2       2       2       2       2       2023-06-09      shipmode        name    
address city    nation  region  phone   mktsegment      name    address city    
nation  region  phone   name    mfgr    category        brand   color   type    
4       container
-19920101       1       1       1       1       1       1       1       1       
1       1       100     1       1       1       2023-06-09      ASIA    ASIA    
ASIA    ASIA    ASIA    ASIA    ASIA    ASIA    ASIA    ASIA    ASIA    ASIA    
ASIA    ASIA    ASIA    MFGR#12 MFGR#12 brand   color   type    4       
container
+19920101       1       1       1       1       1       11      1       1       
1       1       100     1       1       1       2023-06-09      ASIA    ASIA    
ASIA    ASIA    ASIA    ASIA    ASIA    ASIA    ASIA    ASIA    ASIA    ASIA    
ASIA    ASIA    ASIA    MFGR#12 MFGR#12 brand   color   type    4       
container
 19930101       1       1       1       1       1       1       1       1       
1       1       100     1       1       1       2023-06-09      shipmode        
name    address city    nation  AMERICA phone   mktsegment      name    address 
city    nation  AMERICA phone   name    MFGR#1  category        brand   color   
type    4       container
 19930101       1       1       1       1       1       1       1       1       
1       1       100     1       1       1       2023-06-09      shipmode        
name    address city    nation  AMERICA phone   mktsegment      name    address 
city    nation  AMERICA phone   name    MFGR#12 MFGR#12 brand   color   type    
4       container
 19930101       2       2       2       2       2       2       2       2       
2       2       2       2       2       2       2023-06-09      shipmode        
name    address city    nation  region  phone   mktsegment      name    address 
city    nation  region  phone   name    mfgr    category        brand   color   
type    4       container
@@ -22,3 +22,11 @@ ASIA ASIA    1992    1
 0      nation  0
 1993   nation  0
 
+-- !select_count_1 --
+1      1
+2      2
+
+-- !select_count_3 --
+1      3
+2      4
+
diff --git 
a/regression-test/data/schema_change_p0/decimalv3/test_agg_keys_schema_change_decimalv3.out
 
b/regression-test/data/schema_change_p0/decimalv3/test_agg_keys_schema_change_decimalv3.out
index fc5d8e286ce..1a305a594ec 100644
--- 
a/regression-test/data/schema_change_p0/decimalv3/test_agg_keys_schema_change_decimalv3.out
+++ 
b/regression-test/data/schema_change_p0/decimalv3/test_agg_keys_schema_change_decimalv3.out
@@ -15,17 +15,8 @@
 0.11111111111111111111111111111111100000       
11111111111111111111111111111.110       
0.11111111111111111111111111111111100000        
11111111111111111111111111111.110
 
 -- !sql --
-0.11111111111111111111111111111111100000       
11111111111111111111111111111.1100000000        
0.11111111111111111111111111111111100000        
11111111111111111111111111111.110
-
--- !sql --
-0.11111111111111111111111111111111100000       -999999999999999.999    
0.11111111111111111111111111111111100000        
11111111111111111111111111111.110
-
--- !sql --
-0.11111111111111111111111111111111100000       -9223.372036854775808   
0.11111111111111111111111111111111100000        
11111111111111111111111111111.110
-
--- !sql --
-0.11111111111111111111111111111111100000       -9223   
0.11111111111111111111111111111111100000        
11111111111111111111111111111.110
+0.11111111111111111111111111111111100000       
11111111111111111111111111111.110       
0.11111111111111111111111111111111100000        
11111111111111111111111111111.110
 
 -- !sql --
-0.11111111111111111111111111111111100000       -2147.483648    
0.11111111111111111111111111111111100000        
11111111111111111111111111111.110
+0.11111111111111111111111111111111100000       
11111111111111111111111111111.110       
0.11111111111111111111111111111111100000        
11111111111111111111111111111.110
 
diff --git a/regression-test/suites/mv_p0/ssb/multiple_ssb/multiple_ssb.groovy 
b/regression-test/suites/mv_p0/ssb/multiple_ssb/multiple_ssb.groovy
index 3a137a2a8fa..0c8f6ee9a7e 100644
--- a/regression-test/suites/mv_p0/ssb/multiple_ssb/multiple_ssb.groovy
+++ b/regression-test/suites/mv_p0/ssb/multiple_ssb/multiple_ssb.groovy
@@ -137,6 +137,9 @@ suite ("multiple_ssb") {
                 AND P_MFGR IN ('MFGR#1', 'MFGR#2')
                 GROUP BY YEAR, C_NATION
                 ORDER BY YEAR ASC, C_NATION ASC;""")
+    
+    createMV("CREATE MATERIALIZED VIEW count_LO_ORDERPRIORITY_1 as select 
LO_ORDERDATE, sum(LO_ORDERDATE) from lineorder_flat where LO_ORDERDATE in 
(1,2,3) group by LO_ORDERDATE;");
+    createMV("CREATE MATERIALIZED VIEW count_LO_ORDERPRIORITY_3 as select 
LO_ORDERPRIORITY, count(1) from lineorder_flat where LO_ORDERPRIORITY in 
('1','2','3') group by LO_ORDERPRIORITY;");
 
     sql """INSERT INTO lineorder_flat (LO_ORDERDATE, LO_ORDERKEY, 
LO_LINENUMBER, LO_CUSTKEY, LO_PARTKEY, LO_SUPPKEY, LO_ORDERPRIORITY, 
LO_SHIPPRIORITY, LO_QUANTITY, LO_EXTENDEDPRICE, LO_ORDTOTALPRICE, LO_DISCOUNT, 
LO_REVENUE, LO_SUPPLYCOST, LO_TAX, LO_COMMITDATE, 
LO_SHIPMODE,C_NAME,C_ADDRESS,C_CITY,C_NATION,C_REGION,C_PHONE,C_MKTSEGMENT,S_NAME,S_ADDRESS,S_CITY,S_NATION,S_REGION,S_PHONE,P_NAME,P_MFGR,P_CATEGORY,P_BRAND,P_COLOR,P_TYPE,P_SIZE,P_CONTAINER)
 VALUES (19930101 , 2 , 2 , 2 , 2 ,  [...]
 
@@ -144,7 +147,7 @@ suite ("multiple_ssb") {
 
     sql """INSERT INTO lineorder_flat (LO_ORDERDATE, LO_ORDERKEY, 
LO_LINENUMBER, LO_CUSTKEY, LO_PARTKEY, LO_SUPPKEY, LO_ORDERPRIORITY, 
LO_SHIPPRIORITY, LO_QUANTITY, LO_EXTENDEDPRICE, LO_ORDTOTALPRICE, LO_DISCOUNT, 
LO_REVENUE, LO_SUPPLYCOST, LO_TAX, LO_COMMITDATE, 
LO_SHIPMODE,C_NAME,C_ADDRESS,C_CITY,C_NATION,C_REGION,C_PHONE,C_MKTSEGMENT,S_NAME,S_ADDRESS,S_CITY,S_NATION,S_REGION,S_PHONE,P_NAME,P_MFGR,P_CATEGORY,P_BRAND,P_COLOR,P_TYPE,P_SIZE,P_CONTAINER)
 VALUES (19930101 , 2 , 2 , 2 , 2 ,  [...]
 
-    sql """INSERT INTO lineorder_flat (LO_ORDERDATE, LO_ORDERKEY, 
LO_LINENUMBER, LO_CUSTKEY, LO_PARTKEY, LO_SUPPKEY, LO_ORDERPRIORITY, 
LO_SHIPPRIORITY, LO_QUANTITY, LO_EXTENDEDPRICE, LO_ORDTOTALPRICE, LO_DISCOUNT, 
LO_REVENUE, LO_SUPPLYCOST, LO_TAX, LO_COMMITDATE, LO_SHIPMODE, C_NAME, 
C_ADDRESS, C_CITY, C_NATION, C_REGION, C_PHONE, C_MKTSEGMENT, S_NAME, 
S_ADDRESS, S_CITY, S_NATION, S_REGION, S_PHONE, P_NAME, P_MFGR, P_CATEGORY, 
P_BRAND, P_COLOR,P_TYPE,P_SIZE,P_CONTAINER) VALUES (19920101  [...]
+    sql """INSERT INTO lineorder_flat (LO_ORDERDATE, LO_ORDERKEY, 
LO_LINENUMBER, LO_CUSTKEY, LO_PARTKEY, LO_SUPPKEY, LO_ORDERPRIORITY, 
LO_SHIPPRIORITY, LO_QUANTITY, LO_EXTENDEDPRICE, LO_ORDTOTALPRICE, LO_DISCOUNT, 
LO_REVENUE, LO_SUPPLYCOST, LO_TAX, LO_COMMITDATE, LO_SHIPMODE, C_NAME, 
C_ADDRESS, C_CITY, C_NATION, C_REGION, C_PHONE, C_MKTSEGMENT, S_NAME, 
S_ADDRESS, S_CITY, S_NATION, S_REGION, S_PHONE, P_NAME, P_MFGR, P_CATEGORY, 
P_BRAND, P_COLOR,P_TYPE,P_SIZE,P_CONTAINER) VALUES (19920101  [...]
 
     sql """INSERT INTO lineorder_flat (LO_ORDERDATE, LO_ORDERKEY, 
LO_LINENUMBER, LO_CUSTKEY, LO_PARTKEY, LO_SUPPKEY, LO_ORDERPRIORITY, 
LO_SHIPPRIORITY, LO_QUANTITY, LO_EXTENDEDPRICE, LO_ORDTOTALPRICE, LO_DISCOUNT, 
LO_REVENUE, LO_SUPPLYCOST, LO_TAX, LO_COMMITDATE, 
LO_SHIPMODE,C_NAME,C_ADDRESS,C_CITY,C_NATION,C_REGION,C_PHONE,C_MKTSEGMENT,S_NAME,S_ADDRESS,S_CITY,S_NATION,S_REGION,S_PHONE,P_NAME,P_MFGR,P_CATEGORY,P_BRAND,P_COLOR,P_TYPE,P_SIZE,P_CONTAINER)
 VALUES (19930101 , 2 , 2 , 2 , 2 ,  [...]
 
@@ -152,7 +155,7 @@ suite ("multiple_ssb") {
 
     sql """INSERT INTO lineorder_flat (LO_ORDERDATE, LO_ORDERKEY, 
LO_LINENUMBER, LO_CUSTKEY, LO_PARTKEY, LO_SUPPKEY, LO_ORDERPRIORITY, 
LO_SHIPPRIORITY, LO_QUANTITY, LO_EXTENDEDPRICE, LO_ORDTOTALPRICE, LO_DISCOUNT, 
LO_REVENUE, LO_SUPPLYCOST, LO_TAX, LO_COMMITDATE, LO_SHIPMODE, C_NAME, 
C_ADDRESS, C_CITY, C_NATION, C_REGION, C_PHONE, C_MKTSEGMENT, S_NAME, 
S_ADDRESS, S_CITY, S_NATION, S_REGION, S_PHONE, P_NAME, P_MFGR, P_CATEGORY, 
P_BRAND, P_COLOR,P_TYPE,P_SIZE,P_CONTAINER) VALUES (1 , 1 , 1 [...]
 
-    qt_select_star "select * from lineorder_flat order by 1,2;"
+    qt_select_star "select * from lineorder_flat order by 
1,2,LO_ORDERPRIORITY;"
     
     explain {
         sql("""SELECT SUM(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenue
@@ -241,4 +244,16 @@ suite ("multiple_ssb") {
                 AND P_MFGR IN ('MFGR#1', 'MFGR#2')
                 GROUP BY YEAR, C_NATION
                 ORDER BY YEAR ASC, C_NATION ASC;"""
+
+    explain {
+        sql("""select LO_ORDERDATE, sum(LO_ORDERDATE) from lineorder_flat 
where LO_ORDERDATE in (1,2,3) group by LO_ORDERDATE;""")
+        contains "(count_LO_ORDERPRIORITY_1)"
+    }
+    qt_select_count_1 "select LO_ORDERDATE, sum(LO_ORDERDATE) from 
lineorder_flat where LO_ORDERDATE in (1,2,3) group by LO_ORDERDATE order by 
1,2;"
+
+    explain {
+        sql("""select LO_ORDERPRIORITY, count(1) from lineorder_flat where 
LO_ORDERPRIORITY in ('1','2','3') group by LO_ORDERPRIORITY;""")
+        contains "(count_LO_ORDERPRIORITY_3)"
+    }
+    qt_select_count_3 "select LO_ORDERPRIORITY, count(1) from lineorder_flat 
where LO_ORDERPRIORITY in ('1','2','3') group by LO_ORDERPRIORITY order by 1,2;"
 }
diff --git 
a/regression-test/suites/schema_change_p0/decimalv3/test_agg_keys_schema_change_decimalv3.groovy
 
b/regression-test/suites/schema_change_p0/decimalv3/test_agg_keys_schema_change_decimalv3.groovy
index 83dbdefe843..41f2a32854a 100644
--- 
a/regression-test/suites/schema_change_p0/decimalv3/test_agg_keys_schema_change_decimalv3.groovy
+++ 
b/regression-test/suites/schema_change_p0/decimalv3/test_agg_keys_schema_change_decimalv3.groovy
@@ -89,7 +89,7 @@ suite("test_agg_keys_schema_change_decimalv3") {
             sleep(3000)
             break
         } else {
-            sleep(100)
+            sleep(1000)
             if (max_try_time < 1){
                 assertEquals(1,2)
             }
@@ -108,7 +108,7 @@ suite("test_agg_keys_schema_change_decimalv3") {
             sleep(3000)
             break
         } else {
-            sleep(100)
+            sleep(1000)
             if (max_try_time < 1){
                 assertEquals(1,2)
             }
@@ -121,11 +121,11 @@ suite("test_agg_keys_schema_change_decimalv3") {
     max_try_time = 1000
     while (max_try_time--){
         String result = getJobState(tbName)
-        if (result == "FINISHED") {
+        if (result == "CANCELLED") {
             sleep(3000)
             break
         } else {
-            sleep(100)
+            sleep(1000)
             if (max_try_time < 1){
                 assertEquals(1,2)
             }
@@ -139,11 +139,11 @@ suite("test_agg_keys_schema_change_decimalv3") {
     max_try_time = 1000
     while (max_try_time--){
         String result = getJobState(tbName)
-        if (result == "FINISHED") {
+        if (result == "CANCELLED") {
             sleep(3000)
             break
         } else {
-            sleep(100)
+            sleep(1000)
             if (max_try_time < 1){
                 assertEquals(1,2)
             }
@@ -157,11 +157,11 @@ suite("test_agg_keys_schema_change_decimalv3") {
     max_try_time = 1000
     while (max_try_time--){
         String result = getJobState(tbName)
-        if (result == "FINISHED") {
+        if (result == "CANCELLED") {
             sleep(3000)
             break
         } else {
-            sleep(100)
+            sleep(1000)
             if (max_try_time < 1){
                 assertEquals(1,2)
             }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to