now all compiling

Project: http://git-wip-us.apache.org/repos/asf/metamodel/repo
Commit: http://git-wip-us.apache.org/repos/asf/metamodel/commit/2d156bcd
Tree: http://git-wip-us.apache.org/repos/asf/metamodel/tree/2d156bcd
Diff: http://git-wip-us.apache.org/repos/asf/metamodel/diff/2d156bcd

Branch: refs/heads/master
Commit: 2d156bcd0721f436ea42c3bc4a0af314375873b4
Parents: ab5c948
Author: Jörg Unbehauen <jo...@unbehauen.net>
Authored: Thu Jul 27 18:05:40 2017 +0200
Committer: Jörg Unbehauen <jo...@unbehauen.net>
Committed: Thu Jul 27 18:05:40 2017 +0200

----------------------------------------------------------------------
 .../cassandra/CassandraDataContext.java         |  3 +-
 .../metamodel/cassandra/CassandraDataSet.java   |  7 +-
 .../cassandra/CassandraDataContextTest.java     |  2 +-
 .../apache/metamodel/data/AbstractDataSet.java  |  3 -
 .../org/apache/metamodel/data/EmptyDataSet.java |  5 ++
 .../metamodel/data/SimpleDataSetHeader.java     |  5 ++
 .../intercept/InterceptableDataContext.java     | 20 +++--
 .../metamodel/schema/MutableRelationship.java   |  2 +-
 .../apache/metamodel/schema/MutableSchema.java  |  5 ++
 .../create/AbstractCreateTableBuilderTest.java  |  2 +-
 .../metamodel/couchdb/CouchDbDataContext.java   |  7 +-
 .../metamodel/couchdb/CouchDbDataSet.java       |  3 +-
 .../CouchDbSimpleTableDefSchemaBuilder.java     |  3 +-
 .../couchdb/CouchDbDataContextTest.java         | 10 +--
 .../metamodel/csv/CsvCreateTableBuilder.java    |  6 +-
 .../apache/metamodel/csv/CsvDataContext.java    |  4 +-
 .../org/apache/metamodel/csv/CsvDataSet.java    |  9 ++-
 .../org/apache/metamodel/csv/CsvSchema.java     | 10 ++-
 .../java/org/apache/metamodel/csv/CsvTable.java | 29 +++----
 .../metamodel/csv/SingleLineCsvDataSet.java     |  9 ++-
 .../metamodel/csv/CsvBigFileMemoryTest.java     |  4 +-
 .../metamodel/csv/CsvDataContextTest.java       | 74 +++++++++---------
 .../metamodel/csv/SingleLineCsvRowTest.java     |  4 +-
 .../InterceptionCsvIntegrationTest.java         |  6 +-
 .../metamodel/dynamodb/DynamoDbDataContext.java |  8 +-
 .../metamodel/dynamodb/DynamoDbDataSet.java     |  7 +-
 .../dynamodb/DynamoDbTableCreationBuilder.java  |  3 +-
 .../DynamoDbDataContextIntegrationTest.java     |  2 +-
 .../nativeclient/ElasticSearchDataContext.java  |  7 +-
 .../nativeclient/ElasticSearchDataSet.java      |  9 +--
 .../ElasticSearchDataContextTest.java           | 16 ++--
 .../rest/ElasticSearchRestDataContext.java      |  7 +-
 .../rest/JestElasticSearchDataSet.java          |  6 --
 .../rest/JestElasticSearchDataContextTest.java  | 16 ++--
 .../rest/JestElasticSearchUtilsTest.java        | 14 ++--
 .../excel/DefaultSpreadsheetReaderDelegate.java |  7 +-
 .../metamodel/excel/ExcelDataContext.java       |  3 +-
 .../metamodel/excel/ExcelDeleteBuilder.java     |  3 +-
 .../excel/ExcelTableCreationBuilder.java        |  4 +-
 .../org/apache/metamodel/excel/ExcelUtils.java  |  4 +-
 .../excel/SpreadsheetReaderDelegate.java        |  4 +-
 .../org/apache/metamodel/excel/XlsDataSet.java  |  5 +-
 .../metamodel/excel/XlsxRowPublisherAction.java | 12 +--
 .../excel/XlsxSpreadsheetReaderDelegate.java    | 10 +--
 .../DefaultSpreadsheetReaderDelegateTest.java   | 27 +++----
 .../metamodel/excel/ExcelDataContextTest.java   | 82 ++++++++++----------
 .../excel/ExcelUpdateCallbackTest.java          |  4 +-
 .../fixedwidth/FixedWidthDataContext.java       |  3 +-
 .../metamodel/fixedwidth/FixedWidthDataSet.java |  8 +-
 .../FixedWidthConfigurationReaderTest.java      |  2 +-
 .../fixedwidth/FixedWidthDataContextTest.java   | 26 +++----
 .../metamodel/hbase/HBaseDataContext.java       |  2 +-
 .../apache/metamodel/hbase/HBaseDataSet.java    |  7 +-
 .../metamodel/hbase/HBaseDataContextTest.java   |  2 +-
 .../metamodel/jdbc/JdbcCreateTableBuilder.java  | 15 ++--
 .../apache/metamodel/jdbc/JdbcDataContext.java  | 28 +++----
 .../metamodel/jdbc/JdbcMetadataLoader.java      |  5 +-
 .../org/apache/metamodel/jdbc/JdbcSchema.java   |  3 +-
 .../apache/metamodel/jdbc/QuerySplitter.java    |  4 +-
 .../org/apache/metamodel/jdbc/DerbyTest.java    | 16 ++--
 .../apache/metamodel/jdbc/H2databaseTest.java   | 20 ++---
 .../org/apache/metamodel/jdbc/HsqldbTest.java   | 14 ++--
 .../metamodel/jdbc/JdbcDataContextTest.java     | 31 ++++----
 .../metamodel/jdbc/JdbcDeleteBuilderTest.java   |  4 +-
 .../metamodel/jdbc/JdbcInsertBuilderTest.java   |  6 +-
 .../apache/metamodel/jdbc/JdbcSchemaTest.java   | 10 +--
 .../metamodel/jdbc/JdbcTestTemplates.java       |  2 +-
 .../metamodel/jdbc/JdbcUpdateBuilderTest.java   |  8 +-
 .../metamodel/jdbc/QuerySplitterTest.java       | 15 ++--
 .../org/apache/metamodel/jdbc/SqliteTest.java   | 11 ++-
 .../jdbc/integrationtests/DB2Test.java          |  6 +-
 .../jdbc/integrationtests/FirebirdTest.java     | 54 +++++++------
 .../jdbc/integrationtests/MysqlTest.java        | 18 ++---
 .../jdbc/integrationtests/OracleTest.java       | 43 ++++++----
 .../jdbc/integrationtests/PostgresqlTest.java   | 52 ++++++-------
 .../SQLServerJtdsDriverTest.java                |  8 +-
 .../SQLServerMicrosoftDriverTest.java           |  6 +-
 .../apache/metamodel/json/JsonDataContext.java  |  6 +-
 .../metamodel/json/JsonDataContextTest.java     | 11 ++-
 .../mongodb/mongo2/MongoDbDataContext.java      | 41 +++++-----
 .../mongodb/mongo2/MongoDbDataSet.java          | 11 +--
 .../mongodb/mongo2/MongoDbDataContextTest.java  | 17 ++--
 .../mongodb/mongo2/MongoDbDataCopyer.java       |  3 +-
 .../mongodb/mongo3/MongoDbDataContext.java      | 42 +++++-----
 .../mongodb/mongo3/MongoDbDataSet.java          | 10 +--
 .../mongodb/mongo3/MongoDbDataContextTest.java  | 17 ++--
 .../mongodb/mongo3/MongoDbDataCopyer.java       |  2 +-
 .../neo4j/Neo4jCypherQueryBuilder.java          | 12 +--
 .../metamodel/neo4j/Neo4jDataContext.java       |  9 ++-
 .../apache/metamodel/neo4j/Neo4jDataSet.java    |  4 +-
 .../metamodel/neo4j/Neo4jDataContextTest.java   | 10 +--
 .../openoffice/OpenOfficeDataContext.java       |  3 +-
 .../openoffice/OpenOfficeDataContextTest.java   |  6 +-
 .../apache/metamodel/pojo/PojoDataContext.java  |  5 +-
 .../org/apache/metamodel/pojo/PojoDataSet.java  |  3 +-
 .../metamodel/pojo/PojoDataContextTest.java     |  4 +-
 .../salesforce/SalesforceDataContext.java       | 17 ++--
 .../metamodel/salesforce/SalesforceDataSet.java |  7 +-
 .../metamodel/salesforce/SalesforceSchema.java  |  6 +-
 .../metamodel/salesforce/SalesforceTable.java   | 11 +--
 .../salesforce/SalesforceDataContextTest.java   | 14 ++--
 .../salesforce/SalesforceDataSetTest.java       |  5 +-
 ...CsvDefaultConfigurationFromResourceTest.java |  2 +-
 ...vSpecifiedConfigurationFromFilenameTest.java |  2 +-
 ...lSpecifiedConfigurationFromFilenameTest.java |  2 +-
 .../PojoDataContextFactoryBeanDelegateTest.java |  6 +-
 .../metamodel/sugarcrm/SugarCrmDataContext.java |  4 +-
 .../metamodel/sugarcrm/SugarCrmDataSet.java     | 14 ++--
 .../metamodel/sugarcrm/SugarCrmSchema.java      |  5 +-
 .../metamodel/sugarcrm/SugarCrmTable.java       | 13 ++--
 .../metamodel/sugarcrm/SugarCrmXmlHelper.java   |  2 +-
 .../sugarcrm/SugarCrmDataContextTest.java       | 31 ++++----
 .../apache/metamodel/xml/XmlDomDataContext.java |  4 +-
 113 files changed, 662 insertions(+), 620 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/cassandra/src/main/java/org/apache/metamodel/cassandra/CassandraDataContext.java
----------------------------------------------------------------------
diff --git 
a/cassandra/src/main/java/org/apache/metamodel/cassandra/CassandraDataContext.java
 
b/cassandra/src/main/java/org/apache/metamodel/cassandra/CassandraDataContext.java
index 3a1684e..08d3fd9 100644
--- 
a/cassandra/src/main/java/org/apache/metamodel/cassandra/CassandraDataContext.java
+++ 
b/cassandra/src/main/java/org/apache/metamodel/cassandra/CassandraDataContext.java
@@ -69,7 +69,6 @@ import com.datastax.driver.core.querybuilder.Select.Selection;
 public class CassandraDataContext extends QueryPostprocessDataContext 
implements DataContext {
 
     private static final Logger logger = 
LoggerFactory.getLogger(CassandraDataContext.class);
-
     private final Cluster cassandraCluster;
     private final SimpleTableDef[] tableDefs;
     private final String keySpaceName;
@@ -188,7 +187,7 @@ public class CassandraDataContext extends 
QueryPostprocessDataContext implements
     }
 
     @Override
-    protected DataSet materializeMainSchemaTable(Table table, Column[] 
columns, int maxRows) {
+    protected DataSet materializeMainSchemaTable(Table table, List<Column> 
columns, int maxRows) {
         final Select query = QueryBuilder.select().all().from(keySpaceName, 
table.getName());
         if (limitMaxRowsIsSet(maxRows)) {
             query.limit(maxRows);

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/cassandra/src/main/java/org/apache/metamodel/cassandra/CassandraDataSet.java
----------------------------------------------------------------------
diff --git 
a/cassandra/src/main/java/org/apache/metamodel/cassandra/CassandraDataSet.java 
b/cassandra/src/main/java/org/apache/metamodel/cassandra/CassandraDataSet.java
index ea02176..ff222a1 100644
--- 
a/cassandra/src/main/java/org/apache/metamodel/cassandra/CassandraDataSet.java
+++ 
b/cassandra/src/main/java/org/apache/metamodel/cassandra/CassandraDataSet.java
@@ -20,10 +20,13 @@
 package org.apache.metamodel.cassandra;
 
 import java.util.Iterator;
+import java.util.List;
+import java.util.stream.Collectors;
 
 import org.apache.metamodel.data.AbstractDataSet;
 import org.apache.metamodel.data.DataSet;
 import org.apache.metamodel.data.Row;
+import org.apache.metamodel.query.SelectItem;
 import org.apache.metamodel.schema.Column;
 
 /**
@@ -36,8 +39,8 @@ final class CassandraDataSet extends AbstractDataSet {
 
     private volatile com.datastax.driver.core.Row _dbObject;
 
-    public CassandraDataSet(Iterator<com.datastax.driver.core.Row> cursor, 
Column[] columns) {
-        super(columns);
+    public CassandraDataSet(Iterator<com.datastax.driver.core.Row> cursor, 
List<Column> columns) {
+        
super(columns.stream().map(SelectItem::new).collect(Collectors.toList()));
         _cursor = cursor;
     }
 

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/cassandra/src/test/java/org/apache/metamodel/cassandra/CassandraDataContextTest.java
----------------------------------------------------------------------
diff --git 
a/cassandra/src/test/java/org/apache/metamodel/cassandra/CassandraDataContextTest.java
 
b/cassandra/src/test/java/org/apache/metamodel/cassandra/CassandraDataContextTest.java
index a9d9605..575bb5f 100644
--- 
a/cassandra/src/test/java/org/apache/metamodel/cassandra/CassandraDataContextTest.java
+++ 
b/cassandra/src/test/java/org/apache/metamodel/cassandra/CassandraDataContextTest.java
@@ -83,7 +83,7 @@ public class CassandraDataContextTest {
 
     @Test
     public void testSchemaAndSimpleQuery() throws Exception {
-        String existingTables = 
Arrays.toString(dc.getDefaultSchema().getTableNames());
+        String existingTables = 
Arrays.toString(dc.getDefaultSchema().getTableNames().toArray());
         assertTrue(existingTables.contains(testTableName));
         assertTrue(existingTables.contains(testCounterTableName));
 

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/core/src/main/java/org/apache/metamodel/data/AbstractDataSet.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/data/AbstractDataSet.java 
b/core/src/main/java/org/apache/metamodel/data/AbstractDataSet.java
index 6e64446..17699b5 100644
--- a/core/src/main/java/org/apache/metamodel/data/AbstractDataSet.java
+++ b/core/src/main/java/org/apache/metamodel/data/AbstractDataSet.java
@@ -64,9 +64,6 @@ public abstract class AbstractDataSet extends BaseObject 
implements DataSet {
         _header = Objects.requireNonNull(header);
     }
 
-    public AbstractDataSet(Column[] columns) {
-        this(MetaModelHelper.createSelectItems(columns));
-    }
 
     /**
      * {@inheritDoc}

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/core/src/main/java/org/apache/metamodel/data/EmptyDataSet.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/data/EmptyDataSet.java 
b/core/src/main/java/org/apache/metamodel/data/EmptyDataSet.java
index fd71be3..89d5d35 100644
--- a/core/src/main/java/org/apache/metamodel/data/EmptyDataSet.java
+++ b/core/src/main/java/org/apache/metamodel/data/EmptyDataSet.java
@@ -19,6 +19,7 @@
 package org.apache.metamodel.data;
 
 import java.util.List;
+import java.util.stream.Collectors;
 
 import org.apache.metamodel.query.SelectItem;
 import org.apache.metamodel.schema.Column;
@@ -36,6 +37,10 @@ public final class EmptyDataSet extends AbstractDataSet {
        this(new SimpleDataSetHeader(selectItems));
     }
 
+    public static EmptyDataSet fromColumns(List<Column> cols){
+        return new 
EmptyDataSet(cols.stream().map(SelectItem::new).collect(Collectors.toList()));
+    }
+
     @Override
     public boolean next() {
         return false;

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/core/src/main/java/org/apache/metamodel/data/SimpleDataSetHeader.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/metamodel/data/SimpleDataSetHeader.java 
b/core/src/main/java/org/apache/metamodel/data/SimpleDataSetHeader.java
index afc6226..71703d5 100644
--- a/core/src/main/java/org/apache/metamodel/data/SimpleDataSetHeader.java
+++ b/core/src/main/java/org/apache/metamodel/data/SimpleDataSetHeader.java
@@ -49,6 +49,11 @@ public class SimpleDataSetHeader implements DataSetHeader {
     }
 
 
+    public static SimpleDataSetHeader fromColumns(List<Column> cols){
+        return new 
SimpleDataSetHeader(cols.stream().map(SelectItem::new).collect(Collectors.toList()));
+    }
+
+
     @Override
     public final List<SelectItem> getSelectItems() {
         return Collections.unmodifiableList(_items);

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/core/src/main/java/org/apache/metamodel/intercept/InterceptableDataContext.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/metamodel/intercept/InterceptableDataContext.java
 
b/core/src/main/java/org/apache/metamodel/intercept/InterceptableDataContext.java
index 1811e78..3076ca8 100644
--- 
a/core/src/main/java/org/apache/metamodel/intercept/InterceptableDataContext.java
+++ 
b/core/src/main/java/org/apache/metamodel/intercept/InterceptableDataContext.java
@@ -194,17 +194,15 @@ public class InterceptableDataContext implements 
UpdateableDataContext {
 
     @Override
     public List<Schema> getSchemas() throws MetaModelException {
-        List<Schema> schemas = _delegate.getSchemas();
-        List<Schema> result = new ArrayList<>(schemas.size());
-        if (!_schemaInterceptors.isEmpty()) {
-            for (int i = 0; i < schemas.size(); i++) {
-                schemas.set(i, 
_schemaInterceptors.interceptAll(schemas.get(i)));
-            }
-        }else {
-            result = schemas;
-        }
-        return result;
-
+        return _delegate.getSchemas().stream()
+                .map(schema -> {
+                    if(_schemaInterceptors.isEmpty()){
+                        return schema;
+                    }else{
+                        return _schemaInterceptors.interceptAll(schema);
+                    }
+
+                }).collect(Collectors.toList());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/core/src/main/java/org/apache/metamodel/schema/MutableRelationship.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/metamodel/schema/MutableRelationship.java 
b/core/src/main/java/org/apache/metamodel/schema/MutableRelationship.java
index 466244c..3ea624c 100644
--- a/core/src/main/java/org/apache/metamodel/schema/MutableRelationship.java
+++ b/core/src/main/java/org/apache/metamodel/schema/MutableRelationship.java
@@ -110,7 +110,7 @@ public class MutableRelationship extends 
AbstractRelationship implements
                List<Column> pcols = new ArrayList<>();
                pcols.add(primaryColumn);
                List<Column> fcols = new ArrayList<>();
-               pcols.add(foreignColumn);
+               fcols.add(foreignColumn);
 
 
                return createRelationship(pcols, fcols);

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/core/src/main/java/org/apache/metamodel/schema/MutableSchema.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/schema/MutableSchema.java 
b/core/src/main/java/org/apache/metamodel/schema/MutableSchema.java
index 29d361b..f01b5c0 100644
--- a/core/src/main/java/org/apache/metamodel/schema/MutableSchema.java
+++ b/core/src/main/java/org/apache/metamodel/schema/MutableSchema.java
@@ -68,6 +68,11 @@ public class MutableSchema extends AbstractSchema implements 
Serializable,
                return Collections.unmodifiableList(_tables);
        }
 
+       public List<MutableTable> getMutableTables() {
+               return Collections.unmodifiableList(_tables);
+       }
+
+
        public MutableSchema setTables(Collection<? extends MutableTable> 
tables) {
            clearTables();
                for (MutableTable table : tables) {

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/core/src/test/java/org/apache/metamodel/create/AbstractCreateTableBuilderTest.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/metamodel/create/AbstractCreateTableBuilderTest.java
 
b/core/src/test/java/org/apache/metamodel/create/AbstractCreateTableBuilderTest.java
index f5e7356..e108277 100644
--- 
a/core/src/test/java/org/apache/metamodel/create/AbstractCreateTableBuilderTest.java
+++ 
b/core/src/test/java/org/apache/metamodel/create/AbstractCreateTableBuilderTest.java
@@ -102,6 +102,6 @@ public class AbstractCreateTableBuilderTest extends 
TestCase {
         
assertEquals("Column[name=bar,columnNumber=1,type=null,nullable=null,nativeType=null,columnSize=null]",
                 table.getColumn(1).toString());
         
assertEquals("Column[name=baz,columnNumber=2,type=null,nullable=null,nativeType=null,columnSize=null]",
-                table.getColumn(1).toString());
+                table.getColumn(2).toString());
     }
 }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/couchdb/src/main/java/org/apache/metamodel/couchdb/CouchDbDataContext.java
----------------------------------------------------------------------
diff --git 
a/couchdb/src/main/java/org/apache/metamodel/couchdb/CouchDbDataContext.java 
b/couchdb/src/main/java/org/apache/metamodel/couchdb/CouchDbDataContext.java
index f98fa81..bc0a19d 100644
--- a/couchdb/src/main/java/org/apache/metamodel/couchdb/CouchDbDataContext.java
+++ b/couchdb/src/main/java/org/apache/metamodel/couchdb/CouchDbDataContext.java
@@ -19,6 +19,7 @@
 package org.apache.metamodel.couchdb;
 
 import java.util.List;
+import java.util.stream.Collectors;
 
 import org.apache.metamodel.MetaModelException;
 import org.apache.metamodel.MetaModelHelper;
@@ -111,7 +112,7 @@ public class CouchDbDataContext extends 
QueryPostprocessDataContext implements U
     }
 
     @Override
-    protected DataSet materializeMainSchemaTable(Table table, Column[] 
columns, int firstRow, int maxRows) {
+    protected DataSet materializeMainSchemaTable(Table table, List<Column> 
columns, int firstRow, int maxRows) {
         // the connector represents a handle to the the couchdb "database".
         final String databaseName = table.getName();
         final CouchDbConnector connector = 
_couchDbInstance.createConnector(databaseName, false);
@@ -128,12 +129,12 @@ public class CouchDbDataContext extends 
QueryPostprocessDataContext implements U
 
         final StreamingViewResult streamingView = 
connector.queryForStreamingView(query);
 
-        final SelectItem[] selectItems = 
MetaModelHelper.createSelectItems(columns);
+        final List<SelectItem> selectItems = 
columns.stream().map(SelectItem::new).collect(Collectors.toList());
         return new CouchDbDataSet(selectItems, streamingView);
     }
 
     @Override
-    protected DataSet materializeMainSchemaTable(Table table, Column[] 
columns, int maxRows) {
+    protected DataSet materializeMainSchemaTable(Table table, List<Column> 
columns, int maxRows) {
         return materializeMainSchemaTable(table, columns, 1, maxRows);
     }
 

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/couchdb/src/main/java/org/apache/metamodel/couchdb/CouchDbDataSet.java
----------------------------------------------------------------------
diff --git 
a/couchdb/src/main/java/org/apache/metamodel/couchdb/CouchDbDataSet.java 
b/couchdb/src/main/java/org/apache/metamodel/couchdb/CouchDbDataSet.java
index 47b0ac9..fef648e 100644
--- a/couchdb/src/main/java/org/apache/metamodel/couchdb/CouchDbDataSet.java
+++ b/couchdb/src/main/java/org/apache/metamodel/couchdb/CouchDbDataSet.java
@@ -19,6 +19,7 @@
 package org.apache.metamodel.couchdb;
 
 import java.util.Iterator;
+import java.util.List;
 
 import org.apache.metamodel.data.AbstractDataSet;
 import org.apache.metamodel.data.DataSetHeader;
@@ -37,7 +38,7 @@ final class CouchDbDataSet extends AbstractDataSet {
     private final StreamingViewResult _streamingViewResult;
     private Row _row;
 
-    public CouchDbDataSet(SelectItem[] selectItems, StreamingViewResult 
streamingViewResult) {
+    public CouchDbDataSet(List<SelectItem> selectItems, StreamingViewResult 
streamingViewResult) {
         super(selectItems);
         _streamingViewResult = streamingViewResult;
 

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/couchdb/src/main/java/org/apache/metamodel/couchdb/CouchDbSimpleTableDefSchemaBuilder.java
----------------------------------------------------------------------
diff --git 
a/couchdb/src/main/java/org/apache/metamodel/couchdb/CouchDbSimpleTableDefSchemaBuilder.java
 
b/couchdb/src/main/java/org/apache/metamodel/couchdb/CouchDbSimpleTableDefSchemaBuilder.java
index 308d8f2..97e0f8b 100644
--- 
a/couchdb/src/main/java/org/apache/metamodel/couchdb/CouchDbSimpleTableDefSchemaBuilder.java
+++ 
b/couchdb/src/main/java/org/apache/metamodel/couchdb/CouchDbSimpleTableDefSchemaBuilder.java
@@ -40,8 +40,7 @@ public class CouchDbSimpleTableDefSchemaBuilder extends 
SimpleTableDefSchemaBuil
     @Override
     public MutableSchema build() {
         MutableSchema schema = super.build();
-        MutableTable[] tables = schema.getTables();
-        for (MutableTable table : tables) {
+        for (MutableTable table : schema.getMutableTables()) {
             CouchDbTableCreationBuilder.addMandatoryColumns(table);
         }
         return schema;

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/couchdb/src/test/java/org/apache/metamodel/couchdb/CouchDbDataContextTest.java
----------------------------------------------------------------------
diff --git 
a/couchdb/src/test/java/org/apache/metamodel/couchdb/CouchDbDataContextTest.java
 
b/couchdb/src/test/java/org/apache/metamodel/couchdb/CouchDbDataContextTest.java
index c2ec998..508f3f1 100644
--- 
a/couchdb/src/test/java/org/apache/metamodel/couchdb/CouchDbDataContextTest.java
+++ 
b/couchdb/src/test/java/org/apache/metamodel/couchdb/CouchDbDataContextTest.java
@@ -166,7 +166,7 @@ public class CouchDbDataContextTest extends CouchDbTestCase 
{
                 + 
"Column[name=bar,columnNumber=2,type=STRING,nullable=null,nativeType=null,columnSize=null],
 "
                 + 
"Column[name=baz,columnNumber=3,type=INTEGER,nullable=null,nativeType=null,columnSize=null],
 "
                 + 
"Column[name=foo,columnNumber=4,type=STRING,nullable=null,nativeType=null,columnSize=null]]",
-                Arrays.toString(table.getColumns()));
+                Arrays.toString(table.getColumns().toArray()));
 
         // first delete the manually created database!
         dc.executeUpdate(new UpdateScript() {
@@ -184,7 +184,7 @@ public class CouchDbDataContextTest extends CouchDbTestCase 
{
             public void run(UpdateCallback callback) {
                 Table table = callback.createTable(dc.getDefaultSchema(), 
databaseName).withColumn("foo")
                         
.ofType(ColumnType.STRING).withColumn("greeting").ofType(ColumnType.STRING).execute();
-                assertEquals("[_id, _rev, foo, greeting]", 
Arrays.toString(table.getColumnNames()));
+                assertEquals("[_id, _rev, foo, greeting]", 
Arrays.toString(table.getColumnNames().toArray()));
             }
         });
 
@@ -256,10 +256,10 @@ public class CouchDbDataContextTest extends 
CouchDbTestCase {
 
         // verify schema and execute query
         Schema schema = dc.getMainSchema();
-        assertEquals("[" + getDatabaseName() + "]", 
Arrays.toString(schema.getTableNames()));
+        assertEquals("[" + getDatabaseName() + "]", 
Arrays.toString(schema.getTableNames().toArray()));
 
         assertEquals("[_id, _rev, age, gender, name]",
-                
Arrays.toString(schema.getTableByName(getDatabaseName()).getColumnNames()));
+                
Arrays.toString(schema.getTableByName(getDatabaseName()).getColumnNames().toArray()));
         Column idColumn = 
schema.getTableByName(getDatabaseName()).getColumnByName("_id");
         
assertEquals("Column[name=_id,columnNumber=0,type=STRING,nullable=false,nativeType=null,columnSize=null]",
                 idColumn.toString());
@@ -404,7 +404,7 @@ public class CouchDbDataContextTest extends CouchDbTestCase 
{
         Table table = dc.getTableByQualifiedLabel(getDatabaseName());
         assertNotNull(table);
 
-        assertEquals("[_id, _rev, name, gender, age]", 
Arrays.toString(table.getColumnNames()));
+        assertEquals("[_id, _rev, name, gender, age]", 
Arrays.toString(table.getColumnNames().toArray()));
 
         DataSet ds;
 

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/csv/src/main/java/org/apache/metamodel/csv/CsvCreateTableBuilder.java
----------------------------------------------------------------------
diff --git 
a/csv/src/main/java/org/apache/metamodel/csv/CsvCreateTableBuilder.java 
b/csv/src/main/java/org/apache/metamodel/csv/CsvCreateTableBuilder.java
index cd0bb38..b197f31 100644
--- a/csv/src/main/java/org/apache/metamodel/csv/CsvCreateTableBuilder.java
+++ b/csv/src/main/java/org/apache/metamodel/csv/CsvCreateTableBuilder.java
@@ -23,6 +23,8 @@ import org.apache.metamodel.schema.MutableTable;
 import org.apache.metamodel.schema.Schema;
 import org.apache.metamodel.schema.Table;
 
+import java.util.List;
+
 final class CsvCreateTableBuilder extends 
AbstractTableCreationBuilder<CsvUpdateCallback> {
 
     public CsvCreateTableBuilder(CsvUpdateCallback updateCallback, Schema 
schema, String name) {
@@ -37,12 +39,12 @@ final class CsvCreateTableBuilder extends 
AbstractTableCreationBuilder<CsvUpdate
         CsvUpdateCallback csvUpdateCallback = getUpdateCallback();
 
         MutableTable table = getTable();
-        String[] columnNames = table.getColumnNames();
+        List<String> columnNames = table.getColumnNames();
 
         CsvDataContext csvDataContext = (CsvDataContext) 
csvUpdateCallback.getDataContext();
 
         if (csvDataContext.getConfiguration().getColumnNameLineNumber() != 
CsvConfiguration.NO_COLUMN_NAME_LINE) {
-            csvUpdateCallback.writeRow(columnNames, false);
+            csvUpdateCallback.writeRow(columnNames.toArray(new 
String[columnNames.size()]), false);
         }
 
         CsvSchema schema = (CsvSchema) table.getSchema();

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/csv/src/main/java/org/apache/metamodel/csv/CsvDataContext.java
----------------------------------------------------------------------
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 2e66ebe..34b25fa 100644
--- a/csv/src/main/java/org/apache/metamodel/csv/CsvDataContext.java
+++ b/csv/src/main/java/org/apache/metamodel/csv/CsvDataContext.java
@@ -270,7 +270,7 @@ public final class CsvDataContext extends 
QueryPostprocessDataContext implements
     }
 
     @Override
-    public DataSet materializeMainSchemaTable(Table table, Column[] columns, 
int maxRows) {
+    public DataSet materializeMainSchemaTable(Table table, List<Column> 
columns, int maxRows) {
         final int lineNumber = _configuration.getColumnNameLineNumber();
         final int columnCount = table.getColumnCount();
 
@@ -282,7 +282,7 @@ public final class CsvDataContext extends 
QueryPostprocessDataContext implements
                 String line = reader.readLine();
                 if (line == null) {
                     FileHelper.safeClose(reader);
-                    return new EmptyDataSet(columns);
+                    return EmptyDataSet.fromColumns(columns);
                 }
             }
         } catch (IOException e) {

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/csv/src/main/java/org/apache/metamodel/csv/CsvDataSet.java
----------------------------------------------------------------------
diff --git a/csv/src/main/java/org/apache/metamodel/csv/CsvDataSet.java 
b/csv/src/main/java/org/apache/metamodel/csv/CsvDataSet.java
index b93db3e..96acae7 100644
--- a/csv/src/main/java/org/apache/metamodel/csv/CsvDataSet.java
+++ b/csv/src/main/java/org/apache/metamodel/csv/CsvDataSet.java
@@ -19,11 +19,14 @@
 package org.apache.metamodel.csv;
 
 import java.io.IOException;
+import java.util.List;
+import java.util.stream.Collectors;
 
 import org.apache.metamodel.MetaModelException;
 import org.apache.metamodel.data.AbstractDataSet;
 import org.apache.metamodel.data.DefaultRow;
 import org.apache.metamodel.data.Row;
+import org.apache.metamodel.query.SelectItem;
 import org.apache.metamodel.schema.Column;
 import org.apache.metamodel.util.FileHelper;
 
@@ -41,9 +44,9 @@ final class CsvDataSet extends AbstractDataSet {
     private volatile Integer _rowsRemaining;
     private volatile Row _row;
 
-    public CsvDataSet(CSVReader reader, Column[] columns, Integer maxRows, int 
columnsInTable,
-            boolean failOnInconsistentRowLength) {
-        super(columns);
+    public CsvDataSet(CSVReader reader, List<Column> columns, Integer maxRows, 
int columnsInTable,
+                      boolean failOnInconsistentRowLength) {
+        
super(columns.stream().map(SelectItem::new).collect(Collectors.toList()));
         _reader = reader;
         _columnsInTable = columnsInTable;
         _failOnInconsistentRowLength = failOnInconsistentRowLength;

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/csv/src/main/java/org/apache/metamodel/csv/CsvSchema.java
----------------------------------------------------------------------
diff --git a/csv/src/main/java/org/apache/metamodel/csv/CsvSchema.java 
b/csv/src/main/java/org/apache/metamodel/csv/CsvSchema.java
index 6de36a6..6c9a01e 100644
--- a/csv/src/main/java/org/apache/metamodel/csv/CsvSchema.java
+++ b/csv/src/main/java/org/apache/metamodel/csv/CsvSchema.java
@@ -18,9 +18,13 @@
  */
 package org.apache.metamodel.csv;
 
+import com.google.common.collect.Lists;
 import org.apache.metamodel.schema.AbstractSchema;
 import org.apache.metamodel.schema.Table;
 
+import java.util.ArrayList;
+import java.util.List;
+
 final class CsvSchema extends AbstractSchema {
 
     private static final long serialVersionUID = 1L;
@@ -54,10 +58,10 @@ final class CsvSchema extends AbstractSchema {
        }
 
        @Override
-       public Table[] getTables() {
+       public List<Table> getTables() {
                if (_table == null) {
-                       return new Table[0];
+                       return new ArrayList<>();
                }
-               return new Table[] { _table };
+               return Lists.newArrayList(_table);
        }
 }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/csv/src/main/java/org/apache/metamodel/csv/CsvTable.java
----------------------------------------------------------------------
diff --git a/csv/src/main/java/org/apache/metamodel/csv/CsvTable.java 
b/csv/src/main/java/org/apache/metamodel/csv/CsvTable.java
index 0887eee..c786e70 100644
--- a/csv/src/main/java/org/apache/metamodel/csv/CsvTable.java
+++ b/csv/src/main/java/org/apache/metamodel/csv/CsvTable.java
@@ -19,7 +19,9 @@
 package org.apache.metamodel.csv;
 
 import java.io.IOException;
+import java.util.*;
 
+import com.google.common.collect.Lists;
 import org.apache.metamodel.schema.AbstractTable;
 import org.apache.metamodel.schema.Column;
 import org.apache.metamodel.schema.ColumnType;
@@ -40,7 +42,7 @@ final class CsvTable extends AbstractTable {
 
     private final CsvSchema _schema;
     private final String _tableName;
-    private Column[] _columns;
+    private List<Column> _columns;
 
     /**
      * Constructor for creating a new CSV table which has not yet been written.
@@ -48,7 +50,7 @@ final class CsvTable extends AbstractTable {
      * @param schema
      * @param columnNames
      */
-    public CsvTable(CsvSchema schema, String tableName, String[] columnNames) {
+    public CsvTable(CsvSchema schema, String tableName, List<String> 
columnNames) {
         this(schema, tableName);
         _columns = buildColumns(columnNames);
     }
@@ -75,7 +77,7 @@ final class CsvTable extends AbstractTable {
     }
 
     @Override
-    public Column[] getColumns() {
+    public List<Column> getColumns() {
         if (_columns == null) {
             synchronized (this) {
                 if (_columns == null) {
@@ -86,7 +88,7 @@ final class CsvTable extends AbstractTable {
         return _columns;
     }
 
-    private Column[] buildColumns() {
+    private List<Column> buildColumns() {
         CSVReader reader = null;
         try {
             reader = _schema.getDataContext().createCsvReader(0);
@@ -95,7 +97,7 @@ final class CsvTable extends AbstractTable {
             for (int i = 1; i < columnNameLineNumber; i++) {
                 reader.readNext();
             }
-            final String[] columnHeaders = reader.readNext();
+            final List<String> columnHeaders = 
Arrays.asList(Optional.ofNullable(reader.readNext()).orElse(new String[0]));
 
             reader.close();
             return buildColumns(columnHeaders);
@@ -107,9 +109,9 @@ final class CsvTable extends AbstractTable {
         }
     }
 
-    private Column[] buildColumns(final String[] columnNames) {
+    private List<Column> buildColumns(final List<String> columnNames) {
         if (columnNames == null) {
-            return new Column[0];
+            return new ArrayList<>();
         }
         
         final CsvConfiguration configuration = 
_schema.getDataContext().getConfiguration();
@@ -117,16 +119,17 @@ final class CsvTable extends AbstractTable {
         final boolean nullable = 
!configuration.isFailOnInconsistentRowLength();
         final ColumnNamingStrategy columnNamingStrategy = 
configuration.getColumnNamingStrategy();
 
-        final Column[] columns = new Column[columnNames.length];
+        List<Column> columns = new ArrayList<>();
+
         try (final ColumnNamingSession namingSession = 
columnNamingStrategy.startColumnNamingSession()) {
-            for (int i = 0; i < columnNames.length; i++) {
+            for (int i = 0; i < columnNames.size(); i++) {
                 final String intrinsicColumnName = columnNameLineNumber == 
CsvConfiguration.NO_COLUMN_NAME_LINE ? null
-                        : columnNames[i];
+                        : columnNames.get(i);
                 final String columnName = namingSession.getNextColumnName(new 
ColumnNamingContextImpl(this,
                         intrinsicColumnName, i));
                 final Column column = new MutableColumn(columnName, 
ColumnType.STRING, this, i, null, null, nullable,
                         null, false, null);
-                columns[i] = column;
+                columns.add(column);
             }
         }
         return columns;
@@ -143,8 +146,8 @@ final class CsvTable extends AbstractTable {
     }
 
     @Override
-    public Relationship[] getRelationships() {
-        return new Relationship[0];
+    public Collection<Relationship> getRelationships() {
+        return Lists.newArrayList();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/csv/src/main/java/org/apache/metamodel/csv/SingleLineCsvDataSet.java
----------------------------------------------------------------------
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 250c249..4b24892 100644
--- a/csv/src/main/java/org/apache/metamodel/csv/SingleLineCsvDataSet.java
+++ b/csv/src/main/java/org/apache/metamodel/csv/SingleLineCsvDataSet.java
@@ -20,11 +20,14 @@ package org.apache.metamodel.csv;
 
 import java.io.BufferedReader;
 import java.io.IOException;
+import java.util.List;
+import java.util.stream.Collectors;
 
 import org.apache.metamodel.MetaModelException;
 import org.apache.metamodel.data.AbstractDataSet;
 import org.apache.metamodel.data.DataSetHeader;
 import org.apache.metamodel.data.Row;
+import org.apache.metamodel.query.SelectItem;
 import org.apache.metamodel.schema.Column;
 import org.apache.metamodel.util.FileHelper;
 
@@ -46,9 +49,9 @@ final class SingleLineCsvDataSet extends AbstractDataSet {
     private volatile Integer _rowsRemaining;
     private volatile Row _row;
 
-    public SingleLineCsvDataSet(BufferedReader reader, ICSVParser csvParser, 
Column[] columns, Integer maxRows,
-            int columnsInTable, boolean failOnInconsistentRowLength) {
-        super(columns);
+    public SingleLineCsvDataSet(BufferedReader reader, ICSVParser csvParser, 
List<Column> columns, Integer maxRows,
+                                int columnsInTable, boolean 
failOnInconsistentRowLength) {
+        
super(columns.stream().map(SelectItem::new).collect(Collectors.toList()));
         _reader = reader;
         _csvParser = csvParser;
         _columnsInTable = columnsInTable;

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/csv/src/test/java/org/apache/metamodel/csv/CsvBigFileMemoryTest.java
----------------------------------------------------------------------
diff --git 
a/csv/src/test/java/org/apache/metamodel/csv/CsvBigFileMemoryTest.java 
b/csv/src/test/java/org/apache/metamodel/csv/CsvBigFileMemoryTest.java
index cf76c75..5c7d229 100644
--- a/csv/src/test/java/org/apache/metamodel/csv/CsvBigFileMemoryTest.java
+++ b/csv/src/test/java/org/apache/metamodel/csv/CsvBigFileMemoryTest.java
@@ -62,7 +62,7 @@ public class CsvBigFileMemoryTest extends TestCase {
         System.out.println("time at start: " + timeAtStart);
 
         final DataContext dc = new CsvDataContext(file, new 
CsvConfiguration(1, false, false));
-        final Table t = dc.getDefaultSchema().getTables()[0];
+        final Table t = dc.getDefaultSchema().getTables().get(0);
 
         final long timeAfterDataContext = System.currentTimeMillis();
         System.out.println("time after DataContext: " + timeAfterDataContext);
@@ -116,7 +116,7 @@ public class CsvBigFileMemoryTest extends TestCase {
     public void testApproximatedCountHugeFile() throws Exception {
         DataContext dc = new CsvDataContext(getHugeFile());
 
-        Table table = dc.getDefaultSchema().getTables()[0];
+        Table table = dc.getDefaultSchema().getTables().get(0);
         Query q = dc.query().from(table).selectCount().toQuery();
         SelectItem selectItem = q.getSelectClause().getItem(0);
         selectItem.setFunctionApproximationAllowed(true);

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/csv/src/test/java/org/apache/metamodel/csv/CsvDataContextTest.java
----------------------------------------------------------------------
diff --git a/csv/src/test/java/org/apache/metamodel/csv/CsvDataContextTest.java 
b/csv/src/test/java/org/apache/metamodel/csv/CsvDataContextTest.java
index 39f9d43..029a179 100644
--- a/csv/src/test/java/org/apache/metamodel/csv/CsvDataContextTest.java
+++ b/csv/src/test/java/org/apache/metamodel/csv/CsvDataContextTest.java
@@ -79,10 +79,10 @@ public class CsvDataContextTest extends TestCase {
         
         CsvDataContext dc1 = new CsvDataContext(file, csvConfiguration);
 
-        Table[] tables = dc1.getDefaultSchema().getTables();
-        assertEquals(1, tables.length);
+        List<Table> tables = dc1.getDefaultSchema().getTables();
+        assertEquals(1, tables.size());
         
-        Table table = tables[0];
+        Table table = tables.get(0);
         assertEquals("testEmptyFileNoColumnHeaderLine.csv", table.getName());
         assertEquals(2, table.getColumnCount());
         
@@ -100,7 +100,7 @@ public class CsvDataContextTest extends TestCase {
         final CsvDataContext dc = new CsvDataContext(file);
         assertEquals(1, dc.getDefaultSchema().getTableCount());
 
-        final Table table1 = dc.getDefaultSchema().getTables()[0];
+        final Table table1 = dc.getDefaultSchema().getTables().get(0);
         assertEquals("testEmptyFileNoColumnHeaderLine.csv", table1.getName());
         assertEquals(0, table1.getColumnCount());
 
@@ -139,7 +139,7 @@ public class CsvDataContextTest extends TestCase {
                 .replaceAll("\n", "!LINEBREAK!"));
 
         final CsvDataContext dc = new CsvDataContext(targetFile);
-        final Table table = dc.getDefaultSchema().getTables()[0];
+        final Table table = dc.getDefaultSchema().getTables().get(0);
 
         dc.executeUpdate(new UpdateScript() {
             @Override
@@ -181,7 +181,7 @@ public class CsvDataContextTest extends TestCase {
                 CsvConfiguration.NO_COLUMN_NAME_LINE));
         assertEquals(1, dc.getDefaultSchema().getTableCount());
 
-        Table table = dc.getDefaultSchema().getTables()[0];
+        Table table = dc.getDefaultSchema().getTables().get(0);
         assertEquals("empty_file.csv", table.getName());
         assertEquals(0, table.getColumnCount());
     }
@@ -190,7 +190,7 @@ public class CsvDataContextTest extends TestCase {
         DataContext dc = new CsvDataContext(new 
File("src/test/resources/csv_people.csv"), new CsvConfiguration(20));
         assertEquals(1, dc.getDefaultSchema().getTableCount());
 
-        Table table = dc.getDefaultSchema().getTables()[0];
+        Table table = dc.getDefaultSchema().getTables().get(0);
         assertEquals("csv_people.csv", table.getName());
         assertEquals(0, table.getColumnCount());
     }
@@ -236,7 +236,7 @@ public class CsvDataContextTest extends TestCase {
     public void testApproximatedCountSmallFile() throws Exception {
         DataContext dc = new CsvDataContext(new 
File("src/test/resources/csv_people.csv"));
 
-        Table table = dc.getDefaultSchema().getTables()[0];
+        Table table = dc.getDefaultSchema().getTables().get(0);
         Query q = dc.query().from(table).selectCount().toQuery();
         SelectItem selectItem = q.getSelectClause().getItem(0);
         selectItem.setFunctionApproximationAllowed(true);
@@ -252,7 +252,7 @@ public class CsvDataContextTest extends TestCase {
 
     public void testFilterOnNumberColumn() throws Exception {
         CsvDataContext dc = new CsvDataContext(new 
File("src/test/resources/csv_people.csv"));
-        Table table = dc.getDefaultSchema().getTables()[0];
+        Table table = dc.getDefaultSchema().getTables().get(0);
 
         Query q = 
dc.query().from(table).select("name").where("age").greaterThan(18).toQuery();
         List<Object[]> result = dc.executeQuery(q).toObjectArrays();
@@ -297,7 +297,7 @@ public class CsvDataContextTest extends TestCase {
     }
 
     public void doTicketFileTests(DataContext dc) {
-        Table table = dc.getDefaultSchema().getTables()[0];
+        Table table = dc.getDefaultSchema().getTables().get(0);
         Query q = dc.query().from(table).select(table.getColumns()).toQuery();
 
         DataSet dataSet = dc.executeQuery(q);
@@ -318,18 +318,18 @@ public class CsvDataContextTest extends TestCase {
     public void testHighColumnNameLineNumber() throws Exception {
         File file = new File("src/test/resources/csv_people.csv");
         QueryPostprocessDataContext dc = new CsvDataContext(file, new 
CsvConfiguration(3));
-        Schema[] schemas = dc.getSchemas();
-        assertEquals(2, schemas.length);
+
+        assertEquals(2, dc.getSchemas().size());
         Schema schema = dc.getDefaultSchema();
         assertEquals("resources", schema.getName());
         assertEquals(1, schema.getTableCount());
-        Table table = schema.getTables()[0];
+        Table table = schema.getTables().get(0);
         assertEquals("csv_people.csv", table.getName());
 
         assertEquals(4, table.getColumnCount());
         assertEquals(0, table.getRelationshipCount());
 
-        Column[] columns = table.getColumns();
+        Column[] columns = table.getColumns().toArray(new Column[0]);
         assertEquals("2", columns[0].getName());
         assertEquals("michael", columns[1].getName());
         assertEquals("male", columns[2].getName());
@@ -350,18 +350,17 @@ public class CsvDataContextTest extends TestCase {
         File file = new File("src/test/resources/csv_people.csv");
         QueryPostprocessDataContext dc = new CsvDataContext(file, new 
CsvConfiguration(
                 CsvConfiguration.NO_COLUMN_NAME_LINE));
-        Schema[] schemas = dc.getSchemas();
-        assertEquals(2, schemas.length);
+        assertEquals(2, dc.getSchemas().size());
         Schema schema = dc.getDefaultSchema();
         assertEquals("resources", schema.getName());
         assertEquals(1, schema.getTableCount());
-        Table table = schema.getTables()[0];
+        Table table = schema.getTables().get(0);
         assertEquals("csv_people.csv", table.getName());
 
         assertEquals(4, table.getColumnCount());
         assertEquals(0, table.getRelationshipCount());
 
-        Column[] columns = table.getColumns();
+        Column[] columns = table.getColumns().toArray(new Column[0]);
         assertEquals("A", columns[0].getName());
         assertEquals("B", columns[1].getName());
         assertEquals("C", columns[2].getName());
@@ -381,18 +380,17 @@ public class CsvDataContextTest extends TestCase {
     public void testGetSchemas() throws Exception {
         File file = new File("src/test/resources/csv_people.csv");
         QueryPostprocessDataContext dc = new CsvDataContext(file);
-        Schema[] schemas = dc.getSchemas();
-        assertEquals(2, schemas.length);
+        assertEquals(2, dc.getSchemas().size());
         Schema schema = dc.getDefaultSchema();
         assertEquals("resources", schema.getName());
         assertEquals(1, schema.getTableCount());
-        Table table = schema.getTables()[0];
+        Table table = schema.getTables().get(0);
         assertEquals("csv_people.csv", table.getName());
 
         assertEquals(4, table.getColumnCount());
         assertEquals(0, table.getRelationshipCount());
 
-        Column[] columns = table.getColumns();
+        Column[] columns = table.getColumns().toArray(new Column[0]);
         assertEquals("id", columns[0].getName());
         assertEquals("name", columns[1].getName());
         assertEquals("gender", columns[2].getName());
@@ -452,7 +450,7 @@ public class CsvDataContextTest extends TestCase {
         DataSet data = dc.executeQuery(q);
         assertEquals(
                 "[csv_people.csv.gender, MAX(csv_people.csv.age), 
MIN(csv_people.csv.age), COUNT(*) AS total, MIN(csv_people.csv.id) AS firstId]",
-                Arrays.toString(data.getSelectItems()));
+                Arrays.toString(data.getSelectItems().toArray()));
 
         String[] expectations = new String[] { "Row[values=[female, 20, 17, 5, 
5]]", "Row[values=[male, 19, 17, 4, 1]]" };
 
@@ -466,7 +464,7 @@ public class CsvDataContextTest extends TestCase {
     public void testMaterializeTable() throws Exception {
         File file = new File("src/test/resources/csv_people.csv");
         CsvDataContext dc = new CsvDataContext(file, new CsvConfiguration(1, 
false, false));
-        Table table = dc.getSchemas()[0].getTables()[0];
+        Table table = dc.getSchemas().get(0).getTables().get(0);
         DataSet dataSet = dc.materializeMainSchemaTable(table, 
table.getColumns(), -1);
         assertNull(dataSet.getRow());
         assertTrue(dataSet.next());
@@ -494,7 +492,7 @@ public class CsvDataContextTest extends TestCase {
     public void testAlternativeDelimitors() throws Exception {
         File file = new 
File("src/test/resources/csv_semicolon_singlequote.csv");
         CsvDataContext dc = new CsvDataContext(file, semicolonConfiguration);
-        Table table = dc.getSchemas()[0].getTables()[0];
+        Table table = dc.getSchemas().get(0).getTables().get(0);
         DataSet dataSet = dc.materializeMainSchemaTable(table, 
table.getColumns(), -1);
         assertTrue(dataSet.next());
         assertEquals("Row[values=[1, mike, male, 18]]", 
dataSet.getRow().toString());
@@ -517,7 +515,7 @@ public class CsvDataContextTest extends TestCase {
     public void testMaxRows() throws Exception {
         File file = new 
File("src/test/resources/csv_semicolon_singlequote.csv");
         CsvDataContext dc = new CsvDataContext(file, semicolonConfiguration);
-        Table table = dc.getDefaultSchema().getTables()[0];
+        Table table = dc.getDefaultSchema().getTables().get(0);
         Query query = new 
Query().from(table).select(table.getColumns()).setMaxRows(5);
         DataSet dataSet = dc.executeQuery(query);
 
@@ -528,7 +526,7 @@ public class CsvDataContextTest extends TestCase {
     public void testQueryOnlyAggregate() throws Exception {
         File file = new File("src/test/resources/csv_people.csv");
         QueryPostprocessDataContext dc = new CsvDataContext(file);
-        Table table = dc.getDefaultSchema().getTables()[0];
+        Table table = dc.getDefaultSchema().getTables().get(0);
 
         Query q = new Query().selectCount().from(table);
         assertEquals("SELECT COUNT(*) FROM resources.csv_people.csv", 
q.toString());
@@ -539,7 +537,7 @@ public class CsvDataContextTest extends TestCase {
         assertEquals(1, row.length);
         assertEquals("[9]", Arrays.toString(row));
 
-        q.select(table.getColumns()[0]);
+        q.select(table.getColumns().get(0));
         assertEquals("SELECT COUNT(*), csv_people.csv.id FROM 
resources.csv_people.csv", q.toString());
         data = dc.executeQuery(q).toObjectArrays();
         assertEquals(9, data.size());
@@ -563,7 +561,7 @@ public class CsvDataContextTest extends TestCase {
     public void testOffsetAndMaxrows() throws Exception {
         DataContext dc = new CsvDataContext(new 
File("src/test/resources/csv_people.csv"));
 
-        Table table = dc.getDefaultSchema().getTables()[0];
+        Table table = dc.getDefaultSchema().getTables().get(0);
         Query q = 
dc.query().from(table).select(table.getColumnByName("name")).toQuery();
         q.setFirstRow(3);
         q.setMaxRows(2);
@@ -571,7 +569,7 @@ public class CsvDataContextTest extends TestCase {
         DataSet ds;
 
         ds = dc.executeQuery(q);
-        assertEquals(1, ds.getSelectItems().length);
+        assertEquals(1, ds.getSelectItems().size());
         assertTrue(ds.next());
         assertEquals("peter", ds.getRow().getValue(0).toString());
         assertTrue(ds.next());
@@ -594,7 +592,7 @@ public class CsvDataContextTest extends TestCase {
         FileHelper.copy(new 
File("src/test/resources/csv_to_be_truncated.csv"), file);
 
         CsvDataContext dc = new CsvDataContext(file, new CsvConfiguration(1, 
"UTF8", ',', '"', '\\', true));
-        assertEquals("[id, name, gender, age]", 
Arrays.toString(dc.getDefaultSchema().getTable(0).getColumnNames()));
+        assertEquals("[id, name, gender, age]", 
Arrays.toString(dc.getDefaultSchema().getTable(0).getColumnNames().toArray()));
 
         dc.executeUpdate(new UpdateScript() {
             @Override
@@ -628,10 +626,10 @@ public class CsvDataContextTest extends TestCase {
                 Table table = cb.createTable(schema, 
"foobar").withColumn("foo").withColumn("bar").execute();
                 tableRef.set(table);
                 assertEquals(schema, table.getSchema());
-                assertEquals(schema.getTables()[0], table);
+                assertEquals(schema.getTables().get(0), table);
                 assertTrue(file.exists());
 
-                assertEquals("[foo, bar]", 
Arrays.toString(table.getColumnNames()));
+                assertEquals("[foo, bar]", 
Arrays.toString(table.getColumnNames().toArray()));
 
                 cb.insertInto(table).value(0, "f").value(1, "b").execute();
                 cb.insertInto(table).value(0, 
"o").value(table.getColumnByName("bar"), "a").execute();
@@ -640,9 +638,9 @@ public class CsvDataContextTest extends TestCase {
         });
 
         // query the file to check results
-        final Table readTable = schema.getTables()[0];
+        final Table readTable = schema.getTables().get(0);
         assertEquals(tableRef.get(), readTable);
-        assertEquals("[foo, bar]", 
Arrays.toString(readTable.getColumnNames()));
+        assertEquals("[foo, bar]", 
Arrays.toString(readTable.getColumnNames().toArray()));
 
         final Query query = 
dc.query().from(readTable).select("bar").and("foo").toQuery();
         DataSet ds = dc.executeQuery(query);
@@ -723,15 +721,15 @@ public class CsvDataContextTest extends TestCase {
     public void testOnlyNumberOneSymbol() throws Exception {
         DataContext dc = new CsvDataContext(new 
File("src/test/resources/csv_only_number_one.csv"));
         Map<Column, TypeConverter<?, ?>> converters = 
Converters.autoDetectConverters(dc, dc.getDefaultSchema()
-                .getTables()[0], 1000);
+                .getTables().get(0), 1000);
 
         assertEquals(1, converters.size());
         assertEquals(StringToBooleanConverter.class, 
converters.values().iterator().next().getClass());
 
         dc = Converters.addTypeConverters(dc, converters);
 
-        Table table = dc.getDefaultSchema().getTables()[0];
-        MutableColumn col = (MutableColumn) table.getColumns()[0];
+        Table table = dc.getDefaultSchema().getTables().get(0);
+        MutableColumn col = (MutableColumn) table.getColumns().get(0);
         Query q = dc.query().from(table).select(col).toQuery();
         assertEquals("SELECT csv_only_number_one.csv.number FROM 
resources.csv_only_number_one.csv", q.toSql());
 

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/csv/src/test/java/org/apache/metamodel/csv/SingleLineCsvRowTest.java
----------------------------------------------------------------------
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 a01821c..0686cab 100644
--- a/csv/src/test/java/org/apache/metamodel/csv/SingleLineCsvRowTest.java
+++ b/csv/src/test/java/org/apache/metamodel/csv/SingleLineCsvRowTest.java
@@ -22,7 +22,9 @@ import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
+import java.util.List;
 
+import com.google.common.collect.Lists;
 import org.apache.metamodel.data.Row;
 import org.apache.metamodel.schema.Column;
 import org.apache.metamodel.schema.MutableColumn;
@@ -35,7 +37,7 @@ public class SingleLineCsvRowTest {
 
     @Test
     public void testSerialize() throws Exception {
-        final Column[] columns = new Column[] { new MutableColumn("1"), new 
MutableColumn("2") };
+        final List<Column> columns = Lists.newArrayList( new 
MutableColumn("1"), new MutableColumn("2"));
         CSVParser csvParser = new CSVParser();
         final SingleLineCsvDataSet dataSet = new SingleLineCsvDataSet(null, 
csvParser, columns, null, 2, false);
         final SingleLineCsvRow originalRow = new SingleLineCsvRow(dataSet, 
"foo,bar", 2, false, 1);

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/csv/src/test/java/org/apache/metamodel/intercept/InterceptionCsvIntegrationTest.java
----------------------------------------------------------------------
diff --git 
a/csv/src/test/java/org/apache/metamodel/intercept/InterceptionCsvIntegrationTest.java
 
b/csv/src/test/java/org/apache/metamodel/intercept/InterceptionCsvIntegrationTest.java
index 7974beb..06c1822 100644
--- 
a/csv/src/test/java/org/apache/metamodel/intercept/InterceptionCsvIntegrationTest.java
+++ 
b/csv/src/test/java/org/apache/metamodel/intercept/InterceptionCsvIntegrationTest.java
@@ -68,10 +68,10 @@ public class InterceptionCsvIntegrationTest extends 
TestCase {
                });
 
                assertEquals("[table]",
-                               
Arrays.toString(dc.getDefaultSchema().getTableNames()));
-               Table table = dc.getDefaultSchema().getTables()[0];
+                               
Arrays.toString(dc.getDefaultSchema().getTableNames().toArray()));
+               Table table = dc.getDefaultSchema().getTables().get(0);
                assertEquals("[col1, col2, foobar]",
-                               Arrays.toString(table.getColumnNames()));
+                               
Arrays.toString(table.getColumnNames().toArray()));
 
                DataSet ds = dc.query().from(table).select(table.getColumns())
                                .execute();

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/dynamodb/src/main/java/org/apache/metamodel/dynamodb/DynamoDbDataContext.java
----------------------------------------------------------------------
diff --git 
a/dynamodb/src/main/java/org/apache/metamodel/dynamodb/DynamoDbDataContext.java 
b/dynamodb/src/main/java/org/apache/metamodel/dynamodb/DynamoDbDataContext.java
index 255120c..504769d 100644
--- 
a/dynamodb/src/main/java/org/apache/metamodel/dynamodb/DynamoDbDataContext.java
+++ 
b/dynamodb/src/main/java/org/apache/metamodel/dynamodb/DynamoDbDataContext.java
@@ -24,6 +24,7 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import org.apache.metamodel.MetaModelException;
 import org.apache.metamodel.QueryPostprocessDataContext;
@@ -257,11 +258,8 @@ public class DynamoDbDataContext extends 
QueryPostprocessDataContext implements
     }
 
     @Override
-    protected DataSet materializeMainSchemaTable(Table table, Column[] 
columns, int maxRows) {
-        final List<String> attributeNames = new ArrayList<>(columns.length);
-        for (final Column column : columns) {
-            attributeNames.add(column.getName());
-        }
+    protected DataSet materializeMainSchemaTable(Table table, List<Column> 
columns, int maxRows) {
+        final List<String> attributeNames = columns.stream().map(col-> 
col.getName()).collect(Collectors.toList());
         final ScanRequest scanRequest = new ScanRequest(table.getName());
         scanRequest.setAttributesToGet(attributeNames);
         if (maxRows > 0) {

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/dynamodb/src/main/java/org/apache/metamodel/dynamodb/DynamoDbDataSet.java
----------------------------------------------------------------------
diff --git 
a/dynamodb/src/main/java/org/apache/metamodel/dynamodb/DynamoDbDataSet.java 
b/dynamodb/src/main/java/org/apache/metamodel/dynamodb/DynamoDbDataSet.java
index 17b781b..887b3e4 100644
--- a/dynamodb/src/main/java/org/apache/metamodel/dynamodb/DynamoDbDataSet.java
+++ b/dynamodb/src/main/java/org/apache/metamodel/dynamodb/DynamoDbDataSet.java
@@ -19,12 +19,15 @@
 package org.apache.metamodel.dynamodb;
 
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import org.apache.metamodel.data.AbstractDataSet;
 import org.apache.metamodel.data.DataSetHeader;
 import org.apache.metamodel.data.DefaultRow;
 import org.apache.metamodel.data.Row;
+import org.apache.metamodel.query.SelectItem;
 import org.apache.metamodel.schema.Column;
 
 import com.amazonaws.services.dynamodbv2.model.AttributeValue;
@@ -35,8 +38,8 @@ final class DynamoDbDataSet extends AbstractDataSet {
     private final Iterator<Map<String, AttributeValue>> _iterator;
     private Map<String, AttributeValue> _currentItem;
 
-    public DynamoDbDataSet(Column[] columns, ScanResult result) {
-        super(columns);
+    public DynamoDbDataSet(List<Column> columns, ScanResult result) {
+        
super(columns.stream().map(SelectItem::new).collect(Collectors.toList()));
         _iterator = result.getItems().iterator();
     }
 

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/dynamodb/src/main/java/org/apache/metamodel/dynamodb/DynamoDbTableCreationBuilder.java
----------------------------------------------------------------------
diff --git 
a/dynamodb/src/main/java/org/apache/metamodel/dynamodb/DynamoDbTableCreationBuilder.java
 
b/dynamodb/src/main/java/org/apache/metamodel/dynamodb/DynamoDbTableCreationBuilder.java
index c9779df..f989b5d 100644
--- 
a/dynamodb/src/main/java/org/apache/metamodel/dynamodb/DynamoDbTableCreationBuilder.java
+++ 
b/dynamodb/src/main/java/org/apache/metamodel/dynamodb/DynamoDbTableCreationBuilder.java
@@ -63,8 +63,7 @@ class DynamoDbTableCreationBuilder extends 
AbstractTableCreationBuilder<DynamoDb
                 DynamoDbDataContext.SYSTEM_PROPERTY_THROUGHPUT_WRITE_CAPACITY, 
"5"));
         final ProvisionedThroughput provisionedThroughput = new 
ProvisionedThroughput(readCapacity, writeCapacity);
 
-        final Column[] columns = table.getColumns();
-        for (Column column : columns) {
+        for (Column column : table.getColumns()) {
             if (column.isPrimaryKey()) {
                 final KeyType keyType = getKeyType(column.getRemarks());
                 keySchema.add(new KeySchemaElement(column.getName(), keyType));

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/dynamodb/src/test/java/org/apache/metamodel/dynamodb/DynamoDbDataContextIntegrationTest.java
----------------------------------------------------------------------
diff --git 
a/dynamodb/src/test/java/org/apache/metamodel/dynamodb/DynamoDbDataContextIntegrationTest.java
 
b/dynamodb/src/test/java/org/apache/metamodel/dynamodb/DynamoDbDataContextIntegrationTest.java
index 967655d..ba60096 100644
--- 
a/dynamodb/src/test/java/org/apache/metamodel/dynamodb/DynamoDbDataContextIntegrationTest.java
+++ 
b/dynamodb/src/test/java/org/apache/metamodel/dynamodb/DynamoDbDataContextIntegrationTest.java
@@ -147,7 +147,7 @@ public class DynamoDbDataContextIntegrationTest {
                 assertEquals(tableName, table.getName());
 
                 // Right now we can only discover indexed columns
-                assertEquals("[id, counter, project, foundation]", 
Arrays.toString(table.getColumnNames()));
+                assertEquals("[id, counter, project, foundation]", 
Arrays.toString(table.getColumnNames().toArray()));
 
                 final Column idColumn = table.getColumnByName("id");
                 assertEquals(true, idColumn.isPrimaryKey());

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/elasticsearch/native/src/main/java/org/apache/metamodel/elasticsearch/nativeclient/ElasticSearchDataContext.java
----------------------------------------------------------------------
diff --git 
a/elasticsearch/native/src/main/java/org/apache/metamodel/elasticsearch/nativeclient/ElasticSearchDataContext.java
 
b/elasticsearch/native/src/main/java/org/apache/metamodel/elasticsearch/nativeclient/ElasticSearchDataContext.java
index 7353cbd..83d89c7 100644
--- 
a/elasticsearch/native/src/main/java/org/apache/metamodel/elasticsearch/nativeclient/ElasticSearchDataContext.java
+++ 
b/elasticsearch/native/src/main/java/org/apache/metamodel/elasticsearch/nativeclient/ElasticSearchDataContext.java
@@ -24,6 +24,7 @@ import java.util.Arrays;
 import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import org.apache.metamodel.DataContext;
 import org.apache.metamodel.MetaModelException;
@@ -253,7 +254,7 @@ public class ElasticSearchDataContext extends 
QueryPostprocessDataContext implem
             dynamicTableDefinitions.clear();
             dynamicTableDefinitions.addAll(Arrays.asList(tables));
             for (final SimpleTableDef tableDef : dynamicTableDefinitions) {
-                final List<String> tableNames = 
Arrays.asList(theSchema.getTableNames());
+                final List<String> tableNames = theSchema.getTableNames();
 
                 if (!tableNames.contains(tableDef.getName())) {
                     addTable(theSchema, tableDef);
@@ -294,10 +295,10 @@ public class ElasticSearchDataContext extends 
QueryPostprocessDataContext implem
     }
 
     @Override
-    protected DataSet materializeMainSchemaTable(Table table, Column[] 
columns, int maxRows) {
+    protected DataSet materializeMainSchemaTable(Table table, List<Column> 
columns, int maxRows) {
         final SearchRequestBuilder searchRequest = createSearchRequest(table, 
1, maxRows, null);
         final SearchResponse response = searchRequest.execute().actionGet();
-        return new ElasticSearchDataSet(elasticSearchClient, response, 
columns, false);
+        return new ElasticSearchDataSet(elasticSearchClient, response, 
columns.stream().map(SelectItem::new).collect(Collectors.toList()), false);
     }
 
     private SearchRequestBuilder createSearchRequest(Table table, int 
firstRow, int maxRows, QueryBuilder queryBuilder) {

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/elasticsearch/native/src/main/java/org/apache/metamodel/elasticsearch/nativeclient/ElasticSearchDataSet.java
----------------------------------------------------------------------
diff --git 
a/elasticsearch/native/src/main/java/org/apache/metamodel/elasticsearch/nativeclient/ElasticSearchDataSet.java
 
b/elasticsearch/native/src/main/java/org/apache/metamodel/elasticsearch/nativeclient/ElasticSearchDataSet.java
index 7f4048a..1a04bc8 100644
--- 
a/elasticsearch/native/src/main/java/org/apache/metamodel/elasticsearch/nativeclient/ElasticSearchDataSet.java
+++ 
b/elasticsearch/native/src/main/java/org/apache/metamodel/elasticsearch/nativeclient/ElasticSearchDataSet.java
@@ -55,14 +55,7 @@ final class ElasticSearchDataSet extends AbstractDataSet {
         _searchResponse = searchResponse;
         _closed = new AtomicBoolean(false);
     }
-    
-    public ElasticSearchDataSet(Client client, SearchResponse searchResponse, 
Column[] columns,
-            boolean queryPostProcessed) {
-        super(columns);
-        _client = client;
-        _searchResponse = searchResponse;
-        _closed = new AtomicBoolean(false);
-    }
+
 
     @Override
     public void close() {

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/elasticsearch/native/src/test/java/org/apache/metamodel/elasticsearch/nativeclient/ElasticSearchDataContextTest.java
----------------------------------------------------------------------
diff --git 
a/elasticsearch/native/src/test/java/org/apache/metamodel/elasticsearch/nativeclient/ElasticSearchDataContextTest.java
 
b/elasticsearch/native/src/test/java/org/apache/metamodel/elasticsearch/nativeclient/ElasticSearchDataContextTest.java
index 8a83263..ec5ecba 100644
--- 
a/elasticsearch/native/src/test/java/org/apache/metamodel/elasticsearch/nativeclient/ElasticSearchDataContextTest.java
+++ 
b/elasticsearch/native/src/test/java/org/apache/metamodel/elasticsearch/nativeclient/ElasticSearchDataContextTest.java
@@ -125,11 +125,11 @@ public class ElasticSearchDataContextTest {
     @Test
     public void testSimpleQuery() throws Exception {
         assertEquals("[bulktype, peopletype, tweet1, tweet2]",
-                
Arrays.toString(dataContext.getDefaultSchema().getTableNames()));
+                
Arrays.toString(dataContext.getDefaultSchema().getTableNames().toArray()));
 
         Table table = dataContext.getDefaultSchema().getTableByName("tweet1");
 
-        assertEquals("[_id, message, postDate, user]", 
Arrays.toString(table.getColumnNames()));
+        assertEquals("[_id, message, postDate, user]", 
Arrays.toString(table.getColumnNames().toArray()));
 
         assertEquals(ColumnType.STRING, 
table.getColumnByName("user").getType());
         assertEquals(ColumnType.DATE, 
table.getColumnByName("postDate").getType());
@@ -146,7 +146,7 @@ public class ElasticSearchDataContextTest {
     @Test
     public void testDocumentIdAsPrimaryKey() throws Exception {
         Table table = dataContext.getDefaultSchema().getTableByName("tweet2");
-        Column[] pks = table.getPrimaryKeys();
+        Column[] pks = table.getPrimaryKeys().toArray(new Column[0]);
         assertEquals(1, pks.length);
         assertEquals("_id", pks[0].getName());
 
@@ -159,7 +159,7 @@ public class ElasticSearchDataContextTest {
     @Test
     public void testExecutePrimaryKeyLookupQuery() throws Exception {
         Table table = dataContext.getDefaultSchema().getTableByName("tweet2");
-        Column[] pks = table.getPrimaryKeys();
+        Column[] pks = table.getPrimaryKeys().toArray(new Column[0]);
 
         try (DataSet ds = 
dataContext.query().from(table).selectAll().where(pks[0]).eq("tweet_tweet2_1").execute())
 {
             assertTrue(ds.next());
@@ -209,10 +209,10 @@ public class ElasticSearchDataContextTest {
         dataContext.executeUpdate(createTable);
 
         final Table table = schema.getTableByName("testCreateTable");
-        assertEquals("[" + ElasticSearchUtils.FIELD_ID + ", foo, bar]", 
Arrays.toString(table.getColumnNames()));
+        assertEquals("[" + ElasticSearchUtils.FIELD_ID + ", foo, bar]", 
Arrays.toString(table.getColumnNames().toArray()));
 
         final Column fooColumn = table.getColumnByName("foo");
-        final Column idColumn = table.getPrimaryKeys()[0];
+        final Column idColumn = table.getPrimaryKeys().get(0);
         
assertEquals("Column[name=_id,columnNumber=0,type=STRING,nullable=null,nativeType=null,columnSize=null]",
                 idColumn.toString());
 
@@ -491,7 +491,7 @@ public class ElasticSearchDataContextTest {
         DataSet data = dataContext.executeQuery(q);
         assertEquals(
                 "[peopletype.gender, MAX(peopletype.age), MIN(peopletype.age), 
COUNT(*) AS total, MIN(peopletype.id) AS firstId]",
-                Arrays.toString(data.getSelectItems()));
+                Arrays.toString(data.getSelectItems().toArray()));
 
         assertTrue(data.next());
         assertEquals("Row[values=[female, 20, 17, 5, 5]]", 
data.getRow().toString());
@@ -553,7 +553,7 @@ public class ElasticSearchDataContextTest {
 
         ElasticSearchDataContext dataContext2 = new 
ElasticSearchDataContext(client, indexName2);
 
-        assertEquals("[tweet3]", 
Arrays.toString(dataContext2.getDefaultSchema().getTableNames()));
+        assertEquals("[tweet3]", 
Arrays.toString(dataContext2.getDefaultSchema().getTableNames().toArray()));
     }
 
     private static void createIndex() {

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/elasticsearch/rest/src/main/java/org/apache/metamodel/elasticsearch/rest/ElasticSearchRestDataContext.java
----------------------------------------------------------------------
diff --git 
a/elasticsearch/rest/src/main/java/org/apache/metamodel/elasticsearch/rest/ElasticSearchRestDataContext.java
 
b/elasticsearch/rest/src/main/java/org/apache/metamodel/elasticsearch/rest/ElasticSearchRestDataContext.java
index 57ad267..8d89c05 100644
--- 
a/elasticsearch/rest/src/main/java/org/apache/metamodel/elasticsearch/rest/ElasticSearchRestDataContext.java
+++ 
b/elasticsearch/rest/src/main/java/org/apache/metamodel/elasticsearch/rest/ElasticSearchRestDataContext.java
@@ -25,6 +25,7 @@ import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 import org.apache.metamodel.BatchUpdateScript;
 import org.apache.metamodel.DataContext;
@@ -234,7 +235,7 @@ public class ElasticSearchRestDataContext extends 
QueryPostprocessDataContext im
             dynamicTableDefinitions.clear();
             dynamicTableDefinitions.addAll(Arrays.asList(tables));
             for (final SimpleTableDef tableDef : dynamicTableDefinitions) {
-                final List<String> tableNames = 
Arrays.asList(theSchema.getTableNames());
+                final List<String> tableNames = theSchema.getTableNames();
 
                 if (!tableNames.contains(tableDef.getName())) {
                     addTable(theSchema, tableDef);
@@ -299,11 +300,11 @@ public class ElasticSearchRestDataContext extends 
QueryPostprocessDataContext im
     }
 
     @Override
-    protected DataSet materializeMainSchemaTable(Table table, Column[] 
columns, int maxRows) {
+    protected DataSet materializeMainSchemaTable(Table table, List<Column> 
columns, int maxRows) {
         SearchResult searchResult = executeSearch(table, 
createSearchRequest(1, maxRows, null), scrollNeeded(
                 maxRows));
 
-        return new JestElasticSearchDataSet(elasticSearchClient, searchResult, 
columns);
+        return new JestElasticSearchDataSet(elasticSearchClient, searchResult, 
columns.stream().map(SelectItem::new).collect(Collectors.toList()));
     }
 
     private SearchSourceBuilder createSearchRequest(int firstRow, int maxRows, 
QueryBuilder queryBuilder) {

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/elasticsearch/rest/src/main/java/org/apache/metamodel/elasticsearch/rest/JestElasticSearchDataSet.java
----------------------------------------------------------------------
diff --git 
a/elasticsearch/rest/src/main/java/org/apache/metamodel/elasticsearch/rest/JestElasticSearchDataSet.java
 
b/elasticsearch/rest/src/main/java/org/apache/metamodel/elasticsearch/rest/JestElasticSearchDataSet.java
index 7f485ba..0414358 100644
--- 
a/elasticsearch/rest/src/main/java/org/apache/metamodel/elasticsearch/rest/JestElasticSearchDataSet.java
+++ 
b/elasticsearch/rest/src/main/java/org/apache/metamodel/elasticsearch/rest/JestElasticSearchDataSet.java
@@ -56,12 +56,6 @@ final class JestElasticSearchDataSet extends AbstractDataSet 
{
         _closed = new AtomicBoolean(false);
     }
 
-    public JestElasticSearchDataSet(JestClient client, JestResult 
searchResponse, Column[] columns) {
-        super(columns);
-        _client = client;
-        _searchResponse = searchResponse;
-        _closed = new AtomicBoolean(false);
-    }
 
     @Override
     public void close() {

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/elasticsearch/rest/src/test/java/org/apache/metamodel/elasticsearch/rest/JestElasticSearchDataContextTest.java
----------------------------------------------------------------------
diff --git 
a/elasticsearch/rest/src/test/java/org/apache/metamodel/elasticsearch/rest/JestElasticSearchDataContextTest.java
 
b/elasticsearch/rest/src/test/java/org/apache/metamodel/elasticsearch/rest/JestElasticSearchDataContextTest.java
index 9d7d2a8..53dbdf6 100644
--- 
a/elasticsearch/rest/src/test/java/org/apache/metamodel/elasticsearch/rest/JestElasticSearchDataContextTest.java
+++ 
b/elasticsearch/rest/src/test/java/org/apache/metamodel/elasticsearch/rest/JestElasticSearchDataContextTest.java
@@ -124,11 +124,11 @@ public class JestElasticSearchDataContextTest {
     @Test
     public void testSimpleQuery() throws Exception {
         assertEquals("[bulktype, peopletype, tweet1, tweet2]",
-                
Arrays.toString(dataContext.getDefaultSchema().getTableNames()));
+                
Arrays.toString(dataContext.getDefaultSchema().getTableNames().toArray()));
 
         Table table = dataContext.getDefaultSchema().getTableByName("tweet1");
 
-        assertEquals("[_id, message, postDate, user]", 
Arrays.toString(table.getColumnNames()));
+        assertEquals("[_id, message, postDate, user]", 
Arrays.toString(table.getColumnNames().toArray()));
 
         assertEquals(ColumnType.STRING, 
table.getColumnByName("user").getType());
         assertEquals(ColumnType.DATE, 
table.getColumnByName("postDate").getType());
@@ -145,7 +145,7 @@ public class JestElasticSearchDataContextTest {
     @Test
     public void testDocumentIdAsPrimaryKey() throws Exception {
         Table table = dataContext.getDefaultSchema().getTableByName("tweet2");
-        Column[] pks = table.getPrimaryKeys();
+        Column[] pks = table.getPrimaryKeys().toArray(new Column[0]);
         assertEquals(1, pks.length);
         assertEquals("_id", pks[0].getName());
 
@@ -158,7 +158,7 @@ public class JestElasticSearchDataContextTest {
     @Test
     public void testExecutePrimaryKeyLookupQuery() throws Exception {
         Table table = dataContext.getDefaultSchema().getTableByName("tweet2");
-        Column[] pks = table.getPrimaryKeys();
+        Column[] pks = table.getPrimaryKeys().toArray(new Column[0]);
 
         try (DataSet ds = 
dataContext.query().from(table).selectAll().where(pks[0]).eq("tweet_tweet2_1").execute())
 {
             assertTrue(ds.next());
@@ -209,10 +209,10 @@ public class JestElasticSearchDataContextTest {
 
         final Table table = schema.getTableByName("testCreateTable");
         assertNotNull(table);
-        assertEquals("[" + ElasticSearchRestDataContext.FIELD_ID + ", foo, 
bar]", Arrays.toString(table.getColumnNames()));
+        assertEquals("[" + ElasticSearchRestDataContext.FIELD_ID + ", foo, 
bar]", Arrays.toString(table.getColumnNames().toArray()));
 
         final Column fooColumn = table.getColumnByName("foo");
-        final Column idColumn = table.getPrimaryKeys()[0];
+        final Column idColumn = table.getPrimaryKeys().get(0);
         
assertEquals("Column[name=_id,columnNumber=0,type=STRING,nullable=null,nativeType=null,columnSize=null]",
                 idColumn.toString());
 
@@ -490,7 +490,7 @@ public class JestElasticSearchDataContextTest {
         DataSet data = dataContext.executeQuery(q);
         assertEquals(
                 "[peopletype.gender, MAX(peopletype.age), MIN(peopletype.age), 
COUNT(*) AS total, MIN(peopletype.id) AS firstId]",
-                Arrays.toString(data.getSelectItems()));
+                Arrays.toString(data.getSelectItems().toArray()));
 
         assertTrue(data.next());
         assertEquals("Row[values=[female, 20, 17, 5, 5]]", 
data.getRow().toString());
@@ -552,7 +552,7 @@ public class JestElasticSearchDataContextTest {
 
         ElasticSearchRestDataContext dataContext2 = new 
ElasticSearchRestDataContext(client, indexName2);
 
-        assertEquals("[tweet3]", 
Arrays.toString(dataContext2.getDefaultSchema().getTableNames()));
+        assertEquals("[tweet3]", 
Arrays.toString(dataContext2.getDefaultSchema().getTableNames().toArray()));
     }
 
     private static void createIndex() {

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/elasticsearch/rest/src/test/java/org/apache/metamodel/elasticsearch/rest/JestElasticSearchUtilsTest.java
----------------------------------------------------------------------
diff --git 
a/elasticsearch/rest/src/test/java/org/apache/metamodel/elasticsearch/rest/JestElasticSearchUtilsTest.java
 
b/elasticsearch/rest/src/test/java/org/apache/metamodel/elasticsearch/rest/JestElasticSearchUtilsTest.java
index f114826..4c8cca1 100644
--- 
a/elasticsearch/rest/src/test/java/org/apache/metamodel/elasticsearch/rest/JestElasticSearchUtilsTest.java
+++ 
b/elasticsearch/rest/src/test/java/org/apache/metamodel/elasticsearch/rest/JestElasticSearchUtilsTest.java
@@ -26,7 +26,9 @@ import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
+import com.google.common.collect.Lists;
 import org.apache.metamodel.data.DataSetHeader;
 import org.apache.metamodel.data.Row;
 import org.apache.metamodel.data.SimpleDataSetHeader;
@@ -62,7 +64,7 @@ public class JestElasticSearchUtilsTest {
     public void testCreateRowWithNullValues() throws Exception {
         final Column col1 = new MutableColumn("col1", ColumnType.STRING);
         final Column col2 = new MutableColumn("col2", ColumnType.STRING);
-        final DataSetHeader header = new SimpleDataSetHeader(new Column[] { 
col1, col2 });
+        final DataSetHeader header = new 
SimpleDataSetHeader(Lists.newArrayList(col1, 
col2).stream().map(SelectItem::new).collect(Collectors.toList()));
         final JsonObject source = new JsonObject();
         source.addProperty("col1", "foo");
         source.addProperty("col2", (String) null);
@@ -75,7 +77,7 @@ public class JestElasticSearchUtilsTest {
     @Test
     public void testCreateRowWithNumberValueAndStringType() throws Exception {
         final Column col1 = new MutableColumn("col1", ColumnType.STRING);
-        final DataSetHeader header = new SimpleDataSetHeader(new Column[] { 
col1 });
+        final DataSetHeader header =  
SimpleDataSetHeader.fromColumns(Lists.newArrayList(col1));
         final JsonObject source = new JsonObject();
         source.addProperty("col1", 42);
         final String documentId = "row1";
@@ -87,7 +89,7 @@ public class JestElasticSearchUtilsTest {
     @Test
     public void testCreateRowWithStringValueAndNumberType() throws Exception {
         final Column col1 = new MutableColumn("col1", ColumnType.NUMBER);
-        final DataSetHeader header = new SimpleDataSetHeader(new Column[] { 
col1 });
+        final DataSetHeader header = 
SimpleDataSetHeader.fromColumns(Lists.newArrayList(col1));
         final JsonObject source = new JsonObject();
         source.addProperty("col1", "hello world");
         final String documentId = "row1";
@@ -104,7 +106,7 @@ public class JestElasticSearchUtilsTest {
     @Test
     public void testCreateRowWithJsonObject() throws Exception {
         final Column col1 = new MutableColumn("col1", ColumnType.MAP);
-        final DataSetHeader header = new SimpleDataSetHeader(new Column[] { 
col1 });
+        final DataSetHeader header = 
SimpleDataSetHeader.fromColumns(Lists.newArrayList(col1));
         final JsonObject source = new JsonObject();
         final JsonObject value = new JsonObject();
         value.addProperty("foo1", "bar");
@@ -122,7 +124,7 @@ public class JestElasticSearchUtilsTest {
     @Test
     public void testCreateRowWithJsonArray() throws Exception {
         final Column col1 = new MutableColumn("col1", ColumnType.LIST);
-        final DataSetHeader header = new SimpleDataSetHeader(new Column[] { 
col1 });
+        final DataSetHeader header = 
SimpleDataSetHeader.fromColumns(Lists.newArrayList(col1));
         final JsonObject source = new JsonObject();
         final JsonArray value = new JsonArray();
         value.add(new JsonPrimitive("foo"));
@@ -140,7 +142,7 @@ public class JestElasticSearchUtilsTest {
     @Test
     public void testCreateRowWithDeepNesting() throws Exception {
         final Column col1 = new MutableColumn("col1", ColumnType.LIST);
-        final DataSetHeader header = new SimpleDataSetHeader(new Column[] { 
col1 });
+        final DataSetHeader header = 
SimpleDataSetHeader.fromColumns(Lists.newArrayList(col1));
         final JsonObject source = new JsonObject();
 
         final JsonObject obj2 = new JsonObject();

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/excel/src/main/java/org/apache/metamodel/excel/DefaultSpreadsheetReaderDelegate.java
----------------------------------------------------------------------
diff --git 
a/excel/src/main/java/org/apache/metamodel/excel/DefaultSpreadsheetReaderDelegate.java
 
b/excel/src/main/java/org/apache/metamodel/excel/DefaultSpreadsheetReaderDelegate.java
index 009fad4..934d47c 100644
--- 
a/excel/src/main/java/org/apache/metamodel/excel/DefaultSpreadsheetReaderDelegate.java
+++ 
b/excel/src/main/java/org/apache/metamodel/excel/DefaultSpreadsheetReaderDelegate.java
@@ -19,10 +19,13 @@
 package org.apache.metamodel.excel;
 
 import java.util.Iterator;
+import java.util.List;
+import java.util.stream.Collectors;
 
 import org.apache.metamodel.data.DataSet;
 import org.apache.metamodel.data.EmptyDataSet;
 import org.apache.metamodel.data.MaxRowsDataSet;
+import org.apache.metamodel.query.SelectItem;
 import org.apache.metamodel.schema.Column;
 import org.apache.metamodel.schema.ColumnType;
 import org.apache.metamodel.schema.MutableColumn;
@@ -78,12 +81,12 @@ final class DefaultSpreadsheetReaderDelegate implements 
SpreadsheetReaderDelegat
     }
 
     @Override
-    public DataSet executeQuery(Table table, Column[] columns, int maxRows) {
+    public DataSet executeQuery(Table table, List<Column> columns, int 
maxRows) {
         final Workbook wb = ExcelUtils.readWorkbook(_resource);
         final Sheet sheet = wb.getSheet(table.getName());
 
         if (sheet == null || sheet.getPhysicalNumberOfRows() == 0) {
-            return new EmptyDataSet(columns);
+            return new 
EmptyDataSet(columns.stream().map(SelectItem::new).collect(Collectors.toList()));
         }
 
         DataSet dataSet = ExcelUtils.getDataSet(wb, sheet, table, 
_configuration);

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/excel/src/main/java/org/apache/metamodel/excel/ExcelDataContext.java
----------------------------------------------------------------------
diff --git 
a/excel/src/main/java/org/apache/metamodel/excel/ExcelDataContext.java 
b/excel/src/main/java/org/apache/metamodel/excel/ExcelDataContext.java
index 9ef931b..1ce4244 100644
--- a/excel/src/main/java/org/apache/metamodel/excel/ExcelDataContext.java
+++ b/excel/src/main/java/org/apache/metamodel/excel/ExcelDataContext.java
@@ -21,6 +21,7 @@ package org.apache.metamodel.excel;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.List;
 
 import org.apache.metamodel.DataContext;
 import org.apache.metamodel.MetaModelException;
@@ -128,7 +129,7 @@ public final class ExcelDataContext extends 
QueryPostprocessDataContext implemen
     }
 
     @Override
-    public DataSet materializeMainSchemaTable(Table table, Column[] columns, 
int maxRows) {
+    public DataSet materializeMainSchemaTable(Table table, List<Column> 
columns, int maxRows) {
         try {
             SpreadsheetReaderDelegate delegate = 
getSpreadsheetReaderDelegate();
 

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/excel/src/main/java/org/apache/metamodel/excel/ExcelDeleteBuilder.java
----------------------------------------------------------------------
diff --git 
a/excel/src/main/java/org/apache/metamodel/excel/ExcelDeleteBuilder.java 
b/excel/src/main/java/org/apache/metamodel/excel/ExcelDeleteBuilder.java
index 7d835c7..e4731b3 100644
--- a/excel/src/main/java/org/apache/metamodel/excel/ExcelDeleteBuilder.java
+++ b/excel/src/main/java/org/apache/metamodel/excel/ExcelDeleteBuilder.java
@@ -22,6 +22,7 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Sheet;
@@ -55,7 +56,7 @@ final class ExcelDeleteBuilder extends 
AbstractRowDeletionBuilder {
         final Workbook workbook = _updateCallback.getWorkbook(false);
 
         final String tableName = getTable().getName();
-        final SelectItem[] selectItems = 
MetaModelHelper.createSelectItems(getTable().getColumns());
+        final List<SelectItem> selectItems = 
getTable().getColumns().stream().map(SelectItem::new).collect(Collectors.toList());
         final DataSetHeader header = new SimpleDataSetHeader(selectItems);
         final Sheet sheet = workbook.getSheet(tableName);
 

http://git-wip-us.apache.org/repos/asf/metamodel/blob/2d156bcd/excel/src/main/java/org/apache/metamodel/excel/ExcelTableCreationBuilder.java
----------------------------------------------------------------------
diff --git 
a/excel/src/main/java/org/apache/metamodel/excel/ExcelTableCreationBuilder.java 
b/excel/src/main/java/org/apache/metamodel/excel/ExcelTableCreationBuilder.java
index 765886e..2d68a69 100644
--- 
a/excel/src/main/java/org/apache/metamodel/excel/ExcelTableCreationBuilder.java
+++ 
b/excel/src/main/java/org/apache/metamodel/excel/ExcelTableCreationBuilder.java
@@ -48,9 +48,7 @@ final class ExcelTableCreationBuilder extends 
AbstractTableCreationBuilder<Excel
         if (lineNumber != ExcelConfiguration.NO_COLUMN_NAME_LINE) {
             final int zeroBasedLineNumber = lineNumber - 1;
             final Row row = sheet.createRow(zeroBasedLineNumber);
-            final Column[] columns = table.getColumns();
-            for (int i = 0; i < columns.length; i++) {
-                final Column column = columns[i];
+            for (final Column column : table.getColumns()) {
                 final int columnNumber = column.getColumnNumber();
                 row.createCell(columnNumber).setCellValue(column.getName());
             }

Reply via email to