diff --git a/be/src/olap/schema_change.cpp b/be/src/olap/schema_change.cpp index 8d96f68bb6d56d..95a5de3b25b8a9 100644 --- a/be/src/olap/schema_change.cpp +++ b/be/src/olap/schema_change.cpp @@ -894,13 +894,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(item.mv_expr); @@ -1195,9 +1188,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; } } @@ -1253,7 +1244,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; } @@ -1302,22 +1293,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 74be8f59921bfc..fb89c68ec614b6 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 a248d1404b5d93..f40033ed3cdf6e 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 void analyzeSelectClause(Analyzer analyzer) throws AnalysisException { throw new AnalysisException("The materialized view only support the single column or function expr. " + "Error column: " + selectListItemExpr.toSql()); } - List 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 void analyzeSelectClause(Analyzer analyzer) throws AnalysisException { // build mv column item mvColumnItemList.add(buildMVColumnItem(analyzer, functionCallExpr)); } else { + List 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 67dd0e68a336fc..2cf0797a311ee7 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.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 @@ private AggRewriteResult rewriteAgg(MaterializedIndex index, // has rewritten agg functions Map 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 slotsToReplace = slotMap.keySet(); - Set 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 slotsToReplace = slotMap.keySet(); + Set 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 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 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 Expression visitCount(Count count, RewriteContext context) { 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 Expression visitCount(Count count, RewriteContext context) { 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 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 Expression visitNdv(Ndv ndv, RewriteContext context) { } Optional 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 Expression visitSum(Sum sum, RewriteContext context) { return result; } Optional 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 Expression visitAggregateFunction(AggregateFunction aggregateFunction, Re Set 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 178550dd229017..cd6502da762b78 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 TAlterTabletReqV2 toThrift() { List 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 00e05ab400e7ca..8cdb12f0f502c7 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 fc5d8e286ce89b..1a305a594eced3 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 3a137a2a8fa146..0c8f6ee9a7ed00 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 , 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');""" @@ -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 , 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');""" - 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 , 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');""" + 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 , 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');""" 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 , 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');""" @@ -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 , 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');""" - 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 83dbdefe843b79..41f2a32854a259 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) }