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 3f325e0 Change the priority of different type in function (#2003)
3f325e0 is described below
commit 3f325e001a607b1ef81d78851b478a66eb48000b
Author: EmmyMiao87 <[email protected]>
AuthorDate: Fri Oct 18 09:35:49 2019 +0800
Change the priority of different type in function (#2003)
This commit fix the issue [ISSUE-2002].
It changes the priority of coalesce, ifnull, nullif function etc.
The priority of decimal is higher then varchar in the IS_SUPERTYPE_OF
compare mode.
Example:
select coalesce(decimal_column, 1) from table;
the return type of coalesce should be decimal instead of varchar.
Add supertype about datetime and date
The supertype of datetime is bigint, largeint etc.
In IS_SUPERTYPE_OF compare mode, the function(bigint, bigint, bigint) is a
supertype of function(datetime, bigint, int).
Example:
select coalesce(now(), 1)) from web_returns;
the return type of coalesce should be bigint instead of varchar.
---
fe/src/main/java/org/apache/doris/catalog/Type.java | 20 ++++++++++----------
gensrc/script/doris_builtins_functions.py | 20 ++++++++++++--------
2 files changed, 22 insertions(+), 18 deletions(-)
diff --git a/fe/src/main/java/org/apache/doris/catalog/Type.java
b/fe/src/main/java/org/apache/doris/catalog/Type.java
index ab5b53b..c84aab1 100644
--- a/fe/src/main/java/org/apache/doris/catalog/Type.java
+++ b/fe/src/main/java/org/apache/doris/catalog/Type.java
@@ -796,7 +796,7 @@ public abstract class Type {
compatibilityMatrix[INT.ordinal()][FLOAT.ordinal()] =
PrimitiveType.FLOAT;
strictCompatibilityMatrix[INT.ordinal()][FLOAT.ordinal()] =
PrimitiveType.DOUBLE;
compatibilityMatrix[INT.ordinal()][DOUBLE.ordinal()] =
PrimitiveType.DOUBLE;
- compatibilityMatrix[INT.ordinal()][DATE.ordinal()] =
PrimitiveType.INVALID_TYPE;
+ compatibilityMatrix[INT.ordinal()][DATE.ordinal()] = PrimitiveType.INT;
compatibilityMatrix[INT.ordinal()][DATETIME.ordinal()] =
PrimitiveType.INVALID_TYPE;
compatibilityMatrix[INT.ordinal()][CHAR.ordinal()] =
PrimitiveType.INVALID_TYPE;
compatibilityMatrix[INT.ordinal()][VARCHAR.ordinal()] =
PrimitiveType.INVALID_TYPE;
@@ -816,8 +816,8 @@ public abstract class Type {
// TODO: we're breaking the definition of strict compatibility for
BIGINT + DOUBLE,
// but this forces function overloading to consider the DOUBLE
overload first.
compatibilityMatrix[BIGINT.ordinal()][DOUBLE.ordinal()] =
PrimitiveType.DOUBLE;
- compatibilityMatrix[BIGINT.ordinal()][DATE.ordinal()] =
PrimitiveType.INVALID_TYPE;
- compatibilityMatrix[BIGINT.ordinal()][DATETIME.ordinal()] =
PrimitiveType.INVALID_TYPE;
+ compatibilityMatrix[BIGINT.ordinal()][DATE.ordinal()] =
PrimitiveType.BIGINT;
+ compatibilityMatrix[BIGINT.ordinal()][DATETIME.ordinal()] =
PrimitiveType.BIGINT;
compatibilityMatrix[BIGINT.ordinal()][CHAR.ordinal()] =
PrimitiveType.INVALID_TYPE;
compatibilityMatrix[BIGINT.ordinal()][VARCHAR.ordinal()] =
PrimitiveType.INVALID_TYPE;
compatibilityMatrix[BIGINT.ordinal()][DECIMAL.ordinal()] =
PrimitiveType.INVALID_TYPE;
@@ -828,8 +828,8 @@ public abstract class Type {
// LARGEINT
compatibilityMatrix[LARGEINT.ordinal()][FLOAT.ordinal()] =
PrimitiveType.DOUBLE;
compatibilityMatrix[LARGEINT.ordinal()][DOUBLE.ordinal()] =
PrimitiveType.DOUBLE;
- compatibilityMatrix[LARGEINT.ordinal()][DATE.ordinal()] =
PrimitiveType.INVALID_TYPE;
- compatibilityMatrix[LARGEINT.ordinal()][DATETIME.ordinal()] =
PrimitiveType.INVALID_TYPE;
+ compatibilityMatrix[LARGEINT.ordinal()][DATE.ordinal()] =
PrimitiveType.LARGEINT;
+ compatibilityMatrix[LARGEINT.ordinal()][DATETIME.ordinal()] =
PrimitiveType.LARGEINT;
compatibilityMatrix[LARGEINT.ordinal()][CHAR.ordinal()] =
PrimitiveType.INVALID_TYPE;
compatibilityMatrix[LARGEINT.ordinal()][VARCHAR.ordinal()] =
PrimitiveType.INVALID_TYPE;
compatibilityMatrix[LARGEINT.ordinal()][DECIMAL.ordinal()] =
PrimitiveType.DECIMAL;
@@ -850,7 +850,7 @@ public abstract class Type {
// DOUBLE
compatibilityMatrix[DOUBLE.ordinal()][DATE.ordinal()] =
PrimitiveType.INVALID_TYPE;
- compatibilityMatrix[DOUBLE.ordinal()][DATETIME.ordinal()] =
PrimitiveType.INVALID_TYPE;
+ compatibilityMatrix[DOUBLE.ordinal()][DATETIME.ordinal()] =
PrimitiveType.DOUBLE ;
compatibilityMatrix[DOUBLE.ordinal()][CHAR.ordinal()] =
PrimitiveType.INVALID_TYPE;
compatibilityMatrix[DOUBLE.ordinal()][VARCHAR.ordinal()] =
PrimitiveType.INVALID_TYPE;
compatibilityMatrix[DOUBLE.ordinal()][DECIMAL.ordinal()] =
PrimitiveType.INVALID_TYPE;
@@ -862,16 +862,16 @@ public abstract class Type {
compatibilityMatrix[DATE.ordinal()][DATETIME.ordinal()] =
PrimitiveType.DATETIME;
compatibilityMatrix[DATE.ordinal()][CHAR.ordinal()] =
PrimitiveType.INVALID_TYPE;
compatibilityMatrix[DATE.ordinal()][VARCHAR.ordinal()] =
PrimitiveType.INVALID_TYPE;
- compatibilityMatrix[DATE.ordinal()][DECIMAL.ordinal()] =
PrimitiveType.INVALID_TYPE;
- compatibilityMatrix[DATE.ordinal()][DECIMALV2.ordinal()] =
PrimitiveType.INVALID_TYPE;
+ compatibilityMatrix[DATE.ordinal()][DECIMAL.ordinal()] =
PrimitiveType.DECIMAL;
+ compatibilityMatrix[DATE.ordinal()][DECIMALV2.ordinal()] =
PrimitiveType.DECIMALV2;
compatibilityMatrix[DATE.ordinal()][HLL.ordinal()] =
PrimitiveType.INVALID_TYPE;
compatibilityMatrix[DATE.ordinal()][TIME.ordinal()] =
PrimitiveType.INVALID_TYPE;
// DATETIME
compatibilityMatrix[DATETIME.ordinal()][CHAR.ordinal()] =
PrimitiveType.INVALID_TYPE;
compatibilityMatrix[DATETIME.ordinal()][VARCHAR.ordinal()] =
PrimitiveType.INVALID_TYPE;
- compatibilityMatrix[DATETIME.ordinal()][DECIMAL.ordinal()] =
PrimitiveType.INVALID_TYPE;
- compatibilityMatrix[DATETIME.ordinal()][DECIMALV2.ordinal()] =
PrimitiveType.INVALID_TYPE;
+ compatibilityMatrix[DATETIME.ordinal()][DECIMAL.ordinal()] =
PrimitiveType.DECIMAL;
+ compatibilityMatrix[DATETIME.ordinal()][DECIMALV2.ordinal()] =
PrimitiveType.DECIMALV2;
compatibilityMatrix[DATETIME.ordinal()][HLL.ordinal()] =
PrimitiveType.INVALID_TYPE;
compatibilityMatrix[DATETIME.ordinal()][TIME.ordinal()] =
PrimitiveType.INVALID_TYPE;
diff --git a/gensrc/script/doris_builtins_functions.py
b/gensrc/script/doris_builtins_functions.py
index 5a7a43c..acb708b 100755
--- a/gensrc/script/doris_builtins_functions.py
+++ b/gensrc/script/doris_builtins_functions.py
@@ -375,14 +375,14 @@ visible_functions = [
'_ZN5doris13MathFunctions5leastEPN9doris_udf15FunctionContextEiPKNS1_8FloatValE'],
[['least'], 'DOUBLE', ['DOUBLE', '...'],
'_ZN5doris13MathFunctions5leastEPN9doris_udf15FunctionContextEiPKNS1_9DoubleValE'],
- [['least'], 'VARCHAR', ['VARCHAR', '...'],
-
'_ZN5doris13MathFunctions5leastEPN9doris_udf15FunctionContextEiPKNS1_9StringValE'],
[['least'], 'DATETIME', ['DATETIME', '...'],
'_ZN5doris13MathFunctions5leastEPN9doris_udf15FunctionContextEiPKNS1_11DateTimeValE'],
[['least'], 'DECIMAL', ['DECIMAL', '...'],
'_ZN5doris13MathFunctions5leastEPN9doris_udf15FunctionContextEiPKNS1_10DecimalValE'],
[['least'], 'DECIMALV2', ['DECIMALV2', '...'],
'_ZN5doris13MathFunctions5leastEPN9doris_udf15FunctionContextEiPKNS1_12DecimalV2ValE'],
+ [['least'], 'VARCHAR', ['VARCHAR', '...'],
+
'_ZN5doris13MathFunctions5leastEPN9doris_udf15FunctionContextEiPKNS1_9StringValE'],
[['greatest'], 'TINYINT', ['TINYINT', '...'],
'_ZN5doris13MathFunctions8greatestEPN9doris_udf15FunctionContextEiPKNS1_10TinyIntValE'],
@@ -402,10 +402,10 @@ visible_functions = [
'_ZN5doris13MathFunctions8greatestEPN9doris_udf15FunctionContextEiPKNS1_10DecimalValE'],
[['greatest'], 'DECIMALV2', ['DECIMALV2', '...'],
'_ZN5doris13MathFunctions8greatestEPN9doris_udf15FunctionContextEiPKNS1_12DecimalV2ValE'],
- [['greatest'], 'VARCHAR', ['VARCHAR', '...'],
-
'_ZN5doris13MathFunctions8greatestEPN9doris_udf15FunctionContextEiPKNS1_9StringValE'],
[['greatest'], 'DATETIME', ['DATETIME', '...'],
'_ZN5doris13MathFunctions8greatestEPN9doris_udf15FunctionContextEiPKNS1_11DateTimeValE'],
+ [['greatest'], 'VARCHAR', ['VARCHAR', '...'],
+
'_ZN5doris13MathFunctions8greatestEPN9doris_udf15FunctionContextEiPKNS1_9StringValE'],
# Conditional Functions
# Some of these have empty symbols because the BE special-cases them based
on the
@@ -419,9 +419,10 @@ visible_functions = [
[['if'], 'FLOAT', ['BOOLEAN', 'FLOAT', 'FLOAT'], ''],
[['if'], 'DOUBLE', ['BOOLEAN', 'DOUBLE', 'DOUBLE'], ''],
[['if'], 'DATETIME', ['BOOLEAN', 'DATETIME', 'DATETIME'], ''],
- [['if'], 'VARCHAR', ['BOOLEAN', 'VARCHAR', 'VARCHAR'], ''],
[['if'], 'DECIMAL', ['BOOLEAN', 'DECIMAL', 'DECIMAL'], ''],
[['if'], 'DECIMALV2', ['BOOLEAN', 'DECIMALV2', 'DECIMALV2'], ''],
+ # The priority of varchar should be lower than decimal in IS_SUPERTYPE_OF
mode.
+ [['if'], 'VARCHAR', ['BOOLEAN', 'VARCHAR', 'VARCHAR'], ''],
[['nullif'], 'BOOLEAN', ['BOOLEAN', 'BOOLEAN'], ''],
[['nullif'], 'TINYINT', ['TINYINT', 'TINYINT'], ''],
@@ -431,10 +432,11 @@ visible_functions = [
[['nullif'], 'LARGEINT', ['LARGEINT', 'LARGEINT'], ''],
[['nullif'], 'FLOAT', ['FLOAT', 'FLOAT'], ''],
[['nullif'], 'DOUBLE', ['DOUBLE', 'DOUBLE'], ''],
- [['nullif'], 'VARCHAR', ['VARCHAR', 'VARCHAR'], ''],
[['nullif'], 'DATETIME', ['DATETIME', 'DATETIME'], ''],
[['nullif'], 'DECIMAL', ['DECIMAL', 'DECIMAL'], ''],
[['nullif'], 'DECIMALV2', ['DECIMALV2', 'DECIMALV2'], ''],
+ # The priority of varchar should be lower than decimal in IS_SUPERTYPE_OF
mode.
+ [['nullif'], 'VARCHAR', ['VARCHAR', 'VARCHAR'], ''],
[['ifnull'], 'BOOLEAN', ['BOOLEAN', 'BOOLEAN'], ''],
[['ifnull'], 'TINYINT', ['TINYINT', 'TINYINT'], ''],
@@ -444,10 +446,11 @@ visible_functions = [
[['ifnull'], 'LARGEINT', ['LARGEINT', 'LARGEINT'], ''],
[['ifnull'], 'FLOAT', ['FLOAT', 'FLOAT'], ''],
[['ifnull'], 'DOUBLE', ['DOUBLE', 'DOUBLE'], ''],
- [['ifnull'], 'VARCHAR', ['VARCHAR', 'VARCHAR'], ''],
[['ifnull'], 'DATETIME', ['DATETIME', 'DATETIME'], ''],
[['ifnull'], 'DECIMAL', ['DECIMAL', 'DECIMAL'], ''],
[['ifnull'], 'DECIMALV2', ['DECIMALV2', 'DECIMALV2'], ''],
+ # The priority of varchar should be lower than decimal in IS_SUPERTYPE_OF
mode.
+ [['ifnull'], 'VARCHAR', ['VARCHAR', 'VARCHAR'], ''],
[['coalesce'], 'BOOLEAN', ['BOOLEAN', '...'], ''],
[['coalesce'], 'TINYINT', ['TINYINT', '...'], ''],
@@ -457,10 +460,11 @@ visible_functions = [
[['coalesce'], 'LARGEINT', ['LARGEINT', '...'], ''],
[['coalesce'], 'FLOAT', ['FLOAT', '...'], ''],
[['coalesce'], 'DOUBLE', ['DOUBLE', '...'], ''],
- [['coalesce'], 'VARCHAR', ['VARCHAR', '...'], ''],
[['coalesce'], 'DATETIME', ['DATETIME', '...'], ''],
[['coalesce'], 'DECIMAL', ['DECIMAL', '...'], ''],
[['coalesce'], 'DECIMALV2', ['DECIMALV2', '...'], ''],
+ # The priority of varchar should be lower than decimal in IS_SUPERTYPE_OF
mode.
+ [['coalesce'], 'VARCHAR', ['VARCHAR', '...'], ''],
[['esquery'], 'BOOLEAN', ['VARCHAR', 'VARCHAR'],
'_ZN5doris11ESFunctions5matchEPN'
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]