diff --git a/fe/fe-common/src/main/java/org/apache/doris/catalog/AggStateType.java b/fe/fe-common/src/main/java/org/apache/doris/catalog/AggStateType.java index 47477a08f8..6369e717f8 100644 --- a/fe/fe-common/src/main/java/org/apache/doris/catalog/AggStateType.java +++ b/fe/fe-common/src/main/java/org/apache/doris/catalog/AggStateType.java @@ -111,12 +111,13 @@ public class AggStateType extends ScalarType { return false; } AggStateType other = (AggStateType) o; + // compare with the basic type. + if (other.subTypes == null) { + return true; + } if ((subTypes == null) != (other.getSubTypes() == null)) { return false; } - if (subTypes == null) { - return true; - } int subTypeNumber = subTypeNullables.size(); if (subTypeNumber != other.subTypeNullables.size()) { return false; diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/CastExpr.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/CastExpr.java index 6ceb8e3d84..e16460ee54 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CastExpr.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CastExpr.java @@ -147,7 +147,7 @@ public class CastExpr extends Expr { Type to = getActualType(type); NullableMode nullableMode = TYPE_NULLABLE_MODE.get(Pair.of(from, to)); Preconditions.checkState(nullableMode != null, - "cannot find nullable node for cast from " + from + " to " + to); + "cannot find nullable mode for cast from " + from + " to " + to); fn = new Function(new FunctionName(getFnName(type)), Lists.newArrayList(e.type), type, false, true, nullableMode); } else { diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/check/CheckCast.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/check/CheckCast.java index 361b5f38f5..e375c86c06 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/check/CheckCast.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/check/CheckCast.java @@ -22,6 +22,7 @@ import org.apache.doris.nereids.rules.expression.AbstractExpressionRewriteRule; import org.apache.doris.nereids.rules.expression.ExpressionRewriteContext; import org.apache.doris.nereids.trees.expressions.Cast; import org.apache.doris.nereids.trees.expressions.Expression; +import org.apache.doris.nereids.types.AggStateType; import org.apache.doris.nereids.types.ArrayType; import org.apache.doris.nereids.types.DataType; @@ -46,6 +47,8 @@ public class CheckCast extends AbstractExpressionRewriteRule { private boolean check(DataType originalType, DataType targetType) { if (originalType.isArrayType() && targetType.isArrayType()) { return check(((ArrayType) originalType).getItemType(), ((ArrayType) targetType).getItemType()); + } else if (originalType.isAggStateType() && targetType.isAggStateType()) { + return AggStateType.canCastTo(((AggStateType) originalType), ((AggStateType) targetType)); } else if (originalType.isMapType()) { // TODO support map cast check when we support map return false; diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/types/AggStateType.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/types/AggStateType.java index a999512d1b..54e5e23eb3 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/types/AggStateType.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/types/AggStateType.java @@ -67,6 +67,13 @@ public class AggStateType extends DataType { return result; } + /** + * check the left agg state type can be cast to the right. + */ + public static boolean canCastTo(AggStateType lhs, AggStateType rhs) { + throw new UnsupportedOperationException("currently cast for agg_state type is unsupported"); + } + @Override public Type toCatalogDataType() { List types = subTypes.stream().map(t -> t.toCatalogDataType()).collect(Collectors.toList()); diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java index b56a50c9f1..4cf684285d 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java +++ b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java @@ -615,7 +615,7 @@ public class SessionVariable implements Serializable, Writable { public boolean extractWideRangeExpr = true; @VariableMgr.VarAttr(name = ENABLE_NEREIDS_DML) - public boolean enableNereidsDML = false; + public boolean enableNereidsDML = true; @VariableMgr.VarAttr(name = ENABLE_VECTORIZED_ENGINE, expType = ExperimentalType.EXPERIMENTAL_ONLINE) public boolean enableVectorizedEngine = true; diff --git a/regression-test/suites/datatype_p0/agg_state/nereids/test_agg_state_nereids.groovy b/regression-test/suites/datatype_p0/agg_state/nereids/test_agg_state_nereids.groovy index b31070b01c..450dbcab77 100644 --- a/regression-test/suites/datatype_p0/agg_state/nereids/test_agg_state_nereids.groovy +++ b/regression-test/suites/datatype_p0/agg_state/nereids/test_agg_state_nereids.groovy @@ -55,15 +55,20 @@ suite("test_agg_state_nereids") { properties("replication_num" = "1"); """ + // fall back to original planner because cast for agg state in Nereids is unsupported yet. + sql "set enable_fallback_to_original_planner=true" sql "insert into a_table select 1,max_by_state(1,3);" sql "insert into a_table select 1,max_by_state(2,2);" sql "insert into a_table select 1,max_by_state(3,1);" + sql "set enable_fallback_to_original_planner=false" qt_length1 """select k1,length(k2) from a_table order by k1;""" qt_group1 """select k1,max_by_merge(k2) from a_table group by k1 order by k1;""" qt_merge1 """select max_by_merge(k2) from a_table;""" - + + sql "set enable_fallback_to_original_planner=true" sql "insert into a_table select k1+1, max_by_state(k2,k1+10) from d_table;" + sql "set enable_fallback_to_original_planner=false" qt_length2 """select k1,length(k2) from a_table order by k1;""" qt_group2 """select k1,max_by_merge(k2) from a_table group by k1 order by k1;""" diff --git a/regression-test/suites/nereids_p0/delete/delete_using.groovy b/regression-test/suites/nereids_p0/delete/delete_using.groovy index ff1b1e0336..e92478075f 100644 --- a/regression-test/suites/nereids_p0/delete/delete_using.groovy +++ b/regression-test/suites/nereids_p0/delete/delete_using.groovy @@ -18,7 +18,6 @@ suite('nereids_delete_using') { sql 'set enable_nereids_planner=true' sql 'set enable_fallback_to_original_planner=false' - sql 'set enable_nereids_dml=true' sql 'insert into t1(id, c1, c2, c3) select id, c1 * 2, c2, c3 from t1' sql 'insert into t2(id, c1, c2, c3) select id, c1, c2 * 2, c3 from t2' diff --git a/regression-test/suites/nereids_p0/insert_into_table/aggregate.groovy b/regression-test/suites/nereids_p0/insert_into_table/aggregate.groovy index 9665e5520d..36797e00bc 100644 --- a/regression-test/suites/nereids_p0/insert_into_table/aggregate.groovy +++ b/regression-test/suites/nereids_p0/insert_into_table/aggregate.groovy @@ -21,8 +21,6 @@ suite("nereids_insert_aggregate") { sql 'set enable_nereids_planner=true' sql 'set enable_fallback_to_original_planner=false' - sql 'set enable_nereids_dml=true' - sql 'set parallel_fragment_exec_instance_num=13' sql '''insert into nereids_insert_into_table_test.agg_t select * except(kaint) from src''' diff --git a/regression-test/suites/nereids_p0/insert_into_table/complex_insert.groovy b/regression-test/suites/nereids_p0/insert_into_table/complex_insert.groovy index 458ae6cb3f..4977587f03 100644 --- a/regression-test/suites/nereids_p0/insert_into_table/complex_insert.groovy +++ b/regression-test/suites/nereids_p0/insert_into_table/complex_insert.groovy @@ -20,8 +20,6 @@ import org.codehaus.groovy.runtime.IOGroovyMethods suite('complex_insert') { sql 'set enable_nereids_planner=true' sql 'set enable_fallback_to_original_planner=false' - sql 'set enable_nereids_dml=true' - sql 'set parallel_fragment_exec_instance_num=13' sql 'use nereids_insert_into_table_test' diff --git a/regression-test/suites/nereids_p0/insert_into_table/duplicate.groovy b/regression-test/suites/nereids_p0/insert_into_table/duplicate.groovy index 167952190c..67ea0cc7f0 100644 --- a/regression-test/suites/nereids_p0/insert_into_table/duplicate.groovy +++ b/regression-test/suites/nereids_p0/insert_into_table/duplicate.groovy @@ -21,8 +21,6 @@ suite("nereids_insert_duplicate") { sql 'set enable_nereids_planner=true' sql 'set enable_fallback_to_original_planner=false' - sql 'set enable_nereids_dml=true' - sql 'set parallel_fragment_exec_instance_num=13' sql '''insert into dup_t select * except(kaint) from src''' diff --git a/regression-test/suites/nereids_p0/insert_into_table/no_partition.groovy b/regression-test/suites/nereids_p0/insert_into_table/no_partition.groovy index e7d5873d36..73b85c787a 100644 --- a/regression-test/suites/nereids_p0/insert_into_table/no_partition.groovy +++ b/regression-test/suites/nereids_p0/insert_into_table/no_partition.groovy @@ -21,8 +21,6 @@ suite('nereids_insert_no_partition') { sql 'set enable_nereids_planner=true' sql 'set enable_fallback_to_original_planner=false' - sql 'set enable_nereids_dml=true' - sql 'set parallel_fragment_exec_instance_num=13' sql '''insert into agg_nop_t select * except(kaint) from src''' diff --git a/regression-test/suites/nereids_p0/insert_into_table/type_cast_aggregate.groovy b/regression-test/suites/nereids_p0/insert_into_table/type_cast_aggregate.groovy index b5ac0ba12f..34dc2dc8da 100644 --- a/regression-test/suites/nereids_p0/insert_into_table/type_cast_aggregate.groovy +++ b/regression-test/suites/nereids_p0/insert_into_table/type_cast_aggregate.groovy @@ -21,8 +21,6 @@ suite("nereids_insert_aggregate_type_cast") { sql 'set enable_nereids_planner=true' sql 'set enable_fallback_to_original_planner=false' - sql 'set enable_nereids_dml=true' - sql 'set parallel_fragment_exec_instance_num=13' sql '''insert into agg_t_type_cast select id, ktint, ksint, kint, kbint, kdtv2, kdtm, kdbl from src''' diff --git a/regression-test/suites/nereids_p0/insert_into_table/type_cast_duplicate.groovy b/regression-test/suites/nereids_p0/insert_into_table/type_cast_duplicate.groovy index 3124c7570b..e39ed5de3a 100644 --- a/regression-test/suites/nereids_p0/insert_into_table/type_cast_duplicate.groovy +++ b/regression-test/suites/nereids_p0/insert_into_table/type_cast_duplicate.groovy @@ -21,8 +21,6 @@ suite("nereids_insert_duplicate") { sql 'set enable_nereids_planner=true' sql 'set enable_fallback_to_original_planner=false' - sql 'set enable_nereids_dml=true' - sql 'set parallel_fragment_exec_instance_num=13' sql '''insert into dup_t_type_cast select id, ktint, ksint, kint, kbint, kdtv2, kdtm, kdbl from src''' diff --git a/regression-test/suites/nereids_p0/insert_into_table/type_cast_unique.groovy b/regression-test/suites/nereids_p0/insert_into_table/type_cast_unique.groovy index a0edf47b46..d091c843c0 100644 --- a/regression-test/suites/nereids_p0/insert_into_table/type_cast_unique.groovy +++ b/regression-test/suites/nereids_p0/insert_into_table/type_cast_unique.groovy @@ -21,8 +21,6 @@ suite("nereids_insert_unique_type_cast") { sql 'set enable_nereids_planner=true' sql 'set enable_fallback_to_original_planner=false' - sql 'set enable_nereids_dml=true' - sql 'set parallel_fragment_exec_instance_num=13' sql '''insert into uni_t_type_cast select id, ktint, ksint, kint, kbint, kdtv2, kdtm, kdbl from src''' diff --git a/regression-test/suites/nereids_p0/insert_into_table/unique.groovy b/regression-test/suites/nereids_p0/insert_into_table/unique.groovy index f79332709a..0f9ade6cac 100644 --- a/regression-test/suites/nereids_p0/insert_into_table/unique.groovy +++ b/regression-test/suites/nereids_p0/insert_into_table/unique.groovy @@ -21,8 +21,6 @@ suite("nereids_insert_unique") { sql 'set enable_nereids_planner=true' sql 'set enable_fallback_to_original_planner=false' - sql 'set enable_nereids_dml=true' - sql 'set parallel_fragment_exec_instance_num=13' sql '''insert into uni_t select * except(kaint) from src''' diff --git a/regression-test/suites/nereids_p0/insert_into_table/unsupport_type.groovy b/regression-test/suites/nereids_p0/insert_into_table/unsupport_type.groovy index 75bc38f594..392cb0e82b 100644 --- a/regression-test/suites/nereids_p0/insert_into_table/unsupport_type.groovy +++ b/regression-test/suites/nereids_p0/insert_into_table/unsupport_type.groovy @@ -20,8 +20,6 @@ suite("nereids_insert_array_type") { sql 'set enable_nereids_planner=true' sql 'set enable_fallback_to_original_planner=false' - sql 'set enable_nereids_dml=true' - sql 'set parallel_fragment_exec_instance_num=13' test { sql 'insert into arr_t select id, kaint from src' diff --git a/regression-test/suites/nereids_p0/update/update_unique_table.groovy b/regression-test/suites/nereids_p0/update/update_unique_table.groovy index 358a3bb9cf..70149a80f3 100644 --- a/regression-test/suites/nereids_p0/update/update_unique_table.groovy +++ b/regression-test/suites/nereids_p0/update/update_unique_table.groovy @@ -18,7 +18,6 @@ suite('update_unique_table') { sql 'set enable_nereids_planner=true' sql 'set enable_fallback_to_original_planner=false' - sql 'set enable_nereids_dml=true' sql 'update t1 set c1 = 5 where id = 3'