[opt](Nereids) add double signature back for round like function (#22284)
add double signature back for round like function
This commit is contained in:
@ -0,0 +1,43 @@
|
||||
// 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;
|
||||
|
||||
import org.apache.doris.catalog.FunctionSignature;
|
||||
import org.apache.doris.nereids.trees.expressions.Expression;
|
||||
import org.apache.doris.nereids.types.DoubleType;
|
||||
import org.apache.doris.nereids.types.IntegerType;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* if argument 0 is float or double, we should return double signature for round like function.
|
||||
*/
|
||||
public interface SearchSignatureForRound extends ExplicitlyCastableSignature {
|
||||
@Override
|
||||
default FunctionSignature searchSignature(List<FunctionSignature> signatures) {
|
||||
List<Expression> arguments = getArguments();
|
||||
if (arguments.get(0).getDataType().isFloatLikeType()) {
|
||||
if (arguments.size() == 1) {
|
||||
return FunctionSignature.ret(DoubleType.INSTANCE).args(DoubleType.INSTANCE);
|
||||
} else if (arguments.size() == 2) {
|
||||
return FunctionSignature.ret(DoubleType.INSTANCE).args(DoubleType.INSTANCE, IntegerType.INSTANCE);
|
||||
}
|
||||
}
|
||||
return ExplicitlyCastableSignature.super.searchSignature(signatures);
|
||||
}
|
||||
}
|
||||
@ -20,11 +20,11 @@ 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.ComputePrecisionForRound;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.PropagateNullable;
|
||||
import org.apache.doris.nereids.trees.expressions.shape.UnaryExpression;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.SearchSignatureForRound;
|
||||
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
|
||||
import org.apache.doris.nereids.types.DecimalV3Type;
|
||||
import org.apache.doris.nereids.types.DoubleType;
|
||||
import org.apache.doris.nereids.types.IntegerType;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
@ -36,11 +36,13 @@ import java.util.List;
|
||||
* ScalarFunction 'ceil'. This class is generated by GenerateFunction.
|
||||
*/
|
||||
public class Ceil extends ScalarFunction
|
||||
implements UnaryExpression, ExplicitlyCastableSignature, PropagateNullable, ComputePrecisionForRound {
|
||||
implements SearchSignatureForRound, PropagateNullable, ComputePrecisionForRound {
|
||||
|
||||
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
|
||||
FunctionSignature.ret(DecimalV3Type.WILDCARD).args(DecimalV3Type.WILDCARD),
|
||||
FunctionSignature.ret(DecimalV3Type.WILDCARD).args(DecimalV3Type.WILDCARD, IntegerType.INSTANCE)
|
||||
FunctionSignature.ret(DecimalV3Type.WILDCARD).args(DecimalV3Type.WILDCARD, IntegerType.INSTANCE),
|
||||
FunctionSignature.ret(DoubleType.INSTANCE).args(DoubleType.INSTANCE),
|
||||
FunctionSignature.ret(DoubleType.INSTANCE).args(DoubleType.INSTANCE, IntegerType.INSTANCE)
|
||||
);
|
||||
|
||||
/**
|
||||
|
||||
@ -20,11 +20,11 @@ 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.ComputePrecisionForRound;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.PropagateNullable;
|
||||
import org.apache.doris.nereids.trees.expressions.shape.UnaryExpression;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.SearchSignatureForRound;
|
||||
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
|
||||
import org.apache.doris.nereids.types.DecimalV3Type;
|
||||
import org.apache.doris.nereids.types.DoubleType;
|
||||
import org.apache.doris.nereids.types.IntegerType;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
@ -36,11 +36,13 @@ import java.util.List;
|
||||
* ScalarFunction 'dceil'. This class is generated by GenerateFunction.
|
||||
*/
|
||||
public class Dceil extends ScalarFunction
|
||||
implements UnaryExpression, ExplicitlyCastableSignature, PropagateNullable, ComputePrecisionForRound {
|
||||
implements SearchSignatureForRound, PropagateNullable, ComputePrecisionForRound {
|
||||
|
||||
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
|
||||
FunctionSignature.ret(DecimalV3Type.WILDCARD).args(DecimalV3Type.WILDCARD),
|
||||
FunctionSignature.ret(DecimalV3Type.WILDCARD).args(DecimalV3Type.WILDCARD, IntegerType.INSTANCE)
|
||||
FunctionSignature.ret(DecimalV3Type.WILDCARD).args(DecimalV3Type.WILDCARD, IntegerType.INSTANCE),
|
||||
FunctionSignature.ret(DoubleType.INSTANCE).args(DoubleType.INSTANCE),
|
||||
FunctionSignature.ret(DoubleType.INSTANCE).args(DoubleType.INSTANCE, IntegerType.INSTANCE)
|
||||
);
|
||||
|
||||
/**
|
||||
|
||||
@ -20,11 +20,11 @@ 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.ComputePrecisionForRound;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.PropagateNullable;
|
||||
import org.apache.doris.nereids.trees.expressions.shape.UnaryExpression;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.SearchSignatureForRound;
|
||||
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
|
||||
import org.apache.doris.nereids.types.DecimalV3Type;
|
||||
import org.apache.doris.nereids.types.DoubleType;
|
||||
import org.apache.doris.nereids.types.IntegerType;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
@ -36,11 +36,13 @@ import java.util.List;
|
||||
* ScalarFunction 'dfloor'. This class is generated by GenerateFunction.
|
||||
*/
|
||||
public class Dfloor extends ScalarFunction
|
||||
implements UnaryExpression, ExplicitlyCastableSignature, PropagateNullable, ComputePrecisionForRound {
|
||||
implements SearchSignatureForRound, PropagateNullable, ComputePrecisionForRound {
|
||||
|
||||
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
|
||||
FunctionSignature.ret(DecimalV3Type.WILDCARD).args(DecimalV3Type.WILDCARD),
|
||||
FunctionSignature.ret(DecimalV3Type.WILDCARD).args(DecimalV3Type.WILDCARD, IntegerType.INSTANCE)
|
||||
FunctionSignature.ret(DecimalV3Type.WILDCARD).args(DecimalV3Type.WILDCARD, IntegerType.INSTANCE),
|
||||
FunctionSignature.ret(DoubleType.INSTANCE).args(DoubleType.INSTANCE),
|
||||
FunctionSignature.ret(DoubleType.INSTANCE).args(DoubleType.INSTANCE, IntegerType.INSTANCE)
|
||||
);
|
||||
|
||||
/**
|
||||
|
||||
@ -20,10 +20,11 @@ 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.ComputePrecisionForRound;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.PropagateNullable;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.SearchSignatureForRound;
|
||||
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
|
||||
import org.apache.doris.nereids.types.DecimalV3Type;
|
||||
import org.apache.doris.nereids.types.DoubleType;
|
||||
import org.apache.doris.nereids.types.IntegerType;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
@ -35,11 +36,13 @@ import java.util.List;
|
||||
* ScalarFunction 'dround'. This class is generated by GenerateFunction.
|
||||
*/
|
||||
public class Dround extends ScalarFunction
|
||||
implements ExplicitlyCastableSignature, PropagateNullable, ComputePrecisionForRound {
|
||||
implements SearchSignatureForRound, PropagateNullable, ComputePrecisionForRound {
|
||||
|
||||
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
|
||||
FunctionSignature.ret(DecimalV3Type.WILDCARD).args(DecimalV3Type.WILDCARD),
|
||||
FunctionSignature.ret(DecimalV3Type.WILDCARD).args(DecimalV3Type.WILDCARD, IntegerType.INSTANCE)
|
||||
FunctionSignature.ret(DecimalV3Type.WILDCARD).args(DecimalV3Type.WILDCARD, IntegerType.INSTANCE),
|
||||
FunctionSignature.ret(DoubleType.INSTANCE).args(DoubleType.INSTANCE),
|
||||
FunctionSignature.ret(DoubleType.INSTANCE).args(DoubleType.INSTANCE, IntegerType.INSTANCE)
|
||||
);
|
||||
|
||||
/**
|
||||
|
||||
@ -20,11 +20,11 @@ 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.ComputePrecisionForRound;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.PropagateNullable;
|
||||
import org.apache.doris.nereids.trees.expressions.shape.UnaryExpression;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.SearchSignatureForRound;
|
||||
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
|
||||
import org.apache.doris.nereids.types.DecimalV3Type;
|
||||
import org.apache.doris.nereids.types.DoubleType;
|
||||
import org.apache.doris.nereids.types.IntegerType;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
@ -36,11 +36,13 @@ import java.util.List;
|
||||
* ScalarFunction 'floor'. This class is generated by GenerateFunction.
|
||||
*/
|
||||
public class Floor extends ScalarFunction
|
||||
implements UnaryExpression, ExplicitlyCastableSignature, PropagateNullable, ComputePrecisionForRound {
|
||||
implements SearchSignatureForRound, PropagateNullable, ComputePrecisionForRound {
|
||||
|
||||
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
|
||||
FunctionSignature.ret(DecimalV3Type.WILDCARD).args(DecimalV3Type.WILDCARD),
|
||||
FunctionSignature.ret(DecimalV3Type.WILDCARD).args(DecimalV3Type.WILDCARD, IntegerType.INSTANCE)
|
||||
FunctionSignature.ret(DecimalV3Type.WILDCARD).args(DecimalV3Type.WILDCARD, IntegerType.INSTANCE),
|
||||
FunctionSignature.ret(DoubleType.INSTANCE).args(DoubleType.INSTANCE),
|
||||
FunctionSignature.ret(DoubleType.INSTANCE).args(DoubleType.INSTANCE, IntegerType.INSTANCE)
|
||||
);
|
||||
|
||||
/**
|
||||
|
||||
@ -20,10 +20,11 @@ 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.ComputePrecisionForRound;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.PropagateNullable;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.SearchSignatureForRound;
|
||||
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
|
||||
import org.apache.doris.nereids.types.DecimalV3Type;
|
||||
import org.apache.doris.nereids.types.DoubleType;
|
||||
import org.apache.doris.nereids.types.IntegerType;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
@ -35,11 +36,13 @@ import java.util.List;
|
||||
* ScalarFunction 'round'. This class is generated by GenerateFunction.
|
||||
*/
|
||||
public class Round extends ScalarFunction
|
||||
implements ExplicitlyCastableSignature, PropagateNullable, ComputePrecisionForRound {
|
||||
implements SearchSignatureForRound, PropagateNullable, ComputePrecisionForRound {
|
||||
|
||||
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
|
||||
FunctionSignature.ret(DecimalV3Type.WILDCARD).args(DecimalV3Type.WILDCARD),
|
||||
FunctionSignature.ret(DecimalV3Type.WILDCARD).args(DecimalV3Type.WILDCARD, IntegerType.INSTANCE)
|
||||
FunctionSignature.ret(DecimalV3Type.WILDCARD).args(DecimalV3Type.WILDCARD, IntegerType.INSTANCE),
|
||||
FunctionSignature.ret(DoubleType.INSTANCE).args(DoubleType.INSTANCE),
|
||||
FunctionSignature.ret(DoubleType.INSTANCE).args(DoubleType.INSTANCE, IntegerType.INSTANCE)
|
||||
);
|
||||
|
||||
/**
|
||||
|
||||
@ -20,10 +20,11 @@ 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.ComputePrecisionForRound;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.PropagateNullable;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.SearchSignatureForRound;
|
||||
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
|
||||
import org.apache.doris.nereids.types.DecimalV3Type;
|
||||
import org.apache.doris.nereids.types.DoubleType;
|
||||
import org.apache.doris.nereids.types.IntegerType;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
@ -35,11 +36,13 @@ import java.util.List;
|
||||
* ScalarFunction 'round_bankers'. This class is generated by GenerateFunction.
|
||||
*/
|
||||
public class RoundBankers extends ScalarFunction
|
||||
implements ExplicitlyCastableSignature, PropagateNullable, ComputePrecisionForRound {
|
||||
implements SearchSignatureForRound, PropagateNullable, ComputePrecisionForRound {
|
||||
|
||||
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
|
||||
FunctionSignature.ret(DecimalV3Type.WILDCARD).args(DecimalV3Type.WILDCARD),
|
||||
FunctionSignature.ret(DecimalV3Type.WILDCARD).args(DecimalV3Type.WILDCARD, IntegerType.INSTANCE)
|
||||
FunctionSignature.ret(DecimalV3Type.WILDCARD).args(DecimalV3Type.WILDCARD, IntegerType.INSTANCE),
|
||||
FunctionSignature.ret(DoubleType.INSTANCE).args(DoubleType.INSTANCE),
|
||||
FunctionSignature.ret(DoubleType.INSTANCE).args(DoubleType.INSTANCE, IntegerType.INSTANCE)
|
||||
);
|
||||
|
||||
/**
|
||||
|
||||
@ -20,11 +20,12 @@ 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.ComputePrecisionForRound;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.PropagateNullable;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.SearchSignatureForRound;
|
||||
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
|
||||
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
|
||||
import org.apache.doris.nereids.types.DecimalV3Type;
|
||||
import org.apache.doris.nereids.types.DoubleType;
|
||||
import org.apache.doris.nereids.types.IntegerType;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
@ -36,10 +37,11 @@ import java.util.List;
|
||||
* ScalarFunction 'truncate'. This class is generated by GenerateFunction.
|
||||
*/
|
||||
public class Truncate extends ScalarFunction
|
||||
implements BinaryExpression, ExplicitlyCastableSignature, PropagateNullable, ComputePrecisionForRound {
|
||||
implements BinaryExpression, SearchSignatureForRound, PropagateNullable, ComputePrecisionForRound {
|
||||
|
||||
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
|
||||
FunctionSignature.ret(DecimalV3Type.WILDCARD).args(DecimalV3Type.WILDCARD, IntegerType.INSTANCE)
|
||||
FunctionSignature.ret(DecimalV3Type.WILDCARD).args(DecimalV3Type.WILDCARD, IntegerType.INSTANCE),
|
||||
FunctionSignature.ret(DoubleType.INSTANCE).args(DoubleType.INSTANCE, IntegerType.INSTANCE)
|
||||
);
|
||||
|
||||
/**
|
||||
|
||||
@ -34,7 +34,6 @@ import org.apache.doris.nereids.trees.expressions.literal.TinyIntLiteral;
|
||||
import org.apache.doris.nereids.trees.expressions.literal.VarcharLiteral;
|
||||
import org.apache.doris.nereids.types.DateTimeV2Type;
|
||||
import org.apache.doris.nereids.types.DateV2Type;
|
||||
import org.apache.doris.nereids.types.DecimalV3Type;
|
||||
import org.apache.doris.nereids.types.DoubleType;
|
||||
import org.apache.doris.nereids.types.IntegerType;
|
||||
import org.apache.doris.nereids.util.PlanChecker;
|
||||
@ -146,7 +145,7 @@ public class UdfTest extends TestWithFeService implements PlanPatternMatchSuppor
|
||||
new VarcharLiteral("day")),
|
||||
new Cast(new Add(
|
||||
new Multiply(
|
||||
new Floor(new Cast(new Divide(
|
||||
new Floor(new Divide(
|
||||
new Cast(
|
||||
new Hour(new Cast(new VarcharLiteral("2023-05-20 12:23:45"), DateTimeV2Type.SYSTEM_DEFAULT)),
|
||||
DoubleType.INSTANCE
|
||||
@ -154,11 +153,11 @@ public class UdfTest extends TestWithFeService implements PlanPatternMatchSuppor
|
||||
new Divide(
|
||||
new Cast(new TinyIntLiteral(((byte) 24)), DoubleType.INSTANCE),
|
||||
new Cast(new IntegerLiteral(((byte) 3)), DoubleType.INSTANCE)
|
||||
)), DecimalV3Type.createDecimalV3Type(30, 15))
|
||||
))
|
||||
),
|
||||
new Cast(new TinyIntLiteral(((byte) 1)), DecimalV3Type.createDecimalV3Type(3, 0))
|
||||
new Cast(new TinyIntLiteral(((byte) 1)), DoubleType.INSTANCE)
|
||||
),
|
||||
new Cast(new TinyIntLiteral(((byte) 1)), DecimalV3Type.createDecimalV3Type(33, 0))
|
||||
new Cast(new TinyIntLiteral(((byte) 1)), DoubleType.INSTANCE)
|
||||
), IntegerType.INSTANCE)
|
||||
),
|
||||
new VarcharLiteral("%Y%m%d:%H")
|
||||
|
||||
Reference in New Issue
Block a user