Skip to content

Commit 0ed28c9

Browse files
guojn1githubgxll
authored andcommitted
[fix][runtime] Concat supports variable arguments
1 parent 13668a6 commit 0ed28c9

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

parser/src/main/java/io/dingodb/expr/parser/DefaultFunFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ public DefaultFunFactory(@NonNull ExprConfig config) {
239239

240240
// String functions
241241
registerUnaryFun(CharLengthFunFactory.NAME, Exprs.CHAR_LENGTH);
242-
registerBinaryFun(ConcatFun.NAME, Exprs.CONCAT);
242+
registerVariadicFun(ConcatFun.NAME, Exprs.CONCAT);
243243
registerUnaryFun(LowerFunFactory.NAME, Exprs.LOWER);
244244
registerUnaryFun(UpperFunFactory.NAME, Exprs.UPPER);
245245
registerBinaryFun(LeftFunFactory.NAME, Exprs.LEFT);

runtime/src/main/java/io/dingodb/expr/runtime/op/string/ConcatFun.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,33 @@
2020
import io.dingodb.expr.common.type.Types;
2121
import io.dingodb.expr.runtime.ExprConfig;
2222
import io.dingodb.expr.runtime.op.BinaryOp;
23+
import io.dingodb.expr.runtime.op.OpKey;
24+
import io.dingodb.expr.runtime.op.VariadicOp;
2325
import org.checkerframework.checker.nullness.qual.NonNull;
2426

25-
public class ConcatFun extends BinaryOp {
27+
public class ConcatFun extends VariadicOp {
2628
public static final String NAME = "CONCAT";
2729
public static final ConcatFun INSTANCE = new ConcatFun();
2830

2931
private static final long serialVersionUID = 5454356467741754567L;
3032

31-
@Override
33+
//@Override
3234
public Object evalValue(Object value0, Object value1, ExprConfig config) {
3335
if (value0 == null || value1 == null) {
3436
return null;
3537
}
3638
return String.valueOf(value0) + value1;
3739
}
3840

41+
@Override
42+
protected Object evalNonNullValue(@NonNull Object[] value, ExprConfig config) {
43+
StringBuilder stringBuilder = new StringBuilder();
44+
for (Object valueItem : value) {
45+
stringBuilder.append(valueItem);
46+
}
47+
return stringBuilder.toString();
48+
}
49+
3950
@Override
4051
public @NonNull String getName() {
4152
return NAME;
@@ -46,4 +57,8 @@ public Type getType() {
4657
return Types.STRING;
4758
}
4859

60+
@Override
61+
public OpKey keyOf(@NonNull Type @NonNull ... types) {
62+
return null;
63+
}
4964
}

0 commit comments

Comments
 (0)