Skip to content

Commit

Permalink
[Enhancement] Convert the constant value to target type while making …
Browse files Browse the repository at this point in the history
…kudu predicate.

Signed-off-by: Song Jiacheng <[email protected]>
  • Loading branch information
Jcnessss committed Dec 18, 2024
1 parent 65e0b15 commit bfd7f31
Showing 1 changed file with 12 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@

import com.google.common.collect.Lists;
import com.starrocks.analysis.BinaryType;
import com.starrocks.catalog.Type;
import com.starrocks.connector.ColumnTypeConverter;
import com.starrocks.sql.optimizer.operator.scalar.BinaryPredicateOperator;
import com.starrocks.sql.optimizer.operator.scalar.CastOperator;
import com.starrocks.sql.optimizer.operator.scalar.ColumnRefOperator;
Expand Down Expand Up @@ -103,7 +105,9 @@ public List<KuduPredicate> visitBinaryPredicate(BinaryPredicateOperator operator
if (columnName == null) {
return Lists.newArrayList();
}
Object literal = getLiteral(operator.getChild(1));
ColumnSchema column = schema.getColumn(columnName);
Type targetType = ColumnTypeConverter.fromKuduType(column);
Object literal = getLiteral(operator.getChild(1), targetType);
if (literal == null) {
return Lists.newArrayList();
}
Expand Down Expand Up @@ -137,10 +141,12 @@ public List<KuduPredicate> visitInPredicate(InPredicateOperator operator, Void c
if (columnName == null) {
return Lists.newArrayList();
}
ColumnSchema column = schema.getColumn(columnName);
Type targetType = ColumnTypeConverter.fromKuduType(column);
List<ScalarOperator> valuesOperatorList = operator.getListChildren();
List<Object> literalValues = new ArrayList<>(valuesOperatorList.size());
for (ScalarOperator valueOperator : valuesOperatorList) {
Object literal = getLiteral(valueOperator);
Object literal = getLiteral(valueOperator, targetType);
if (literal == null) {
return Lists.newArrayList();
}
Expand All @@ -154,12 +160,14 @@ public List<KuduPredicate> visitInPredicate(InPredicateOperator operator, Void c
return Lists.newArrayList();
}

private Object getLiteral(ScalarOperator operator) {
private Object getLiteral(ScalarOperator operator, Type targetType) {
if (!(operator instanceof ConstantOperator)) {
return null;
}

ConstantOperator constValue = (ConstantOperator) operator;
switch (constValue.getType().getPrimitiveType()) {
Optional<ConstantOperator> casted = constValue.castTo(targetType);
switch (casted.isPresent() ? casted.get().getType().getPrimitiveType() : constValue.getType().getPrimitiveType()) {
case BOOLEAN:
return constValue.getBoolean();
case TINYINT:
Expand Down

0 comments on commit bfd7f31

Please sign in to comment.