This is an automated email from the ASF dual-hosted git repository. zhaoc pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-doris.git
The following commit(s) were added to refs/heads/master by this push: new 147953f Fix some function with date type bug (#2947) 147953f is described below commit 147953f09e68e98e22ffc46f8e10445dabc3440f Author: kangkaisen <kangkai...@apache.org> AuthorDate: Wed Feb 19 20:16:44 2020 +0800 Fix some function with date type bug (#2947) The logic chain is following: 1. `date_format(if(, NULL, `dt`), '%Y%m%d')` as HASH_PARTITIONED exprs,which is not right, we should use Agg intermediate materialized slot 2. we don't use Agg intermediate materialized slot as HASH_PARTITIONED exprs, becasue ``` // the parent fragment is partitioned on the grouping exprs; // substitute grouping exprs to reference the *output* of the agg, not the input partitionExprs = Expr.substituteList(partitionExprs, node.getAggInfo().getIntermediateSmap(), ctx_.getRootAnalyzer(), false); parentPartition = DataPartition.hashPartitioned(partitionExprs); ``` the partitionExprs substitute failed。 3. partitionExprs substitute failed because partitionExprs has a casttodate child,but agg info getIntermediateSmap has a cast in datetime child. 4. The cast to date or cast to datetime child exist because `TupleIsNullPredicate` insert a `if` Expr. we don't have `if date` fn, so Doris use `if int` Expr. 5. the `date` in the `catstodate` depend on slot dt date type. the `datetime` in the `catstodatetime` depend on datetime arg type in `date_format` function. So we could fix this issue by make if fn support date type or make date_format fn support date type --- .../main/java/org/apache/doris/analysis/TupleIsNullPredicate.java | 5 ++--- gensrc/script/doris_builtins_functions.py | 8 ++++++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/fe/src/main/java/org/apache/doris/analysis/TupleIsNullPredicate.java b/fe/src/main/java/org/apache/doris/analysis/TupleIsNullPredicate.java index 562db08..fedf720 100644 --- a/fe/src/main/java/org/apache/doris/analysis/TupleIsNullPredicate.java +++ b/fe/src/main/java/org/apache/doris/analysis/TupleIsNullPredicate.java @@ -17,6 +17,7 @@ package org.apache.doris.analysis; +import com.google.common.base.Joiner; import org.apache.doris.common.AnalysisException; import org.apache.doris.common.UserException; import org.apache.doris.thrift.TExprNode; @@ -50,8 +51,6 @@ public class TupleIsNullPredicate extends Predicate { @Override protected void analyzeImpl(Analyzer analyzer) throws AnalysisException { super.analyzeImpl(analyzer); - // analyzer = analyzer; - // evalCost_ = tupleIds_.size() * IS_NULL_COST; } @Override @@ -155,6 +154,6 @@ public class TupleIsNullPredicate extends Predicate { @Override public String toSqlImpl() { - return ""; + return "TupleIsNull(" + Joiner.on(",").join(tupleIds) + ")"; } } diff --git a/gensrc/script/doris_builtins_functions.py b/gensrc/script/doris_builtins_functions.py index 919c0ff..4739399 100755 --- a/gensrc/script/doris_builtins_functions.py +++ b/gensrc/script/doris_builtins_functions.py @@ -102,6 +102,8 @@ visible_functions = [ # Timestamp functions [['unix_timestamp'], 'INT', [], '_ZN5doris18TimestampFunctions7to_unixEPN9doris_udf15FunctionContextE'], + [['unix_timestamp'], 'INT', ['DATE'], + '_ZN5doris18TimestampFunctions7to_unixEPN9doris_udf15FunctionContextERKNS1_11DateTimeValE'], [['unix_timestamp'], 'INT', ['DATETIME'], '_ZN5doris18TimestampFunctions7to_unixEPN9doris_udf15FunctionContextERKNS1_11DateTimeValE'], [['unix_timestamp'], 'INT', ['VARCHAR', 'VARCHAR'], @@ -210,6 +212,9 @@ visible_functions = [ [['str_to_date'], 'DATETIME', ['VARCHAR', 'VARCHAR'], '_ZN5doris18TimestampFunctions11str_to_dateEPN9doris_udf' '15FunctionContextERKNS1_9StringValES6_'], + [['date_format'], 'VARCHAR', ['DATE', 'VARCHAR'], + '_ZN5doris18TimestampFunctions11date_formatEPN9doris_udf' + '15FunctionContextERKNS1_11DateTimeValERKNS1_9StringValE'], [['date_format'], 'VARCHAR', ['DATETIME', 'VARCHAR'], '_ZN5doris18TimestampFunctions11date_formatEPN9doris_udf' '15FunctionContextERKNS1_11DateTimeValERKNS1_9StringValE'], @@ -438,6 +443,7 @@ visible_functions = [ [['if'], 'LARGEINT', ['BOOLEAN', 'LARGEINT', 'LARGEINT'], ''], [['if'], 'FLOAT', ['BOOLEAN', 'FLOAT', 'FLOAT'], ''], [['if'], 'DOUBLE', ['BOOLEAN', 'DOUBLE', 'DOUBLE'], ''], + [['if'], 'DATE', ['BOOLEAN', 'DATE', 'DATE'], ''], [['if'], 'DATETIME', ['BOOLEAN', 'DATETIME', 'DATETIME'], ''], [['if'], 'DECIMAL', ['BOOLEAN', 'DECIMAL', 'DECIMAL'], ''], [['if'], 'DECIMALV2', ['BOOLEAN', 'DECIMALV2', 'DECIMALV2'], ''], @@ -452,6 +458,7 @@ visible_functions = [ [['nullif'], 'LARGEINT', ['LARGEINT', 'LARGEINT'], ''], [['nullif'], 'FLOAT', ['FLOAT', 'FLOAT'], ''], [['nullif'], 'DOUBLE', ['DOUBLE', 'DOUBLE'], ''], + [['nullif'], 'DATE', ['DATE', 'DATE'], ''], [['nullif'], 'DATETIME', ['DATETIME', 'DATETIME'], ''], [['nullif'], 'DECIMAL', ['DECIMAL', 'DECIMAL'], ''], [['nullif'], 'DECIMALV2', ['DECIMALV2', 'DECIMALV2'], ''], @@ -481,6 +488,7 @@ visible_functions = [ [['coalesce'], 'LARGEINT', ['LARGEINT', '...'], ''], [['coalesce'], 'FLOAT', ['FLOAT', '...'], ''], [['coalesce'], 'DOUBLE', ['DOUBLE', '...'], ''], + [['coalesce'], 'DATE', ['DATE', '...'], ''], [['coalesce'], 'DATETIME', ['DATETIME', '...'], ''], [['coalesce'], 'DECIMAL', ['DECIMAL', '...'], ''], [['coalesce'], 'DECIMALV2', ['DECIMALV2', '...'], ''], --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org