From a611cf83db42174a71b0137b938d7d636f6f3680 Mon Sep 17 00:00:00 2001 From: Jishnu J Date: Thu, 20 Nov 2025 16:32:45 +0530 Subject: [PATCH 1/7] Added conversion for null text columns for import and export --- .../dataexport/producer/CsvProducerTask.java | 3 +++ .../db/dataloader/core/util/ColumnUtils.java | 3 ++- .../producer/CsvProducerTaskTest.java | 19 +++++++++++++++++++ .../dataloader/core/util/ColumnUtilsTest.java | 14 ++++++++++++++ 4 files changed, 38 insertions(+), 1 deletion(-) diff --git a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/producer/CsvProducerTask.java b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/producer/CsvProducerTask.java index fe48106b29..cfed2b9b6b 100644 --- a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/producer/CsvProducerTask.java +++ b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/producer/CsvProducerTask.java @@ -118,6 +118,9 @@ private String convertResultToCsv(Result result) { */ private String convertToString(Result result, String columnName, DataType dataType) { if (result.isNull(columnName)) { + if (dataType.equals(DataType.TEXT)) { + return "/N"; + } return null; } String value = ""; diff --git a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/util/ColumnUtils.java b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/util/ColumnUtils.java index 40bd92d00e..80d8653ea9 100644 --- a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/util/ColumnUtils.java +++ b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/util/ColumnUtils.java @@ -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 { diff --git a/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/producer/CsvProducerTaskTest.java b/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/producer/CsvProducerTaskTest.java index 2e0a7f334a..7106d565ae 100644 --- a/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/producer/CsvProducerTaskTest.java +++ b/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/producer/CsvProducerTaskTest.java @@ -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; @@ -116,4 +117,22 @@ 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> 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 resultList = new ArrayList<>(); + resultList.add(result); + String output = csvProducerTask.process(resultList); + Assertions.assertEquals(expectedOutput, output.trim()); + } } diff --git a/data-loader/core/src/test/java/com/scalar/db/dataloader/core/util/ColumnUtilsTest.java b/data-loader/core/src/test/java/com/scalar/db/dataloader/core/util/ColumnUtilsTest.java index 1f00c04cd5..573b11dde7 100644 --- a/data-loader/core/src/test/java/com/scalar/db/dataloader/core/util/ColumnUtilsTest.java +++ b/data-loader/core/src/test/java/com/scalar/db/dataloader/core/util/ColumnUtilsTest.java @@ -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 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); + } } From 32d222eceb2107bf63c52301d29dc19b7c8e8d89 Mon Sep 17 00:00:00 2001 From: Jishnu J Date: Thu, 20 Nov 2025 16:43:49 +0530 Subject: [PATCH 2/7] Correct javadoc comment --- .../com/scalar/db/dataloader/core/util/ColumnUtilsTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data-loader/core/src/test/java/com/scalar/db/dataloader/core/util/ColumnUtilsTest.java b/data-loader/core/src/test/java/com/scalar/db/dataloader/core/util/ColumnUtilsTest.java index 573b11dde7..6a45e2f1b6 100644 --- a/data-loader/core/src/test/java/com/scalar/db/dataloader/core/util/ColumnUtilsTest.java +++ b/data-loader/core/src/test/java/com/scalar/db/dataloader/core/util/ColumnUtilsTest.java @@ -311,7 +311,7 @@ void createColumnFromValue_valueIsNullString_shouldRemainLiteralForTextType() } /** - * Tests that when the string value custom null value "/n" is provided for TEXT columns, it is + * 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 From 0e456eef8cb0e431fd4c01f5ae22286f151fdb9f Mon Sep 17 00:00:00 2001 From: Jishnu J Date: Thu, 20 Nov 2025 17:13:13 +0530 Subject: [PATCH 3/7] comment added for /N conversion of null in CSV mode export --- .../db/dataloader/core/dataexport/producer/CsvProducerTask.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/producer/CsvProducerTask.java b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/producer/CsvProducerTask.java index cfed2b9b6b..9a0840aae6 100644 --- a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/producer/CsvProducerTask.java +++ b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/producer/CsvProducerTask.java @@ -118,6 +118,8 @@ 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"; } From 9cb3a3956c11f5ef655d352647f30a84cf9456e2 Mon Sep 17 00:00:00 2001 From: Jishnu J Date: Thu, 20 Nov 2025 17:24:45 +0530 Subject: [PATCH 4/7] unit test changes --- .../core/dataexport/producer/CsvProducerTaskTest.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/producer/CsvProducerTaskTest.java b/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/producer/CsvProducerTaskTest.java index 7106d565ae..4c22f8e8ca 100644 --- a/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/producer/CsvProducerTaskTest.java +++ b/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/producer/CsvProducerTaskTest.java @@ -134,5 +134,12 @@ void process_withValidResultList_withPartialProjectionsAndMetadata_shouldReturnV 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()); } } From 84b5321d399089e1d26a5fd0133bdfda40540ac5 Mon Sep 17 00:00:00 2001 From: Jishnu J Date: Thu, 20 Nov 2025 17:59:54 +0530 Subject: [PATCH 5/7] Corrected default null replacement value used --- .../dataloader/core/dataexport/producer/CsvProducerTask.java | 4 ++-- .../java/com/scalar/db/dataloader/core/util/ColumnUtils.java | 2 +- .../core/dataexport/producer/CsvProducerTaskTest.java | 2 +- .../com/scalar/db/dataloader/core/util/ColumnUtilsTest.java | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/producer/CsvProducerTask.java b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/producer/CsvProducerTask.java index 9a0840aae6..8e7859d2d6 100644 --- a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/producer/CsvProducerTask.java +++ b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/producer/CsvProducerTask.java @@ -118,10 +118,10 @@ 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 + // "\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 "\\N"; } return null; } diff --git a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/util/ColumnUtils.java b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/util/ColumnUtils.java index 80d8653ea9..fa06f878ab 100644 --- a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/util/ColumnUtils.java +++ b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/util/ColumnUtils.java @@ -84,7 +84,7 @@ public static Column createColumnFromValue( throws ColumnParsingException { String columnName = columnInfo.getColumnName(); if (value != null && (!dataType.equals(DataType.TEXT) && value.equalsIgnoreCase("null")) - || (dataType.equals(DataType.TEXT) && "/N".equals(value))) { + || (dataType.equals(DataType.TEXT) && "\\N".equals(value))) { value = null; } try { diff --git a/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/producer/CsvProducerTaskTest.java b/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/producer/CsvProducerTaskTest.java index 4c22f8e8ca..a0d88f1ba4 100644 --- a/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/producer/CsvProducerTaskTest.java +++ b/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/producer/CsvProducerTaskTest.java @@ -122,7 +122,7 @@ void process_withValidResultList_withPartialProjectionsAndMetadata_shouldReturnV 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"; + "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> values = UnitTestUtils.createTestValues(); String textColName = "col6"; Column col = values.get(textColName); diff --git a/data-loader/core/src/test/java/com/scalar/db/dataloader/core/util/ColumnUtilsTest.java b/data-loader/core/src/test/java/com/scalar/db/dataloader/core/util/ColumnUtilsTest.java index 6a45e2f1b6..56bf116fdc 100644 --- a/data-loader/core/src/test/java/com/scalar/db/dataloader/core/util/ColumnUtilsTest.java +++ b/data-loader/core/src/test/java/com/scalar/db/dataloader/core/util/ColumnUtilsTest.java @@ -315,12 +315,12 @@ void createColumnFromValue_valueIsNullString_shouldRemainLiteralForTextType() * treated as an actual null value */ @Test - void createColumnFromValue_valueIsCustomNullValue_shouldRemainLiteralForTextType() + void createColumnFromValue_customNullValueForText_shouldBeConvertedToNull() throws ColumnParsingException { String columnName = "textColumn"; ColumnInfo columnInfo = ColumnInfo.builder().columnName(columnName).build(); - Column textCol = ColumnUtils.createColumnFromValue(DataType.TEXT, columnInfo, "/N"); + Column textCol = ColumnUtils.createColumnFromValue(DataType.TEXT, columnInfo, "\\N"); assertEquals(TextColumn.ofNull(columnName), textCol); } } From 3aa72c87c8c0d8abc43b17bd9cfda486c5b91a97 Mon Sep 17 00:00:00 2001 From: Jishnu J Date: Thu, 20 Nov 2025 18:02:38 +0530 Subject: [PATCH 6/7] Updated logic --- .../scalar/db/dataloader/core/util/ColumnUtils.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/util/ColumnUtils.java b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/util/ColumnUtils.java index fa06f878ab..c4b9030221 100644 --- a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/util/ColumnUtils.java +++ b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/util/ColumnUtils.java @@ -83,9 +83,14 @@ 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")) - || (dataType.equals(DataType.TEXT) && "\\N".equals(value))) { - value = null; + if (value != null) { + if (dataType.equals(DataType.TEXT)) { + if ("\\N".equals(value)) { + value = null; + } + } else if (value.equalsIgnoreCase("null")) { + value = null; + } } try { switch (dataType) { From d47c202cb49d3581a89f1e4f132b7edbb95c4b6a Mon Sep 17 00:00:00 2001 From: Peckstadt Yves Date: Fri, 21 Nov 2025 10:17:31 +0900 Subject: [PATCH 7/7] Move CSV NULL value to constant --- .../java/com/scalar/db/dataloader/core/Constants.java | 8 ++++++++ .../core/dataexport/producer/CsvProducerTask.java | 7 ++++--- .../com/scalar/db/dataloader/core/util/ColumnUtils.java | 3 ++- .../core/dataexport/producer/CsvProducerTaskTest.java | 5 ++++- .../scalar/db/dataloader/core/util/ColumnUtilsTest.java | 6 ++++-- 5 files changed, 22 insertions(+), 7 deletions(-) diff --git a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/Constants.java b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/Constants.java index 0d5996747a..b524cedb7e 100644 --- a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/Constants.java +++ b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/Constants.java @@ -16,4 +16,12 @@ public class Constants { */ public static final String ABORT_TRANSACTION_STATUS = "Transaction aborted as part of batch transaction aborted"; + /** + * Special null value representation used for TEXT data type columns in CSV files. + * + *

This value is used to distinguish between an empty string and a null value in CSV exports + * and imports. When exporting, null TEXT values are converted to this string. When importing, + * this string is converted back to null for TEXT columns. + */ + public static final String CSV_TEXT_NULL_VALUE = "\\N"; } diff --git a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/producer/CsvProducerTask.java b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/producer/CsvProducerTask.java index 8e7859d2d6..5a46a53227 100644 --- a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/producer/CsvProducerTask.java +++ b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/producer/CsvProducerTask.java @@ -2,6 +2,7 @@ import com.scalar.db.api.Result; import com.scalar.db.api.TableMetadata; +import com.scalar.db.dataloader.core.Constants; import com.scalar.db.dataloader.core.DataLoaderError; import com.scalar.db.dataloader.core.util.CsvUtil; import com.scalar.db.dataloader.core.util.DecimalUtil; @@ -118,10 +119,10 @@ 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 + // Special null value 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 Constants.CSV_TEXT_NULL_VALUE; } return null; } diff --git a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/util/ColumnUtils.java b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/util/ColumnUtils.java index c4b9030221..6c981dd0af 100644 --- a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/util/ColumnUtils.java +++ b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/util/ColumnUtils.java @@ -4,6 +4,7 @@ import com.scalar.db.api.Result; import com.scalar.db.api.TableMetadata; import com.scalar.db.dataloader.core.ColumnInfo; +import com.scalar.db.dataloader.core.Constants; import com.scalar.db.dataloader.core.DataLoaderError; import com.scalar.db.dataloader.core.exception.Base64Exception; import com.scalar.db.dataloader.core.exception.ColumnParsingException; @@ -85,7 +86,7 @@ public static Column createColumnFromValue( String columnName = columnInfo.getColumnName(); if (value != null) { if (dataType.equals(DataType.TEXT)) { - if ("\\N".equals(value)) { + if (Constants.CSV_TEXT_NULL_VALUE.equals(value)) { value = null; } } else if (value.equalsIgnoreCase("null")) { diff --git a/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/producer/CsvProducerTaskTest.java b/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/producer/CsvProducerTaskTest.java index a0d88f1ba4..3e6005b28f 100644 --- a/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/producer/CsvProducerTaskTest.java +++ b/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/producer/CsvProducerTaskTest.java @@ -3,6 +3,7 @@ import com.scalar.db.api.Result; import com.scalar.db.api.TableMetadata; import com.scalar.db.common.ResultImpl; +import com.scalar.db.dataloader.core.Constants; import com.scalar.db.dataloader.core.UnitTestUtils; import com.scalar.db.io.Column; import com.scalar.db.io.DataType; @@ -122,7 +123,9 @@ void process_withValidResultList_withPartialProjectionsAndMetadata_shouldReturnV 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"; + "9007199254740992,2147483647,true,0.000000000000000000000000000000000000000000001401298464324817,0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049," + + Constants.CSV_TEXT_NULL_VALUE + + ",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> values = UnitTestUtils.createTestValues(); String textColName = "col6"; Column col = values.get(textColName); diff --git a/data-loader/core/src/test/java/com/scalar/db/dataloader/core/util/ColumnUtilsTest.java b/data-loader/core/src/test/java/com/scalar/db/dataloader/core/util/ColumnUtilsTest.java index 56bf116fdc..b4296e5978 100644 --- a/data-loader/core/src/test/java/com/scalar/db/dataloader/core/util/ColumnUtilsTest.java +++ b/data-loader/core/src/test/java/com/scalar/db/dataloader/core/util/ColumnUtilsTest.java @@ -8,6 +8,7 @@ import com.scalar.db.api.TableMetadata; import com.scalar.db.common.ResultImpl; import com.scalar.db.dataloader.core.ColumnInfo; +import com.scalar.db.dataloader.core.Constants; import com.scalar.db.dataloader.core.DataLoaderError; import com.scalar.db.dataloader.core.UnitTestUtils; import com.scalar.db.dataloader.core.exception.Base64Exception; @@ -311,7 +312,7 @@ void createColumnFromValue_valueIsNullString_shouldRemainLiteralForTextType() } /** - * Tests that when the string value has custom null value "/N" is provided for TEXT columns, it is + * Tests that when the string value has custom null value is provided for TEXT columns, it is * treated as an actual null value */ @Test @@ -320,7 +321,8 @@ void createColumnFromValue_customNullValueForText_shouldBeConvertedToNull() String columnName = "textColumn"; ColumnInfo columnInfo = ColumnInfo.builder().columnName(columnName).build(); - Column textCol = ColumnUtils.createColumnFromValue(DataType.TEXT, columnInfo, "\\N"); + Column textCol = + ColumnUtils.createColumnFromValue(DataType.TEXT, columnInfo, Constants.CSV_TEXT_NULL_VALUE); assertEquals(TextColumn.ofNull(columnName), textCol); } }