Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ public int hashCode() {
@Override
public String toString() {
List<String> inputs =
this.inputs.stream().map(Object::toString).collect(Collectors.toList());
this.inputs.stream().map(String::valueOf).collect(Collectors.toList());
return name() + "(" + String.join(", ", inputs) + ')';
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,10 @@ public final Object transform(InternalRow row) {
if (begin instanceof FieldRef) {
FieldRef beginRef = (FieldRef) begin;
checkArgument(beginRef.type().is(INTEGER_NUMERIC));
// getInt on a null reads an undefined value on columnar rows
if (row.isNullAt(beginRef.index())) {
return null;
}
beginIndex = row.getInt(beginRef.index());
} else {
beginIndex = Integer.parseInt(inputs.get(1).toString());
Expand All @@ -85,6 +89,9 @@ public final Object transform(InternalRow row) {
if (end instanceof FieldRef) {
FieldRef endRef = (FieldRef) inputs.get(2);
checkArgument(endRef.type().is(INTEGER_NUMERIC));
if (row.isNullAt(endRef.index())) {
return null;
}
endIndex = beginIndex + row.getInt(endRef.index()) - 1;
} else {
endIndex = beginIndex + Integer.parseInt(inputs.get(2).toString()) - 1;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,14 @@ public BinaryString transform(List<BinaryString> inputs) {
return null;
}
String sourceString = inputs.get(0).toString();
String charsToTrim = inputs.size() == 1 ? " " : inputs.get(1).toString();
String charsToTrim = " ";
if (inputs.size() == 2) {
if (inputs.get(1) == null) {
// StringUtils.ltrim/rtrim treat a null charsToTrim as a null result
return null;
}
charsToTrim = inputs.get(1).toString();
}
switch (trimFlag) {
case BOTH:
return BinaryString.fromString(StringUtils.trim(sourceString, charsToTrim));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,4 +72,13 @@ public void testConcatHybridInputs() {
BinaryString.fromString("-he")));
assertThat(result).isEqualTo(BinaryString.fromString("ha-he"));
}

@Test
public void testToStringWithNullInput() {
List<Object> inputs = new ArrayList<>();
inputs.add(BinaryString.fromString("a"));
inputs.add(null);

assertThat(new ConcatTransform(inputs).toString()).isEqualTo("CONCAT(a, null)");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,27 @@ public void testSubstringRefInputs() {
assertThat(result).isEqualTo(BinaryString.fromString("ell"));
}

@Test
public void testNullPositionFieldYieldsNull() {
List<Object> inputs = new ArrayList<>();
inputs.add(new FieldRef(0, "f0", DataTypes.STRING()));
inputs.add(new FieldRef(1, "f1", DataTypes.INT()));
assertThat(
new SubstringTransform(inputs)
.transform(
GenericRow.of(
BinaryString.fromString("123-45-6789"), null)))
.isNull();

inputs.add(new FieldRef(2, "f2", DataTypes.INT()));
assertThat(
new SubstringTransform(inputs)
.transform(
GenericRow.of(
BinaryString.fromString("123-45-6789"), 8, null)))
.isNull();
}

@Test
public void testSubstringRefInputUsesSourceFieldNullability() {
List<Object> inputs = new ArrayList<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,18 @@ public void testNormalInputs() {
assertThat(result).isEqualTo(BinaryString.fromString(" aa"));
}

@Test
public void testNullCharsToTrimYieldsNull() {
List<Object> inputs = new ArrayList<>();
inputs.add(new FieldRef(0, "f0", DataTypes.STRING()));
inputs.add(new FieldRef(1, "f1", DataTypes.STRING()));
GenericRow row = GenericRow.of(BinaryString.fromString(" x "), null);

for (TrimTransform.Flag flag : TrimTransform.Flag.values()) {
assertThat(new TrimTransform(inputs, flag).transform(row)).isNull();
}
}

@Test
public void testSubstringRefInputs() {
List<Object> inputs = new ArrayList<>();
Expand Down
Loading