Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,11 @@ private String convertResultToCsv(Result result) {
*/
private String convertToString(Result result, String columnName, DataType dataType) {
if (result.isNull(columnName)) {
// "/N" is added when a column of text data type has null value. This is only converted for
// CSV files
if (dataType.equals(DataType.TEXT)) {
return "/N";
}
return null;
}
String value = "";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,8 @@ public static Column<?> createColumnFromValue(
DataType dataType, ColumnInfo columnInfo, @Nullable String value)
throws ColumnParsingException {
String columnName = columnInfo.getColumnName();
if (value != null && !dataType.equals(DataType.TEXT) && value.equalsIgnoreCase("null")) {
if (value != null && (!dataType.equals(DataType.TEXT) && value.equalsIgnoreCase("null"))
|| (dataType.equals(DataType.TEXT) && "/N".equals(value))) {
value = null;
}
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import com.scalar.db.dataloader.core.UnitTestUtils;
import com.scalar.db.io.Column;
import com.scalar.db.io.DataType;
import com.scalar.db.io.TextColumn;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
Expand Down Expand Up @@ -116,4 +117,29 @@ void process_withValidResultList_withPartialProjectionsAndMetadata_shouldReturnV
String output = csvProducerTask.process(resultList);
Assertions.assertEquals(expectedOutput, output.trim());
}

@Test
void
process_withValidResultListWithTextFieldWithNullValue_shouldReturnValidCsvStringWithCustomNullValueForTextField() {
String expectedOutput =
"9007199254740992,2147483647,true,0.000000000000000000000000000000000000000000001401298464324817,0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049,/N,YmxvYiB0ZXN0IHZhbHVl,2000-01-01,01:01:01,2000-01-01T01:01,1970-01-21T03:20:41.740Z,0.000000000000000000000000000000000000000000001401298464324817,0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049,test value,YmxvYiB0ZXN0IHZhbHVl,txt value 464654654,2147483647,2147483647,9007199254740992,9007199254740992,test value,2147483647,2147483647,9007199254740992,9007199254740992";
Map<String, Column<?>> values = UnitTestUtils.createTestValues();
String textColName = "col6";
Column<?> col = values.get(textColName);
if (col instanceof TextColumn) {
values.put(textColName, TextColumn.of(textColName, null));
}
Result result = new ResultImpl(values, mockMetadata);
List<Result> resultList = new ArrayList<>();
resultList.add(result);
String output = csvProducerTask.process(resultList);
Assertions.assertEquals(expectedOutput, output.trim());

values.put(textColName, TextColumn.ofNull(textColName));
result = new ResultImpl(values, mockMetadata);
resultList = new ArrayList<>();
resultList.add(result);
output = csvProducerTask.process(resultList);
Assertions.assertEquals(expectedOutput, output.trim());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -309,4 +309,18 @@ void createColumnFromValue_valueIsNullString_shouldRemainLiteralForTextType()
textCol = ColumnUtils.createColumnFromValue(DataType.TEXT, columnInfo, "nuLL");
assertEquals(TextColumn.of(columnName, "nuLL"), textCol);
}

/**
* Tests that when the string value has custom null value "/N" is provided for TEXT columns, it is
* treated as an actual null value
*/
@Test
void createColumnFromValue_valueIsCustomNullValue_shouldRemainLiteralForTextType()
throws ColumnParsingException {
String columnName = "textColumn";
ColumnInfo columnInfo = ColumnInfo.builder().columnName(columnName).build();

Column<?> textCol = ColumnUtils.createColumnFromValue(DataType.TEXT, columnInfo, "/N");
assertEquals(TextColumn.ofNull(columnName), textCol);
}
}
Loading