You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@metamodel.apache.org by ka...@apache.org on 2019/06/20 10:01:25 UTC

[metamodel] branch master updated (3df020a -> d26ed18)

This is an automated email from the ASF dual-hosted git repository.

kaspersor pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/metamodel.git.


    from 3df020a  Updated CHANGES.md
     new d05ce8a  Adding unit test which proves that querying a CSV file using a SingleLineCsvDataSet in a parallel manner may cause corrupt results.
     new e2b6d37  com.opencsv.CSVParser doesn't provide thread safety, so we need to make sure it is accessed in a thread-safe manner.
     new 89d0198  Did some more structural changes, so we don't need to synchronize access to the CSVParser.
     new 5cb7edf  Refactored based on feedback. Introduced the CsvParserBuilder class to work around the fact that we internally are able to use two different builders which don't share a common super class or interface.
     new 82792a9  Made fields private.
     new f81cd94  Reintroduced unrelated removed newline (as an excuse to trigger the build, because Travis fails)
     new d26ed18  METAMODEL-1213: Updated CHANGES.md

The 7 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 CHANGES.md                                         |   3 +-
 .../org/apache/metamodel/csv/CsvDataContext.java   |  16 +-
 .../org/apache/metamodel/csv/CsvParserBuilder.java |  50 +++
 .../apache/metamodel/csv/SingleLineCsvDataSet.java |  14 +-
 .../apache/metamodel/csv/SingleLineCsvRowTest.java |  30 +-
 csv/src/test/resources/empty_fields.csv            | 500 +++++++++++++++++++++
 6 files changed, 587 insertions(+), 26 deletions(-)
 create mode 100644 csv/src/main/java/org/apache/metamodel/csv/CsvParserBuilder.java
 create mode 100644 csv/src/test/resources/empty_fields.csv


[metamodel] 02/07: com.opencsv.CSVParser doesn't provide thread safety, so we need to make sure it is accessed in a thread-safe manner.

Posted by ka...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

kaspersor pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/metamodel.git

commit e2b6d3773b7ce922bb6123aad93673d0a0a9d5e0
Author: Arjan Seijkens <a....@quadient.com>
AuthorDate: Wed Jun 12 10:31:20 2019 +0200

    com.opencsv.CSVParser doesn't provide thread safety, so we need to make sure it is accessed in a thread-safe manner.
---
 csv/src/main/java/org/apache/metamodel/csv/SingleLineCsvRow.java | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/csv/src/main/java/org/apache/metamodel/csv/SingleLineCsvRow.java b/csv/src/main/java/org/apache/metamodel/csv/SingleLineCsvRow.java
index fe9fda5..64ff013 100644
--- a/csv/src/main/java/org/apache/metamodel/csv/SingleLineCsvRow.java
+++ b/csv/src/main/java/org/apache/metamodel/csv/SingleLineCsvRow.java
@@ -29,6 +29,8 @@ import org.apache.metamodel.schema.Column;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.opencsv.ICSVParser;
+
 /**
  * Specialized row implementation for single-line CSV values
  */
@@ -99,7 +101,10 @@ final class SingleLineCsvRow extends AbstractRow {
 
     private String[] parseLine() {
         try {
-            return _dataSet.getCsvParser().parseLine(_line);
+            final ICSVParser csvParser = _dataSet.getCsvParser();
+            synchronized (csvParser) {
+                return csvParser.parseLine(_line);
+            }
         } catch (IOException e) {
             if (_failOnInconsistentRowLength) {
                 throw new MetaModelException("Failed to parse CSV line no. " + _rowNumber + ": " + _line, e);


[metamodel] 06/07: Reintroduced unrelated removed newline (as an excuse to trigger the build, because Travis fails)

Posted by ka...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

kaspersor pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/metamodel.git

commit f81cd945611fc427bab68efb11bd65b9618f96c0
Author: Arjan Seijkens <a....@quadient.com>
AuthorDate: Wed Jun 19 10:09:27 2019 +0200

    Reintroduced unrelated removed newline (as an excuse to trigger the build, because Travis fails)
---
 csv/src/main/java/org/apache/metamodel/csv/SingleLineCsvDataSet.java | 1 +
 1 file changed, 1 insertion(+)

diff --git a/csv/src/main/java/org/apache/metamodel/csv/SingleLineCsvDataSet.java b/csv/src/main/java/org/apache/metamodel/csv/SingleLineCsvDataSet.java
index a479b2a..7ed159b 100644
--- a/csv/src/main/java/org/apache/metamodel/csv/SingleLineCsvDataSet.java
+++ b/csv/src/main/java/org/apache/metamodel/csv/SingleLineCsvDataSet.java
@@ -128,4 +128,5 @@ final class SingleLineCsvDataSet extends AbstractDataSet {
     public Row getRow() {
         return _row;
     }
+
 }


[metamodel] 04/07: Refactored based on feedback. Introduced the CsvParserBuilder class to work around the fact that we internally are able to use two different builders which don't share a common super class or interface.

Posted by ka...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

kaspersor pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/metamodel.git

commit 5cb7edf0dbc5234a203c607a81be9e164059cc20
Author: Arjan Seijkens <a....@quadient.com>
AuthorDate: Fri Jun 14 14:49:34 2019 +0200

    Refactored based on feedback. Introduced the CsvParserBuilder class to work around the fact that we internally are able to use two different builders which don't share a common super class or interface.
---
 .../org/apache/metamodel/csv/CsvConfiguration.java | 17 --------
 .../org/apache/metamodel/csv/CsvDataContext.java   |  2 +-
 .../org/apache/metamodel/csv/CsvParserBuilder.java | 50 ++++++++++++++++++++++
 .../apache/metamodel/csv/SingleLineCsvDataSet.java | 48 ++-------------------
 .../apache/metamodel/csv/SingleLineCsvRowTest.java |  6 +--
 5 files changed, 56 insertions(+), 67 deletions(-)

diff --git a/csv/src/main/java/org/apache/metamodel/csv/CsvConfiguration.java b/csv/src/main/java/org/apache/metamodel/csv/CsvConfiguration.java
index d9f0f72..332ef4b 100644
--- a/csv/src/main/java/org/apache/metamodel/csv/CsvConfiguration.java
+++ b/csv/src/main/java/org/apache/metamodel/csv/CsvConfiguration.java
@@ -26,10 +26,6 @@ import org.apache.metamodel.schema.naming.ColumnNamingStrategy;
 import org.apache.metamodel.util.BaseObject;
 import org.apache.metamodel.util.FileHelper;
 
-import com.opencsv.CSVParserBuilder;
-import com.opencsv.ICSVParser;
-import com.opencsv.RFC4180ParserBuilder;
-
 /**
  * Represents the configuration for reading/parsing CSV files.
  */
@@ -199,17 +195,4 @@ public final class CsvConfiguration extends BaseObject implements Serializable {
                 + ", separatorChar=" + separatorChar + ", quoteChar=" + quoteChar + ", escapeChar=" + escapeChar
                 + ", failOnInconsistentRowLength=" + failOnInconsistentRowLength + "]";
     }
-    
-    public ICSVParser createParser() {
-        if (getEscapeChar() == getQuoteChar()) {
-            return new RFC4180ParserBuilder().withSeparator(getSeparatorChar()).withQuoteChar(getQuoteChar()).build();
-        } else {
-            return new CSVParserBuilder()
-                    .withSeparator(getSeparatorChar())
-                    .withQuoteChar(getQuoteChar())
-                    .withEscapeChar(getEscapeChar())
-                    .build();
-        }
-    }
-
 }
diff --git a/csv/src/main/java/org/apache/metamodel/csv/CsvDataContext.java b/csv/src/main/java/org/apache/metamodel/csv/CsvDataContext.java
index 515ebdd..5f50932 100644
--- a/csv/src/main/java/org/apache/metamodel/csv/CsvDataContext.java
+++ b/csv/src/main/java/org/apache/metamodel/csv/CsvDataContext.java
@@ -301,7 +301,7 @@ public final class CsvDataContext extends QueryPostprocessDataContext implements
     }
 
     private ICSVParser createParser() {
-        return _configuration.createParser();
+        return new CsvParserBuilder(_configuration).build();
     }
 
     protected CSVReader createCsvReader(int skipLines) {
diff --git a/csv/src/main/java/org/apache/metamodel/csv/CsvParserBuilder.java b/csv/src/main/java/org/apache/metamodel/csv/CsvParserBuilder.java
new file mode 100644
index 0000000..d238098
--- /dev/null
+++ b/csv/src/main/java/org/apache/metamodel/csv/CsvParserBuilder.java
@@ -0,0 +1,50 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.metamodel.csv;
+
+import com.opencsv.CSVParserBuilder;
+import com.opencsv.ICSVParser;
+import com.opencsv.RFC4180ParserBuilder;
+
+class CsvParserBuilder {
+    final CSVParserBuilder _csvParserBuilder;
+    final RFC4180ParserBuilder _rfc4180ParserBuilder;
+
+    CsvParserBuilder(final CsvConfiguration csvConfiguration) {
+        if (csvConfiguration.getEscapeChar() == csvConfiguration.getQuoteChar()) {
+            _csvParserBuilder = null;
+            _rfc4180ParserBuilder = new RFC4180ParserBuilder()
+                    .withSeparator(csvConfiguration.getSeparatorChar())
+                    .withQuoteChar(csvConfiguration.getQuoteChar());
+        } else {
+            _csvParserBuilder = new CSVParserBuilder()
+                    .withSeparator(csvConfiguration.getSeparatorChar())
+                    .withQuoteChar(csvConfiguration.getQuoteChar())
+                    .withEscapeChar(csvConfiguration.getEscapeChar());
+            _rfc4180ParserBuilder = null;
+        }
+    }
+    
+    ICSVParser build() {
+        if (_csvParserBuilder == null) {
+            return _rfc4180ParserBuilder.build();
+        }
+        return _csvParserBuilder.build(); 
+    }
+}
diff --git a/csv/src/main/java/org/apache/metamodel/csv/SingleLineCsvDataSet.java b/csv/src/main/java/org/apache/metamodel/csv/SingleLineCsvDataSet.java
index c734060..a479b2a 100644
--- a/csv/src/main/java/org/apache/metamodel/csv/SingleLineCsvDataSet.java
+++ b/csv/src/main/java/org/apache/metamodel/csv/SingleLineCsvDataSet.java
@@ -41,59 +41,23 @@ import com.opencsv.ICSVParser;
 final class SingleLineCsvDataSet extends AbstractDataSet {
 
     private final BufferedReader _reader;
-    private final ICSVParser _csvParser;
     private final int _columnsInTable;
     private final boolean _failOnInconsistentRowLength;
-    private final CsvConfiguration _csvConfiguration;
+    private final CsvParserBuilder _csvParserBuilder;
     
     private volatile int _rowNumber;
     private volatile Integer _rowsRemaining;
     private volatile Row _row;
 
-    /**
-     * @param reader
-     * @param csvParser
-     * @param columns
-     * @param maxRows
-     * @param columnsInTable
-     * @param failOnInconsistentRowLength
-     * 
-     * @deprecated When instantiating a {@link SingleLineCsvDataSet} using this constructor the {@link ICSVParser} can
-     *             be reused in different threads in a parallel manner which is not promised to work by the
-     *             {@link ICSVParser}. Use
-     *             {@link #SingleLineCsvDataSet(BufferedReader, CsvConfiguration, List, Integer, int, boolean)} instead.
-     */
-    @Deprecated
-    public SingleLineCsvDataSet(BufferedReader reader, ICSVParser csvParser, List<Column> columns, Integer maxRows,
-            int columnsInTable, boolean failOnInconsistentRowLength) {
-        this(reader, csvParser, columns, maxRows, columnsInTable, failOnInconsistentRowLength, null);
-    }
-
-    /**
-     * @param reader
-     * @param columns
-     * @param maxRows
-     * @param columnsInTable
-     * @param csvParser
-     * @param failOnInconsistentRowLength
-     */
     public SingleLineCsvDataSet(final BufferedReader reader, final List<Column> columns, final Integer maxRows,
             final int columnsInTable, final CsvConfiguration csvConfiguration) {
-        this(reader, null, columns, maxRows, columnsInTable, csvConfiguration.isFailOnInconsistentRowLength(),
-                csvConfiguration);
-    }
-
-    private SingleLineCsvDataSet(final BufferedReader reader, final ICSVParser csvParser, final List<Column> columns,
-            final Integer maxRows, final int columnsInTable, final boolean failOnInconsistentRowLength,
-            final CsvConfiguration csvConfiguration) {
         super(columns.stream().map(SelectItem::new).collect(Collectors.toList()));
         _reader = reader;
-        _csvParser = csvParser;
         _columnsInTable = columnsInTable;
-        _failOnInconsistentRowLength = failOnInconsistentRowLength;
+        _failOnInconsistentRowLength = csvConfiguration.isFailOnInconsistentRowLength();
         _rowNumber = 0;
         _rowsRemaining = maxRows;
-        _csvConfiguration = csvConfiguration;
+        _csvParserBuilder = new CsvParserBuilder(csvConfiguration);
     }
 
     @Override
@@ -131,10 +95,7 @@ final class SingleLineCsvDataSet extends AbstractDataSet {
     }
 
     protected ICSVParser getCsvParser() {
-        if (_csvConfiguration != null) {
-            return _csvConfiguration.createParser();
-        }
-        return _csvParser;
+        return _csvParserBuilder.build();
     }
 
     public boolean nextInternal() {
@@ -167,5 +128,4 @@ final class SingleLineCsvDataSet extends AbstractDataSet {
     public Row getRow() {
         return _row;
     }
-
 }
diff --git a/csv/src/test/java/org/apache/metamodel/csv/SingleLineCsvRowTest.java b/csv/src/test/java/org/apache/metamodel/csv/SingleLineCsvRowTest.java
index a2f0eea..6f36d21 100644
--- a/csv/src/test/java/org/apache/metamodel/csv/SingleLineCsvRowTest.java
+++ b/csv/src/test/java/org/apache/metamodel/csv/SingleLineCsvRowTest.java
@@ -36,8 +36,6 @@ import org.apache.metamodel.util.FileResource;
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.opencsv.CSVParser;
-
 public class SingleLineCsvRowTest {
 
     @Test
@@ -45,9 +43,7 @@ public class SingleLineCsvRowTest {
         final List<Column> columns = new ArrayList<>();
         columns.add(new MutableColumn("1"));
         columns.add(new MutableColumn("2"));
-        CSVParser csvParser = new CSVParser();
-        @SuppressWarnings("deprecation")
-        final SingleLineCsvDataSet dataSet = new SingleLineCsvDataSet(null, csvParser, columns, null, 2, false);
+        final SingleLineCsvDataSet dataSet = new SingleLineCsvDataSet(null, columns, null, 2, new CsvConfiguration());
         final SingleLineCsvRow originalRow = new SingleLineCsvRow(dataSet, "foo,bar", 2, false, 1);
 
         final ByteArrayOutputStream bytes = new ByteArrayOutputStream();


[metamodel] 03/07: Did some more structural changes, so we don't need to synchronize access to the CSVParser.

Posted by ka...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

kaspersor pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/metamodel.git

commit 89d01981394b9ca187a09f105339ff4cd9abf3b3
Author: Arjan Seijkens <a....@quadient.com>
AuthorDate: Fri Jun 14 11:26:04 2019 +0200

    Did some more structural changes, so we don't need to synchronize access to the CSVParser.
---
 .../org/apache/metamodel/csv/CsvConfiguration.java | 17 +++++++++
 .../org/apache/metamodel/csv/CsvDataContext.java   | 16 +-------
 .../apache/metamodel/csv/SingleLineCsvDataSet.java | 43 +++++++++++++++++++++-
 .../org/apache/metamodel/csv/SingleLineCsvRow.java |  7 +---
 .../apache/metamodel/csv/SingleLineCsvRowTest.java |  4 +-
 5 files changed, 63 insertions(+), 24 deletions(-)

diff --git a/csv/src/main/java/org/apache/metamodel/csv/CsvConfiguration.java b/csv/src/main/java/org/apache/metamodel/csv/CsvConfiguration.java
index 332ef4b..d9f0f72 100644
--- a/csv/src/main/java/org/apache/metamodel/csv/CsvConfiguration.java
+++ b/csv/src/main/java/org/apache/metamodel/csv/CsvConfiguration.java
@@ -26,6 +26,10 @@ import org.apache.metamodel.schema.naming.ColumnNamingStrategy;
 import org.apache.metamodel.util.BaseObject;
 import org.apache.metamodel.util.FileHelper;
 
+import com.opencsv.CSVParserBuilder;
+import com.opencsv.ICSVParser;
+import com.opencsv.RFC4180ParserBuilder;
+
 /**
  * Represents the configuration for reading/parsing CSV files.
  */
@@ -195,4 +199,17 @@ public final class CsvConfiguration extends BaseObject implements Serializable {
                 + ", separatorChar=" + separatorChar + ", quoteChar=" + quoteChar + ", escapeChar=" + escapeChar
                 + ", failOnInconsistentRowLength=" + failOnInconsistentRowLength + "]";
     }
+    
+    public ICSVParser createParser() {
+        if (getEscapeChar() == getQuoteChar()) {
+            return new RFC4180ParserBuilder().withSeparator(getSeparatorChar()).withQuoteChar(getQuoteChar()).build();
+        } else {
+            return new CSVParserBuilder()
+                    .withSeparator(getSeparatorChar())
+                    .withQuoteChar(getQuoteChar())
+                    .withEscapeChar(getEscapeChar())
+                    .build();
+        }
+    }
+
 }
diff --git a/csv/src/main/java/org/apache/metamodel/csv/CsvDataContext.java b/csv/src/main/java/org/apache/metamodel/csv/CsvDataContext.java
index 34b25fa..515ebdd 100644
--- a/csv/src/main/java/org/apache/metamodel/csv/CsvDataContext.java
+++ b/csv/src/main/java/org/apache/metamodel/csv/CsvDataContext.java
@@ -48,10 +48,8 @@ import org.apache.metamodel.util.UrlResource;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.opencsv.CSVParserBuilder;
 import com.opencsv.CSVReader;
 import com.opencsv.ICSVParser;
-import com.opencsv.RFC4180ParserBuilder;
 
 /**
  * DataContext implementation for reading CSV files.
@@ -299,21 +297,11 @@ public final class CsvDataContext extends QueryPostprocessDataContext implements
             return new CsvDataSet(csvReader, columns, maxRowsOrNull, columnCount, failOnInconsistentRowLength);
         }
 
-        return new SingleLineCsvDataSet(reader, createParser(), columns, maxRowsOrNull, columnCount,
-                failOnInconsistentRowLength);
+        return new SingleLineCsvDataSet(reader, columns, maxRowsOrNull, columnCount, _configuration);
     }
 
     private ICSVParser createParser() {
-        final ICSVParser parser;
-        if (_configuration.getEscapeChar() == _configuration.getQuoteChar()) {
-            parser = new RFC4180ParserBuilder().withSeparator(_configuration.getSeparatorChar())
-                    .withQuoteChar(_configuration.getQuoteChar()).build();
-        } else {
-            parser = new CSVParserBuilder().withSeparator(_configuration.getSeparatorChar())
-                    .withQuoteChar(_configuration.getQuoteChar()).withEscapeChar(_configuration.getEscapeChar())
-                    .build();
-        }
-        return parser;
+        return _configuration.createParser();
     }
 
     protected CSVReader createCsvReader(int skipLines) {
diff --git a/csv/src/main/java/org/apache/metamodel/csv/SingleLineCsvDataSet.java b/csv/src/main/java/org/apache/metamodel/csv/SingleLineCsvDataSet.java
index 4b24892..c734060 100644
--- a/csv/src/main/java/org/apache/metamodel/csv/SingleLineCsvDataSet.java
+++ b/csv/src/main/java/org/apache/metamodel/csv/SingleLineCsvDataSet.java
@@ -44,13 +44,48 @@ final class SingleLineCsvDataSet extends AbstractDataSet {
     private final ICSVParser _csvParser;
     private final int _columnsInTable;
     private final boolean _failOnInconsistentRowLength;
-
+    private final CsvConfiguration _csvConfiguration;
+    
     private volatile int _rowNumber;
     private volatile Integer _rowsRemaining;
     private volatile Row _row;
 
+    /**
+     * @param reader
+     * @param csvParser
+     * @param columns
+     * @param maxRows
+     * @param columnsInTable
+     * @param failOnInconsistentRowLength
+     * 
+     * @deprecated When instantiating a {@link SingleLineCsvDataSet} using this constructor the {@link ICSVParser} can
+     *             be reused in different threads in a parallel manner which is not promised to work by the
+     *             {@link ICSVParser}. Use
+     *             {@link #SingleLineCsvDataSet(BufferedReader, CsvConfiguration, List, Integer, int, boolean)} instead.
+     */
+    @Deprecated
     public SingleLineCsvDataSet(BufferedReader reader, ICSVParser csvParser, List<Column> columns, Integer maxRows,
-                                int columnsInTable, boolean failOnInconsistentRowLength) {
+            int columnsInTable, boolean failOnInconsistentRowLength) {
+        this(reader, csvParser, columns, maxRows, columnsInTable, failOnInconsistentRowLength, null);
+    }
+
+    /**
+     * @param reader
+     * @param columns
+     * @param maxRows
+     * @param columnsInTable
+     * @param csvParser
+     * @param failOnInconsistentRowLength
+     */
+    public SingleLineCsvDataSet(final BufferedReader reader, final List<Column> columns, final Integer maxRows,
+            final int columnsInTable, final CsvConfiguration csvConfiguration) {
+        this(reader, null, columns, maxRows, columnsInTable, csvConfiguration.isFailOnInconsistentRowLength(),
+                csvConfiguration);
+    }
+
+    private SingleLineCsvDataSet(final BufferedReader reader, final ICSVParser csvParser, final List<Column> columns,
+            final Integer maxRows, final int columnsInTable, final boolean failOnInconsistentRowLength,
+            final CsvConfiguration csvConfiguration) {
         super(columns.stream().map(SelectItem::new).collect(Collectors.toList()));
         _reader = reader;
         _csvParser = csvParser;
@@ -58,6 +93,7 @@ final class SingleLineCsvDataSet extends AbstractDataSet {
         _failOnInconsistentRowLength = failOnInconsistentRowLength;
         _rowNumber = 0;
         _rowsRemaining = maxRows;
+        _csvConfiguration = csvConfiguration;
     }
 
     @Override
@@ -95,6 +131,9 @@ final class SingleLineCsvDataSet extends AbstractDataSet {
     }
 
     protected ICSVParser getCsvParser() {
+        if (_csvConfiguration != null) {
+            return _csvConfiguration.createParser();
+        }
         return _csvParser;
     }
 
diff --git a/csv/src/main/java/org/apache/metamodel/csv/SingleLineCsvRow.java b/csv/src/main/java/org/apache/metamodel/csv/SingleLineCsvRow.java
index 64ff013..fe9fda5 100644
--- a/csv/src/main/java/org/apache/metamodel/csv/SingleLineCsvRow.java
+++ b/csv/src/main/java/org/apache/metamodel/csv/SingleLineCsvRow.java
@@ -29,8 +29,6 @@ import org.apache.metamodel.schema.Column;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.opencsv.ICSVParser;
-
 /**
  * Specialized row implementation for single-line CSV values
  */
@@ -101,10 +99,7 @@ final class SingleLineCsvRow extends AbstractRow {
 
     private String[] parseLine() {
         try {
-            final ICSVParser csvParser = _dataSet.getCsvParser();
-            synchronized (csvParser) {
-                return csvParser.parseLine(_line);
-            }
+            return _dataSet.getCsvParser().parseLine(_line);
         } catch (IOException e) {
             if (_failOnInconsistentRowLength) {
                 throw new MetaModelException("Failed to parse CSV line no. " + _rowNumber + ": " + _line, e);
diff --git a/csv/src/test/java/org/apache/metamodel/csv/SingleLineCsvRowTest.java b/csv/src/test/java/org/apache/metamodel/csv/SingleLineCsvRowTest.java
index cc02ea4..a2f0eea 100644
--- a/csv/src/test/java/org/apache/metamodel/csv/SingleLineCsvRowTest.java
+++ b/csv/src/test/java/org/apache/metamodel/csv/SingleLineCsvRowTest.java
@@ -46,6 +46,7 @@ public class SingleLineCsvRowTest {
         columns.add(new MutableColumn("1"));
         columns.add(new MutableColumn("2"));
         CSVParser csvParser = new CSVParser();
+        @SuppressWarnings("deprecation")
         final SingleLineCsvDataSet dataSet = new SingleLineCsvDataSet(null, csvParser, columns, null, 2, false);
         final SingleLineCsvRow originalRow = new SingleLineCsvRow(dataSet, "foo,bar", 2, false, 1);
 
@@ -75,10 +76,9 @@ public class SingleLineCsvRowTest {
         columns.add(new MutableColumn("h").setColumnNumber(8));
         columns.add(new MutableColumn("J").setColumnNumber(10));
 
-        final CSVParser csvParser = new CSVParser();
         try (final DataSet dataSet = new SingleLineCsvDataSet(FileHelper
                 .getBufferedReader(new FileResource("src/test/resources/empty_fields.csv").read(),
-                        FileHelper.UTF_8_CHARSET), csvParser, columns, null, 11, false)) {
+                        FileHelper.UTF_8_CHARSET), columns, null, 11, new CsvConfiguration())) {
             dataSet.toRows().parallelStream().forEach(row -> {
                 for (int i = 0; i < 5; i++) {
                     assertEquals("", row.getValue(i));


[metamodel] 07/07: METAMODEL-1213: Updated CHANGES.md

Posted by ka...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

kaspersor pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/metamodel.git

commit d26ed18ff8ca8592380ccd29a285a7351488b9af
Author: Kasper Sørensen <i....@gmail.com>
AuthorDate: Thu Jun 20 12:01:13 2019 +0200

    METAMODEL-1213: Updated CHANGES.md
---
 CHANGES.md | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/CHANGES.md b/CHANGES.md
index b786b88..8fc5926 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,6 +1,7 @@
 ### Apache MetaModel _WIP_
 
- * [METAMODEL-1211] - Fix bug of getting all SelectItems when performing nested loop joins.
+ * [METAMODEL-1213] - Fixed concurrency bug in single-line CSV parallel reader.
+ * [METAMODEL-1211] - Fixed bug of getting all SelectItems when performing nested loop joins.
  * Improved HBase query building by scanning columns instead of column families.
 
 ### Apache MetaModel 5.3.0


[metamodel] 01/07: Adding unit test which proves that querying a CSV file using a SingleLineCsvDataSet in a parallel manner may cause corrupt results.

Posted by ka...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

kaspersor pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/metamodel.git

commit d05ce8a24cded3e96a1b56f3ce1a094cc59e31e7
Author: Arjan Seijkens <a....@quadient.com>
AuthorDate: Wed Jun 12 10:13:36 2019 +0200

    Adding unit test which proves that querying a CSV file using a SingleLineCsvDataSet in a parallel manner may cause corrupt results.
---
 .../apache/metamodel/csv/SingleLineCsvRowTest.java |  26 ++
 csv/src/test/resources/empty_fields.csv            | 500 +++++++++++++++++++++
 2 files changed, 526 insertions(+)

diff --git a/csv/src/test/java/org/apache/metamodel/csv/SingleLineCsvRowTest.java b/csv/src/test/java/org/apache/metamodel/csv/SingleLineCsvRowTest.java
index 28c640f..cc02ea4 100644
--- a/csv/src/test/java/org/apache/metamodel/csv/SingleLineCsvRowTest.java
+++ b/csv/src/test/java/org/apache/metamodel/csv/SingleLineCsvRowTest.java
@@ -18,6 +18,8 @@
  */
 package org.apache.metamodel.csv;
 
+import static org.junit.Assert.assertEquals;
+
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.ObjectInputStream;
@@ -25,9 +27,12 @@ import java.io.ObjectOutputStream;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.metamodel.data.DataSet;
 import org.apache.metamodel.data.Row;
 import org.apache.metamodel.schema.Column;
 import org.apache.metamodel.schema.MutableColumn;
+import org.apache.metamodel.util.FileHelper;
+import org.apache.metamodel.util.FileResource;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -60,4 +65,25 @@ public class SingleLineCsvRowTest {
         final Object[] values2 = deserializedRow.getValues();
         Assert.assertArrayEquals(values1, values2);
     }
+
+    @Test
+    public void testConcurrentAccess() throws Exception {
+        final List<Column> columns = new ArrayList<>();
+        columns.add(new MutableColumn("b").setColumnNumber(2));
+        columns.add(new MutableColumn("d").setColumnNumber(4));
+        columns.add(new MutableColumn("f").setColumnNumber(6));
+        columns.add(new MutableColumn("h").setColumnNumber(8));
+        columns.add(new MutableColumn("J").setColumnNumber(10));
+
+        final CSVParser csvParser = new CSVParser();
+        try (final DataSet dataSet = new SingleLineCsvDataSet(FileHelper
+                .getBufferedReader(new FileResource("src/test/resources/empty_fields.csv").read(),
+                        FileHelper.UTF_8_CHARSET), csvParser, columns, null, 11, false)) {
+            dataSet.toRows().parallelStream().forEach(row -> {
+                for (int i = 0; i < 5; i++) {
+                    assertEquals("", row.getValue(i));
+                }
+            });
+        }
+    }
 }
diff --git a/csv/src/test/resources/empty_fields.csv b/csv/src/test/resources/empty_fields.csv
new file mode 100644
index 0000000..71f6af7
--- /dev/null
+++ b/csv/src/test/resources/empty_fields.csv
@@ -0,0 +1,500 @@
+"4","dummy","","dummy","","dummy","","dummy","","dummy",""
+"1","dummy","","dummy","","dummy","","dummy","","dummy",""
+"6","dummy","","dummy","","dummy","","dummy","","dummy",""
+"5","dummy","","dummy","","dummy","","dummy","","dummy",""
+"7","dummy","","dummy","","dummy","","dummy","","dummy",""
+"8","dummy","","dummy","","dummy","","dummy","","dummy",""
+"9","dummy","","dummy","","dummy","","dummy","","dummy",""
+"10","dummy","","dummy","","dummy","","dummy","","dummy",""
+"11","dummy","","dummy","","dummy","","dummy","","dummy",""
+"12","dummy","","dummy","","dummy","","dummy","","dummy",""
+"13","dummy","","dummy","","dummy","","dummy","","dummy",""
+"14","dummy","","dummy","","dummy","","dummy","","dummy",""
+"15","dummy","","dummy","","dummy","","dummy","","dummy",""
+"16","dummy","","dummy","","dummy","","dummy","","dummy",""
+"17","dummy","","dummy","","dummy","","dummy","","dummy",""
+"18","dummy","","dummy","","dummy","","dummy","","dummy",""
+"19","dummy","","dummy","","dummy","","dummy","","dummy",""
+"20","dummy","","dummy","","dummy","","dummy","","dummy",""
+"21","dummy","","dummy","","dummy","","dummy","","dummy",""
+"22","dummy","","dummy","","dummy","","dummy","","dummy",""
+"23","dummy","","dummy","","dummy","","dummy","","dummy",""
+"24","dummy","","dummy","","dummy","","dummy","","dummy",""
+"25","dummy","","dummy","","dummy","","dummy","","dummy",""
+"26","dummy","","dummy","","dummy","","dummy","","dummy",""
+"27","dummy","","dummy","","dummy","","dummy","","dummy",""
+"29","dummy","","dummy","","dummy","","dummy","","dummy",""
+"28","dummy","","dummy","","dummy","","dummy","","dummy",""
+"30","dummy","","dummy","","dummy","","dummy","","dummy",""
+"3","dummy","","dummy","","dummy","","dummy","","dummy",""
+"2","dummy","","dummy","","dummy","","dummy","","dummy",""
+"31","dummy","","dummy","","dummy","","dummy","","dummy",""
+"32","dummy","","dummy","","dummy","","dummy","","dummy",""
+"33","dummy","","dummy","","dummy","","dummy","","dummy",""
+"34","dummy","","dummy","","dummy","","dummy","","dummy",""
+"35","dummy","","dummy","","dummy","","dummy","","dummy",""
+"36","dummy","","dummy","","dummy","","dummy","","dummy",""
+"37","dummy","","dummy","","dummy","","dummy","","dummy",""
+"38","dummy","","dummy","","dummy","","dummy","","dummy",""
+"39","dummy","","dummy","","dummy","","dummy","","dummy",""
+"40","dummy","","dummy","","dummy","","dummy","","dummy",""
+"41","dummy","","dummy","","dummy","","dummy","","dummy",""
+"42","dummy","","dummy","","dummy","","dummy","","dummy",""
+"43","dummy","","dummy","","dummy","","dummy","","dummy",""
+"44","dummy","","dummy","","dummy","","dummy","","dummy",""
+"45","dummy","","dummy","","dummy","","dummy","","dummy",""
+"46","dummy","","dummy","","dummy","","dummy","","dummy",""
+"47","dummy","","dummy","","dummy","","dummy","","dummy",""
+"48","dummy","","dummy","","dummy","","dummy","","dummy",""
+"49","dummy","","dummy","","dummy","","dummy","","dummy",""
+"50","dummy","","dummy","","dummy","","dummy","","dummy",""
+"51","dummy","","dummy","","dummy","","dummy","","dummy",""
+"52","dummy","","dummy","","dummy","","dummy","","dummy",""
+"53","dummy","","dummy","","dummy","","dummy","","dummy",""
+"54","dummy","","dummy","","dummy","","dummy","","dummy",""
+"55","dummy","","dummy","","dummy","","dummy","","dummy",""
+"56","dummy","","dummy","","dummy","","dummy","","dummy",""
+"57","dummy","","dummy","","dummy","","dummy","","dummy",""
+"58","dummy","","dummy","","dummy","","dummy","","dummy",""
+"59","dummy","","dummy","","dummy","","dummy","","dummy",""
+"60","dummy","","dummy","","dummy","","dummy","","dummy",""
+"61","dummy","","dummy","","dummy","","dummy","","dummy",""
+"62","dummy","","dummy","","dummy","","dummy","","dummy",""
+"63","dummy","","dummy","","dummy","","dummy","","dummy",""
+"64","dummy","","dummy","","dummy","","dummy","","dummy",""
+"65","dummy","","dummy","","dummy","","dummy","","dummy",""
+"66","dummy","","dummy","","dummy","","dummy","","dummy",""
+"67","dummy","","dummy","","dummy","","dummy","","dummy",""
+"68","dummy","","dummy","","dummy","","dummy","","dummy",""
+"69","dummy","","dummy","","dummy","","dummy","","dummy",""
+"70","dummy","","dummy","","dummy","","dummy","","dummy",""
+"71","dummy","","dummy","","dummy","","dummy","","dummy",""
+"72","dummy","","dummy","","dummy","","dummy","","dummy",""
+"73","dummy","","dummy","","dummy","","dummy","","dummy",""
+"74","dummy","","dummy","","dummy","","dummy","","dummy",""
+"75","dummy","","dummy","","dummy","","dummy","","dummy",""
+"76","dummy","","dummy","","dummy","","dummy","","dummy",""
+"77","dummy","","dummy","","dummy","","dummy","","dummy",""
+"78","dummy","","dummy","","dummy","","dummy","","dummy",""
+"79","dummy","","dummy","","dummy","","dummy","","dummy",""
+"80","dummy","","dummy","","dummy","","dummy","","dummy",""
+"81","dummy","","dummy","","dummy","","dummy","","dummy",""
+"82","dummy","","dummy","","dummy","","dummy","","dummy",""
+"83","dummy","","dummy","","dummy","","dummy","","dummy",""
+"84","dummy","","dummy","","dummy","","dummy","","dummy",""
+"85","dummy","","dummy","","dummy","","dummy","","dummy",""
+"86","dummy","","dummy","","dummy","","dummy","","dummy",""
+"87","dummy","","dummy","","dummy","","dummy","","dummy",""
+"88","dummy","","dummy","","dummy","","dummy","","dummy",""
+"89","dummy","","dummy","","dummy","","dummy","","dummy",""
+"90","dummy","","dummy","","dummy","","dummy","","dummy",""
+"91","dummy","","dummy","","dummy","","dummy","","dummy",""
+"92","dummy","","dummy","","dummy","","dummy","","dummy",""
+"93","dummy","","dummy","","dummy","","dummy","","dummy",""
+"94","dummy","","dummy","","dummy","","dummy","","dummy",""
+"95","dummy","","dummy","","dummy","","dummy","","dummy",""
+"96","dummy","","dummy","","dummy","","dummy","","dummy",""
+"97","dummy","","dummy","","dummy","","dummy","","dummy",""
+"98","dummy","","dummy","","dummy","","dummy","","dummy",""
+"99","dummy","","dummy","","dummy","","dummy","","dummy",""
+"100","dummy","","dummy","","dummy","","dummy","","dummy",""
+"101","dummy","","dummy","","dummy","","dummy","","dummy",""
+"102","dummy","","dummy","","dummy","","dummy","","dummy",""
+"103","dummy","","dummy","","dummy","","dummy","","dummy",""
+"104","dummy","","dummy","","dummy","","dummy","","dummy",""
+"105","dummy","","dummy","","dummy","","dummy","","dummy",""
+"106","dummy","","dummy","","dummy","","dummy","","dummy",""
+"107","dummy","","dummy","","dummy","","dummy","","dummy",""
+"108","dummy","","dummy","","dummy","","dummy","","dummy",""
+"109","dummy","","dummy","","dummy","","dummy","","dummy",""
+"110","dummy","","dummy","","dummy","","dummy","","dummy",""
+"111","dummy","","dummy","","dummy","","dummy","","dummy",""
+"112","dummy","","dummy","","dummy","","dummy","","dummy",""
+"113","dummy","","dummy","","dummy","","dummy","","dummy",""
+"114","dummy","","dummy","","dummy","","dummy","","dummy",""
+"115","dummy","","dummy","","dummy","","dummy","","dummy",""
+"116","dummy","","dummy","","dummy","","dummy","","dummy",""
+"117","dummy","","dummy","","dummy","","dummy","","dummy",""
+"118","dummy","","dummy","","dummy","","dummy","","dummy",""
+"119","dummy","","dummy","","dummy","","dummy","","dummy",""
+"120","dummy","","dummy","","dummy","","dummy","","dummy",""
+"121","dummy","","dummy","","dummy","","dummy","","dummy",""
+"122","dummy","","dummy","","dummy","","dummy","","dummy",""
+"123","dummy","","dummy","","dummy","","dummy","","dummy",""
+"124","dummy","","dummy","","dummy","","dummy","","dummy",""
+"125","dummy","","dummy","","dummy","","dummy","","dummy",""
+"126","dummy","","dummy","","dummy","","dummy","","dummy",""
+"127","dummy","","dummy","","dummy","","dummy","","dummy",""
+"128","dummy","","dummy","","dummy","","dummy","","dummy",""
+"129","dummy","","dummy","","dummy","","dummy","","dummy",""
+"130","dummy","","dummy","","dummy","","dummy","","dummy",""
+"131","dummy","","dummy","","dummy","","dummy","","dummy",""
+"132","dummy","","dummy","","dummy","","dummy","","dummy",""
+"133","dummy","","dummy","","dummy","","dummy","","dummy",""
+"134","dummy","","dummy","","dummy","","dummy","","dummy",""
+"135","dummy","","dummy","","dummy","","dummy","","dummy",""
+"136","dummy","","dummy","","dummy","","dummy","","dummy",""
+"137","dummy","","dummy","","dummy","","dummy","","dummy",""
+"138","dummy","","dummy","","dummy","","dummy","","dummy",""
+"139","dummy","","dummy","","dummy","","dummy","","dummy",""
+"140","dummy","","dummy","","dummy","","dummy","","dummy",""
+"142","dummy","","dummy","","dummy","","dummy","","dummy",""
+"141","dummy","","dummy","","dummy","","dummy","","dummy",""
+"143","dummy","","dummy","","dummy","","dummy","","dummy",""
+"144","dummy","","dummy","","dummy","","dummy","","dummy",""
+"145","dummy","","dummy","","dummy","","dummy","","dummy",""
+"146","dummy","","dummy","","dummy","","dummy","","dummy",""
+"147","dummy","","dummy","","dummy","","dummy","","dummy",""
+"148","dummy","","dummy","","dummy","","dummy","","dummy",""
+"149","dummy","","dummy","","dummy","","dummy","","dummy",""
+"150","dummy","","dummy","","dummy","","dummy","","dummy",""
+"151","dummy","","dummy","","dummy","","dummy","","dummy",""
+"152","dummy","","dummy","","dummy","","dummy","","dummy",""
+"153","dummy","","dummy","","dummy","","dummy","","dummy",""
+"154","dummy","","dummy","","dummy","","dummy","","dummy",""
+"155","dummy","","dummy","","dummy","","dummy","","dummy",""
+"156","dummy","","dummy","","dummy","","dummy","","dummy",""
+"157","dummy","","dummy","","dummy","","dummy","","dummy",""
+"158","dummy","","dummy","","dummy","","dummy","","dummy",""
+"159","dummy","","dummy","","dummy","","dummy","","dummy",""
+"160","dummy","","dummy","","dummy","","dummy","","dummy",""
+"161","dummy","","dummy","","dummy","","dummy","","dummy",""
+"162","dummy","","dummy","","dummy","","dummy","","dummy",""
+"163","dummy","","dummy","","dummy","","dummy","","dummy",""
+"164","dummy","","dummy","","dummy","","dummy","","dummy",""
+"165","dummy","","dummy","","dummy","","dummy","","dummy",""
+"166","dummy","","dummy","","dummy","","dummy","","dummy",""
+"167","dummy","","dummy","","dummy","","dummy","","dummy",""
+"168","dummy","","dummy","","dummy","","dummy","","dummy",""
+"169","dummy","","dummy","","dummy","","dummy","","dummy",""
+"170","dummy","","dummy","","dummy","","dummy","","dummy",""
+"171","dummy","","dummy","","dummy","","dummy","","dummy",""
+"172","dummy","","dummy","","dummy","","dummy","","dummy",""
+"173","dummy","","dummy","","dummy","","dummy","","dummy",""
+"174","dummy","","dummy","","dummy","","dummy","","dummy",""
+"175","dummy","","dummy","","dummy","","dummy","","dummy",""
+"176","dummy","","dummy","","dummy","","dummy","","dummy",""
+"177","dummy","","dummy","","dummy","","dummy","","dummy",""
+"178","dummy","","dummy","","dummy","","dummy","","dummy",""
+"179","dummy","","dummy","","dummy","","dummy","","dummy",""
+"180","dummy","","dummy","","dummy","","dummy","","dummy",""
+"181","dummy","","dummy","","dummy","","dummy","","dummy",""
+"182","dummy","","dummy","","dummy","","dummy","","dummy",""
+"183","dummy","","dummy","","dummy","","dummy","","dummy",""
+"184","dummy","","dummy","","dummy","","dummy","","dummy",""
+"185","dummy","","dummy","","dummy","","dummy","","dummy",""
+"186","dummy","","dummy","","dummy","","dummy","","dummy",""
+"187","dummy","","dummy","","dummy","","dummy","","dummy",""
+"188","dummy","","dummy","","dummy","","dummy","","dummy",""
+"189","dummy","","dummy","","dummy","","dummy","","dummy",""
+"190","dummy","","dummy","","dummy","","dummy","","dummy",""
+"191","dummy","","dummy","","dummy","","dummy","","dummy",""
+"192","dummy","","dummy","","dummy","","dummy","","dummy",""
+"193","dummy","","dummy","","dummy","","dummy","","dummy",""
+"194","dummy","","dummy","","dummy","","dummy","","dummy",""
+"195","dummy","","dummy","","dummy","","dummy","","dummy",""
+"196","dummy","","dummy","","dummy","","dummy","","dummy",""
+"197","dummy","","dummy","","dummy","","dummy","","dummy",""
+"198","dummy","","dummy","","dummy","","dummy","","dummy",""
+"199","dummy","","dummy","","dummy","","dummy","","dummy",""
+"200","dummy","","dummy","","dummy","","dummy","","dummy",""
+"201","dummy","","dummy","","dummy","","dummy","","dummy",""
+"202","dummy","","dummy","","dummy","","dummy","","dummy",""
+"203","dummy","","dummy","","dummy","","dummy","","dummy",""
+"204","dummy","","dummy","","dummy","","dummy","","dummy",""
+"205","dummy","","dummy","","dummy","","dummy","","dummy",""
+"206","dummy","","dummy","","dummy","","dummy","","dummy",""
+"207","dummy","","dummy","","dummy","","dummy","","dummy",""
+"208","dummy","","dummy","","dummy","","dummy","","dummy",""
+"209","dummy","","dummy","","dummy","","dummy","","dummy",""
+"210","dummy","","dummy","","dummy","","dummy","","dummy",""
+"211","dummy","","dummy","","dummy","","dummy","","dummy",""
+"213","dummy","","dummy","","dummy","","dummy","","dummy",""
+"214","dummy","","dummy","","dummy","","dummy","","dummy",""
+"212","dummy","","dummy","","dummy","","dummy","","dummy",""
+"215","dummy","","dummy","","dummy","","dummy","","dummy",""
+"216","dummy","","dummy","","dummy","","dummy","","dummy",""
+"217","dummy","","dummy","","dummy","","dummy","","dummy",""
+"218","dummy","","dummy","","dummy","","dummy","","dummy",""
+"219","dummy","","dummy","","dummy","","dummy","","dummy",""
+"220","dummy","","dummy","","dummy","","dummy","","dummy",""
+"222","dummy","","dummy","","dummy","","dummy","","dummy",""
+"223","dummy","","dummy","","dummy","","dummy","","dummy",""
+"221","dummy","","dummy","","dummy","","dummy","","dummy",""
+"224","dummy","","dummy","","dummy","","dummy","","dummy",""
+"225","dummy","","dummy","","dummy","","dummy","","dummy",""
+"226","dummy","","dummy","","dummy","","dummy","","dummy",""
+"227","dummy","","dummy","","dummy","","dummy","","dummy",""
+"228","dummy","","dummy","","dummy","","dummy","","dummy",""
+"229","dummy","","dummy","","dummy","","dummy","","dummy",""
+"230","dummy","","dummy","","dummy","","dummy","","dummy",""
+"231","dummy","","dummy","","dummy","","dummy","","dummy",""
+"232","dummy","","dummy","","dummy","","dummy","","dummy",""
+"233","dummy","","dummy","","dummy","","dummy","","dummy",""
+"234","dummy","","dummy","","dummy","","dummy","","dummy",""
+"235","dummy","","dummy","","dummy","","dummy","","dummy",""
+"236","dummy","","dummy","","dummy","","dummy","","dummy",""
+"237","dummy","","dummy","","dummy","","dummy","","dummy",""
+"238","dummy","","dummy","","dummy","","dummy","","dummy",""
+"239","dummy","","dummy","","dummy","","dummy","","dummy",""
+"240","dummy","","dummy","","dummy","","dummy","","dummy",""
+"242","dummy","","dummy","","dummy","","dummy","","dummy",""
+"241","dummy","","dummy","","dummy","","dummy","","dummy",""
+"243","dummy","","dummy","","dummy","","dummy","","dummy",""
+"244","dummy","","dummy","","dummy","","dummy","","dummy",""
+"245","dummy","","dummy","","dummy","","dummy","","dummy",""
+"246","dummy","","dummy","","dummy","","dummy","","dummy",""
+"247","dummy","","dummy","","dummy","","dummy","","dummy",""
+"248","dummy","","dummy","","dummy","","dummy","","dummy",""
+"249","dummy","","dummy","","dummy","","dummy","","dummy",""
+"250","dummy","","dummy","","dummy","","dummy","","dummy",""
+"251","dummy","","dummy","","dummy","","dummy","","dummy",""
+"252","dummy","","dummy","","dummy","","dummy","","dummy",""
+"253","dummy","","dummy","","dummy","","dummy","","dummy",""
+"254","dummy","","dummy","","dummy","","dummy","","dummy",""
+"255","dummy","","dummy","","dummy","","dummy","","dummy",""
+"256","dummy","","dummy","","dummy","","dummy","","dummy",""
+"257","dummy","","dummy","","dummy","","dummy","","dummy",""
+"258","dummy","","dummy","","dummy","","dummy","","dummy",""
+"259","dummy","","dummy","","dummy","","dummy","","dummy",""
+"260","dummy","","dummy","","dummy","","dummy","","dummy",""
+"261","dummy","","dummy","","dummy","","dummy","","dummy",""
+"262","dummy","","dummy","","dummy","","dummy","","dummy",""
+"263","dummy","","dummy","","dummy","","dummy","","dummy",""
+"264","dummy","","dummy","","dummy","","dummy","","dummy",""
+"265","dummy","","dummy","","dummy","","dummy","","dummy",""
+"266","dummy","","dummy","","dummy","","dummy","","dummy",""
+"267","dummy","","dummy","","dummy","","dummy","","dummy",""
+"269","dummy","","dummy","","dummy","","dummy","","dummy",""
+"268","dummy","","dummy","","dummy","","dummy","","dummy",""
+"270","dummy","","dummy","","dummy","","dummy","","dummy",""
+"271","dummy","","dummy","","dummy","","dummy","","dummy",""
+"272","dummy","","dummy","","dummy","","dummy","","dummy",""
+"273","dummy","","dummy","","dummy","","dummy","","dummy",""
+"274","dummy","","dummy","","dummy","","dummy","","dummy",""
+"275","dummy","","dummy","","dummy","","dummy","","dummy",""
+"276","dummy","","dummy","","dummy","","dummy","","dummy",""
+"277","dummy","","dummy","","dummy","","dummy","","dummy",""
+"278","dummy","","dummy","","dummy","","dummy","","dummy",""
+"279","dummy","","dummy","","dummy","","dummy","","dummy",""
+"280","dummy","","dummy","","dummy","","dummy","","dummy",""
+"282","dummy","","dummy","","dummy","","dummy","","dummy",""
+"281","dummy","","dummy","","dummy","","dummy","","dummy",""
+"283","dummy","","dummy","","dummy","","dummy","","dummy",""
+"284","dummy","","dummy","","dummy","","dummy","","dummy",""
+"285","dummy","","dummy","","dummy","","dummy","","dummy",""
+"286","dummy","","dummy","","dummy","","dummy","","dummy",""
+"287","dummy","","dummy","","dummy","","dummy","","dummy",""
+"288","dummy","","dummy","","dummy","","dummy","","dummy",""
+"289","dummy","","dummy","","dummy","","dummy","","dummy",""
+"290","dummy","","dummy","","dummy","","dummy","","dummy",""
+"291","dummy","","dummy","","dummy","","dummy","","dummy",""
+"292","dummy","","dummy","","dummy","","dummy","","dummy",""
+"293","dummy","","dummy","","dummy","","dummy","","dummy",""
+"294","dummy","","dummy","","dummy","","dummy","","dummy",""
+"295","dummy","","dummy","","dummy","","dummy","","dummy",""
+"297","dummy","","dummy","","dummy","","dummy","","dummy",""
+"296","dummy","","dummy","","dummy","","dummy","","dummy",""
+"298","dummy","","dummy","","dummy","","dummy","","dummy",""
+"299","dummy","","dummy","","dummy","","dummy","","dummy",""
+"300","dummy","","dummy","","dummy","","dummy","","dummy",""
+"301","dummy","","dummy","","dummy","","dummy","","dummy",""
+"303","dummy","","dummy","","dummy","","dummy","","dummy",""
+"302","dummy","","dummy","","dummy","","dummy","","dummy",""
+"304","dummy","","dummy","","dummy","","dummy","","dummy",""
+"305","dummy","","dummy","","dummy","","dummy","","dummy",""
+"306","dummy","","dummy","","dummy","","dummy","","dummy",""
+"307","dummy","","dummy","","dummy","","dummy","","dummy",""
+"308","dummy","","dummy","","dummy","","dummy","","dummy",""
+"310","dummy","","dummy","","dummy","","dummy","","dummy",""
+"309","dummy","","dummy","","dummy","","dummy","","dummy",""
+"312","dummy","","dummy","","dummy","","dummy","","dummy",""
+"313","dummy","","dummy","","dummy","","dummy","","dummy",""
+"314","dummy","","dummy","","dummy","","dummy","","dummy",""
+"315","dummy","","dummy","","dummy","","dummy","","dummy",""
+"316","dummy","","dummy","","dummy","","dummy","","dummy",""
+"317","dummy","","dummy","","dummy","","dummy","","dummy",""
+"318","dummy","","dummy","","dummy","","dummy","","dummy",""
+"319","dummy","","dummy","","dummy","","dummy","","dummy",""
+"320","dummy","","dummy","","dummy","","dummy","","dummy",""
+"321","dummy","","dummy","","dummy","","dummy","","dummy",""
+"322","dummy","","dummy","","dummy","","dummy","","dummy",""
+"323","dummy","","dummy","","dummy","","dummy","","dummy",""
+"324","dummy","","dummy","","dummy","","dummy","","dummy",""
+"325","dummy","","dummy","","dummy","","dummy","","dummy",""
+"326","dummy","","dummy","","dummy","","dummy","","dummy",""
+"327","dummy","","dummy","","dummy","","dummy","","dummy",""
+"329","dummy","","dummy","","dummy","","dummy","","dummy",""
+"328","dummy","","dummy","","dummy","","dummy","","dummy",""
+"330","dummy","","dummy","","dummy","","dummy","","dummy",""
+"331","dummy","","dummy","","dummy","","dummy","","dummy",""
+"332","dummy","","dummy","","dummy","","dummy","","dummy",""
+"333","dummy","","dummy","","dummy","","dummy","","dummy",""
+"334","dummy","","dummy","","dummy","","dummy","","dummy",""
+"335","dummy","","dummy","","dummy","","dummy","","dummy",""
+"336","dummy","","dummy","","dummy","","dummy","","dummy",""
+"337","dummy","","dummy","","dummy","","dummy","","dummy",""
+"338","dummy","","dummy","","dummy","","dummy","","dummy",""
+"339","dummy","","dummy","","dummy","","dummy","","dummy",""
+"340","dummy","","dummy","","dummy","","dummy","","dummy",""
+"342","dummy","","dummy","","dummy","","dummy","","dummy",""
+"343","dummy","","dummy","","dummy","","dummy","","dummy",""
+"344","dummy","","dummy","","dummy","","dummy","","dummy",""
+"345","dummy","","dummy","","dummy","","dummy","","dummy",""
+"346","dummy","","dummy","","dummy","","dummy","","dummy",""
+"347","dummy","","dummy","","dummy","","dummy","","dummy",""
+"348","dummy","","dummy","","dummy","","dummy","","dummy",""
+"349","dummy","","dummy","","dummy","","dummy","","dummy",""
+"350","dummy","","dummy","","dummy","","dummy","","dummy",""
+"351","dummy","","dummy","","dummy","","dummy","","dummy",""
+"352","dummy","","dummy","","dummy","","dummy","","dummy",""
+"353","dummy","","dummy","","dummy","","dummy","","dummy",""
+"354","dummy","","dummy","","dummy","","dummy","","dummy",""
+"355","dummy","","dummy","","dummy","","dummy","","dummy",""
+"356","dummy","","dummy","","dummy","","dummy","","dummy",""
+"357","dummy","","dummy","","dummy","","dummy","","dummy",""
+"358","dummy","","dummy","","dummy","","dummy","","dummy",""
+"359","dummy","","dummy","","dummy","","dummy","","dummy",""
+"360","dummy","","dummy","","dummy","","dummy","","dummy",""
+"361","dummy","","dummy","","dummy","","dummy","","dummy",""
+"362","dummy","","dummy","","dummy","","dummy","","dummy",""
+"363","dummy","","dummy","","dummy","","dummy","","dummy",""
+"364","dummy","","dummy","","dummy","","dummy","","dummy",""
+"365","dummy","","dummy","","dummy","","dummy","","dummy",""
+"366","dummy","","dummy","","dummy","","dummy","","dummy",""
+"367","dummy","","dummy","","dummy","","dummy","","dummy",""
+"368","dummy","","dummy","","dummy","","dummy","","dummy",""
+"369","dummy","","dummy","","dummy","","dummy","","dummy",""
+"370","dummy","","dummy","","dummy","","dummy","","dummy",""
+"371","dummy","","dummy","","dummy","","dummy","","dummy",""
+"372","dummy","","dummy","","dummy","","dummy","","dummy",""
+"373","dummy","","dummy","","dummy","","dummy","","dummy",""
+"374","dummy","","dummy","","dummy","","dummy","","dummy",""
+"375","dummy","","dummy","","dummy","","dummy","","dummy",""
+"376","dummy","","dummy","","dummy","","dummy","","dummy",""
+"377","dummy","","dummy","","dummy","","dummy","","dummy",""
+"378","dummy","","dummy","","dummy","","dummy","","dummy",""
+"379","dummy","","dummy","","dummy","","dummy","","dummy",""
+"380","dummy","","dummy","","dummy","","dummy","","dummy",""
+"381","dummy","","dummy","","dummy","","dummy","","dummy",""
+"382","dummy","","dummy","","dummy","","dummy","","dummy",""
+"383","dummy","","dummy","","dummy","","dummy","","dummy",""
+"384","dummy","","dummy","","dummy","","dummy","","dummy",""
+"385","dummy","","dummy","","dummy","","dummy","","dummy",""
+"386","dummy","","dummy","","dummy","","dummy","","dummy",""
+"387","dummy","","dummy","","dummy","","dummy","","dummy",""
+"388","dummy","","dummy","","dummy","","dummy","","dummy",""
+"389","dummy","","dummy","","dummy","","dummy","","dummy",""
+"390","dummy","","dummy","","dummy","","dummy","","dummy",""
+"391","dummy","","dummy","","dummy","","dummy","","dummy",""
+"392","dummy","","dummy","","dummy","","dummy","","dummy",""
+"393","dummy","","dummy","","dummy","","dummy","","dummy",""
+"394","dummy","","dummy","","dummy","","dummy","","dummy",""
+"395","dummy","","dummy","","dummy","","dummy","","dummy",""
+"396","dummy","","dummy","","dummy","","dummy","","dummy",""
+"397","dummy","","dummy","","dummy","","dummy","","dummy",""
+"398","dummy","","dummy","","dummy","","dummy","","dummy",""
+"399","dummy","","dummy","","dummy","","dummy","","dummy",""
+"400","dummy","","dummy","","dummy","","dummy","","dummy",""
+"401","dummy","","dummy","","dummy","","dummy","","dummy",""
+"402","dummy","","dummy","","dummy","","dummy","","dummy",""
+"403","dummy","","dummy","","dummy","","dummy","","dummy",""
+"404","dummy","","dummy","","dummy","","dummy","","dummy",""
+"405","dummy","","dummy","","dummy","","dummy","","dummy",""
+"406","dummy","","dummy","","dummy","","dummy","","dummy",""
+"407","dummy","","dummy","","dummy","","dummy","","dummy",""
+"408","dummy","","dummy","","dummy","","dummy","","dummy",""
+"409","dummy","","dummy","","dummy","","dummy","","dummy",""
+"410","dummy","","dummy","","dummy","","dummy","","dummy",""
+"411","dummy","","dummy","","dummy","","dummy","","dummy",""
+"412","dummy","","dummy","","dummy","","dummy","","dummy",""
+"341","dummy","","dummy","","dummy","","dummy","","dummy",""
+"413","dummy","","dummy","","dummy","","dummy","","dummy",""
+"414","dummy","","dummy","","dummy","","dummy","","dummy",""
+"415","dummy","","dummy","","dummy","","dummy","","dummy",""
+"416","dummy","","dummy","","dummy","","dummy","","dummy",""
+"417","dummy","","dummy","","dummy","","dummy","","dummy",""
+"418","dummy","","dummy","","dummy","","dummy","","dummy",""
+"419","dummy","","dummy","","dummy","","dummy","","dummy",""
+"420","dummy","","dummy","","dummy","","dummy","","dummy",""
+"421","dummy","","dummy","","dummy","","dummy","","dummy",""
+"422","dummy","","dummy","","dummy","","dummy","","dummy",""
+"423","dummy","","dummy","","dummy","","dummy","","dummy",""
+"424","dummy","","dummy","","dummy","","dummy","","dummy",""
+"425","dummy","","dummy","","dummy","","dummy","","dummy",""
+"426","dummy","","dummy","","dummy","","dummy","","dummy",""
+"427","dummy","","dummy","","dummy","","dummy","","dummy",""
+"428","dummy","","dummy","","dummy","","dummy","","dummy",""
+"429","dummy","","dummy","","dummy","","dummy","","dummy",""
+"430","dummy","","dummy","","dummy","","dummy","","dummy",""
+"431","dummy","","dummy","","dummy","","dummy","","dummy",""
+"432","dummy","","dummy","","dummy","","dummy","","dummy",""
+"433","dummy","","dummy","","dummy","","dummy","","dummy",""
+"434","dummy","","dummy","","dummy","","dummy","","dummy",""
+"435","dummy","","dummy","","dummy","","dummy","","dummy",""
+"436","dummy","","dummy","","dummy","","dummy","","dummy",""
+"437","dummy","","dummy","","dummy","","dummy","","dummy",""
+"438","dummy","","dummy","","dummy","","dummy","","dummy",""
+"439","dummy","","dummy","","dummy","","dummy","","dummy",""
+"440","dummy","","dummy","","dummy","","dummy","","dummy",""
+"441","dummy","","dummy","","dummy","","dummy","","dummy",""
+"442","dummy","","dummy","","dummy","","dummy","","dummy",""
+"443","dummy","","dummy","","dummy","","dummy","","dummy",""
+"444","dummy","","dummy","","dummy","","dummy","","dummy",""
+"445","dummy","","dummy","","dummy","","dummy","","dummy",""
+"446","dummy","","dummy","","dummy","","dummy","","dummy",""
+"447","dummy","","dummy","","dummy","","dummy","","dummy",""
+"448","dummy","","dummy","","dummy","","dummy","","dummy",""
+"449","dummy","","dummy","","dummy","","dummy","","dummy",""
+"450","dummy","","dummy","","dummy","","dummy","","dummy",""
+"451","dummy","","dummy","","dummy","","dummy","","dummy",""
+"452","dummy","","dummy","","dummy","","dummy","","dummy",""
+"454","dummy","","dummy","","dummy","","dummy","","dummy",""
+"453","dummy","","dummy","","dummy","","dummy","","dummy",""
+"456","dummy","","dummy","","dummy","","dummy","","dummy",""
+"455","dummy","","dummy","","dummy","","dummy","","dummy",""
+"457","dummy","","dummy","","dummy","","dummy","","dummy",""
+"458","dummy","","dummy","","dummy","","dummy","","dummy",""
+"459","dummy","","dummy","","dummy","","dummy","","dummy",""
+"460","dummy","","dummy","","dummy","","dummy","","dummy",""
+"461","dummy","","dummy","","dummy","","dummy","","dummy",""
+"462","dummy","","dummy","","dummy","","dummy","","dummy",""
+"463","dummy","","dummy","","dummy","","dummy","","dummy",""
+"464","dummy","","dummy","","dummy","","dummy","","dummy",""
+"465","dummy","","dummy","","dummy","","dummy","","dummy",""
+"466","dummy","","dummy","","dummy","","dummy","","dummy",""
+"467","dummy","","dummy","","dummy","","dummy","","dummy",""
+"468","dummy","","dummy","","dummy","","dummy","","dummy",""
+"469","dummy","","dummy","","dummy","","dummy","","dummy",""
+"470","dummy","","dummy","","dummy","","dummy","","dummy",""
+"471","dummy","","dummy","","dummy","","dummy","","dummy",""
+"472","dummy","","dummy","","dummy","","dummy","","dummy",""
+"473","dummy","","dummy","","dummy","","dummy","","dummy",""
+"474","dummy","","dummy","","dummy","","dummy","","dummy",""
+"475","dummy","","dummy","","dummy","","dummy","","dummy",""
+"476","dummy","","dummy","","dummy","","dummy","","dummy",""
+"477","dummy","","dummy","","dummy","","dummy","","dummy",""
+"478","dummy","","dummy","","dummy","","dummy","","dummy",""
+"479","dummy","","dummy","","dummy","","dummy","","dummy",""
+"480","dummy","","dummy","","dummy","","dummy","","dummy",""
+"481","dummy","","dummy","","dummy","","dummy","","dummy",""
+"482","dummy","","dummy","","dummy","","dummy","","dummy",""
+"483","dummy","","dummy","","dummy","","dummy","","dummy",""
+"484","dummy","","dummy","","dummy","","dummy","","dummy",""
+"485","dummy","","dummy","","dummy","","dummy","","dummy",""
+"486","dummy","","dummy","","dummy","","dummy","","dummy",""
+"487","dummy","","dummy","","dummy","","dummy","","dummy",""
+"488","dummy","","dummy","","dummy","","dummy","","dummy",""
+"489","dummy","","dummy","","dummy","","dummy","","dummy",""
+"490","dummy","","dummy","","dummy","","dummy","","dummy",""
+"491","dummy","","dummy","","dummy","","dummy","","dummy",""
+"492","dummy","","dummy","","dummy","","dummy","","dummy",""
+"493","dummy","","dummy","","dummy","","dummy","","dummy",""
+"494","dummy","","dummy","","dummy","","dummy","","dummy",""
+"495","dummy","","dummy","","dummy","","dummy","","dummy",""
+"496","dummy","","dummy","","dummy","","dummy","","dummy",""
+"497","dummy","","dummy","","dummy","","dummy","","dummy",""
+"498","dummy","","dummy","","dummy","","dummy","","dummy",""
+"500","dummy","","dummy","","dummy","","dummy","","dummy",""
+"499","dummy","","dummy","","dummy","","dummy","","dummy",""
+"311","dummy","","dummy","","dummy","","dummy","","dummy",""


[metamodel] 05/07: Made fields private.

Posted by ka...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

kaspersor pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/metamodel.git

commit 82792a9199193eb5e9a83557bd3808499b140683
Author: Arjan Seijkens <a....@quadient.com>
AuthorDate: Mon Jun 17 08:51:20 2019 +0200

    Made fields private.
---
 csv/src/main/java/org/apache/metamodel/csv/CsvParserBuilder.java | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/csv/src/main/java/org/apache/metamodel/csv/CsvParserBuilder.java b/csv/src/main/java/org/apache/metamodel/csv/CsvParserBuilder.java
index d238098..ca71219 100644
--- a/csv/src/main/java/org/apache/metamodel/csv/CsvParserBuilder.java
+++ b/csv/src/main/java/org/apache/metamodel/csv/CsvParserBuilder.java
@@ -23,8 +23,8 @@ import com.opencsv.ICSVParser;
 import com.opencsv.RFC4180ParserBuilder;
 
 class CsvParserBuilder {
-    final CSVParserBuilder _csvParserBuilder;
-    final RFC4180ParserBuilder _rfc4180ParserBuilder;
+    private final CSVParserBuilder _csvParserBuilder;
+    private final RFC4180ParserBuilder _rfc4180ParserBuilder;
 
     CsvParserBuilder(final CsvConfiguration csvConfiguration) {
         if (csvConfiguration.getEscapeChar() == csvConfiguration.getQuoteChar()) {