This is an automated email from the ASF dual-hosted git repository. morrysnow pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push: new 0ccb7262a7 [feature](Nereids) add password func (#23244) 0ccb7262a7 is described below commit 0ccb7262a741c8ebd4b192615973509efb5cad6a Author: 谢健 <jianx...@gmail.com> AuthorDate: Fri Aug 25 14:04:49 2023 +0800 [feature](Nereids) add password func (#23244) add password function ``` select password("123"); +-------------------------------------------+ | password('123') | +-------------------------------------------+ | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 | +-------------------------------------------+ ``` --- .../doris/catalog/BuiltinScalarFunctions.java | 2 + .../expression/rules/FoldConstantRuleOnFE.java | 13 +++++ .../expressions/functions/scalar/Password.java | 61 ++++++++++++++++++++++ .../expressions/visitor/ScalarFunctionVisitor.java | 5 ++ .../data/nereids_function_p0/scalar_function/P.out | 3 ++ .../nereids_function_p0/scalar_function/P.groovy | 1 + 6 files changed, 85 insertions(+) diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinScalarFunctions.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinScalarFunctions.java index c4a2e1faeb..12d56ab733 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinScalarFunctions.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinScalarFunctions.java @@ -227,6 +227,7 @@ import org.apache.doris.nereids.trees.expressions.functions.scalar.NullIf; import org.apache.doris.nereids.trees.expressions.functions.scalar.NullOrEmpty; import org.apache.doris.nereids.trees.expressions.functions.scalar.Nvl; import org.apache.doris.nereids.trees.expressions.functions.scalar.ParseUrl; +import org.apache.doris.nereids.trees.expressions.functions.scalar.Password; import org.apache.doris.nereids.trees.expressions.functions.scalar.Pi; import org.apache.doris.nereids.trees.expressions.functions.scalar.Pmod; import org.apache.doris.nereids.trees.expressions.functions.scalar.Positive; @@ -563,6 +564,7 @@ public class BuiltinScalarFunctions implements FunctionHelper { scalar(NullOrEmpty.class, "null_or_empty"), scalar(Nvl.class, "ifnull", "nvl"), scalar(ParseUrl.class, "parse_url"), + scalar(Password.class, "password"), scalar(Pi.class, "pi"), scalar(Pmod.class, "pmod"), scalar(Positive.class, "positive"), diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnFE.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnFE.java index c427ea8ec9..42f62db904 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnFE.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnFE.java @@ -52,6 +52,7 @@ import org.apache.doris.nereids.trees.expressions.functions.scalar.CurrentUser; import org.apache.doris.nereids.trees.expressions.functions.scalar.Database; import org.apache.doris.nereids.trees.expressions.functions.scalar.Date; import org.apache.doris.nereids.trees.expressions.functions.scalar.If; +import org.apache.doris.nereids.trees.expressions.functions.scalar.Password; import org.apache.doris.nereids.trees.expressions.functions.scalar.User; import org.apache.doris.nereids.trees.expressions.functions.scalar.Version; import org.apache.doris.nereids.trees.expressions.literal.ArrayLiteral; @@ -63,6 +64,7 @@ import org.apache.doris.nereids.trees.expressions.literal.DateTimeV2Literal; import org.apache.doris.nereids.trees.expressions.literal.DateV2Literal; import org.apache.doris.nereids.trees.expressions.literal.Literal; import org.apache.doris.nereids.trees.expressions.literal.NullLiteral; +import org.apache.doris.nereids.trees.expressions.literal.StringLikeLiteral; import org.apache.doris.nereids.trees.expressions.literal.StringLiteral; import org.apache.doris.nereids.trees.expressions.literal.VarcharLiteral; import org.apache.doris.nereids.types.BooleanType; @@ -70,7 +72,9 @@ import org.apache.doris.nereids.types.DataType; import org.apache.doris.nereids.util.ExpressionUtils; import org.apache.doris.qe.GlobalVariable; +import com.google.common.base.Preconditions; import com.google.common.collect.Lists; +import org.apache.commons.codec.digest.DigestUtils; import java.util.ArrayList; import java.util.List; @@ -444,6 +448,15 @@ public class FoldConstantRuleOnFE extends AbstractExpressionRewriteRule { return ExpressionEvaluator.INSTANCE.eval(arithmetic); } + @Override + public Expression visitPassword(Password password, ExpressionRewriteContext context) { + Preconditions.checkArgument(password.child(0) instanceof StringLikeLiteral, + "argument of password must be string literal"); + String s = ((StringLikeLiteral) password.child()).value; + return new StringLiteral("*" + DigestUtils.sha1Hex( + DigestUtils.sha1(s.getBytes())).toUpperCase()); + } + @Override public Expression visitArray(Array array, ExpressionRewriteContext context) { array = rewriteChildren(array, context); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Password.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Password.java new file mode 100644 index 0000000000..a326323361 --- /dev/null +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Password.java @@ -0,0 +1,61 @@ +// 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.nereids.trees.expressions.functions.scalar; + +import org.apache.doris.catalog.FunctionSignature; +import org.apache.doris.nereids.trees.expressions.Expression; +import org.apache.doris.nereids.trees.expressions.functions.AlwaysNotNullable; +import org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature; +import org.apache.doris.nereids.trees.expressions.shape.UnaryExpression; +import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor; +import org.apache.doris.nereids.types.StringType; +import org.apache.doris.nereids.types.VarcharType; + +import com.google.common.collect.ImmutableList; +import org.apache.hadoop.util.Lists; + +import java.util.List; + +/** + * ScalarFunction 'password'. + */ +public class Password extends ScalarFunction + implements UnaryExpression, ExplicitlyCastableSignature, AlwaysNotNullable { + + public static final List<FunctionSignature> SIGNATURES = ImmutableList.of( + FunctionSignature.ret(StringType.INSTANCE).args(StringType.INSTANCE), + FunctionSignature.ret(StringType.INSTANCE).args(VarcharType.SYSTEM_DEFAULT) + ); + + /** + * constructor with 1 argument. + */ + public Password(Expression expression) { + super("password", Lists.newArrayList(expression)); + } + + @Override + public List<FunctionSignature> getSignatures() { + return SIGNATURES; + } + + @Override + public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) { + return visitor.visitPassword(this, context); + } +} diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ScalarFunctionVisitor.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ScalarFunctionVisitor.java index 28864396d5..225676213f 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ScalarFunctionVisitor.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ScalarFunctionVisitor.java @@ -230,6 +230,7 @@ import org.apache.doris.nereids.trees.expressions.functions.scalar.NullIf; import org.apache.doris.nereids.trees.expressions.functions.scalar.NullOrEmpty; import org.apache.doris.nereids.trees.expressions.functions.scalar.Nvl; import org.apache.doris.nereids.trees.expressions.functions.scalar.ParseUrl; +import org.apache.doris.nereids.trees.expressions.functions.scalar.Password; import org.apache.doris.nereids.trees.expressions.functions.scalar.Pi; import org.apache.doris.nereids.trees.expressions.functions.scalar.Pmod; import org.apache.doris.nereids.trees.expressions.functions.scalar.Positive; @@ -1210,6 +1211,10 @@ public interface ScalarFunctionVisitor<R, C> { return visitScalarFunction(parseUrl, context); } + default R visitPassword(Password password, C context) { + return visitScalarFunction(password, context); + } + default R visitPi(Pi pi, C context) { return visitScalarFunction(pi, context); } diff --git a/regression-test/data/nereids_function_p0/scalar_function/P.out b/regression-test/data/nereids_function_p0/scalar_function/P.out index fa6eefe679..af43562006 100644 --- a/regression-test/data/nereids_function_p0/scalar_function/P.out +++ b/regression-test/data/nereids_function_p0/scalar_function/P.out @@ -1,4 +1,7 @@ -- This file is automatically generated. You should know what you did if you want to edit this +-- !sql_pwd -- +*23AE809DDACAF96AF0FD78ED04B6A265E05AA257 + -- !sql_pmod_BigInt_BigInt -- \N 0 diff --git a/regression-test/suites/nereids_function_p0/scalar_function/P.groovy b/regression-test/suites/nereids_function_p0/scalar_function/P.groovy index e8e31ad8cd..75611efb56 100644 --- a/regression-test/suites/nereids_function_p0/scalar_function/P.groovy +++ b/regression-test/suites/nereids_function_p0/scalar_function/P.groovy @@ -27,6 +27,7 @@ suite("nereids_scalar_fn_P") { sql "select parse_url(kvchrs1, 'HOST', 'PROTOCOL') from fn_test_not_nullable order by kvchrs1, kvchrs1, kvchrs1" sql "select parse_url(kstr, 'HOST', 'PROTOCOL') from fn_test order by kstr, kstr, kstr" sql "select parse_url(kstr, 'HOST', 'PROTOCOL') from fn_test_not_nullable order by kstr, kstr, kstr" + qt_sql_pwd """select password("123")""" qt_sql_pmod_BigInt_BigInt "select pmod(kbint, kbint) from fn_test order by kbint, kbint" qt_sql_pmod_BigInt_BigInt_notnull "select pmod(kbint, kbint) from fn_test_not_nullable order by kbint, kbint" qt_sql_pmod_Double_Double "select pmod(kdbl, kdbl) from fn_test order by kdbl, kdbl" --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org