From 53d6dc0467cab9df10c23069fa80c562692825ec Mon Sep 17 00:00:00 2001 From: Peckstadt Yves Date: Thu, 13 Nov 2025 12:31:52 +0900 Subject: [PATCH 01/10] Deprecate the include metadata export argument and depend on ScalarDB config # Conflicts: # data-loader/cli/src/main/java/com/scalar/db/dataloader/cli/command/dataexport/ExportCommand.java # data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/CsvExportManagerTest.java --- .../cli/command/dataexport/ExportCommand.java | 3 +-- .../dataexport/ExportCommandOptions.java | 10 +++++++-- .../core/dataexport/CsvExportManager.java | 21 +++++-------------- .../core/dataexport/ExportManager.java | 3 +-- .../core/dataexport/ExportOptions.java | 1 - .../dataexport/producer/CsvProducerTask.java | 11 +++------- .../producer/JsonLineProducerTask.java | 11 +++------- .../dataexport/producer/JsonProducerTask.java | 11 +++------- .../dataexport/producer/ProducerTask.java | 9 -------- .../producer/ProducerTaskFactory.java | 13 +++--------- .../core/dataexport/CsvExportManagerTest.java | 11 +++++----- .../dataexport/JsonExportManagerTest.java | 2 +- .../dataexport/JsonLineExportManagerTest.java | 2 +- .../producer/CsvProducerTaskTest.java | 18 +++++++--------- .../producer/JsonLineProducerTaskTest.java | 20 +++++++----------- .../producer/JsonProducerTaskTest.java | 19 +++++++---------- .../producer/ProducerTaskFactoryTest.java | 6 +++--- 17 files changed, 62 insertions(+), 109 deletions(-) diff --git a/data-loader/cli/src/main/java/com/scalar/db/dataloader/cli/command/dataexport/ExportCommand.java b/data-loader/cli/src/main/java/com/scalar/db/dataloader/cli/command/dataexport/ExportCommand.java index 91a8f3f56a..5677b4601f 100755 --- a/data-loader/cli/src/main/java/com/scalar/db/dataloader/cli/command/dataexport/ExportCommand.java +++ b/data-loader/cli/src/main/java/com/scalar/db/dataloader/cli/command/dataexport/ExportCommand.java @@ -162,7 +162,7 @@ private void validateOutputDirectory() throws DirectoryValidationException { private ExportManager createExportManager( TransactionFactory transactionFactory, ScalarDbDao scalarDbDao, FileFormat fileFormat) { ProducerTaskFactory taskFactory = - new ProducerTaskFactory(delimiter, includeTransactionMetadata, prettyPrintJson); + new ProducerTaskFactory(delimiter, prettyPrintJson); DistributedTransactionManager manager = transactionFactory.getTransactionManager(); switch (fileFormat) { case JSON: @@ -181,7 +181,6 @@ private ExportOptions buildExportOptions(Key partitionKey, ScanRange scanRange) ExportOptions.builder(namespace, table, partitionKey, outputFormat) .sortOrders(sortOrders) .excludeHeaderRow(excludeHeader) - .includeTransactionMetadata(includeTransactionMetadata) .delimiter(delimiter) .limit(limit) .maxThreadCount(maxThreads) diff --git a/data-loader/cli/src/main/java/com/scalar/db/dataloader/cli/command/dataexport/ExportCommandOptions.java b/data-loader/cli/src/main/java/com/scalar/db/dataloader/cli/command/dataexport/ExportCommandOptions.java index 4492f36259..23f3ce5708 100755 --- a/data-loader/cli/src/main/java/com/scalar/db/dataloader/cli/command/dataexport/ExportCommandOptions.java +++ b/data-loader/cli/src/main/java/com/scalar/db/dataloader/cli/command/dataexport/ExportCommandOptions.java @@ -69,10 +69,16 @@ public class ExportCommandOptions { defaultValue = "json") protected FileFormat outputFormat; + /** + * @deprecated As of release 3.16.2 This option is no longer used and will be removed in release + * 4.0.0. + */ + @Deprecated @CommandLine.Option( names = {"--include-metadata", "-m"}, - description = "Include transaction metadata in the exported data (default: false)", - defaultValue = "false") + description = "Deprecated: This option is no longer used", + defaultValue = "false", + hidden = true) protected boolean includeTransactionMetadata; @CommandLine.Option( diff --git a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/CsvExportManager.java b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/CsvExportManager.java index 9589e405ac..af484724bc 100644 --- a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/CsvExportManager.java +++ b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/CsvExportManager.java @@ -5,7 +5,6 @@ import com.scalar.db.dataloader.core.dataexport.producer.ProducerTaskFactory; import com.scalar.db.dataloader.core.dataimport.dao.ScalarDbDao; import com.scalar.db.dataloader.core.util.CsvUtil; -import com.scalar.db.transaction.consensuscommit.ConsensusCommitUtils; import java.io.IOException; import java.io.Writer; import java.util.Iterator; @@ -77,8 +76,7 @@ private String createCsvHeaderRow(ExportOptions exportOptions, TableMetadata tab Iterator iterator = tableMetadata.getColumnNames().iterator(); while (iterator.hasNext()) { String columnName = iterator.next(); - if (shouldIgnoreColumn( - exportOptions.isIncludeTransactionMetadata(), columnName, tableMetadata, projections)) { + if (shouldIgnoreColumn(columnName, projections)) { continue; } headerRow.append(columnName); @@ -92,22 +90,13 @@ private String createCsvHeaderRow(ExportOptions exportOptions, TableMetadata tab } /** - * To ignore a column or not based on conditions such as if it is a metadata column or if it is - * not include in selected projections + * To ignore a column or not based on if it is not included in selected projections * - * @param isIncludeTransactionMetadata to include transaction metadata or not * @param columnName column name - * @param tableMetadata table metadata * @param projections selected columns for projection - * @return ignore the column or not + * @return true if the column should be ignored, false otherwise */ - private boolean shouldIgnoreColumn( - boolean isIncludeTransactionMetadata, - String columnName, - TableMetadata tableMetadata, - List projections) { - return (!isIncludeTransactionMetadata - && ConsensusCommitUtils.isTransactionMetaColumn(columnName, tableMetadata)) - || (!projections.isEmpty() && !projections.contains(columnName)); + private boolean shouldIgnoreColumn(String columnName, List projections) { + return !projections.isEmpty() && !projections.contains(columnName); } } diff --git a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/ExportManager.java b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/ExportManager.java index 4a6a41596e..09755f8c1b 100644 --- a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/ExportManager.java +++ b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/ExportManager.java @@ -205,8 +205,7 @@ private void validateExportOptions(ExportOptions exportOptions, TableMetadata ta * @param tableMetadata metadata of the table */ private void handleTransactionMetadata(ExportOptions exportOptions, TableMetadata tableMetadata) { - if (exportOptions.isIncludeTransactionMetadata() - && !exportOptions.getProjectionColumns().isEmpty()) { + if (!exportOptions.getProjectionColumns().isEmpty()) { List projectionMetadata = TableMetadataUtil.populateProjectionsWithMetadata( tableMetadata, exportOptions.getProjectionColumns()); diff --git a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/ExportOptions.java b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/ExportOptions.java index fac6df7b4e..54feeaeca1 100644 --- a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/ExportOptions.java +++ b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/ExportOptions.java @@ -27,7 +27,6 @@ public class ExportOptions { @Builder.Default private final int maxThreadCount = Runtime.getRuntime().availableProcessors(); @Builder.Default private final String delimiter = ";"; @Builder.Default private final boolean excludeHeaderRow = false; - @Builder.Default private final boolean includeTransactionMetadata = false; @Builder.Default private List projectionColumns = Collections.emptyList(); private List sortOrders; 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 2a37c7c507..fe48106b29 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 @@ -6,7 +6,6 @@ import com.scalar.db.dataloader.core.util.CsvUtil; import com.scalar.db.dataloader.core.util.DecimalUtil; import com.scalar.db.io.DataType; -import com.scalar.db.transaction.consensuscommit.ConsensusCommitUtils; import java.nio.charset.Charset; import java.time.Instant; import java.time.LocalDate; @@ -33,19 +32,17 @@ public class CsvProducerTask extends ProducerTask { /** * Class constructor * - * @param includeMetadata Include metadata in the exported data * @param projectColumns list of columns that is required in export data * @param tableMetadata Metadata for a single ScalarDB table * @param columnDataTypes Map of data types for the all columns in a ScalarDB table * @param delimiter Delimiter used in csv content */ public CsvProducerTask( - boolean includeMetadata, List projectColumns, TableMetadata tableMetadata, Map columnDataTypes, String delimiter) { - super(includeMetadata, projectColumns, tableMetadata, columnDataTypes); + super(projectColumns, tableMetadata, columnDataTypes); this.delimiter = delimiter; } @@ -82,12 +79,10 @@ private String convertResultToCsv(Result result) { while (iterator.hasNext()) { String columnName = iterator.next(); - // Skip the field if it can be ignored based on check + // Skip the field if it's not in the projection list (when projections are specified) boolean columnNotProjected = !projectedColumnsSet.isEmpty() && !projectedColumnsSet.contains(columnName); - boolean isMetadataColumn = - ConsensusCommitUtils.isTransactionMetaColumn(columnName, tableMetadata); - if (columnNotProjected || (!includeMetadata && isMetadataColumn)) { + if (columnNotProjected) { continue; } diff --git a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/producer/JsonLineProducerTask.java b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/producer/JsonLineProducerTask.java index aabbba205c..1b3b757563 100644 --- a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/producer/JsonLineProducerTask.java +++ b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/producer/JsonLineProducerTask.java @@ -6,7 +6,6 @@ import com.scalar.db.api.TableMetadata; import com.scalar.db.dataloader.core.DataLoaderObjectMapper; import com.scalar.db.io.DataType; -import com.scalar.db.transaction.consensuscommit.ConsensusCommitUtils; import java.nio.charset.Charset; import java.time.Instant; import java.time.LocalDate; @@ -28,17 +27,15 @@ public class JsonLineProducerTask extends ProducerTask { /** * Class constructor * - * @param includeMetadata Include metadata in the exported data * @param projectionColumns list of columns that is required in export data * @param tableMetadata Metadata for a single ScalarDB table * @param columnDataTypes Map of data types for the all columns in a ScalarDB table */ public JsonLineProducerTask( - boolean includeMetadata, List projectionColumns, TableMetadata tableMetadata, Map columnDataTypes) { - super(includeMetadata, projectionColumns, tableMetadata, columnDataTypes); + super(projectionColumns, tableMetadata, columnDataTypes); } /** @@ -72,12 +69,10 @@ private ObjectNode generateJsonForResult(Result result) { // Loop through all the columns and to the json object for (String columnName : tableColumns) { - // Skip the field if it can be ignored based on check + // Skip the field if it's not in the projection list (when projections are specified) boolean columnNotProjected = !projectedColumnsSet.isEmpty() && !projectedColumnsSet.contains(columnName); - boolean isMetadataColumn = - ConsensusCommitUtils.isTransactionMetaColumn(columnName, tableMetadata); - if (columnNotProjected || (!includeMetadata && isMetadataColumn)) { + if (columnNotProjected) { continue; } diff --git a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/producer/JsonProducerTask.java b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/producer/JsonProducerTask.java index 742911e211..b167ec9b8f 100644 --- a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/producer/JsonProducerTask.java +++ b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/producer/JsonProducerTask.java @@ -7,7 +7,6 @@ import com.scalar.db.api.TableMetadata; import com.scalar.db.dataloader.core.DataLoaderObjectMapper; import com.scalar.db.io.DataType; -import com.scalar.db.transaction.consensuscommit.ConsensusCommitUtils; import java.nio.charset.Charset; import java.time.Instant; import java.time.LocalDate; @@ -30,19 +29,17 @@ public class JsonProducerTask extends ProducerTask { /** * Class constructor * - * @param includeMetadata Include metadata in the exported data * @param projectionColumns list of columns that is required in export data * @param tableMetadata Metadata for a single ScalarDB table * @param columnDataTypes Map of data types for the all columns in a ScalarDB table * @param prettyPrintJson Json data should be formatted or not */ public JsonProducerTask( - boolean includeMetadata, List projectionColumns, TableMetadata tableMetadata, Map columnDataTypes, boolean prettyPrintJson) { - super(includeMetadata, projectionColumns, tableMetadata, columnDataTypes); + super(projectionColumns, tableMetadata, columnDataTypes); this.prettyPrintJson = prettyPrintJson; } @@ -84,12 +81,10 @@ private ObjectNode generateJsonForResult(Result result) { // Loop through all the columns and to the json object for (String columnName : tableColumns) { - // Skip the field if it can be ignored based on check + // Skip the field if it's not in the projection list (when projections are specified) boolean columnNotProjected = !projectedColumnsSet.isEmpty() && !projectedColumnsSet.contains(columnName); - boolean isMetadataColumn = - ConsensusCommitUtils.isTransactionMetaColumn(columnName, tableMetadata); - if (columnNotProjected || (!includeMetadata && isMetadataColumn)) { + if (columnNotProjected) { continue; } diff --git a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/producer/ProducerTask.java b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/producer/ProducerTask.java index acb9a90519..48dcc58850 100644 --- a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/producer/ProducerTask.java +++ b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/producer/ProducerTask.java @@ -32,12 +32,6 @@ public abstract class ProducerTask { */ protected final Map dataTypeByColumnName; - /** - * Flag indicating whether to include internal metadata columns (e.g., transaction metadata) in - * the output. - */ - protected final boolean includeMetadata; - /** * A set of column names to include in the exported output. If empty, all columns are included by * default. @@ -47,17 +41,14 @@ public abstract class ProducerTask { /** * Class constructor * - * @param includeMetadata Include metadata in the exported data * @param projectionColumns List of column name for projection * @param tableMetadata Metadata of the ScalarDB table * @param columnDataTypes Map of data types for the all columns in a ScalarDB table */ protected ProducerTask( - boolean includeMetadata, List projectionColumns, TableMetadata tableMetadata, Map columnDataTypes) { - this.includeMetadata = includeMetadata; this.projectedColumnsSet = new HashSet<>(projectionColumns); this.tableMetadata = tableMetadata; this.dataTypeByColumnName = columnDataTypes; diff --git a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/producer/ProducerTaskFactory.java b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/producer/ProducerTaskFactory.java index 21268e016d..b632e5428a 100644 --- a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/producer/ProducerTaskFactory.java +++ b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/producer/ProducerTaskFactory.java @@ -14,7 +14,6 @@ public class ProducerTaskFactory { private final String delimiter; - private final boolean includeMetadata; private final boolean prettyPrintJson; /** @@ -36,21 +35,15 @@ public ProducerTask createProducerTask( case JSON: producerTask = new JsonProducerTask( - includeMetadata, - projectionColumns, - tableMetadata, - dataTypeByColumnName, - prettyPrintJson); + projectionColumns, tableMetadata, dataTypeByColumnName, prettyPrintJson); break; case JSONL: producerTask = - new JsonLineProducerTask( - includeMetadata, projectionColumns, tableMetadata, dataTypeByColumnName); + new JsonLineProducerTask(projectionColumns, tableMetadata, dataTypeByColumnName); break; case CSV: producerTask = - new CsvProducerTask( - includeMetadata, projectionColumns, tableMetadata, dataTypeByColumnName, delimiter); + new CsvProducerTask(projectionColumns, tableMetadata, dataTypeByColumnName, delimiter); break; default: throw new IllegalArgumentException( diff --git a/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/CsvExportManagerTest.java b/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/CsvExportManagerTest.java index 26e6a88a85..17f74b1d40 100644 --- a/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/CsvExportManagerTest.java +++ b/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/CsvExportManagerTest.java @@ -43,7 +43,7 @@ void setup() { manager = Mockito.mock(DistributedTransactionManager.class); mockData = UnitTestUtils.createTestTableMetadata(); dao = Mockito.mock(ScalarDbDao.class); - producerTaskFactory = new ProducerTaskFactory(null, false, true); + producerTaskFactory = new ProducerTaskFactory(null, true); } @Test @@ -88,7 +88,7 @@ void startExport_givenValidDataWithoutPartitionKey_shouldGenerateOutputFile() @Test void startExport_givenPartitionKey_shouldGenerateOutputFile() throws IOException, ScalarDbDaoException { - producerTaskFactory = new ProducerTaskFactory(",", false, false); + producerTaskFactory = new ProducerTaskFactory(",", false); exportManager = new CsvExportManager(manager, dao, producerTaskFactory); TransactionManagerCrudOperable.Scanner scanner = Mockito.mock(TransactionManagerCrudOperable.Scanner.class); @@ -136,14 +136,15 @@ void startExport_givenPartitionKey_shouldGenerateOutputFile() @Test void startExport_givenNoHeaderRequired_shouldGenerateOutputFileWithoutHeader() throws Exception { String expectedFirstLine = - "9007199254740992,2147483647,true,0.000000000000000000000000000000000000000000001401298464324817,0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049,test value,YmxvYiB0ZXN0IHZhbHVl,2000-01-01,01:01:01,2000-01-01T01:01,1970-01-21T03:20:41.740Z"; + "9007199254740992,2147483647,true,0.000000000000000000000000000000000000000000001401298464324817,0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049,test 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"; runExportAndAssertFirstLine(true, expectedFirstLine); } @Test void startExport_givenHeaderRequired_shouldGenerateOutputFileWithHeader() throws Exception { - String expectedFirstLine = "col1,col2,col3,col4,col5,col6,col7,col8,col9,col10,col11"; + String expectedFirstLine = + "col1,col2,col3,col4,col5,col6,col7,col8,col9,col10,col11,before_col4,before_col5,before_col6,before_col7,tx_id,tx_state,tx_version,tx_prepared_at,tx_committed_at,before_tx_id,before_tx_state,before_tx_version,before_tx_prepared_at,before_tx_committed_at"; runExportAndAssertFirstLine(false, expectedFirstLine); } @@ -151,7 +152,7 @@ void startExport_givenHeaderRequired_shouldGenerateOutputFileWithHeader() throws private void runExportAndAssertFirstLine(boolean excludeHeader, String expectedFirstLine) throws Exception { // Arrange - producerTaskFactory = new ProducerTaskFactory(",", false, false); + producerTaskFactory = new ProducerTaskFactory(",", false); exportManager = new CsvExportManager(manager, dao, producerTaskFactory); TransactionManagerCrudOperable.Scanner scanner = Mockito.mock(TransactionManagerCrudOperable.Scanner.class); diff --git a/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/JsonExportManagerTest.java b/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/JsonExportManagerTest.java index b71d080323..6e4c6b30aa 100644 --- a/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/JsonExportManagerTest.java +++ b/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/JsonExportManagerTest.java @@ -43,7 +43,7 @@ void setup() { manager = Mockito.mock(DistributedTransactionManager.class); mockData = UnitTestUtils.createTestTableMetadata(); dao = Mockito.mock(ScalarDbDao.class); - producerTaskFactory = new ProducerTaskFactory(null, false, true); + producerTaskFactory = new ProducerTaskFactory(null, true); } @Test diff --git a/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/JsonLineExportManagerTest.java b/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/JsonLineExportManagerTest.java index f2a6d1b360..7405a870f4 100644 --- a/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/JsonLineExportManagerTest.java +++ b/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/JsonLineExportManagerTest.java @@ -42,7 +42,7 @@ void setup() { manager = Mockito.mock(DistributedTransactionManager.class); mockData = UnitTestUtils.createTestTableMetadata(); dao = Mockito.mock(ScalarDbDao.class); - producerTaskFactory = new ProducerTaskFactory(null, false, true); + producerTaskFactory = new ProducerTaskFactory(null, true); } @Test 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 81a14a8292..2e0a7f334a 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 @@ -26,7 +26,7 @@ void setup() { mockMetadata = UnitTestUtils.createTestTableMetadata(); projectedColumns = UnitTestUtils.getColumnsListOfMetadata(); columnData = UnitTestUtils.getColumnData(); - csvProducerTask = new CsvProducerTask(false, projectedColumns, mockMetadata, columnData, ","); + csvProducerTask = new CsvProducerTask(projectedColumns, mockMetadata, columnData, ","); } @Test @@ -39,7 +39,7 @@ void process_withEmptyResultList_shouldReturnEmptyString() { @Test void process_withValidResultList_shouldReturnValidCsvString() { String expectedOutput = - "9007199254740992,2147483647,true,0.000000000000000000000000000000000000000000001401298464324817,0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049,test value,YmxvYiB0ZXN0IHZhbHVl,2000-01-01,01:01:01,2000-01-01T01:01,1970-01-21T03:20:41.740Z"; + "9007199254740992,2147483647,true,0.000000000000000000000000000000000000000000001401298464324817,0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049,test 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(); Result result = new ResultImpl(values, mockMetadata); List resultList = new ArrayList<>(); @@ -50,7 +50,7 @@ void process_withValidResultList_shouldReturnValidCsvString() { @Test void process_withValidResultListWithMetadata_shouldReturnValidCsvString() { - csvProducerTask = new CsvProducerTask(true, projectedColumns, mockMetadata, columnData, ","); + csvProducerTask = new CsvProducerTask(projectedColumns, mockMetadata, columnData, ","); String expectedOutput = "9007199254740992,2147483647,true,0.000000000000000000000000000000000000000000001401298464324817,0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049,test 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(); @@ -64,7 +64,7 @@ void process_withValidResultListWithMetadata_shouldReturnValidCsvString() { @Test void process_withValidResultList_withPartialProjections_shouldReturnValidCsvString() { projectedColumns = UnitTestUtils.getPartialColumnsListWithoutMetadata(); - csvProducerTask = new CsvProducerTask(false, projectedColumns, mockMetadata, columnData, ","); + csvProducerTask = new CsvProducerTask(projectedColumns, mockMetadata, columnData, ","); String expectedOutput = "9007199254740992,2147483647,true,0.000000000000000000000000000000000000000000001401298464324817,0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049"; Map> values = UnitTestUtils.createTestValues(); @@ -78,7 +78,7 @@ void process_withValidResultList_withPartialProjections_shouldReturnValidCsvStri @Test void process_withValidResultList_withPartialProjectionsAndMetadata_shouldReturnValidCsvString() { projectedColumns = UnitTestUtils.getPartialColumnsListWithMetadata(); - csvProducerTask = new CsvProducerTask(true, projectedColumns, mockMetadata, columnData, ","); + csvProducerTask = new CsvProducerTask(projectedColumns, mockMetadata, columnData, ","); String expectedOutput = "9007199254740992,2147483647,true,0.000000000000000000000000000000000000000000001401298464324817,0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049,0.000000000000000000000000000000000000000000001401298464324817,0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049,test value,YmxvYiB0ZXN0IHZhbHVl,txt value 464654654,2147483647,2147483647,9007199254740992,9007199254740992,test value,2147483647,2147483647,9007199254740992,9007199254740992"; Map> values = UnitTestUtils.createTestValues(); @@ -92,10 +92,9 @@ void process_withValidResultList_withPartialProjectionsAndMetadata_shouldReturnV @Test void process_withValidResultListWithNoProjectionSpecifiedWithoutMetadata_shouldReturnValidCsvString() { - csvProducerTask = - new CsvProducerTask(false, Collections.emptyList(), mockMetadata, columnData, ","); + csvProducerTask = new CsvProducerTask(Collections.emptyList(), mockMetadata, columnData, ","); String expectedOutput = - "9007199254740992,2147483647,true,0.000000000000000000000000000000000000000000001401298464324817,0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049,test value,YmxvYiB0ZXN0IHZhbHVl,2000-01-01,01:01:01,2000-01-01T01:01,1970-01-21T03:20:41.740Z"; + "9007199254740992,2147483647,true,0.000000000000000000000000000000000000000000001401298464324817,0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049,test 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(); Result result = new ResultImpl(values, mockMetadata); List resultList = new ArrayList<>(); @@ -107,8 +106,7 @@ void process_withValidResultList_withPartialProjectionsAndMetadata_shouldReturnV @Test void process_withValidResultListWithNoProjectionSpecifiedWithMetadata_shouldReturnValidCsvString() { - csvProducerTask = - new CsvProducerTask(true, Collections.emptyList(), mockMetadata, columnData, ","); + csvProducerTask = new CsvProducerTask(Collections.emptyList(), mockMetadata, columnData, ","); String expectedOutput = "9007199254740992,2147483647,true,0.000000000000000000000000000000000000000000001401298464324817,0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049,test 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(); diff --git a/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/producer/JsonLineProducerTaskTest.java b/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/producer/JsonLineProducerTaskTest.java index 6a450e3599..234854b170 100644 --- a/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/producer/JsonLineProducerTaskTest.java +++ b/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/producer/JsonLineProducerTaskTest.java @@ -26,8 +26,7 @@ void setup() { mockMetadata = UnitTestUtils.createTestTableMetadata(); projectedColumns = UnitTestUtils.getColumnsListOfMetadata(); columnData = UnitTestUtils.getColumnData(); - jsonLineProducerTask = - new JsonLineProducerTask(false, projectedColumns, mockMetadata, columnData); + jsonLineProducerTask = new JsonLineProducerTask(projectedColumns, mockMetadata, columnData); } @Test @@ -39,7 +38,7 @@ void process_withEmptyResultList_shouldReturnEmptyString() { @Test void process_withValidResultList_shouldReturnValidJsonLineString() { - ObjectNode rootNode = UnitTestUtils.getOutputDataWithoutMetadata(); + ObjectNode rootNode = UnitTestUtils.getOutputDataWithMetadata(); Map> values = UnitTestUtils.createTestValues(); Result result = new ResultImpl(values, mockMetadata); List resultList = new ArrayList<>(); @@ -50,8 +49,7 @@ void process_withValidResultList_shouldReturnValidJsonLineString() { @Test void process_withValidResultListWithMetadata_shouldReturnValidJsonLineString() { - jsonLineProducerTask = - new JsonLineProducerTask(true, projectedColumns, mockMetadata, columnData); + jsonLineProducerTask = new JsonLineProducerTask(projectedColumns, mockMetadata, columnData); ObjectNode rootNode = UnitTestUtils.getOutputDataWithMetadata(); Map> values = UnitTestUtils.createTestValues(); Result result = new ResultImpl(values, mockMetadata); @@ -64,8 +62,7 @@ void process_withValidResultListWithMetadata_shouldReturnValidJsonLineString() { @Test void process_withValidResultList_withPartialProjections_shouldReturnValidJsonLineString() { projectedColumns = UnitTestUtils.getPartialColumnsListWithoutMetadata(); - jsonLineProducerTask = - new JsonLineProducerTask(false, projectedColumns, mockMetadata, columnData); + jsonLineProducerTask = new JsonLineProducerTask(projectedColumns, mockMetadata, columnData); ObjectNode rootNode = UnitTestUtils.getPartialOutputDataWithoutMetadata(); Map> values = UnitTestUtils.createTestValues(); Result result = new ResultImpl(values, mockMetadata); @@ -79,8 +76,7 @@ void process_withValidResultList_withPartialProjections_shouldReturnValidJsonLin void process_withValidResultList_withPartialProjectionsAndMetadata_shouldReturnValidJsonLineString() { projectedColumns = UnitTestUtils.getPartialColumnsListWithMetadata(); - jsonLineProducerTask = - new JsonLineProducerTask(true, projectedColumns, mockMetadata, columnData); + jsonLineProducerTask = new JsonLineProducerTask(projectedColumns, mockMetadata, columnData); ObjectNode rootNode = UnitTestUtils.getPartialOutputDataWithMetadata(); Map> values = UnitTestUtils.createTestValues(); Result result = new ResultImpl(values, mockMetadata); @@ -94,8 +90,8 @@ void process_withValidResultList_withPartialProjections_shouldReturnValidJsonLin void process_withValidResultListWithNoProjectionSpecifiedWithoutMetadata_shouldReturnValidJsonLineString() { jsonLineProducerTask = - new JsonLineProducerTask(false, Collections.emptyList(), mockMetadata, columnData); - ObjectNode rootNode = UnitTestUtils.getOutputDataWithoutMetadata(); + new JsonLineProducerTask(Collections.emptyList(), mockMetadata, columnData); + ObjectNode rootNode = UnitTestUtils.getOutputDataWithMetadata(); Map> values = UnitTestUtils.createTestValues(); Result result = new ResultImpl(values, mockMetadata); List resultList = new ArrayList<>(); @@ -108,7 +104,7 @@ void process_withValidResultList_withPartialProjections_shouldReturnValidJsonLin void process_withValidResultListWithNoProjectionSpecifiedWithMetadata_shouldReturnValidJsonLineString() { jsonLineProducerTask = - new JsonLineProducerTask(true, Collections.emptyList(), mockMetadata, columnData); + new JsonLineProducerTask(Collections.emptyList(), mockMetadata, columnData); ObjectNode rootNode = UnitTestUtils.getOutputDataWithMetadata(); Map> values = UnitTestUtils.createTestValues(); Result result = new ResultImpl(values, mockMetadata); diff --git a/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/producer/JsonProducerTaskTest.java b/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/producer/JsonProducerTaskTest.java index e14086d3c2..b8ff8f8698 100644 --- a/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/producer/JsonProducerTaskTest.java +++ b/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/producer/JsonProducerTaskTest.java @@ -26,8 +26,7 @@ void setup() { mockMetadata = UnitTestUtils.createTestTableMetadata(); projectedColumns = UnitTestUtils.getColumnsListOfMetadata(); columnData = UnitTestUtils.getColumnData(); - jsonProducerTask = - new JsonProducerTask(false, projectedColumns, mockMetadata, columnData, true); + jsonProducerTask = new JsonProducerTask(projectedColumns, mockMetadata, columnData, true); } @Test @@ -39,7 +38,7 @@ void process_withEmptyResultList_shouldReturnEmptyString() { @Test void process_withValidResultList_shouldReturnValidJsonString() { - ObjectNode rootNode = UnitTestUtils.getOutputDataWithoutMetadata(); + ObjectNode rootNode = UnitTestUtils.getOutputDataWithMetadata(); Map> values = UnitTestUtils.createTestValues(); Result result = new ResultImpl(values, mockMetadata); List resultList = new ArrayList<>(); @@ -50,7 +49,7 @@ void process_withValidResultList_shouldReturnValidJsonString() { @Test void process_withValidResultListWithMetadata_shouldReturnValidJsonString() { - jsonProducerTask = new JsonProducerTask(true, projectedColumns, mockMetadata, columnData, true); + jsonProducerTask = new JsonProducerTask(projectedColumns, mockMetadata, columnData, true); ObjectNode rootNode = UnitTestUtils.getOutputDataWithMetadata(); Map> values = UnitTestUtils.createTestValues(); Result result = new ResultImpl(values, mockMetadata); @@ -63,8 +62,7 @@ void process_withValidResultListWithMetadata_shouldReturnValidJsonString() { @Test void process_withValidResultList_withPartialProjections_shouldReturnValidJsonLineString() { projectedColumns = UnitTestUtils.getPartialColumnsListWithoutMetadata(); - jsonProducerTask = - new JsonProducerTask(false, projectedColumns, mockMetadata, columnData, false); + jsonProducerTask = new JsonProducerTask(projectedColumns, mockMetadata, columnData, false); ObjectNode rootNode = UnitTestUtils.getPartialOutputDataWithoutMetadata(); Map> values = UnitTestUtils.createTestValues(); Result result = new ResultImpl(values, mockMetadata); @@ -78,8 +76,7 @@ void process_withValidResultList_withPartialProjections_shouldReturnValidJsonLin void process_withValidResultList_withPartialProjectionsAndMetadata_shouldReturnValidJsonLineString() { projectedColumns = UnitTestUtils.getPartialColumnsListWithMetadata(); - jsonProducerTask = - new JsonProducerTask(true, projectedColumns, mockMetadata, columnData, false); + jsonProducerTask = new JsonProducerTask(projectedColumns, mockMetadata, columnData, false); ObjectNode rootNode = UnitTestUtils.getPartialOutputDataWithMetadata(); Map> values = UnitTestUtils.createTestValues(); Result result = new ResultImpl(values, mockMetadata); @@ -93,8 +90,8 @@ void process_withValidResultList_withPartialProjections_shouldReturnValidJsonLin void process_withValidResultListWithNoProjectionSpecifiedWithoutMetadata_shouldReturnValidJsonLineString() { jsonProducerTask = - new JsonProducerTask(false, Collections.emptyList(), mockMetadata, columnData, true); - ObjectNode rootNode = UnitTestUtils.getOutputDataWithoutMetadata(); + new JsonProducerTask(Collections.emptyList(), mockMetadata, columnData, true); + ObjectNode rootNode = UnitTestUtils.getOutputDataWithMetadata(); Map> values = UnitTestUtils.createTestValues(); Result result = new ResultImpl(values, mockMetadata); List resultList = new ArrayList<>(); @@ -107,7 +104,7 @@ void process_withValidResultList_withPartialProjections_shouldReturnValidJsonLin void process_withValidResultListWithNoProjectionSpecifiedWithMetadata_shouldReturnValidJsonLineString() { jsonProducerTask = - new JsonProducerTask(true, Collections.emptyList(), mockMetadata, columnData, true); + new JsonProducerTask(Collections.emptyList(), mockMetadata, columnData, true); ObjectNode rootNode = UnitTestUtils.getOutputDataWithMetadata(); Map> values = UnitTestUtils.createTestValues(); Result result = new ResultImpl(values, mockMetadata); diff --git a/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/producer/ProducerTaskFactoryTest.java b/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/producer/ProducerTaskFactoryTest.java index f97e80a1d1..23fad1121a 100644 --- a/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/producer/ProducerTaskFactoryTest.java +++ b/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataexport/producer/ProducerTaskFactoryTest.java @@ -25,7 +25,7 @@ void setup() { @Test void createProducerTask_withJsonFileFormat_shouldReturnJsonProducerTask() { - ProducerTaskFactory producerTaskFactory = new ProducerTaskFactory(null, false, true); + ProducerTaskFactory producerTaskFactory = new ProducerTaskFactory(null, true); Assertions.assertEquals( JsonProducerTask.class, producerTaskFactory @@ -35,7 +35,7 @@ void createProducerTask_withJsonFileFormat_shouldReturnJsonProducerTask() { @Test void createProducerTask_withJsonLinesFileFormat_shouldReturnJsonLineProducerTask() { - ProducerTaskFactory producerTaskFactory = new ProducerTaskFactory(null, false, false); + ProducerTaskFactory producerTaskFactory = new ProducerTaskFactory(null, false); Assertions.assertEquals( JsonLineProducerTask.class, producerTaskFactory @@ -45,7 +45,7 @@ void createProducerTask_withJsonLinesFileFormat_shouldReturnJsonLineProducerTask @Test void createProducerTask_withCsvFileFormat_shouldReturnCsvProducerTask() { - ProducerTaskFactory producerTaskFactory = new ProducerTaskFactory(",", false, false); + ProducerTaskFactory producerTaskFactory = new ProducerTaskFactory(",", false); Assertions.assertEquals( CsvProducerTask.class, producerTaskFactory From c44db24c6fa92b96953933a33112ca2cdb6ea400 Mon Sep 17 00:00:00 2001 From: Peckstadt Yves Date: Thu, 13 Nov 2025 13:33:20 +0900 Subject: [PATCH 02/10] WPI --- .../core/dataexport/ExportManager.java | 16 -------- .../core/util/TableMetadataUtil.java | 38 ------------------- 2 files changed, 54 deletions(-) diff --git a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/ExportManager.java b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/ExportManager.java index 09755f8c1b..64289a98c5 100644 --- a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/ExportManager.java +++ b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/ExportManager.java @@ -76,7 +76,6 @@ public ExportReport startExport( try { validateExportOptions(exportOptions, tableMetadata); Map dataTypeByColumnName = tableMetadata.getColumnDataTypes(); - handleTransactionMetadata(exportOptions, tableMetadata); processHeader(exportOptions, tableMetadata, writer); ExecutorService executorService = @@ -198,21 +197,6 @@ private void validateExportOptions(ExportOptions exportOptions, TableMetadata ta ExportOptionsValidator.validate(exportOptions, tableMetadata); } - /** - * To update projection columns of export options if include metadata options is enabled - * - * @param exportOptions export options - * @param tableMetadata metadata of the table - */ - private void handleTransactionMetadata(ExportOptions exportOptions, TableMetadata tableMetadata) { - if (!exportOptions.getProjectionColumns().isEmpty()) { - List projectionMetadata = - TableMetadataUtil.populateProjectionsWithMetadata( - tableMetadata, exportOptions.getProjectionColumns()); - exportOptions.setProjectionColumns(projectionMetadata); - } - } - /** * To create a scanner object * diff --git a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/util/TableMetadataUtil.java b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/util/TableMetadataUtil.java index 7cd1834d83..0eb814d408 100644 --- a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/util/TableMetadataUtil.java +++ b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/util/TableMetadataUtil.java @@ -1,12 +1,7 @@ package com.scalar.db.dataloader.core.util; -import com.scalar.db.api.TableMetadata; import com.scalar.db.dataloader.core.Constants; import com.scalar.db.dataloader.core.dataimport.controlfile.ControlFileTable; -import com.scalar.db.transaction.consensuscommit.Attribute; -import com.scalar.db.transaction.consensuscommit.ConsensusCommitUtils; -import java.util.ArrayList; -import java.util.List; import lombok.AccessLevel; import lombok.NoArgsConstructor; @@ -38,37 +33,4 @@ public static String getTableLookupKey(ControlFileTable controlFileTable) { controlFileTable.getNamespace(), controlFileTable.getTable()); } - - /** - * Adds metadata columns to a list of projection columns for a ScalarDB table. - * - * @param tableMetadata The metadata of the ScalarDB table. - * @param projections A list of projection column names. - * @return A new list containing projection columns along with metadata columns. - */ - public static List populateProjectionsWithMetadata( - TableMetadata tableMetadata, List projections) { - List projectionMetadata = new ArrayList<>(); - projections.forEach( - projection -> { - projectionMetadata.add(projection); - if (!isKeyColumn(projection, tableMetadata)) { - projectionMetadata.add(Attribute.BEFORE_PREFIX + projection); - } - }); - projectionMetadata.addAll(ConsensusCommitUtils.getTransactionMetaColumns().keySet()); - return projectionMetadata; - } - - /** - * Checks whether a column is a key column (partition key or clustering key) in the table. - * - * @param column The name of the column to check. - * @param tableMetadata The metadata of the ScalarDB table. - * @return {@code true} if the column is a key column; {@code false} otherwise. - */ - private static boolean isKeyColumn(String column, TableMetadata tableMetadata) { - return tableMetadata.getPartitionKeyNames().contains(column) - || tableMetadata.getClusteringKeyNames().contains(column); - } } From 4989d9df9195ea07b644025cc78b62fbfb850e1c Mon Sep 17 00:00:00 2001 From: Peckstadt Yves Date: Thu, 13 Nov 2025 17:13:51 +0900 Subject: [PATCH 03/10] Log warning if --include-metadata is used --- .../cli/command/dataexport/ExportCommand.java | 27 +++- .../dataexport/ExportCommandOptions.java | 9 +- .../command/dataexport/ExportCommandTest.java | 121 ++++++++++++++++++ .../core/dataexport/ExportManager.java | 1 - .../core/dataexport/CsvExportManagerTest.java | 4 +- 5 files changed, 154 insertions(+), 8 deletions(-) diff --git a/data-loader/cli/src/main/java/com/scalar/db/dataloader/cli/command/dataexport/ExportCommand.java b/data-loader/cli/src/main/java/com/scalar/db/dataloader/cli/command/dataexport/ExportCommand.java index 5677b4601f..89dac04d95 100755 --- a/data-loader/cli/src/main/java/com/scalar/db/dataloader/cli/command/dataexport/ExportCommand.java +++ b/data-loader/cli/src/main/java/com/scalar/db/dataloader/cli/command/dataexport/ExportCommand.java @@ -55,6 +55,7 @@ public class ExportCommand extends ExportCommandOptions implements Callable