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

morningman pushed a commit to branch dev-1.0.1
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git

commit 01b8ef64cdd0d51c91525be7fc221e7db0c71de2
Author: morningman <[email protected]>
AuthorDate: Mon Apr 11 11:40:23 2022 +0800

    [Bug] Fix some bugs(rewrite rule/symbol transport) of like predicate (#8770)
---
 .../java/org/apache/doris/analysis/Analyzer.java   |  2 -
 .../org/apache/doris/analysis/LikePredicate.java   | 12 +++---
 .../java/org/apache/doris/catalog/FunctionSet.java | 10 +++--
 .../org/apache/doris/catalog/ScalarFunction.java   | 18 +++++---
 .../doris/rewrite/RewriteLikePredicateRule.java    | 50 ----------------------
 5 files changed, 25 insertions(+), 67 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/Analyzer.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/Analyzer.java
index 2addbbde7f..e46831100d 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/Analyzer.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/Analyzer.java
@@ -49,7 +49,6 @@ import org.apache.doris.rewrite.RewriteAliasFunctionRule;
 import org.apache.doris.rewrite.RewriteBinaryPredicatesRule;
 import org.apache.doris.rewrite.RewriteEncryptKeyRule;
 import org.apache.doris.rewrite.RewriteFromUnixTimeRule;
-import org.apache.doris.rewrite.RewriteLikePredicateRule;
 import org.apache.doris.rewrite.RewriteDateLiteralRule;
 import org.apache.doris.rewrite.mvrewrite.CountDistinctToBitmap;
 import org.apache.doris.rewrite.mvrewrite.CountDistinctToBitmapOrHLLRule;
@@ -317,7 +316,6 @@ public class Analyzer {
             rules.add(RewriteDateLiteralRule.INSTANCE);
             rules.add(RewriteEncryptKeyRule.INSTANCE);
             rules.add(RewriteAliasFunctionRule.INSTANCE);
-            rules.add(RewriteLikePredicateRule.INSTANCE);
             List<ExprRewriteRule> onceRules = Lists.newArrayList();
             onceRules.add(ExtractCommonFactorsRule.INSTANCE);
             onceRules.add(InferFiltersRule.INSTANCE);
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/LikePredicate.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/LikePredicate.java
index 97d8f2afdd..8d72c2a112 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/LikePredicate.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/LikePredicate.java
@@ -113,14 +113,16 @@ public class LikePredicate extends Predicate {
     @Override
     public void analyzeImpl(Analyzer analyzer) throws AnalysisException {
         super.analyzeImpl(analyzer);
-        if (!getChild(0).getType().isStringType() && 
!getChild(0).getType().isFixedPointType()
-                && !getChild(0).getType().isNull()) {
+        if (getChild(0).getType().isObjectStored()) {
             throw new AnalysisException(
-              "left operand of " + op.toString() + " must be of type STRING or 
FIXED_POINT_TYPE: " + toSql());
+                    "left operand of " + op.toString() + " must not be Bitmap 
or HLL: " + toSql());
         }
         if (!getChild(1).getType().isStringType() && 
!getChild(1).getType().isNull()) {
-            throw new AnalysisException(
-              "right operand of " + op.toString() + " must be of type STRING: 
" + toSql());
+            throw new AnalysisException("right operand of " + op.toString() + 
" must be of type STRING: " + toSql());
+        }
+
+        if (!getChild(0).getType().isStringType()) {
+            uncheckedCastChild(Type.VARCHAR, 0);
         }
 
         fn = getBuiltinFunction(analyzer, op.toString(),
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionSet.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionSet.java
index 9ec3cfef5c..60912c9bdf 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionSet.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionSet.java
@@ -1201,10 +1201,12 @@ public class 
FunctionSet<min_initIN9doris_udf12DecimalV2ValEEEvPNS2_15FunctionCo
             vecFns = Lists.newArrayList();
             vectorizedFunctions.put(fn.functionName(), vecFns);
         }
-        ScalarFunction scalarFunction = (ScalarFunction)fn;
-        
vecFns.add(ScalarFunction.createVecBuiltin(scalarFunction.functionName(), 
scalarFunction.getSymbolName(),
-                Lists.newArrayList(scalarFunction.getArgs()), 
scalarFunction.hasVarArgs(),
-                scalarFunction.getReturnType(), 
scalarFunction.isUserVisible(), scalarFunction.getNullableMode()));
+        ScalarFunction scalarFunction = (ScalarFunction) fn;
+        
vecFns.add(ScalarFunction.createVecBuiltin(scalarFunction.functionName(), 
scalarFunction.getPrepareFnSymbol(),
+                        scalarFunction.getSymbolName(), 
scalarFunction.getCloseFnSymbol(),
+                        Lists.newArrayList(scalarFunction.getArgs()), 
scalarFunction.hasVarArgs(),
+                        scalarFunction.getReturnType(), 
scalarFunction.isUserVisible(),
+                        scalarFunction.getNullableMode()));
     }
 
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/catalog/ScalarFunction.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/ScalarFunction.java
index 66f0a6252b..d9c4b0252e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/ScalarFunction.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/ScalarFunction.java
@@ -284,16 +284,22 @@ public class ScalarFunction extends Function {
 
     public static ScalarFunction createVecBuiltinOperator(
             String name, String symbol, ArrayList<Type> argTypes, Type 
retType, NullableMode nullableMode) {
-        return createVecBuiltin(name, symbol, argTypes, false, retType, false, 
nullableMode);
+        return createVecBuiltin(name, null, symbol, null, argTypes, false, 
retType, false, nullableMode);
     }
 
     //TODO: This method should not be here, move to other place in the future
-    public static ScalarFunction createVecBuiltin(
-            String name, String symbol, ArrayList<Type> argTypes,
-            boolean hasVarArgs, Type retType, boolean userVisible, 
NullableMode nullableMode) {
-        ScalarFunction fn = new ScalarFunction(
-                new FunctionName(name), argTypes, retType, hasVarArgs, 
userVisible, true);
+    public static ScalarFunction createVecBuiltin(String name, String 
prepareFnSymbolBName, String symbol,
+            String closeFnSymbolName, ArrayList<Type> argTypes, boolean 
hasVarArgs, Type retType, boolean userVisible,
+            NullableMode nullableMode) {
+        ScalarFunction fn = new ScalarFunction(new FunctionName(name), 
argTypes, retType, hasVarArgs, userVisible,
+                true);
+        if (prepareFnSymbolBName != null) {
+            fn.prepareFnSymbol = prepareFnSymbolBName;
+        }
         fn.symbolName = symbol;
+        if (closeFnSymbolName != null) {
+            fn.closeFnSymbol = closeFnSymbolName;
+        }
         fn.nullableMode = nullableMode;
         return fn;
     }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/rewrite/RewriteLikePredicateRule.java
 
b/fe/fe-core/src/main/java/org/apache/doris/rewrite/RewriteLikePredicateRule.java
deleted file mode 100644
index c9679e8a33..0000000000
--- 
a/fe/fe-core/src/main/java/org/apache/doris/rewrite/RewriteLikePredicateRule.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package org.apache.doris.rewrite;
-
-import org.apache.doris.analysis.Analyzer;
-import org.apache.doris.analysis.CastExpr;
-import org.apache.doris.analysis.Expr;
-import org.apache.doris.analysis.LikePredicate;
-import org.apache.doris.analysis.SlotRef;
-import org.apache.doris.analysis.TypeDef;
-import org.apache.doris.catalog.Type;
-import org.apache.doris.common.AnalysisException;
-
-/**
- * Rewrite `int` to `string` in like predicate
- * in order to support `int` in like predicate, same as MySQL
- */
-public class RewriteLikePredicateRule implements ExprRewriteRule {
-    public static RewriteLikePredicateRule INSTANCE = new 
RewriteLikePredicateRule();
-
-    @Override
-    public Expr apply(Expr expr, Analyzer analyzer, ExprRewriter.ClauseType 
clauseType) throws AnalysisException {
-        if (expr instanceof LikePredicate) {
-            Expr leftChild = expr.getChild(0);
-            if (leftChild instanceof SlotRef) {
-                Type type = leftChild.getType();
-                if (type.isFixedPointType()) {
-                    return new LikePredicate(((LikePredicate) expr).getOp(),
-                            new CastExpr(new TypeDef(Type.VARCHAR), 
leftChild), expr.getChild(1));
-                }
-            }
-        }
-        return expr;
-    }
-}


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

Reply via email to