Skip to content

Commit 5fb8e4d

Browse files
committed
fixed null value issue in CSV file type for import
1 parent acfb238 commit 5fb8e4d

File tree

2 files changed

+53
-0
lines changed

2 files changed

+53
-0
lines changed

data-loader/core/src/main/java/com/scalar/db/dataloader/core/util/ColumnUtils.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,9 @@ public static Column<?> createColumnFromValue(
8383
DataType dataType, ColumnInfo columnInfo, @Nullable String value)
8484
throws ColumnParsingException {
8585
String columnName = columnInfo.getColumnName();
86+
if (value != null && !dataType.equals(DataType.TEXT) && value.equals("null")) {
87+
value = null;
88+
}
8689
try {
8790
switch (dataType) {
8891
case BOOLEAN:

data-loader/core/src/test/java/com/scalar/db/dataloader/core/util/ColumnUtilsTest.java

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,4 +228,54 @@ void getColumnsFromResult_withResultNull_withValidData_shouldReturnColumns()
228228
null, sourceRecord, false, mockMetadata, "namespace", "table");
229229
assertEquals(8, columns.size());
230230
}
231+
232+
/**
233+
* Tests that the string "null" (lowercase) is correctly treated as null for numeric, boolean, and
234+
* date/time types.
235+
*/
236+
@Test
237+
void createColumnFromValue_valueIsLowercaseNull_shouldReturnNullColumn()
238+
throws ColumnParsingException {
239+
String columnName = "testColumn";
240+
ColumnInfo columnInfo = ColumnInfo.builder().columnName(columnName).build();
241+
242+
// Integer type
243+
Column<?> intColumn = ColumnUtils.createColumnFromValue(DataType.INT, columnInfo, "null");
244+
assertEquals(IntColumn.ofNull(columnName), intColumn);
245+
246+
// Double type
247+
Column<?> doubleColumn = ColumnUtils.createColumnFromValue(DataType.DOUBLE, columnInfo, "null");
248+
assertEquals(DoubleColumn.ofNull(columnName), doubleColumn);
249+
250+
// Boolean type
251+
Column<?> boolColumn = ColumnUtils.createColumnFromValue(DataType.BOOLEAN, columnInfo, "null");
252+
assertEquals(BooleanColumn.ofNull(columnName), boolColumn);
253+
254+
// Date type
255+
Column<?> dateColumn = ColumnUtils.createColumnFromValue(DataType.DATE, columnInfo, "null");
256+
assertEquals(DateColumn.ofNull(columnName), dateColumn);
257+
258+
// Time type
259+
Column<?> timeColumn = ColumnUtils.createColumnFromValue(DataType.TIME, columnInfo, "null");
260+
assertEquals(TimeColumn.ofNull(columnName), timeColumn);
261+
262+
// Timestamp type
263+
Column<?> timestampColumn =
264+
ColumnUtils.createColumnFromValue(DataType.TIMESTAMP, columnInfo, "null");
265+
assertEquals(TimestampColumn.ofNull(columnName), timestampColumn);
266+
}
267+
268+
/**
269+
* Tests that when the string value "null" is provided for TEXT columns, it is treated as a
270+
* literal string and not converted to null.
271+
*/
272+
@Test
273+
void createColumnFromValue_valueIsNullString_shouldRemainLiteralForTextType()
274+
throws ColumnParsingException {
275+
String columnName = "textColumn";
276+
ColumnInfo columnInfo = ColumnInfo.builder().columnName(columnName).build();
277+
278+
Column<?> textCol = ColumnUtils.createColumnFromValue(DataType.TEXT, columnInfo, "null");
279+
assertEquals(TextColumn.of(columnName, "null"), textCol);
280+
}
231281
}

0 commit comments

Comments
 (0)