http://git-wip-us.apache.org/repos/asf/metamodel/blob/ab5c9482/core/src/main/java/org/apache/metamodel/schema/ImmutableRelationship.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/metamodel/schema/ImmutableRelationship.java 
b/core/src/main/java/org/apache/metamodel/schema/ImmutableRelationship.java
index 2bcf95b..b930359 100644
--- a/core/src/main/java/org/apache/metamodel/schema/ImmutableRelationship.java
+++ b/core/src/main/java/org/apache/metamodel/schema/ImmutableRelationship.java
@@ -19,27 +19,30 @@
 package org.apache.metamodel.schema;
 
 import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
 
 public final class ImmutableRelationship extends AbstractRelationship 
implements Serializable {
 
        private static final long serialVersionUID = 1L;
 
-       private final Column[] primaryColumns;
-       private final Column[] foreignColumns;
+       private final List<Column> primaryColumns;
+       private final List<Column> foreignColumns;
 
        public static void create(Relationship origRelationship,
                        ImmutableSchema schema) {
                ImmutableTable primaryTable = getSimilarTable(
                                origRelationship.getPrimaryTable(), schema);
                assert primaryTable != null;
-               Column[] primaryColumns = getSimilarColumns(
+               List<Column> primaryColumns = getSimilarColumns(
                                origRelationship.getPrimaryColumns(), 
primaryTable);
                checkSameTable(primaryColumns);
 
                ImmutableTable foreignTable = getSimilarTable(
                                origRelationship.getForeignTable(), schema);
                assert foreignTable != null;
-               Column[] foreignColumns = getSimilarColumns(
+               List<Column> foreignColumns = getSimilarColumns(
                                origRelationship.getForeignColumns(), 
foreignTable);
                checkSameTable(foreignColumns);
 
@@ -49,13 +52,11 @@ public final class ImmutableRelationship extends 
AbstractRelationship implements
                foreignTable.addRelationship(relationship);
        }
 
-       private static Column[] getSimilarColumns(Column[] columns, Table 
table) {
-               Column[] result = new Column[columns.length];
-               for (int i = 0; i < columns.length; i++) {
-                       String name = columns[i].getName();
-                       result[i] = table.getColumnByName(name);
-               }
-               return result;
+       private static List<Column> getSimilarColumns(List<Column> columns, 
Table table) {
+               return columns.stream()
+                               .map( col -> 
table.getColumnByName(col.getName()))
+                               .collect(Collectors.toList());
+
        }
 
        private static ImmutableTable getSimilarTable(Table table,
@@ -64,19 +65,19 @@ public final class ImmutableRelationship extends 
AbstractRelationship implements
                return (ImmutableTable) schema.getTableByName(name);
        }
 
-       private ImmutableRelationship(Column[] primaryColumns,
-                       Column[] foreignColumns) {
+       private ImmutableRelationship(List<Column> primaryColumns,
+                       List<Column> foreignColumns) {
                this.primaryColumns = primaryColumns;
                this.foreignColumns = foreignColumns;
        }
 
        @Override
-       public Column[] getPrimaryColumns() {
+       public List<Column> getPrimaryColumns() {
                return primaryColumns;
        }
 
        @Override
-       public Column[] getForeignColumns() {
+       public List<Column> getForeignColumns() {
                return foreignColumns;
        }
 }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/ab5c9482/core/src/main/java/org/apache/metamodel/schema/ImmutableSchema.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/metamodel/schema/ImmutableSchema.java 
b/core/src/main/java/org/apache/metamodel/schema/ImmutableSchema.java
index ddceb12..8da76eb 100644
--- a/core/src/main/java/org/apache/metamodel/schema/ImmutableSchema.java
+++ b/core/src/main/java/org/apache/metamodel/schema/ImmutableSchema.java
@@ -20,6 +20,8 @@ package org.apache.metamodel.schema;
 
 import java.io.Serializable;
 import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 
 /**
@@ -42,20 +44,20 @@ public final class ImmutableSchema extends AbstractSchema 
implements
 
        public ImmutableSchema(Schema schema) {
                this(schema.getName(), schema.getQuote());
-               Table[] origTables = schema.getTables();
+               List<Table> origTables = schema.getTables();
                for (Table table : origTables) {
                        tables.add(new ImmutableTable(table, this));
                }
 
-               Relationship[] origRelationships = schema.getRelationships();
+               Collection<Relationship> origRelationships = 
schema.getRelationships();
                for (Relationship relationship : origRelationships) {
                        ImmutableRelationship.create(relationship, this);
                }
        }
 
        @Override
-       public Table[] getTables() {
-               return tables.toArray(new Table[tables.size()]);
+       public List<Table> getTables() {
+               return Collections.unmodifiableList(tables);
        }
 
        @Override

http://git-wip-us.apache.org/repos/asf/metamodel/blob/ab5c9482/core/src/main/java/org/apache/metamodel/schema/ImmutableTable.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/schema/ImmutableTable.java 
b/core/src/main/java/org/apache/metamodel/schema/ImmutableTable.java
index d807290..150384c 100644
--- a/core/src/main/java/org/apache/metamodel/schema/ImmutableTable.java
+++ b/core/src/main/java/org/apache/metamodel/schema/ImmutableTable.java
@@ -20,6 +20,8 @@ package org.apache.metamodel.schema;
 
 import java.io.Serializable;
 import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 
 /**
@@ -54,7 +56,7 @@ final class ImmutableTable extends AbstractTable implements 
Serializable {
        protected ImmutableTable(Table table, ImmutableSchema schema) {
                this(table.getName(), table.getType(), schema, 
table.getRemarks(),
                                table.getQuote());
-               Column[] origColumns = table.getColumns();
+               List<Column> origColumns = table.getColumns();
                for (Column column : origColumns) {
                        columns.add(new ImmutableColumn(column, this));
                }
@@ -67,8 +69,8 @@ final class ImmutableTable extends AbstractTable implements 
Serializable {
        }
 
        @Override
-       public Column[] getColumns() {
-               return columns.toArray(new Column[columns.size()]);
+       public List<Column> getColumns() {
+               return Collections.unmodifiableList(columns);
        }
 
        @Override
@@ -82,8 +84,8 @@ final class ImmutableTable extends AbstractTable implements 
Serializable {
        }
 
        @Override
-       public Relationship[] getRelationships() {
-               return relationships.toArray(new 
Relationship[relationships.size()]);
+       public Collection<Relationship> getRelationships() {
+               return Collections.unmodifiableCollection(relationships);
        }
 
        @Override

http://git-wip-us.apache.org/repos/asf/metamodel/blob/ab5c9482/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 e96c86c..466244c 100644
--- a/core/src/main/java/org/apache/metamodel/schema/MutableRelationship.java
+++ b/core/src/main/java/org/apache/metamodel/schema/MutableRelationship.java
@@ -19,6 +19,8 @@
 package org.apache.metamodel.schema;
 
 import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -36,8 +38,8 @@ public class MutableRelationship extends AbstractRelationship 
implements
        private static final Logger logger = LoggerFactory
                        .getLogger(MutableRelationship.class);
 
-       private final Column[] _primaryColumns;
-       private final Column[] _foreignColumns;
+       private final List<Column> _primaryColumns;
+       private final List<Column> _foreignColumns;
 
        /**
         * Factory method to create relations between two tables by specifying 
which
@@ -49,8 +51,8 @@ public class MutableRelationship extends AbstractRelationship 
implements
         *            the columns from the foreign key table
         * @return the relation created
         */
-       public static Relationship createRelationship(Column[] primaryColumns,
-                       Column[] foreignColumns) {
+       public static Relationship createRelationship(List<Column> 
primaryColumns,
+                       List<Column> foreignColumns) {
                Table primaryTable = checkSameTable(primaryColumns);
                Table foreignTable = checkSameTable(foreignColumns);
                MutableRelationship relation = new 
MutableRelationship(primaryColumns,
@@ -105,25 +107,30 @@ public class MutableRelationship extends 
AbstractRelationship implements
 
        public static Relationship createRelationship(Column primaryColumn,
                        Column foreignColumn) {
-               return createRelationship(new Column[] { primaryColumn },
-                               new Column[] { foreignColumn });
+               List<Column> pcols = new ArrayList<>();
+               pcols.add(primaryColumn);
+               List<Column> fcols = new ArrayList<>();
+               pcols.add(foreignColumn);
+
+
+               return createRelationship(pcols, fcols);
        }
 
        /**
         * Prevent external instantiation
         */
-       private MutableRelationship(Column[] primaryColumns, Column[] 
foreignColumns) {
+       private MutableRelationship(List<Column> primaryColumns, List<Column> 
foreignColumns) {
                _primaryColumns = primaryColumns;
                _foreignColumns = foreignColumns;
        }
 
        @Override
-       public Column[] getPrimaryColumns() {
+       public List<Column> getPrimaryColumns() {
                return _primaryColumns;
        }
 
        @Override
-       public Column[] getForeignColumns() {
+       public List<Column> getForeignColumns() {
                return _foreignColumns;
        }
 

http://git-wip-us.apache.org/repos/asf/metamodel/blob/ab5c9482/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 c4cfe2e..29d361b 100644
--- a/core/src/main/java/org/apache/metamodel/schema/MutableSchema.java
+++ b/core/src/main/java/org/apache/metamodel/schema/MutableSchema.java
@@ -21,6 +21,7 @@ package org.apache.metamodel.schema;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 
 /**
@@ -63,9 +64,8 @@ public class MutableSchema extends AbstractSchema implements 
Serializable,
        }
 
        @Override
-       public MutableTable[] getTables() {
-               MutableTable[] array = new MutableTable[_tables.size()];
-               return _tables.toArray(array);
+       public List<Table> getTables() {
+               return Collections.unmodifiableList(_tables);
        }
 
        public MutableSchema setTables(Collection<? extends MutableTable> 
tables) {

http://git-wip-us.apache.org/repos/asf/metamodel/blob/ab5c9482/core/src/main/java/org/apache/metamodel/schema/MutableTable.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/schema/MutableTable.java 
b/core/src/main/java/org/apache/metamodel/schema/MutableTable.java
index 904fc81..0b3475c 100644
--- a/core/src/main/java/org/apache/metamodel/schema/MutableTable.java
+++ b/core/src/main/java/org/apache/metamodel/schema/MutableTable.java
@@ -21,6 +21,7 @@ package org.apache.metamodel.schema;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 
 /**
@@ -100,9 +101,8 @@ public class MutableTable extends AbstractTable implements 
Serializable {
     }
 
     @Override
-    public Column[] getColumns() {
-        List<Column> columns = getColumnsInternal();
-        return columns.toArray(new Column[columns.size()]);
+    public List<Column> getColumns() {
+        return Collections.unmodifiableList(_columns);
     }
 
     public MutableTable setColumns(Column... columns) {
@@ -157,9 +157,8 @@ public class MutableTable extends AbstractTable implements 
Serializable {
     }
 
     @Override
-    public Relationship[] getRelationships() {
-        List<Relationship> relationships = getRelationshipsInternal();
-        return relationships.toArray(new Relationship[relationships.size()]);
+    public List<Relationship> getRelationships() {
+      return Collections.unmodifiableList(_relationships);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/metamodel/blob/ab5c9482/core/src/main/java/org/apache/metamodel/schema/Relationship.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/schema/Relationship.java 
b/core/src/main/java/org/apache/metamodel/schema/Relationship.java
index 1ae3132..12a5c8c 100644
--- a/core/src/main/java/org/apache/metamodel/schema/Relationship.java
+++ b/core/src/main/java/org/apache/metamodel/schema/Relationship.java
@@ -19,6 +19,7 @@
 package org.apache.metamodel.schema;
 
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * Represents a relationship between two tables where one set of columns is the
@@ -41,7 +42,7 @@ public interface Relationship extends Serializable, 
Comparable<Relationship> {
         * 
         * @return an array of primary key columns.
         */
-       public Column[] getPrimaryColumns();
+       public List<Column> getPrimaryColumns();
 
        /**
         * Gets the table of the foreign key column(s).
@@ -55,7 +56,7 @@ public interface Relationship extends Serializable, 
Comparable<Relationship> {
         * 
         * @return an array of foreign key columns.
         */
-       public Column[] getForeignColumns();
+       public List<Column> getForeignColumns();
 
        /**
         * Determines whether this relationship contains a specific pair of 
columns

http://git-wip-us.apache.org/repos/asf/metamodel/blob/ab5c9482/core/src/main/java/org/apache/metamodel/schema/Schema.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/schema/Schema.java 
b/core/src/main/java/org/apache/metamodel/schema/Schema.java
index 1184954..082acb1 100644
--- a/core/src/main/java/org/apache/metamodel/schema/Schema.java
+++ b/core/src/main/java/org/apache/metamodel/schema/Schema.java
@@ -19,6 +19,8 @@
 package org.apache.metamodel.schema;
 
 import java.io.Serializable;
+import java.util.Collection;
+import java.util.List;
 
 import org.apache.metamodel.DataContext;
 
@@ -61,14 +63,14 @@ public interface Schema extends Comparable<Schema>, 
Serializable, NamedStructure
         * 
         * @return an array of table names.
         */
-       public String[] getTableNames();
+       public List<String> getTableNames();
 
        /**
         * Gets all tables in this Schema.
         * 
         * @return the tables that reside in the schema
         */
-       public Table[] getTables();
+       public List<Table> getTables();
 
        /**
         * Gets all tables in this Schema of a particular type.
@@ -78,7 +80,7 @@ public interface Schema extends Comparable<Schema>, 
Serializable, NamedStructure
         * @return an array of tables in this schema that matches the specified
         *         type.
         */
-       public Table[] getTables(TableType type);
+       public List<Table> getTables(TableType type);
 
        /**
         * Gets a table by index. Use {@link #getTableCount()} to get the 
(0-based)
@@ -108,7 +110,7 @@ public interface Schema extends Comparable<Schema>, 
Serializable, NamedStructure
         * 
         * @return an array of relationships.
         */
-       public Relationship[] getRelationships();
+       public Collection<Relationship> getRelationships();
 
        /**
         * Gets the number of relationships to and from this Schema.

http://git-wip-us.apache.org/repos/asf/metamodel/blob/ab5c9482/core/src/main/java/org/apache/metamodel/schema/Table.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/schema/Table.java 
b/core/src/main/java/org/apache/metamodel/schema/Table.java
index f5c6680..d549dba 100644
--- a/core/src/main/java/org/apache/metamodel/schema/Table.java
+++ b/core/src/main/java/org/apache/metamodel/schema/Table.java
@@ -19,6 +19,8 @@
 package org.apache.metamodel.schema;
 
 import java.io.Serializable;
+import java.util.Collection;
+import java.util.List;
 
 /**
  * Represents a table and it's metadata description. Tables reside within a
@@ -49,7 +51,7 @@ public interface Table extends Comparable<Table>, 
Serializable, NamedStructure {
      * 
      * @return the columns of this table.
      */
-    public Column[] getColumns();
+    public List<Column> getColumns();
 
     /**
      * Convenience method for retrieving a column by it's name.
@@ -93,7 +95,7 @@ public interface Table extends Comparable<Table>, 
Serializable, NamedStructure {
      * @return all relationsips for this table. To add relations use
      *         TableRelation.createRelation();
      */
-    public Relationship[] getRelationships();
+    public Collection<Relationship> getRelationships();
 
     /**
      * Gets relationships between this table and another table.
@@ -102,7 +104,7 @@ public interface Table extends Comparable<Table>, 
Serializable, NamedStructure {
      *            another table for which to find relationships to and from.
      * @return an array of relationsips between this and the other table.
      */
-    public Relationship[] getRelationships(Table otherTable);
+    public Collection<Relationship> getRelationships(Table otherTable);
 
     /**
      * Gets a count of relationships to and from this table.
@@ -124,7 +126,7 @@ public interface Table extends Comparable<Table>, 
Serializable, NamedStructure {
      * @return an array of columns.
      * @see ColumnType
      */
-    public Column[] getNumberColumns();
+    public List<Column> getNumberColumns();
 
     /**
      * Gets all of this table's columns that are of literal (String/text) type.
@@ -132,7 +134,7 @@ public interface Table extends Comparable<Table>, 
Serializable, NamedStructure {
      * @return an array of columns.
      * @see ColumnType
      */
-    public Column[] getLiteralColumns();
+    public List<Column> getLiteralColumns();
 
     /**
      * Gets all of this table's columns that are time and/or date based.
@@ -140,7 +142,7 @@ public interface Table extends Comparable<Table>, 
Serializable, NamedStructure {
      * @return an array of columns.
      * @see ColumnType
      */
-    public Column[] getTimeBasedColumns();
+    public List<Column> getTimeBasedColumns();
 
     /**
      * Gets all of this table's columns that are of boolean type.
@@ -148,24 +150,24 @@ public interface Table extends Comparable<Table>, 
Serializable, NamedStructure {
      * @return an array of columns.
      * @see ColumnType
      */
-    public Column[] getBooleanColumns();
+    public List<Column> getBooleanColumns();
 
     /**
      * Gets all of this table's columns that are indexed.
      * 
      * @return an array of columns.
      */
-    public Column[] getIndexedColumns();
+    public List<Column> getIndexedColumns();
 
     /**
      * @return the relationships where this table is the foreign table
      */
-    public Relationship[] getForeignKeyRelationships();
+    public Collection<Relationship> getForeignKeyRelationships();
 
     /**
      * @return the relationships where this table is the primary table
      */
-    public Relationship[] getPrimaryKeyRelationships();
+    public Collection<Relationship> getPrimaryKeyRelationships();
 
     /**
      * Gets the columns of this table that are known to be foreign keys (ie.
@@ -173,7 +175,7 @@ public interface Table extends Comparable<Table>, 
Serializable, NamedStructure {
      * 
      * @return an array of columns that are known to be foreign keys.
      */
-    public Column[] getForeignKeys();
+    public List<Column> getForeignKeys();
 
     /**
      * Gets the columns of this table that are known to be primary keys. See
@@ -181,14 +183,14 @@ public interface Table extends Comparable<Table>, 
Serializable, NamedStructure {
      * 
      * @return an array of columns that are known to be primary keys.
      */
-    public Column[] getPrimaryKeys();
+    public List<Column> getPrimaryKeys();
 
     /**
      * Gets the names of this table's columns.
      * 
      * @return an array of column names.
      */
-    public String[] getColumnNames();
+    public List<String> getColumnNames();
 
     /**
      * Gets the columns of this table that conforms to a specified
@@ -198,7 +200,7 @@ public interface Table extends Comparable<Table>, 
Serializable, NamedStructure {
      *            the column type to search for.
      * @return an array of columns that match the specified ColumnType.
      */
-    public Column[] getColumnsOfType(ColumnType columnType);
+    public List<Column> getColumnsOfType(ColumnType columnType);
 
     /**
      * Gets the columns of this table that conforms to a specified
@@ -208,6 +210,6 @@ public interface Table extends Comparable<Table>, 
Serializable, NamedStructure {
      *            the super type of the column
      * @return an array of columns that match the specified SuperColumnType.
      */
-    public Column[] getColumnsOfSuperType(SuperColumnType superColumnType);
+    public List<Column> getColumnsOfSuperType(SuperColumnType superColumnType);
 
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/metamodel/blob/ab5c9482/core/src/test/java/org/apache/metamodel/AbstractDataContextTest.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/metamodel/AbstractDataContextTest.java 
b/core/src/test/java/org/apache/metamodel/AbstractDataContextTest.java
index ea8a9de..c526df5 100644
--- a/core/src/test/java/org/apache/metamodel/AbstractDataContextTest.java
+++ b/core/src/test/java/org/apache/metamodel/AbstractDataContextTest.java
@@ -18,10 +18,10 @@
  */
 package org.apache.metamodel;
 
-import java.util.Arrays;
-import java.util.LinkedHashMap;
-import java.util.Map;
+import java.util.*;
 
+import com.google.common.collect.Lists;
+import javafx.scene.Scene;
 import junit.framework.TestCase;
 import org.apache.metamodel.data.DataSet;
 import org.apache.metamodel.query.Query;
@@ -57,8 +57,8 @@ public class AbstractDataContextTest extends TestCase {
         }
 
         @Override
-        protected String[] getSchemaNamesInternal() {
-            return _schemas.keySet().toArray(new String[0]);
+        protected List<String> getSchemaNamesInternal() {
+            return new ArrayList<>(_schemas.keySet());
         }
 
         @Override
@@ -154,8 +154,8 @@ public class AbstractDataContextTest extends TestCase {
             }
 
             @Override
-            protected String[] getSchemaNamesInternal() {
-                return new String[] { "test" };
+            protected List<String> getSchemaNamesInternal() {
+                return Lists.newArrayList("test");
             }
 
             @Override
@@ -209,12 +209,12 @@ public class AbstractDataContextTest extends TestCase {
 
     public void testGetSchemas() throws Exception {
         MyDataContext dc = new MyDataContext();
-        Schema[] schemas = dc.getSchemas();
-        assertEquals("[Schema[name=barfoo], Schema[name=foo.bar], 
Schema[name=foobar]]", Arrays.toString(schemas));
+        List<Schema> schemas = dc.getSchemas();
+        assertEquals("[Schema[name=barfoo], Schema[name=foo.bar], 
Schema[name=foobar]]", Arrays.toString(schemas.toArray()));
 
         dc.refreshSchemas();
         schemas = dc.getSchemas();
-        assertEquals("[Schema[name=barfoo], Schema[name=foo.bar], 
Schema[name=foobar]]", Arrays.toString(schemas));
+        assertEquals("[Schema[name=barfoo], Schema[name=foo.bar], 
Schema[name=foobar]]", Arrays.toString(schemas.toArray()));
     }
 
     public void testGetColumnByQualifiedLabelWithNameOverlaps() throws 
Exception {
@@ -226,8 +226,8 @@ public class AbstractDataContextTest extends TestCase {
             }
 
             @Override
-            protected String[] getSchemaNamesInternal() {
-                return new String[] { "sch" };
+            protected List<String> getSchemaNamesInternal() {
+                return Lists.newArrayList( "sch" );
             }
 
             @Override

http://git-wip-us.apache.org/repos/asf/metamodel/blob/ab5c9482/core/src/test/java/org/apache/metamodel/CompositeDataContextTest.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/metamodel/CompositeDataContextTest.java 
b/core/src/test/java/org/apache/metamodel/CompositeDataContextTest.java
index 61e0dcc..f2ae8e0 100644
--- a/core/src/test/java/org/apache/metamodel/CompositeDataContextTest.java
+++ b/core/src/test/java/org/apache/metamodel/CompositeDataContextTest.java
@@ -42,11 +42,11 @@ public class CompositeDataContextTest extends TestCase {
                DataContext composite = new CompositeDataContext(dc1, dc2);
 
                assertEquals("[schema1, schema2]",
-                               Arrays.toString(composite.getSchemaNames()));
+                               
Arrays.toString(composite.getSchemaNames().toArray()));
                assertSame(dc1.getDefaultSchema(), 
composite.getDefaultSchema());
 
                DataSet ds = composite.query()
-                               
.from(dc1.getDefaultSchema().getTables()[0]).select("foo")
+                               
.from(dc1.getDefaultSchema().getTables().get(0)).select("foo")
                                .execute();
                List<Object[]> objectArrays = ds.toObjectArrays();
                assertEquals("1", objectArrays.get(0)[0]);
@@ -61,12 +61,12 @@ public class CompositeDataContextTest extends TestCase {
                DataContext composite = new CompositeDataContext(dc1, dc2);
 
                assertEquals("[schema]",
-                               Arrays.toString(composite.getSchemaNames()));
+                               
Arrays.toString(composite.getSchemaNames().toArray()));
 
                Schema schema = composite.getDefaultSchema();
                assertEquals(4, schema.getTableCount());
                assertEquals("[table1, an_empty_table, table2, an_empty_table]",
-                               Arrays.toString(schema.getTableNames()));
+                               
Arrays.toString(schema.getTableNames().toArray()));
                assertTrue(schema instanceof CompositeSchema);
        }
 
@@ -77,15 +77,14 @@ public class CompositeDataContextTest extends TestCase {
                DataContext composite = new CompositeDataContext(dc1, dc2);
 
                assertEquals("[schema]",
-                               Arrays.toString(composite.getSchemaNames()));
+                               
Arrays.toString(composite.getSchemaNames().toArray()));
 
                Schema schema = composite.getDefaultSchema();
                assertEquals(4, schema.getTableCount());
-               assertEquals("[table, an_empty_table, table, an_empty_table]", 
Arrays.toString(schema.getTableNames()));
+               assertEquals("[table, an_empty_table, table, an_empty_table]", 
Arrays.toString(schema.getTableNames().toArray()));
                assertTrue(schema instanceof CompositeSchema);
-               Table[] tables = schema.getTables();
-        Table table1 = tables[0];
-        Table table2 = tables[2];
+        Table table1 = schema.getTable(0);
+        Table table2 = schema.getTable(2);
         assertNotSame(table1, table2);
 
                Query q = composite

http://git-wip-us.apache.org/repos/asf/metamodel/blob/ab5c9482/core/src/test/java/org/apache/metamodel/MetaModelHelperTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/metamodel/MetaModelHelperTest.java 
b/core/src/test/java/org/apache/metamodel/MetaModelHelperTest.java
index 540aa95..84a09b2 100644
--- a/core/src/test/java/org/apache/metamodel/MetaModelHelperTest.java
+++ b/core/src/test/java/org/apache/metamodel/MetaModelHelperTest.java
@@ -22,6 +22,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
+import com.google.common.collect.Lists;
 import org.apache.metamodel.data.DataSet;
 import org.apache.metamodel.data.DataSetHeader;
 import org.apache.metamodel.data.DefaultRow;
@@ -66,8 +67,8 @@ public class MetaModelHelperTest extends MetaModelTestCase {
         data2.add(new Object[] { 2, "bad boy", "bb" });
         data2.add(new Object[] { 4, "trying harder", "try" });
 
-        DataSet ds1 = createDataSet(new SelectItem[] { si1, si2, si3, si4 }, 
data1);
-        DataSet ds2 = createDataSet(new SelectItem[] { si5, si6, si7 }, data2);
+        DataSet ds1 = createDataSet(Lists.newArrayList(si1, si2, si3, si4 ), 
data1);
+        DataSet ds2 = createDataSet(Lists.newArrayList(si5, si6, si7 ), data2);
         FilterItem[] onConditions = new FilterItem[1];
         onConditions[0] = new FilterItem(si4, OperatorType.EQUALS_TO, si5);
 
@@ -100,8 +101,8 @@ public class MetaModelHelperTest extends MetaModelTestCase {
         data2.add(new Object[] { 2, "bad boy", "bb" });
         data2.add(new Object[] { 4, "trying harder", "try" });
 
-        DataSet ds1 = createDataSet(new SelectItem[] { si1, si2, si3, si4 }, 
data1);
-        DataSet ds2 = createDataSet(new SelectItem[] { si5, si6, si7 }, data2);
+        DataSet ds1 = createDataSet(Lists.newArrayList(si1, si2, si3, si4 ), 
data1);
+        DataSet ds2 = createDataSet(Lists.newArrayList( si5, si6, si7 ), 
data2);
         FilterItem[] onConditions = new FilterItem[1];
         onConditions[0] = new FilterItem(si4, OperatorType.EQUALS_TO, si5);
 
@@ -116,7 +117,7 @@ public class MetaModelHelperTest extends MetaModelTestCase {
     public void testSimpleCarthesianProduct() throws Exception {
         DataSet dataSet = 
MetaModelHelper.getCarthesianProduct(createDataSet1(), createDataSet2());
 
-        assertEquals(2, dataSet.getSelectItems().length);
+        assertEquals(2, dataSet.getSelectItems().size());
         assertTrue(dataSet.next());
         assertEquals("Row[values=[f, b]]", dataSet.getRow().toString());
         assertTrue(dataSet.next());
@@ -134,7 +135,7 @@ public class MetaModelHelperTest extends MetaModelTestCase {
 
     public void testTripleCarthesianProduct() throws Exception {
         DataSet dataSet = 
MetaModelHelper.getCarthesianProduct(createDataSet1(), createDataSet2(), 
createDataSet3());
-        assertEquals(4, dataSet.getSelectItems().length);
+        assertEquals(4, dataSet.getSelectItems().size());
         for (int i = 0; i < 3 * 3 * 2; i++) {
             assertTrue("Assertion failed at i=" + i, dataSet.next());
         }
@@ -145,9 +146,9 @@ public class MetaModelHelperTest extends MetaModelTestCase {
         DataSet ds1 = createDataSet1();
         DataSet ds2 = createDataSet2();
         DataSet[] dataSets = new DataSet[] { ds1, ds2, };
-        FilterItem w1 = new FilterItem(ds1.getSelectItems()[0], 
OperatorType.EQUALS_TO, "f");
+        FilterItem w1 = new FilterItem(ds1.getSelectItems().get(0), 
OperatorType.EQUALS_TO, "f");
         DataSet dataSet = MetaModelHelper.getCarthesianProduct(dataSets, w1);
-        assertEquals(2, dataSet.getSelectItems().length);
+        assertEquals(2, dataSet.getSelectItems().size());
         for (int i = 0; i < 1 * 3; i++) {
             assertTrue("Assertion failed at i=" + i, dataSet.next());
             assertEquals("f", dataSet.getRow().getValue(0));
@@ -157,22 +158,22 @@ public class MetaModelHelperTest extends 
MetaModelTestCase {
 
     public void testGetCarthesianProductNoRows() throws Exception {
         DataSet dataSet = 
MetaModelHelper.getCarthesianProduct(createDataSet4(), createDataSet2(), 
createDataSet3());
-        assertEquals(4, dataSet.getSelectItems().length);
+        assertEquals(4, dataSet.getSelectItems().size());
         assertFalse(dataSet.next());
 
         dataSet = MetaModelHelper.getCarthesianProduct(createDataSet1(), 
createDataSet4(), createDataSet3());
-        assertEquals(4, dataSet.getSelectItems().length);
+        assertEquals(4, dataSet.getSelectItems().size());
         assertFalse(dataSet.next());
 
         dataSet = MetaModelHelper.getCarthesianProduct(createDataSet1(), 
createDataSet2(), createDataSet4());
-        assertEquals(3, dataSet.getSelectItems().length);
+        assertEquals(3, dataSet.getSelectItems().size());
         assertFalse(dataSet.next());
     }
 
     public void testGetOrdered() throws Exception {
         DataSet dataSet = createDataSet3();
         List<OrderByItem> orderByItems = new ArrayList<OrderByItem>();
-        orderByItems.add(new OrderByItem(dataSet.getSelectItems()[0]));
+        orderByItems.add(new OrderByItem(dataSet.getSelectItems().get(0)));
 
         dataSet = MetaModelHelper.getOrdered(dataSet, orderByItems);
         assertTrue(dataSet.next());
@@ -188,7 +189,7 @@ public class MetaModelHelperTest extends MetaModelTestCase {
         data1.add(new Object[] { "o" });
         data1.add(new Object[] { "o" });
         DataSet dataSet1 = createDataSet(
-                new SelectItem[] { new SelectItem(new MutableColumn("foo", 
ColumnType.VARCHAR)) }, data1);
+                Lists.newArrayList( new SelectItem(new MutableColumn("foo", 
ColumnType.VARCHAR)) ), data1);
         return dataSet1;
     }
 
@@ -197,7 +198,7 @@ public class MetaModelHelperTest extends MetaModelTestCase {
         data2.add(new Object[] { "b" });
         data2.add(new Object[] { "a" });
         data2.add(new Object[] { "r" });
-        DataSet dataSet2 = createDataSet(new SelectItem[] { new 
SelectItem("bar", "bar") }, data2);
+        DataSet dataSet2 = createDataSet(Lists.newArrayList(new 
SelectItem("bar", "bar") ), data2);
         return dataSet2;
     }
 
@@ -205,14 +206,14 @@ public class MetaModelHelperTest extends 
MetaModelTestCase {
         List<Object[]> data3 = new ArrayList<Object[]>();
         data3.add(new Object[] { "w00p", true });
         data3.add(new Object[] { "yippie", false });
-        DataSet dataSet3 = createDataSet(new SelectItem[] { new 
SelectItem("expression", "e"),
-                new SelectItem("webish?", "w") }, data3);
+        DataSet dataSet3 = createDataSet(Lists.newArrayList(new 
SelectItem("expression", "e"),
+                new SelectItem("webish?", "w") ), data3);
         return dataSet3;
     }
 
     private DataSet createDataSet4() {
         List<Object[]> data4 = new ArrayList<Object[]>();
-        DataSet dataSet4 = createDataSet(new SelectItem[] { new 
SelectItem("abc", "abc") }, data4);
+        DataSet dataSet4 = createDataSet(Lists.newArrayList(new 
SelectItem("abc", "abc") ), data4);
         return dataSet4;
     }
 
@@ -294,7 +295,7 @@ public class MetaModelHelperTest extends MetaModelTestCase {
         DataSet ds = MetaModelHelper.getSelection(selectItems2, new 
EmptyDataSet(selectItems1));
         assertEquals(SubSelectionDataSet.class, ds.getClass());
 
-        assertEquals("[bar AS b, foo AS f]", 
Arrays.toString(ds.getSelectItems()));
+        assertEquals("[bar AS b, foo AS f]", 
Arrays.toString(ds.getSelectItems().toArray()));
     }
 
     public void testLeftJoinNoRowsOrSingleRow() throws Exception {
@@ -311,7 +312,7 @@ public class MetaModelHelperTest extends MetaModelTestCase {
                 OperatorType.EQUALS_TO, item3) });
 
         assertEquals(SubSelectionDataSet.class, joinedDs.getClass());
-        assertEquals("[foo AS f, bar AS b, baz AS z]", 
Arrays.toString(joinedDs.getSelectItems()));
+        assertEquals("[foo AS f, bar AS b, baz AS z]", 
Arrays.toString(joinedDs.getSelectItems().toArray()));
 
         DataSetHeader header1 = new SimpleDataSetHeader(selectItems1);
         Row row = new DefaultRow(header1, new Object[] { 1, 2 }, null);
@@ -319,7 +320,7 @@ public class MetaModelHelperTest extends MetaModelTestCase {
 
         joinedDs = MetaModelHelper.getLeftJoin(ds1, ds2, new FilterItem[] { 
new FilterItem(item2,
                 OperatorType.EQUALS_TO, item3) });
-        assertEquals("[foo AS f, bar AS b, baz AS z]", 
Arrays.toString(joinedDs.getSelectItems()));
+        assertEquals("[foo AS f, bar AS b, baz AS z]", 
Arrays.toString(joinedDs.getSelectItems().toArray()));
         assertTrue(joinedDs.next());
         assertEquals("Row[values=[1, 2, null]]", joinedDs.getRow().toString());
         assertFalse(joinedDs.next());

http://git-wip-us.apache.org/repos/asf/metamodel/blob/ab5c9482/core/src/test/java/org/apache/metamodel/MetaModelTestCase.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/metamodel/MetaModelTestCase.java 
b/core/src/test/java/org/apache/metamodel/MetaModelTestCase.java
index 3e1e5a9..56d57c8 100644
--- a/core/src/test/java/org/apache/metamodel/MetaModelTestCase.java
+++ b/core/src/test/java/org/apache/metamodel/MetaModelTestCase.java
@@ -124,25 +124,25 @@ public abstract class MetaModelTestCase extends TestCase {
         table4.setColumns(columnList);
 
         // one-Contributor-to-many-Role's
-        MutableRelationship.createRelationship(new Column[] { column1 }, new 
Column[] { column8 });
+        MutableRelationship.createRelationship( column1 , column8 );
 
         // one-Project-to-many-Role's
-        MutableRelationship.createRelationship(new Column[] { column4 }, new 
Column[] { column9 });
+        MutableRelationship.createRelationship(column4 , column9 );
 
         // view relation [contributor -> contributor_name]
-        MutableRelationship.createRelationship(new Column[] { column2 }, new 
Column[] { column11 });
+        MutableRelationship.createRelationship(column2 , column11 );
 
         // view relation [project -> project_name]
-        MutableRelationship.createRelationship(new Column[] { column5 }, new 
Column[] { column12 });
+        MutableRelationship.createRelationship(column5 , column12 );
 
         // view relation [role -> role_name]
-        MutableRelationship.createRelationship(new Column[] { column10 }, new 
Column[] { column13 });
+        MutableRelationship.createRelationship( column10 ,  column13 );
 
         schema.setTables(table1, table2, table3, table4);
         return schema;
     }
 
-    protected static DataSet createDataSet(SelectItem[] selectItems, 
List<Object[]> data) {
+    protected static DataSet createDataSet(List<SelectItem> selectItems, 
List<Object[]> data) {
         if (data.isEmpty()) {
             return new EmptyDataSet(selectItems);
         }
@@ -179,7 +179,7 @@ public abstract class MetaModelTestCase extends TestCase {
     }
 
     public void assertEquals(DataSet ds1, DataSet ds2) {
-        assertEquals(Arrays.toString(ds1.getSelectItems()), 
Arrays.toString(ds2.getSelectItems()));
+        assertEquals(Arrays.toString(ds1.getSelectItems().toArray()), 
Arrays.toString(ds2.getSelectItems().toArray()));
         boolean ds1next = true;
         while (ds1next) {
             ds1next = ds1.next();

http://git-wip-us.apache.org/repos/asf/metamodel/blob/ab5c9482/core/src/test/java/org/apache/metamodel/MockDataContext.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/metamodel/MockDataContext.java 
b/core/src/test/java/org/apache/metamodel/MockDataContext.java
index 74d2464..0c217f2 100644
--- a/core/src/test/java/org/apache/metamodel/MockDataContext.java
+++ b/core/src/test/java/org/apache/metamodel/MockDataContext.java
@@ -20,6 +20,7 @@ package org.apache.metamodel;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import org.apache.metamodel.data.CachingDataSetHeader;
 import org.apache.metamodel.data.DataSet;
@@ -79,9 +80,9 @@ public class MockDataContext extends 
QueryPostprocessDataContext {
     }
 
     @Override
-    protected DataSet materializeMainSchemaTable(Table table, Column[] 
columns, int maxRows) {
+    protected DataSet materializeMainSchemaTable(Table table, List<Column> 
columns, int maxRows) {
         if (_tableName.equals(table.getName())) {
-            final SelectItem[] allSelectItems = 
MetaModelHelper.createSelectItems(table.getColumns());
+            final List<SelectItem> allSelectItems = 
table.getColumns().stream().map(SelectItem::new).collect(Collectors.toList());
             final DataSetHeader header = new 
CachingDataSetHeader(allSelectItems);
             final List<Row> data = new ArrayList<Row>();
             data.add(new DefaultRow(header, new Object[] { "1", "hello", 
"world" }, null));
@@ -91,11 +92,11 @@ public class MockDataContext extends 
QueryPostprocessDataContext {
 
             final DataSet sourceDataSet = new InMemoryDataSet(header, data);
 
-            final SelectItem[] columnSelectItems = 
MetaModelHelper.createSelectItems(columns);
+            final List<SelectItem> columnSelectItems = 
columns.stream().map(SelectItem::new).collect(Collectors.toList());
             final DataSet selectionDataSet = 
MetaModelHelper.getSelection(columnSelectItems, sourceDataSet);
             return selectionDataSet;
         } else if ("an_empty_table".equals(table.getName())) {
-            return new EmptyDataSet(columns);
+            return new 
EmptyDataSet(columns.stream().map(SelectItem::new).collect(Collectors.toList()));
         }
         throw new UnsupportedOperationException();
     }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/ab5c9482/core/src/test/java/org/apache/metamodel/MockUpdateableDataContext.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/metamodel/MockUpdateableDataContext.java 
b/core/src/test/java/org/apache/metamodel/MockUpdateableDataContext.java
index 8d6d48e..4e6563a 100644
--- a/core/src/test/java/org/apache/metamodel/MockUpdateableDataContext.java
+++ b/core/src/test/java/org/apache/metamodel/MockUpdateableDataContext.java
@@ -21,6 +21,7 @@ package org.apache.metamodel;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import org.apache.metamodel.create.TableCreationBuilder;
 import org.apache.metamodel.data.CachingDataSetHeader;
@@ -68,16 +69,16 @@ public class MockUpdateableDataContext extends 
QueryPostprocessDataContext imple
     }
 
     @Override
-    protected DataSet materializeMainSchemaTable(Table table, Column[] 
columns, int maxRows) {
+    protected DataSet materializeMainSchemaTable(Table table, List<Column> 
columns, int maxRows) {
 
         List<Row> rows = new ArrayList<Row>();
-        SelectItem[] items = MetaModelHelper.createSelectItems(columns);
+        List<SelectItem> items = 
columns.stream().map(SelectItem::new).collect(Collectors.toList());
         CachingDataSetHeader header = new CachingDataSetHeader(items);
 
         for (final Object[] values : _values) {
-            Object[] rowValues = new Object[columns.length];
-            for (int i = 0; i < columns.length; i++) {
-                int columnNumber = columns[i].getColumnNumber();
+            Object[] rowValues = new Object[columns.size()];
+            for (int i = 0; i < columns.size(); i++) {
+                int columnNumber = columns.get(i).getColumnNumber();
                 rowValues[i] = values[columnNumber];
             }
             rows.add(new DefaultRow(header, rowValues));
@@ -161,7 +162,7 @@ public class MockUpdateableDataContext extends 
QueryPostprocessDataContext imple
     }
 
     private void delete(List<FilterItem> whereItems) {
-        final SelectItem[] selectItems = 
MetaModelHelper.createSelectItems(_table.getColumns());
+        final List<SelectItem> selectItems = 
_table.getColumns().stream().map(SelectItem::new).collect(Collectors.toList());
         final CachingDataSetHeader header = new 
CachingDataSetHeader(selectItems);
         for (Iterator<Object[]> it = _values.iterator(); it.hasNext();) {
             Object[] values = (Object[]) it.next();

http://git-wip-us.apache.org/repos/asf/metamodel/blob/ab5c9482/core/src/test/java/org/apache/metamodel/QueryPostprocessDataContextTest.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/metamodel/QueryPostprocessDataContextTest.java 
b/core/src/test/java/org/apache/metamodel/QueryPostprocessDataContextTest.java
index d6955a9..f6352d4 100644
--- 
a/core/src/test/java/org/apache/metamodel/QueryPostprocessDataContextTest.java
+++ 
b/core/src/test/java/org/apache/metamodel/QueryPostprocessDataContextTest.java
@@ -22,6 +22,7 @@ import java.nio.channels.UnsupportedAddressTypeException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.swing.table.TableModel;
 
@@ -61,7 +62,7 @@ public class QueryPostprocessDataContextTest extends 
MetaModelTestCase {
 
     public void testQueryMaxRows0() throws Exception {
         final MockDataContext dc = new MockDataContext("sch", "tab", "1");
-        final Table table = dc.getDefaultSchema().getTables()[0];
+        final Table table = dc.getDefaultSchema().getTable(0);
         final DataSet dataSet = 
dc.query().from(table).selectAll().limit(0).execute();
         assertTrue(dataSet instanceof EmptyDataSet);
         assertFalse(dataSet.next());
@@ -77,12 +78,12 @@ public class QueryPostprocessDataContextTest extends 
MetaModelTestCase {
 
         final QueryPostprocessDataContext dc = new 
QueryPostprocessDataContext() {
             @Override
-            protected DataSet materializeMainSchemaTable(Table table, Column[] 
columns, int maxRows) {
-                Object[] values = new Object[columns.length];
-                for (int i = 0; i < columns.length; i++) {
-                    values[i] = columns[i].getColumnNumber();
+            protected DataSet materializeMainSchemaTable(Table table, 
List<Column> columns, int maxRows) {
+                Object[] values = new Object[columns.size()];
+                for (int i = 0; i < columns.size(); i++) {
+                    values[i] = columns.get(i).getColumnNumber();
                 }
-                DataSetHeader header = new SimpleDataSetHeader(columns);
+                DataSetHeader header = new 
SimpleDataSetHeader(columns.stream().map(SelectItem::new).collect(Collectors.toList()));
                 DefaultRow row = new DefaultRow(header, values);
                 return new InMemoryDataSet(row);
             }
@@ -110,13 +111,13 @@ public class QueryPostprocessDataContextTest extends 
MetaModelTestCase {
 
     public void testAggregateQueryNoWhereClause() throws Exception {
         MockDataContext dc = new MockDataContext("sch", "tab", "1");
-        Table table = dc.getDefaultSchema().getTables()[0];
+        Table table = dc.getDefaultSchema().getTable(0);
         assertSingleRowResult("Row[values=[4]]", 
dc.query().from(table).selectCount().execute());
     }
 
     public void testAggregateQueryRegularWhereClause() throws Exception {
         MockDataContext dc = new MockDataContext("sch", "tab", "1");
-        Table table = dc.getDefaultSchema().getTables()[0];
+        Table table = dc.getDefaultSchema().getTable(0);
         assertSingleRowResult("Row[values=[3]]", 
dc.query().from(table).selectCount().where("baz").eq("world")
                 .execute());
     }
@@ -124,14 +125,10 @@ public class QueryPostprocessDataContextTest extends 
MetaModelTestCase {
     public void testApplyFunctionToNullValues() throws Exception {
         QueryPostprocessDataContext dataContext = new 
QueryPostprocessDataContext() {
             @Override
-            public DataSet materializeMainSchemaTable(Table table, Column[] 
columns, int maxRows) {
+            public DataSet materializeMainSchemaTable(Table table, 
List<Column> columns, int maxRows) {
                 if (table == table1) {
-                    Column[] columns1 = table1.getColumns();
-                    SelectItem[] selectItems = new SelectItem[columns1.length];
-                    for (int i = 0; i < selectItems.length; i++) {
-                        SelectItem selectItem = new SelectItem(columns1[i]);
-                        selectItems[i] = selectItem;
-                    }
+                    List<Column> columns1 = table1.getColumns();
+                    List<SelectItem> selectItems = 
columns1.stream().map(SelectItem::new).collect(Collectors.toList());
                     List<Object[]> data = new ArrayList<Object[]>();
                     data.add(new Object[] { 1, "no nulls", 1 });
                     data.add(new Object[] { 2, "onlynull", null });
@@ -175,7 +172,7 @@ public class QueryPostprocessDataContextTest extends 
MetaModelTestCase {
 
     public void testGroupByNulls() throws Exception {
         MockDataContext dc = new MockDataContext("sch", "tab", null);
-        Table table = dc.getDefaultSchema().getTables()[0];
+        Table table = dc.getDefaultSchema().getTable(0);
         DataSet dataSet = dc.query().from(table).select(FunctionType.SUM, 
"foo").select("baz").groupBy("baz").execute();
         assertTrue(dataSet.next());
         assertEquals("Row[values=[7.0, world]]", dataSet.getRow().toString());
@@ -187,7 +184,7 @@ public class QueryPostprocessDataContextTest extends 
MetaModelTestCase {
 
     public void testNewAggregateFunctions() throws Exception {
         MockDataContext dc = new MockDataContext("sch", "tab", null);
-        Table table = dc.getDefaultSchema().getTables()[0];
+        Table table = dc.getDefaultSchema().getTable(0);
         DataSet dataSet = dc.query().from(table).select(FunctionType.FIRST, 
"foo").select(FunctionType.LAST, "foo")
                 .select(FunctionType.RANDOM, "foo").execute();
         assertTrue(dataSet.next());
@@ -226,10 +223,10 @@ public class QueryPostprocessDataContextTest extends 
MetaModelTestCase {
 
     public void testMixedAggregateAndRawQuery() throws Exception {
         MockDataContext dc = new MockDataContext("sch", "tab", "1");
-        Table table = dc.getDefaultSchema().getTables()[0];
-        Column[] columns = table.getColumns();
+        Table table = dc.getDefaultSchema().getTable(0);
+        List<Column> columns = table.getColumns();
 
-        Query query = dc.query().from(table).select(FunctionType.MAX, 
columns[0]).and(columns[1]).toQuery();
+        Query query = dc.query().from(table).select(FunctionType.MAX, 
columns.get(0)).and(columns.get(1)).toQuery();
         assertEquals("SELECT MAX(tab.foo), tab.bar FROM sch.tab", 
query.toSql());
 
         DataSet ds = dc.executeQuery(query);
@@ -246,7 +243,7 @@ public class QueryPostprocessDataContextTest extends 
MetaModelTestCase {
 
     public void testScalarFunctionSelect() throws Exception {
         MockDataContext dc = new MockDataContext("sch", "tab", "1");
-        Table table = dc.getDefaultSchema().getTables()[0];
+        Table table = dc.getDefaultSchema().getTable(0);
 
         Query query = 
dc.query().from(table).select("foo").select(FunctionType.TO_NUMBER, 
"foo").select("bar")
                 .select(FunctionType.TO_STRING, 
"bar").select(FunctionType.TO_NUMBER, "bar").toQuery();
@@ -278,7 +275,7 @@ public class QueryPostprocessDataContextTest extends 
MetaModelTestCase {
 
     public void testScalarFunctionWhere() throws Exception {
         MockDataContext dc = new MockDataContext("sch", "tab", "1");
-        Table table = dc.getDefaultSchema().getTables()[0];
+        Table table = dc.getDefaultSchema().getTable(0);
 
         Query query = 
dc.query().from(table).select("foo").where(FunctionType.TO_NUMBER, 
"bar").eq(1).toQuery();
         assertEquals("SELECT tab.foo FROM sch.tab WHERE TO_NUMBER(tab.bar) = 
1", query.toSql());
@@ -297,7 +294,7 @@ public class QueryPostprocessDataContextTest extends 
MetaModelTestCase {
     public void testSelectItemReferencesToFromItems() throws Exception {
         MockDataContext dc = new MockDataContext("sch", "tab", "1");
 
-        Table table = dc.getDefaultSchema().getTables()[0];
+        Table table = dc.getDefaultSchema().getTable(0);
 
         Query q = new Query();
         FromItem fromItem1 = q.from(table, "t1").getFromClause().getItem(0);
@@ -308,10 +305,10 @@ public class QueryPostprocessDataContextTest extends 
MetaModelTestCase {
         assertEquals("SELECT t1.foo, t2.foo FROM sch.tab t1, sch.tab t2 WHERE 
t1.foo = '2'", q.toSql());
 
         DataSet ds = dc.executeQuery(q);
-        SelectItem[] selectItems = ds.getSelectItems();
-        assertEquals(2, selectItems.length);
-        assertEquals("t1.foo", selectItems[0].toSql());
-        assertEquals("t2.foo", selectItems[1].toSql());
+        List<SelectItem> selectItems = ds.getSelectItems();
+        assertEquals(2, selectItems.size());
+        assertEquals("t1.foo", selectItems.get(0).toSql());
+        assertEquals("t2.foo", selectItems.get(1).toSql());
         assertTrue(ds.next());
         assertEquals("Row[values=[2, 1]]", ds.getRow().toString());
         assertTrue(ds.next());
@@ -328,14 +325,10 @@ public class QueryPostprocessDataContextTest extends 
MetaModelTestCase {
         QueryPostprocessDataContext dataContext = new 
QueryPostprocessDataContext() {
 
             @Override
-            public DataSet materializeMainSchemaTable(Table table, Column[] 
columns, int maxRows) {
+            public DataSet materializeMainSchemaTable(Table table, 
List<Column> columns, int maxRows) {
                 if (table == table1) {
-                    Column[] columns1 = table1.getColumns();
-                    SelectItem[] selectItems = new SelectItem[columns1.length];
-                    for (int i = 0; i < selectItems.length; i++) {
-                        SelectItem selectItem = new SelectItem(columns1[i]);
-                        selectItems[i] = selectItem;
-                    }
+                    List<Column> columns1 = table1.getColumns();
+                    List<SelectItem> selectItems = 
columns1.stream().map(SelectItem::new).collect(Collectors.toList());
                     List<Object[]> data = new ArrayList<Object[]>();
                     data.add(new Object[] { 1, "kasper", "denmark" });
                     data.add(new Object[] { 2, "asbjorn", "denmark" });
@@ -350,12 +343,7 @@ public class QueryPostprocessDataContextTest extends 
MetaModelTestCase {
                     }
                     return createDataSet(selectItems, data);
                 } else if (table == table2) {
-                    Column[] columns2 = table2.getColumns();
-                    SelectItem[] selectItems = new SelectItem[columns2.length];
-                    for (int i = 0; i < selectItems.length; i++) {
-                        SelectItem selectItem = new SelectItem(columns2[i]);
-                        selectItems[i] = selectItem;
-                    }
+                    List<SelectItem> selectItems = 
table2.getColumns().stream().map(SelectItem::new).collect(Collectors.toList());
                     List<Object[]> data = new ArrayList<Object[]>();
                     data.add(new Object[] { 1, 1, "founder" });
                     data.add(new Object[] { 1, 1, "developer" });
@@ -408,25 +396,25 @@ public class QueryPostprocessDataContextTest extends 
MetaModelTestCase {
 
     public void testInformationSchema() throws Exception {
         DataContext dc = getDataContext();
-        assertEquals("[information_schema, MetaModelSchema]", 
Arrays.toString(dc.getSchemaNames()));
+        assertEquals("[information_schema, MetaModelSchema]", 
Arrays.toString(dc.getSchemaNames().toArray()));
         Schema informationSchema = dc.getSchemaByName("information_schema");
         assertEquals(
                 "[Table[name=tables,type=TABLE,remarks=null], 
Table[name=columns,type=TABLE,remarks=null], 
Table[name=relationships,type=TABLE,remarks=null]]",
-                Arrays.toString(informationSchema.getTables()));
+                Arrays.toString(informationSchema.getTables().toArray()));
         assertEquals(
                 
"[Relationship[primaryTable=tables,primaryColumns=[name],foreignTable=columns,foreignColumns=[table]],
 "
                         + 
"Relationship[primaryTable=tables,primaryColumns=[name],foreignTable=relationships,foreignColumns=[primary_table]],
 "
                         + 
"Relationship[primaryTable=tables,primaryColumns=[name],foreignTable=relationships,foreignColumns=[foreign_table]],
 "
                         + 
"Relationship[primaryTable=columns,primaryColumns=[name],foreignTable=relationships,foreignColumns=[primary_column]],
 "
                         + 
"Relationship[primaryTable=columns,primaryColumns=[name],foreignTable=relationships,foreignColumns=[foreign_column]]]",
-                Arrays.toString(informationSchema.getRelationships()));
+                
Arrays.toString(informationSchema.getRelationships().toArray()));
         Table tablesTable = informationSchema.getTableByName("tables");
         assertEquals(
                 
"[Column[name=name,columnNumber=0,type=VARCHAR,nullable=false,nativeType=null,columnSize=null],
 "
                         + 
"Column[name=type,columnNumber=1,type=VARCHAR,nullable=true,nativeType=null,columnSize=null],
 "
                         + 
"Column[name=num_columns,columnNumber=2,type=INTEGER,nullable=true,nativeType=null,columnSize=null],
 "
                         + 
"Column[name=remarks,columnNumber=3,type=VARCHAR,nullable=true,nativeType=null,columnSize=null]]",
-                Arrays.toString(tablesTable.getColumns()));
+                Arrays.toString(tablesTable.getColumns().toArray()));
         Table columnsTable = informationSchema.getTableByName("columns");
         assertEquals(
                 
"[Column[name=name,columnNumber=0,type=VARCHAR,nullable=false,nativeType=null,columnSize=null],
 "
@@ -437,14 +425,14 @@ public class QueryPostprocessDataContextTest extends 
MetaModelTestCase {
                         + 
"Column[name=indexed,columnNumber=5,type=BOOLEAN,nullable=true,nativeType=null,columnSize=null],
 "
                         + 
"Column[name=table,columnNumber=6,type=VARCHAR,nullable=false,nativeType=null,columnSize=null],
 "
                         + 
"Column[name=remarks,columnNumber=7,type=VARCHAR,nullable=true,nativeType=null,columnSize=null]]",
-                Arrays.toString(columnsTable.getColumns()));
+                Arrays.toString(columnsTable.getColumns().toArray()));
         Table relationshipsTable = 
informationSchema.getTableByName("relationships");
         assertEquals(
                 
"[Column[name=primary_table,columnNumber=0,type=VARCHAR,nullable=false,nativeType=null,columnSize=null],
 "
                         + 
"Column[name=primary_column,columnNumber=1,type=VARCHAR,nullable=false,nativeType=null,columnSize=null],
 "
                         + 
"Column[name=foreign_table,columnNumber=2,type=VARCHAR,nullable=false,nativeType=null,columnSize=null],
 "
                         + 
"Column[name=foreign_column,columnNumber=3,type=VARCHAR,nullable=false,nativeType=null,columnSize=null]]",
-                Arrays.toString(relationshipsTable.getColumns()));
+                Arrays.toString(relationshipsTable.getColumns().toArray()));
 
         DataSet dataSet = 
dc.query().from(tablesTable).select(tablesTable.getColumns()).execute();
         assertTrue(dataSet.next());
@@ -458,7 +446,7 @@ public class QueryPostprocessDataContextTest extends 
MetaModelTestCase {
         assertFalse(dataSet.next());
         dataSet.close();
 
-        Relationship relationship = 
tablesTable.getRelationships(columnsTable)[0];
+        Relationship relationship = 
tablesTable.getRelationships(columnsTable).iterator().next();
         FromItem joinFromItem = new FromItem(JoinType.INNER, relationship);
         Query q = new 
Query().select(tablesTable.getColumnByName("name")).select(columnsTable.getColumnByName("name"))
                 .select(columnsTable.getBooleanColumns()).from(joinFromItem);
@@ -492,7 +480,7 @@ public class QueryPostprocessDataContextTest extends 
MetaModelTestCase {
 
         DataContext dc = getDataContext();
         DataSet data = dc.executeQuery(q);
-        assertEquals(1, data.getSelectItems().length);
+        assertEquals(1, data.getSelectItems().size());
 
         TableModel tableModel = new DataSetTableModel(data);
 
@@ -533,8 +521,8 @@ public class QueryPostprocessDataContextTest extends 
MetaModelTestCase {
         DataContext dc = getDataContext();
 
         DataSet data = dc.executeQuery(q);
-        assertEquals(1, data.getSelectItems().length);
-        assertEquals("SUM(r.project_id)", data.getSelectItems()[0].toString());
+        assertEquals(1, data.getSelectItems().size());
+        assertEquals("SUM(r.project_id)", 
data.getSelectItems().get(0).toString());
 
         TableModel tableModel = new DataSetTableModel(data);
         assertEquals(3, tableModel.getRowCount());
@@ -564,31 +552,31 @@ public class QueryPostprocessDataContextTest extends 
MetaModelTestCase {
 
         DataContext dc = getDataContext();
         DataSet data = dc.executeQuery(q);
-        assertEquals(1, data.getSelectItems().length);
-        assertEquals("r.name", data.getSelectItems()[0].toString());
+        assertEquals(1, data.getSelectItems().size());
+        assertEquals("r.name", data.getSelectItems().get(0).toString());
         TableModel tableModel = new DataSetTableModel(data);
         assertEquals(3, tableModel.getRowCount());
 
         q.select(new SelectItem(FunctionType.COUNT, "*", "c"));
         q.where(new FilterItem(new SelectItem(roleColumn), 
OperatorType.EQUALS_TO, "founder"));
         data = dc.executeQuery(q);
-        assertEquals(2, data.getSelectItems().length);
-        assertEquals("r.name", data.getSelectItems()[0].toString());
-        assertEquals("COUNT(*) AS c", data.getSelectItems()[1].toString());
+        assertEquals(2, data.getSelectItems().size());
+        assertEquals("r.name", data.getSelectItems().get(0).toString());
+        assertEquals("COUNT(*) AS c", data.getSelectItems().get(1).toString());
         tableModel = new DataSetTableModel(data);
         assertEquals(1, tableModel.getRowCount());
         assertEquals("founder", tableModel.getValueAt(0, 0));
         assertEquals(2l, tableModel.getValueAt(0, 1));
 
-        q.select(new SelectItem(FunctionType.SUM, table2.getColumns()[0]));
+        q.select(new SelectItem(FunctionType.SUM, table2.getColumn(0)));
         assertEquals(
                 "SELECT r.name, COUNT(*) AS c, SUM(r.contributor_id) FROM 
MetaModelSchema.role r WHERE r.name = 'founder' GROUP BY r.name",
                 q.toString());
         data = dc.executeQuery(q);
-        assertEquals(3, data.getSelectItems().length);
-        assertEquals("r.name", data.getSelectItems()[0].toString());
-        assertEquals("COUNT(*) AS c", data.getSelectItems()[1].toString());
-        assertEquals("SUM(r.contributor_id)", 
data.getSelectItems()[2].toString());
+        assertEquals(3, data.getSelectItems().size());
+        assertEquals("r.name", data.getSelectItems().get(0).toString());
+        assertEquals("COUNT(*) AS c", data.getSelectItems().get(1).toString());
+        assertEquals("SUM(r.contributor_id)", 
data.getSelectItems().get(2).toString());
         tableModel = new DataSetTableModel(data);
         assertEquals(1, tableModel.getRowCount());
         assertEquals("founder", tableModel.getValueAt(0, 0));
@@ -744,7 +732,7 @@ public class QueryPostprocessDataContextTest extends 
MetaModelTestCase {
         q.select(table1.getColumns());
         q.select(table2.getColumns());
         DataSet data = dc.executeQuery(q);
-        assertEquals(table1.getColumnCount() + table2.getColumnCount(), 
data.getSelectItems().length);
+        assertEquals(table1.getColumnCount() + table2.getColumnCount(), 
data.getSelectItems().size());
         for (int i = 0; i < 6 * 8; i++) {
             assertTrue(data.next());
             if (i == 0) {
@@ -843,7 +831,7 @@ public class QueryPostprocessDataContextTest extends 
MetaModelTestCase {
                 q.toString());
 
         DataSet data = dc.executeQuery(q);
-        assertEquals(2, data.getSelectItems().length);
+        assertEquals(2, data.getSelectItems().size());
         assertTrue(data.next());
         assertEquals("Row[values=[kasper, founder]]", 
data.getRow().toString());
         assertTrue(data.next());
@@ -888,7 +876,7 @@ public class QueryPostprocessDataContextTest extends 
MetaModelTestCase {
 
         SelectItem s1 = new 
SelectItem(table1.getColumnByName(COLUMN_CONTRIBUTOR_NAME));
         SelectItem s2 = new 
SelectItem(table2.getColumnByName(COLUMN_ROLE_ROLE_NAME));
-        FromItem fromItem = new FromItem(JoinType.INNER, 
table1.getRelationships(table2)[0]);
+        FromItem fromItem = new FromItem(JoinType.INNER, 
table1.getRelationships(table2).iterator().next());
 
         Query q = new Query();
         q.select(s1);
@@ -899,7 +887,7 @@ public class QueryPostprocessDataContextTest extends 
MetaModelTestCase {
                 q.toString());
 
         DataSet data = dc.executeQuery(q);
-        assertEquals(2, data.getSelectItems().length);
+        assertEquals(2, data.getSelectItems().size());
         assertTrue(data.next());
         assertEquals("Row[values=[kasper, founder]]", 
data.getRow().toString());
         assertTrue(data.next());
@@ -941,7 +929,7 @@ public class QueryPostprocessDataContextTest extends 
MetaModelTestCase {
 
         DataContext dc = getDataContext();
         DataSet data = dc.executeQuery(q2);
-        assertEquals(1, data.getSelectItems().length);
+        assertEquals(1, data.getSelectItems().size());
         assertTrue(data.next());
         assertEquals("Row[values=[kasper]]", data.getRow().toString());
         assertTrue(data.next());
@@ -968,7 +956,7 @@ public class QueryPostprocessDataContextTest extends 
MetaModelTestCase {
                 "SELECT d.e AS f FROM (SELECT c.name AS e FROM (SELECT 
contributor.contributor_id, contributor.name, contributor.country FROM 
MetaModelSchema.contributor) c) d",
                 q3.toString());
         data = dc.executeQuery(q3);
-        assertEquals(1, data.getSelectItems().length);
+        assertEquals(1, data.getSelectItems().size());
         assertTrue(data.next());
         assertEquals("Row[values=[kasper]]", data.getRow().toString());
         assertTrue(data.next());
@@ -1015,7 +1003,7 @@ public class QueryPostprocessDataContextTest extends 
MetaModelTestCase {
     public void testExecuteCount() throws Exception {
         QueryPostprocessDataContext dc = new QueryPostprocessDataContext() {
             @Override
-            protected DataSet materializeMainSchemaTable(Table table, Column[] 
columns, int maxRows) {
+            protected DataSet materializeMainSchemaTable(Table table, 
List<Column> columns, int maxRows) {
                 throw new UnsupportedOperationException();
             }
 
@@ -1047,7 +1035,7 @@ public class QueryPostprocessDataContextTest extends 
MetaModelTestCase {
     public void testExecutePrimaryKeyLookupQuery() throws Exception {
         QueryPostprocessDataContext dc = new QueryPostprocessDataContext() {
             @Override
-            protected DataSet materializeMainSchemaTable(Table table, Column[] 
columns, int maxRows) {
+            protected DataSet materializeMainSchemaTable(Table table, 
List<Column> columns, int maxRows) {
                 throw new UnsupportedAddressTypeException();
             }
 

http://git-wip-us.apache.org/repos/asf/metamodel/blob/ab5c9482/core/src/test/java/org/apache/metamodel/convert/ConvertersTest.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/metamodel/convert/ConvertersTest.java 
b/core/src/test/java/org/apache/metamodel/convert/ConvertersTest.java
index c68dfd2..f23cf1a 100644
--- a/core/src/test/java/org/apache/metamodel/convert/ConvertersTest.java
+++ b/core/src/test/java/org/apache/metamodel/convert/ConvertersTest.java
@@ -37,7 +37,7 @@ public class ConvertersTest extends TestCase {
 
     public void testAutoDetectConverters() throws Exception {
         final MockUpdateableDataContext decoratedDataContext = new 
MockUpdateableDataContext();
-        final Table table = 
decoratedDataContext.getDefaultSchema().getTables()[0];
+        final Table table = 
decoratedDataContext.getDefaultSchema().getTables().get(0);
         Map<Column, TypeConverter<?, ?>> converters = 
Converters.autoDetectConverters(decoratedDataContext, table, 2);
         assertEquals(1, converters.size());
         assertEquals(
@@ -92,7 +92,7 @@ public class ConvertersTest extends TestCase {
             assertEquals("foo is expected to be string", String.class, 
physicalValues[0].getClass());
         }
 
-        final Table table = dc.getDefaultSchema().getTables()[0];
+        final Table table = dc.getDefaultSchema().getTables().get(0);
         Map<Column, TypeConverter<?, ?>> converters = 
Converters.autoDetectConverters(dc, table, 1000);
         assertEquals(1, converters.size());
         dc = Converters.addTypeConverters(dc, converters);

http://git-wip-us.apache.org/repos/asf/metamodel/blob/ab5c9482/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 c4d320c..f5e7356 100644
--- 
a/core/src/test/java/org/apache/metamodel/create/AbstractCreateTableBuilderTest.java
+++ 
b/core/src/test/java/org/apache/metamodel/create/AbstractCreateTableBuilderTest.java
@@ -57,11 +57,11 @@ public class AbstractCreateTableBuilderTest extends 
TestCase {
         assertEquals("tablename", table.getName());
         assertEquals(3, table.getColumnCount());
         
assertEquals("Column[name=foo,columnNumber=0,type=VARCHAR,nullable=true,nativeType=vch,columnSize=1234]",
-                table.getColumns()[0].toString());
+                table.getColumn(0).toString());
         
assertEquals("Column[name=bar,columnNumber=1,type=null,nullable=null,nativeType=null,columnSize=null]",
-                table.getColumns()[1].toString());
+                table.getColumn(1).toString());
         
assertEquals("Column[name=baz,columnNumber=2,type=null,nullable=false,nativeType=null,columnSize=null]",
-                table.getColumns()[2].toString());
+                table.getColumn(2).toString());
 
         System.out.println(builder.toSql());
         assertEquals("CREATE TABLE schema.tablename (foo VARCHAR(1234),bar,baz 
NOT NULL, PRIMARY KEY(foo))", builder.toSql());
@@ -96,12 +96,12 @@ public class AbstractCreateTableBuilderTest extends 
TestCase {
         assertEquals("tablename", table.getName());
         assertEquals(3, table.getColumnCount());
         
assertEquals("Column[name=foo,columnNumber=0,type=VARCHAR,nullable=true,nativeType=vch,columnSize=1234]",
-                table.getColumns()[0].toString());
-        assertTrue(table.getColumns()[0].isPrimaryKey());
+                table.getColumn(0).toString());
+        assertTrue(table.getColumn(0).isPrimaryKey());
 
         
assertEquals("Column[name=bar,columnNumber=1,type=null,nullable=null,nativeType=null,columnSize=null]",
-                table.getColumns()[1].toString());
+                table.getColumn(1).toString());
         
assertEquals("Column[name=baz,columnNumber=2,type=null,nullable=null,nativeType=null,columnSize=null]",
-                table.getColumns()[2].toString());
+                table.getColumn(1).toString());
     }
 }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/ab5c9482/core/src/test/java/org/apache/metamodel/data/DataSetTableModelTest.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/metamodel/data/DataSetTableModelTest.java 
b/core/src/test/java/org/apache/metamodel/data/DataSetTableModelTest.java
index b70bc8c..6736c5f 100644
--- a/core/src/test/java/org/apache/metamodel/data/DataSetTableModelTest.java
+++ b/core/src/test/java/org/apache/metamodel/data/DataSetTableModelTest.java
@@ -23,6 +23,7 @@ import java.util.List;
 
 import javax.swing.table.TableModel;
 
+import com.google.common.collect.Lists;
 import org.apache.metamodel.MetaModelHelper;
 import org.apache.metamodel.query.SelectItem;
 import org.apache.metamodel.schema.MutableColumn;
@@ -34,7 +35,7 @@ public class DataSetTableModelTest extends TestCase {
     public void testToTableModel() throws Exception {
         SelectItem[] selectItems = MetaModelHelper.createSelectItems(new 
MutableColumn("CUSTOMERNUMBER"),
                 new MutableColumn("CUSTOMERNAME"), new 
MutableColumn("CONTACTLASTNAME"));
-        CachingDataSetHeader header = new CachingDataSetHeader(selectItems);
+        CachingDataSetHeader header = new 
CachingDataSetHeader(Lists.newArrayList(selectItems));
         List<Row> rows = new ArrayList<Row>();
         rows.add(new DefaultRow(header, new Object[] { 1, "John", "Doe" }));
         rows.add(new DefaultRow(header, new Object[] { 2, "John", "Taylor" }));

http://git-wip-us.apache.org/repos/asf/metamodel/blob/ab5c9482/core/src/test/java/org/apache/metamodel/data/DefaultRowTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/metamodel/data/DefaultRowTest.java 
b/core/src/test/java/org/apache/metamodel/data/DefaultRowTest.java
index 40f0551..1f485ea 100644
--- a/core/src/test/java/org/apache/metamodel/data/DefaultRowTest.java
+++ b/core/src/test/java/org/apache/metamodel/data/DefaultRowTest.java
@@ -24,6 +24,7 @@ import java.io.FileInputStream;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.lang.reflect.Field;
+import java.util.List;
 
 import org.apache.metamodel.query.SelectItem;
 import org.apache.metamodel.schema.Column;
@@ -71,9 +72,9 @@ public class DefaultRowTest extends TestCase {
 
         Row row = (Row) obj;
         assertEquals(2, row.size());
-        SelectItem[] selectItems = row.getSelectItems();
-        assertEquals("foo", selectItems[0].toString());
-        assertEquals("bar", selectItems[1].toString());
+        List<SelectItem> selectItems = row.getSelectItems();
+        assertEquals("foo", selectItems.get(0).toString());
+        assertEquals("bar", selectItems.get(1).toString());
 
         assertEquals("foo", row.getValue(0));
         assertEquals("bar", row.getValue(1));
@@ -81,7 +82,7 @@ public class DefaultRowTest extends TestCase {
         assertEquals(Style.NO_STYLE, row.getStyle(0));
         assertEquals(Style.NO_STYLE, row.getStyle(1));
 
-        Column column = selectItems[0].getColumn();
+        Column column = selectItems.get(0).getColumn();
         assertNotNull(column);
         
         // the columns used to create the object did not have column types 
assigned.

http://git-wip-us.apache.org/repos/asf/metamodel/blob/ab5c9482/core/src/test/java/org/apache/metamodel/data/RowTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/metamodel/data/RowTest.java 
b/core/src/test/java/org/apache/metamodel/data/RowTest.java
index daa846a..685a1d3 100644
--- a/core/src/test/java/org/apache/metamodel/data/RowTest.java
+++ b/core/src/test/java/org/apache/metamodel/data/RowTest.java
@@ -18,6 +18,7 @@
  */
 package org.apache.metamodel.data;
 
+import com.google.common.collect.Lists;
 import org.apache.metamodel.MetaModelTestCase;
 import org.apache.metamodel.query.SelectItem;
 import org.apache.metamodel.schema.Schema;
@@ -28,29 +29,27 @@ public class RowTest extends MetaModelTestCase {
     public void testRow() throws Exception {
         Schema schema = getExampleSchema();
         Table projectTable = schema.getTableByName(TABLE_PROJECT);
-        SelectItem item = new SelectItem(projectTable.getColumns()[0]);
-        SelectItem[] items = { item };
-        DataSetHeader header = new CachingDataSetHeader(items);
+        SelectItem item = new SelectItem(projectTable.getColumn(0));
+        DataSetHeader header = new 
CachingDataSetHeader(Lists.newArrayList(item));
         Object[] values = { "foobar" };
         Row row = new DefaultRow(header, values);
         assertEquals("Row[values=[foobar]]", row.toString());
         assertEquals("foobar", row.getValue(0));
         assertEquals("foobar", row.getValues()[0]);
         assertEquals("foobar", row.getValue(item));
-        assertEquals(item, row.getSelectItems()[0]);
+        assertEquals(item, row.getSelectItems().get(0));
     }
 
     public void testGetSubSelection() throws Exception {
         Schema schema = getExampleSchema();
         Table projectTable = schema.getTableByName(TABLE_PROJECT);
-        SelectItem item1 = new SelectItem(projectTable.getColumns()[0]);
-        SelectItem item2 = new SelectItem(projectTable.getColumns()[0]);
-        SelectItem[] items = { item1, item2 };
-        DataSetHeader header = new CachingDataSetHeader(items);
+        SelectItem item1 = new SelectItem(projectTable.getColumn(0));
+        SelectItem item2 = new SelectItem(projectTable.getColumn(0));
+        DataSetHeader header = new 
CachingDataSetHeader(Lists.newArrayList(item1,item2));
         Object[] values = { "foo", "bar" };
         Row row = new DefaultRow(header, values);
         row = row.getSubSelection(new SimpleDataSetHeader(new SelectItem[] { 
item1 }));
-        assertEquals(1, row.getSelectItems().length);
+        assertEquals(1, row.getSelectItems().size());
         assertEquals(1, row.getValues().length);
         assertEquals("foo", row.getValue(0));
     }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/ab5c9482/core/src/test/java/org/apache/metamodel/data/UnionDataSetTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/metamodel/data/UnionDataSetTest.java 
b/core/src/test/java/org/apache/metamodel/data/UnionDataSetTest.java
index 44178b2..cce8b18 100644
--- a/core/src/test/java/org/apache/metamodel/data/UnionDataSetTest.java
+++ b/core/src/test/java/org/apache/metamodel/data/UnionDataSetTest.java
@@ -23,7 +23,10 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
 import java.util.Arrays;
+import java.util.stream.Collectors;
 
+import com.google.common.collect.Lists;
+import org.apache.metamodel.query.SelectItem;
 import org.apache.metamodel.schema.Column;
 import org.apache.metamodel.schema.MutableColumn;
 import org.junit.Test;
@@ -34,25 +37,33 @@ public class UnionDataSetTest {
     public void testVanillaUnion() {
         // data set 1
         final DataSetHeader header1 =
-                new SimpleDataSetHeader(new Column[] { new 
MutableColumn("foo1"), new MutableColumn("bar1") });
+                new SimpleDataSetHeader(
+                        Lists.newArrayList(new MutableColumn("foo1"), new 
MutableColumn("bar1")).stream()
+                                
.map(SelectItem::new).collect(Collectors.toList()));
         final Row row1 = new DefaultRow(header1, new Object[] { "1", "2" });
         final Row row2 = new DefaultRow(header1, new Object[] { "3", "4" });
         final DataSet ds1 = new InMemoryDataSet(header1, row1, row2);
 
         // data set 2
         final DataSetHeader header2 =
-                new SimpleDataSetHeader(new Column[] { new 
MutableColumn("foo2"), new MutableColumn("bar2") });
+                new SimpleDataSetHeader(
+                        Lists.newArrayList( new MutableColumn("foo2"), new 
MutableColumn("bar2") ).stream()
+                                
.map(SelectItem::new).collect(Collectors.toList()));
         final Row row3 = new DefaultRow(header2, new Object[] { "5", "6" });
         final DataSet ds2 = new InMemoryDataSet(header2, row3);
 
         // data set 3
         final DataSetHeader header3 =
-                new SimpleDataSetHeader(new Column[] { new 
MutableColumn("foo3"), new MutableColumn("bar3") });
+                new SimpleDataSetHeader(
+                        Lists.newArrayList( new MutableColumn("foo3"), new 
MutableColumn("bar3") ).stream()
+                                
.map(SelectItem::new).collect(Collectors.toList()));
         final Row row4 = new DefaultRow(header2, new Object[] { "7", "8" });
         final DataSet ds3 = new InMemoryDataSet(header3, row4);
 
         final DataSetHeader unionHeader =
-                new SimpleDataSetHeader(new Column[] { new 
MutableColumn("fooUnion"), new MutableColumn("barUnion") });
+                new SimpleDataSetHeader(
+                        Lists.newArrayList( new MutableColumn("fooUnion"), new 
MutableColumn("barUnion") ).stream()
+                            
.map(SelectItem::new).collect(Collectors.toList()));
         final DataSet unionDataSet = UnionDataSet.ofDataSets(unionHeader, 
Arrays.asList(ds1, ds2, ds3));
         assertTrue(unionDataSet.next());
         assertEquals("Row[values=[1, 2]]", unionDataSet.getRow().toString());

http://git-wip-us.apache.org/repos/asf/metamodel/blob/ab5c9482/core/src/test/java/org/apache/metamodel/delete/AbstractRowDeletionCallbackTest.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/metamodel/delete/AbstractRowDeletionCallbackTest.java
 
b/core/src/test/java/org/apache/metamodel/delete/AbstractRowDeletionCallbackTest.java
index f0774f0..0c0b98f 100644
--- 
a/core/src/test/java/org/apache/metamodel/delete/AbstractRowDeletionCallbackTest.java
+++ 
b/core/src/test/java/org/apache/metamodel/delete/AbstractRowDeletionCallbackTest.java
@@ -30,7 +30,7 @@ public class AbstractRowDeletionCallbackTest extends TestCase 
{
 
     public void testDelete() throws Exception {
         final MockUpdateableDataContext dc = new MockUpdateableDataContext();
-        final Table table = dc.getDefaultSchema().getTables()[0];
+        final Table table = dc.getDefaultSchema().getTables().get(0);
         DataSet ds = dc.query().from(table).selectCount().execute();
         assertTrue(ds.next());
         assertEquals("3", ds.getRow().getValue(0).toString());

http://git-wip-us.apache.org/repos/asf/metamodel/blob/ab5c9482/core/src/test/java/org/apache/metamodel/intercept/InterceptableDataContextTest.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/metamodel/intercept/InterceptableDataContextTest.java
 
b/core/src/test/java/org/apache/metamodel/intercept/InterceptableDataContextTest.java
index e5ee2f1..647ace4 100644
--- 
a/core/src/test/java/org/apache/metamodel/intercept/InterceptableDataContextTest.java
+++ 
b/core/src/test/java/org/apache/metamodel/intercept/InterceptableDataContextTest.java
@@ -19,6 +19,7 @@
 package org.apache.metamodel.intercept;
 
 import java.util.Arrays;
+import java.util.List;
 
 import junit.framework.TestCase;
 
@@ -35,7 +36,7 @@ public class InterceptableDataContextTest extends TestCase {
 
        private final MockUpdateableDataContext delegateDataContext = new 
MockUpdateableDataContext();
        private final Table table = delegateDataContext.getDefaultSchema()
-                       .getTables()[0];
+                       .getTables().get(0);
 
        public void testInterceptSchema() throws Exception {
                // without an interceptor
@@ -43,15 +44,15 @@ public class InterceptableDataContextTest extends TestCase {
                        DataContext dc = new 
InterceptableDataContext(delegateDataContext);
 
                        Schema schema = dc.getDefaultSchema();
-                       Schema[] schemas = dc.getSchemas();
+                       List<Schema> schemas = dc.getSchemas();
 
                        assertEquals("schema", schema.getName());
                        assertEquals(MutableSchema.class, schema.getClass());
                        assertEquals("[information_schema, schema]",
-                                       Arrays.toString(dc.getSchemaNames()));
-                       assertEquals(2, schemas.length);
-                       assertEquals("information_schema", 
schemas[0].getName());
-                       assertEquals("schema", schemas[1].getName());
+                                       
Arrays.toString(dc.getSchemaNames().toArray()));
+                       assertEquals(2, schemas.size());
+                       assertEquals("information_schema", 
schemas.get(0).getName());
+                       assertEquals("schema", schemas.get(1).getName());
                }
 
                // with an interceptor
@@ -65,15 +66,15 @@ public class InterceptableDataContextTest extends TestCase {
                                        });
 
                        Schema schema = dc.getDefaultSchema();
-                       Schema[] schemas = dc.getSchemas();
+                       List<Schema> schemas = dc.getSchemas();
 
                        assertEquals("schema foo!", schema.getName());
                        assertEquals(MutableSchema.class, schema.getClass());
                        assertEquals("[information_schema foo!, schema foo!]",
-                                       Arrays.toString(dc.getSchemaNames()));
-                       assertEquals(2, schemas.length);
-                       assertEquals("information_schema foo!", 
schemas[0].getName());
-                       assertEquals("schema foo!", schemas[1].getName());
+                                       
Arrays.toString(dc.getSchemaNames().toArray()));
+                       assertEquals(2, schemas.size());
+                       assertEquals("information_schema foo!", 
schemas.get(0).getName());
+                       assertEquals("schema foo!", schemas.get(1).getName());
                }
        }
 
@@ -108,6 +109,6 @@ public class InterceptableDataContextTest extends TestCase {
                                });
 
                DataSet ds = dc.executeQuery(new Query().from(table));
-               assertEquals("[table.foo, table.bar]", 
Arrays.toString(ds.getSelectItems()));
+               assertEquals("[table.foo, table.bar]", 
Arrays.toString(ds.getSelectItems().toArray()));
        }
 }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/ab5c9482/core/src/test/java/org/apache/metamodel/query/FilterItemTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/metamodel/query/FilterItemTest.java 
b/core/src/test/java/org/apache/metamodel/query/FilterItemTest.java
index 3b89d9d..9053625 100644
--- a/core/src/test/java/org/apache/metamodel/query/FilterItemTest.java
+++ b/core/src/test/java/org/apache/metamodel/query/FilterItemTest.java
@@ -18,6 +18,7 @@
  */
 package org.apache.metamodel.query;
 
+import com.google.common.collect.Lists;
 import junit.framework.TestCase;
 
 import org.apache.metamodel.DataContext;
@@ -43,6 +44,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 public class FilterItemTest extends TestCase {
 
@@ -168,7 +170,7 @@ public class FilterItemTest extends TestCase {
         Column col2 = new MutableColumn("Col2", ColumnType.DECIMAL);
         SelectItem s1 = new SelectItem(col1);
         SelectItem s2 = new SelectItem(col2);
-        SelectItem[] selectItems = new SelectItem[] { s1, s2 };
+        List<SelectItem> selectItems = Lists.newArrayList( s1, s2 );
         CachingDataSetHeader header = new CachingDataSetHeader(selectItems);
 
         FilterItem c = new FilterItem(s1, OperatorType.EQUALS_TO, null);
@@ -235,8 +237,7 @@ public class FilterItemTest extends TestCase {
     public void testEvaluateDates() throws Exception {
         Column col1 = new MutableColumn("Col1", ColumnType.DATE);
         SelectItem s1 = new SelectItem(col1);
-        SelectItem[] selectItems = new SelectItem[] { s1 };
-        CachingDataSetHeader header = new CachingDataSetHeader(selectItems);
+        CachingDataSetHeader header = new 
CachingDataSetHeader(Lists.newArrayList(s1));
 
         long currentTimeMillis = System.currentTimeMillis();
         FilterItem c = new FilterItem(s1, OperatorType.LESS_THAN, new 
java.sql.Date(currentTimeMillis));
@@ -331,8 +332,7 @@ public class FilterItemTest extends TestCase {
         FilterItem filter = new FilterItem(LogicalOperator.AND, c1, c2, c3);
         assertEquals("(Col1 LIKE 'foo%' AND Col1 LIKE '%bar' AND Col1 <> 
'foobar')", filter.toString());
 
-        SelectItem[] items = new SelectItem[] { s1 };
-        CachingDataSetHeader header = new CachingDataSetHeader(items);
+        CachingDataSetHeader header = new 
CachingDataSetHeader(Lists.newArrayList(s1));
         assertTrue(filter.evaluate(new DefaultRow(header, new Object[] { "foo 
bar" })));
         assertTrue(filter.evaluate(new DefaultRow(header, new Object[] { 
"foosenbar" })));
         assertFalse(filter.evaluate(new DefaultRow(header, new Object[] { 
"foo" })));
@@ -373,15 +373,16 @@ public class FilterItemTest extends TestCase {
         DataContext dc = new QueryPostprocessDataContext() {
 
             @Override
-            public DataSet materializeMainSchemaTable(Table table, Column[] 
columns, int maxRows) {
+            public DataSet materializeMainSchemaTable(Table table, 
List<Column> columns, int maxRows) {
                 // we expect 3 columns to be materialized because the query 
has column references in both SELECT and WHERE clause
-                assertEquals(3, columns.length);
-                assertEquals("column_number", columns[0].getName());
-                assertEquals("name", columns[1].getName());
-                assertEquals("role", columns[2].getName());
-                SelectItem[] selectItems = new SelectItem[] { new 
SelectItem(col1), new SelectItem(col2),
-                        new SelectItem(col3) };
-                DataSetHeader header = new CachingDataSetHeader(selectItems);
+                assertEquals(3, columns.size());
+                assertEquals("column_number", columns.get(0).getName());
+                assertEquals("name", columns.get(1).getName());
+                assertEquals("role", columns.get(2).getName());
+
+                DataSetHeader header = new 
CachingDataSetHeader(Lists.newArrayList(col1, col2, col3).stream()
+                        .map(SelectItem::new)
+                        .collect(Collectors.toList()));
                 List<Row> rows = new LinkedList<Row>();
                 rows.add(new DefaultRow(header, new Object[] { "foo", "bar", 1 
}));
                 rows.add(new DefaultRow(header, new Object[] { "kasper", 
"developer", 2 }));
@@ -462,8 +463,7 @@ public class FilterItemTest extends TestCase {
         Object operand = new String[] { "foo", "bar" };
 
         FilterItem filterItem = new FilterItem(selectItem, OperatorType.IN, 
operand);
-        SelectItem[] selectItems = new SelectItem[] { selectItem };
-        DataSetHeader header = new CachingDataSetHeader(selectItems);
+        DataSetHeader header = new 
CachingDataSetHeader(Lists.newArrayList(selectItem));
 
         assertTrue(filterItem.evaluate(new DefaultRow(header, new Object[] { 
"foo" })));
         assertTrue(filterItem.evaluate(new DefaultRow(header, new Object[] { 
"bar" })));

Reply via email to