You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@metamodel.apache.org by ka...@apache.org on 2013/07/22 10:10:19 UTC

[06/64] [partial] Hard rename of all 'org/eobjects' folders to 'org/apache'.

http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/e2e2b37a/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcColumn.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcColumn.java b/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcColumn.java
deleted file mode 100644
index de09ce7..0000000
--- a/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcColumn.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.eobjects.metamodel.jdbc;
-
-import org.eobjects.metamodel.schema.ColumnType;
-import org.eobjects.metamodel.schema.MutableColumn;
-import org.eobjects.metamodel.schema.Table;
-
-/**
- * Column implementation for JDBC data contexts.
- * 
- * @author Kasper Sørensen
- */
-final class JdbcColumn extends MutableColumn {
-
-	private static final long serialVersionUID = 389872697452157919L;
-
-	public JdbcColumn(String columnName, ColumnType columnType, JdbcTable table, int columnNumber, Boolean nullable) {
-		super(columnName, columnType, table, columnNumber, nullable);
-	}
-
-	@Override
-	public boolean isIndexed() {
-		Table table = getTable();
-		if (table instanceof JdbcTable) {
-			((JdbcTable) table).loadIndexes();
-		}
-		return super.isIndexed();
-	}
-
-	@Override
-	public boolean isPrimaryKey() {
-		Table table = getTable();
-		if (table instanceof JdbcTable) {
-			((JdbcTable) table).loadPrimaryKeys();
-		}
-		return super.isPrimaryKey();
-	}
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/e2e2b37a/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcCompiledQuery.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcCompiledQuery.java b/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcCompiledQuery.java
deleted file mode 100644
index ddadf1f..0000000
--- a/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcCompiledQuery.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.eobjects.metamodel.jdbc;
-
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-import java.util.List;
-
-import org.apache.commons.pool.impl.GenericObjectPool;
-import org.eobjects.metamodel.MetaModelException;
-import org.eobjects.metamodel.query.CompiledQuery;
-import org.eobjects.metamodel.query.DefaultCompiledQuery;
-import org.eobjects.metamodel.query.Query;
-import org.eobjects.metamodel.query.SelectItem;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Implementation of {@link CompiledQuery} for JDBC which uses a
- * {@link PreparedStatement} behind the scenes.
- */
-final class JdbcCompiledQuery extends DefaultCompiledQuery implements CompiledQuery {
-
-	private static final Logger logger = LoggerFactory.getLogger(JdbcCompiledQuery.class);
-
-	private final JdbcDataContext _dataContext;
-	private final Connection _connection;
-	private final String _sql;
-	private final Query _query;
-	private final GenericObjectPool<JdbcCompiledQueryLease> _pool;
-	private boolean _closed;
-
-	public JdbcCompiledQuery(JdbcDataContext dc, Query query) {
-		super(query);
-		_dataContext = dc;
-		_connection = dc.getConnection();
-		_query = query;
-		_sql = dc.getQueryRewriter().rewriteQuery(query);
-		_pool = new GenericObjectPool<JdbcCompiledQueryLease>(new JdbcCompiledQueryLeaseFactory(dc, _connection, _sql));
-		_closed = false;
-
-		logger.debug("Created compiled JDBC query: {}", _sql);
-	}
-
-	public JdbcCompiledQueryLease borrowLease() {
-		if (logger.isDebugEnabled()) {
-			logger.debug("Borrowing lease. Leases (before): Active={}, Idle={}", getActiveLeases(), getIdleLeases());
-		}
-		try {
-			return _pool.borrowObject();
-		} catch (Exception e) {
-			throw handleError(e, "borrow lease");
-		}
-	}
-
-	public void returnLease(JdbcCompiledQueryLease lease) {
-		if (logger.isDebugEnabled()) {
-			logger.debug("Returning lease. Leases (before): Active={}, Idle={}", getActiveLeases(), getIdleLeases());
-		}
-		try {
-			_pool.returnObject(lease);
-		} catch (Exception e) {
-			throw handleError(e, "return lease");
-		}
-	}
-
-	private RuntimeException handleError(Exception e, String message) {
-		if (logger.isWarnEnabled()) {
-			logger.warn("Unexpected error occurred in compiled JDBC query: " + message, e);
-		}
-		
-		if (e instanceof SQLException) {
-			return JdbcUtils.wrapException((SQLException) e, message);
-		} else if (e instanceof RuntimeException) {
-			return (RuntimeException) e;
-		} else {
-			return new MetaModelException(message, e);
-		}
-	}
-
-	protected int getActiveLeases() {
-		return _pool.getNumActive();
-	}
-
-	protected int getIdleLeases() {
-		return _pool.getNumIdle();
-	}
-
-	protected Query getQuery() {
-		return _query;
-	}
-
-	@Override
-	public String toSql() {
-		return _sql;
-	}
-
-	@Override
-	public void close() {
-		logger.debug("Closing compiled JDBC query: {}", _sql);
-		try {
-			_pool.close();
-		} catch (Exception e) {
-			throw handleError(e, "close pool of leases");
-		} finally {
-			_dataContext.close(_connection, null, null);
-			_closed = true;
-		}
-	}
-
-	protected List<SelectItem> getSelectItems() {
-		return _query.getSelectClause().getItems();
-	}
-
-	@Override
-	protected void finalize() throws Throwable {
-		super.finalize();
-		if (!_closed) {
-			logger.warn("finalize() invoked, but DataSet is not closed. Invoking close() on {}", this);
-			close();
-		}
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/e2e2b37a/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcCompiledQueryLease.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcCompiledQueryLease.java b/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcCompiledQueryLease.java
deleted file mode 100644
index 65bf7b5..0000000
--- a/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcCompiledQueryLease.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.eobjects.metamodel.jdbc;
-
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-
-/**
- * Represents a "lease" of a JdbcCompiledQuery. A lease holds the
- * {@link Connection} and {@link PreparedStatement} object associated with
- * executing a compiled query. Since these are not thread-safe, but expensive to
- * create, they are pooled to allow proper isolation when executing compiled
- * queries.
- */
-final class JdbcCompiledQueryLease {
-
-    private final Connection _connection;
-    private final PreparedStatement _statement;
-
-    public JdbcCompiledQueryLease(Connection connection, PreparedStatement statement) {
-        _connection = connection;
-        _statement = statement;
-    }
-    
-    public Connection getConnection() {
-        return _connection;
-    }
-    
-    public PreparedStatement getStatement() {
-        return _statement;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/e2e2b37a/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcCompiledQueryLeaseFactory.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcCompiledQueryLeaseFactory.java b/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcCompiledQueryLeaseFactory.java
deleted file mode 100644
index e3712ed..0000000
--- a/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcCompiledQueryLeaseFactory.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.eobjects.metamodel.jdbc;
-
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-
-import org.apache.commons.pool.PoolableObjectFactory;
-
-/**
- * Factory for the object pool of {@link JdbcCompiledQueryLease}s.
- */
-final class JdbcCompiledQueryLeaseFactory implements PoolableObjectFactory<JdbcCompiledQueryLease> {
-
-	private final JdbcDataContext _dataContext;
-    private final Connection _connection;
-    private final String _sql;
-
-    public JdbcCompiledQueryLeaseFactory(JdbcDataContext dataContext, Connection connection, String sql) {
-    	_dataContext = dataContext;
-        _connection = connection;
-        _sql = sql;
-    }
-    
-
-    @Override
-    public JdbcCompiledQueryLease makeObject() throws Exception {
-        try {
-            final PreparedStatement statement = _connection.prepareStatement(_sql);
-            final JdbcCompiledQueryLease lease = new JdbcCompiledQueryLease(_connection, statement);
-            return lease;
-        } catch (SQLException e) {
-            throw JdbcUtils.wrapException(e, "preparing statement");
-        }
-    }
-
-    @Override
-    public void destroyObject(JdbcCompiledQueryLease lease) throws Exception {
-        _dataContext.close(null, null, lease.getStatement());
-    }
-
-    @Override
-    public boolean validateObject(JdbcCompiledQueryLease lease) {
-        return true;
-    }
-
-    @Override
-    public void activateObject(JdbcCompiledQueryLease obj) throws Exception {
-    }
-
-    @Override
-    public void passivateObject(JdbcCompiledQueryLease obj) throws Exception {
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/e2e2b37a/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcCreateTableBuilder.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcCreateTableBuilder.java b/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcCreateTableBuilder.java
deleted file mode 100644
index 9a8803c..0000000
--- a/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcCreateTableBuilder.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.eobjects.metamodel.jdbc;
-
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.sql.Statement;
-
-import org.eobjects.metamodel.create.AbstractTableCreationBuilder;
-import org.eobjects.metamodel.jdbc.dialects.IQueryRewriter;
-import org.eobjects.metamodel.schema.Column;
-import org.eobjects.metamodel.schema.ColumnType;
-import org.eobjects.metamodel.schema.Schema;
-import org.eobjects.metamodel.schema.Table;
-import org.eobjects.metamodel.util.FileHelper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * {@link CreateTableBuilder} implementation that issues a SQL CREATE TABLE
- * statement.
- * 
- * @author Kasper Sørensen
- */
-final class JdbcCreateTableBuilder extends AbstractTableCreationBuilder<JdbcUpdateCallback> {
-
-	private static final Logger logger = LoggerFactory.getLogger(JdbcCreateTableBuilder.class);
-
-	public JdbcCreateTableBuilder(JdbcUpdateCallback updateCallback, Schema schema, String name) {
-		super(updateCallback, schema, name);
-		if (!(schema instanceof JdbcSchema)) {
-			throw new IllegalArgumentException("Not a valid JDBC schema: " + schema);
-		}
-	}
-
-	@Override
-	public Table execute() {
-		final String sql = createSqlStatement();
-		logger.info("Create table statement created: {}", sql);
-
-		Connection connection = getUpdateCallback().getConnection();
-		Statement st = null;
-		try {
-			st = connection.createStatement();
-			int rowsAffected = st.executeUpdate(sql);
-			logger.debug("Create table statement executed, {} rows affected", rowsAffected);
-		} catch (SQLException e) {
-			throw JdbcUtils.wrapException(e, "execute create table statement: " + sql);
-		} finally {
-			FileHelper.safeClose(st);
-		}
-
-		JdbcSchema schema = (JdbcSchema) getSchema();
-		schema.refreshTables();
-		return schema.getTableByName(getTable().getName());
-	}
-
-	protected String createSqlStatement() {
-		return createSqlStatement(getTable());
-	}
-
-	private String createSqlStatement(Table table) {
-		final IQueryRewriter queryRewriter = getUpdateCallback().getDataContext().getQueryRewriter();
-		final StringBuilder sb = new StringBuilder();
-		sb.append("CREATE TABLE ");
-		final Schema schema = getSchema();
-		if (schema != null && schema.getName() != null) {
-			sb.append(schema.getQualifiedLabel());
-			sb.append(".");
-		}
-		sb.append(getUpdateCallback().quoteIfNescesary(table.getName()));
-		sb.append(" (");
-		final Column[] columns = table.getColumns();
-		for (int i = 0; i < columns.length; i++) {
-			final Column column = columns[i];
-			if (i != 0) {
-				sb.append(", ");
-			}
-			sb.append(getUpdateCallback().quoteIfNescesary(column.getName()));
-			sb.append(' ');
-			final String nativeType = column.getNativeType();
-			if (nativeType == null) {
-				ColumnType columnType = column.getType();
-				if (columnType == null) {
-					columnType = ColumnType.VARCHAR;
-				}
-
-				final String columnTypeString = queryRewriter.rewriteColumnType(columnType);
-
-				sb.append(columnTypeString);
-			} else {
-				sb.append(nativeType);
-			}
-			final Integer columnSize = column.getColumnSize();
-			if (columnSize != null) {
-				sb.append('(');
-				sb.append(columnSize.intValue());
-				sb.append(')');
-			}
-			if (column.isNullable() != null && !column.isNullable().booleanValue()) {
-				sb.append(" NOT NULL");
-			}
-			if (column.isPrimaryKey()) {
-				sb.append(" PRIMARY KEY");
-			}
-		}
-		sb.append(")");
-		return sb.toString();
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/e2e2b37a/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcDataContext.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcDataContext.java b/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcDataContext.java
deleted file mode 100644
index ddac728..0000000
--- a/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcDataContext.java
+++ /dev/null
@@ -1,794 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.eobjects.metamodel.jdbc;
-
-import java.sql.Connection;
-import java.sql.DatabaseMetaData;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.StringTokenizer;
-
-import javax.sql.DataSource;
-
-import org.eobjects.metamodel.AbstractDataContext;
-import org.eobjects.metamodel.BatchUpdateScript;
-import org.eobjects.metamodel.MetaModelException;
-import org.eobjects.metamodel.UpdateScript;
-import org.eobjects.metamodel.UpdateableDataContext;
-import org.eobjects.metamodel.data.DataSet;
-import org.eobjects.metamodel.data.EmptyDataSet;
-import org.eobjects.metamodel.data.MaxRowsDataSet;
-import org.eobjects.metamodel.jdbc.dialects.DB2QueryRewriter;
-import org.eobjects.metamodel.jdbc.dialects.DefaultQueryRewriter;
-import org.eobjects.metamodel.jdbc.dialects.H2QueryRewriter;
-import org.eobjects.metamodel.jdbc.dialects.HsqldbQueryRewriter;
-import org.eobjects.metamodel.jdbc.dialects.IQueryRewriter;
-import org.eobjects.metamodel.jdbc.dialects.MysqlQueryRewriter;
-import org.eobjects.metamodel.jdbc.dialects.PostgresqlQueryRewriter;
-import org.eobjects.metamodel.jdbc.dialects.SQLServerQueryRewriter;
-import org.eobjects.metamodel.query.CompiledQuery;
-import org.eobjects.metamodel.query.Query;
-import org.eobjects.metamodel.schema.Schema;
-import org.eobjects.metamodel.schema.TableType;
-import org.eobjects.metamodel.util.FileHelper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * DataContextStrategy to use for JDBC-compliant databases
- */
-public class JdbcDataContext extends AbstractDataContext implements UpdateableDataContext {
-
-    public static final String SYSTEM_PROPERTY_BATCH_UPDATES = "metamodel.jdbc.batch.updates";
-    public static final String SYSTEM_PROPERTY_CONVERT_LOBS = "metamodel.jdbc.convert.lobs";
-
-    public static final String DATABASE_PRODUCT_POSTGRESQL = "PostgreSQL";
-    public static final String DATABASE_PRODUCT_MYSQL = "MySQL";
-    public static final String DATABASE_PRODUCT_HSQLDB = "HSQL Database Engine";
-    public static final String DATABASE_PRODUCT_H2 = "H2";
-    public static final String DATABASE_PRODUCT_SQLSERVER = "Microsoft SQL Server";
-    public static final String DATABASE_PRODUCT_DB2 = "DB2";
-    public static final String DATABASE_PRODUCT_DB2_PREFIX = "DB2/";
-
-    private static final Logger logger = LoggerFactory.getLogger(JdbcDataContext.class);
-
-    private final FetchSizeCalculator _fetchSizeCalculator;
-    private final Connection _connection;
-    private final DataSource _dataSource;
-    private final TableType[] _tableTypes;
-    private final String _catalogName;
-    private final boolean _singleConnection;
-
-    private final MetadataLoader _metadataLoader;
-
-    /**
-     * Defines the way that queries are written once dispatched to the database
-     */
-    private IQueryRewriter _queryRewriter;
-    private final String _databaseProductName;
-
-    /**
-     * There are some confusion as to the definition of catalogs and schemas.
-     * Some databases seperate "groups of tables" by using schemas, others by
-     * catalogs. This variable indicates whether a MetaModel schema really
-     * represents a catalog.
-     */
-    private final String _identifierQuoteString;
-    private final boolean _supportsBatchUpdates;
-    private final boolean _isDefaultAutoCommit;
-    private final boolean _usesCatalogsAsSchemas;
-
-    /**
-     * Creates the strategy based on a data source, some table types and an
-     * optional catalogName
-     * 
-     * @param dataSource
-     *            the datasource objcet to use for making connections
-     * @param tableTypes
-     *            the types of tables to include
-     * @param catalogName
-     *            a catalog name to use, can be null
-     */
-    public JdbcDataContext(DataSource dataSource, TableType[] tableTypes, String catalogName) {
-        this(dataSource, null, tableTypes, catalogName);
-    }
-
-    /**
-     * Creates the strategy based on a {@link Connection}, some table types and
-     * an optional catalogName
-     * 
-     * @param connection
-     *            the database connection
-     * @param tableTypes
-     *            the types of tables to include
-     * @param catalogName
-     *            a catalog name to use, can be null
-     */
-    public JdbcDataContext(Connection connection, TableType[] tableTypes, String catalogName) {
-        this(null, connection, tableTypes, catalogName);
-    }
-
-    /**
-     * Creates the strategy based on a {@link DataSource}, some table types and
-     * an optional catalogName
-     * 
-     * @param dataSource
-     *            the data source
-     * @param tableTypes
-     *            the types of tables to include
-     * @param catalogName
-     *            a catalog name to use, can be null
-     */
-    private JdbcDataContext(DataSource dataSource, Connection connection, TableType[] tableTypes, String catalogName) {
-        _dataSource = dataSource;
-        _connection = connection;
-        _tableTypes = tableTypes;
-        _catalogName = catalogName;
-
-        if (_dataSource == null) {
-            _singleConnection = true;
-        } else {
-            _singleConnection = false;
-        }
-
-        // available memory for fetching is so far fixed at 16 megs.
-        _fetchSizeCalculator = new FetchSizeCalculator(16 * 1024 * 1024);
-
-        boolean supportsBatchUpdates = false;
-        String identifierQuoteString = null;
-        String databaseProductName = null;
-        boolean usesCatalogsAsSchemas = false;
-
-        final Connection con = getConnection();
-
-        try {
-            _isDefaultAutoCommit = con.getAutoCommit();
-        } catch (SQLException e) {
-            throw JdbcUtils.wrapException(e, "determine auto-commit behaviour");
-        }
-
-        try {
-            DatabaseMetaData metaData = con.getMetaData();
-
-            supportsBatchUpdates = supportsBatchUpdates(metaData);
-
-            try {
-                identifierQuoteString = metaData.getIdentifierQuoteString();
-                if (identifierQuoteString != null) {
-                    identifierQuoteString = identifierQuoteString.trim();
-                }
-            } catch (SQLException e) {
-                logger.warn("could not retrieve identifier quote string from database metadata", e);
-            }
-
-            usesCatalogsAsSchemas = usesCatalogsAsSchemas(metaData);
-            try {
-                databaseProductName = metaData.getDatabaseProductName();
-            } catch (SQLException e) {
-                logger.warn("Could not retrieve database product name: " + e.getMessage());
-            }
-        } catch (SQLException e) {
-            logger.debug("Unexpected exception during JdbcDataContext initialization", e);
-        } finally {
-            closeIfNescesary(con);
-        }
-        _databaseProductName = databaseProductName;
-        logger.debug("Database product name: {}", _databaseProductName);
-        if (DATABASE_PRODUCT_MYSQL.equals(_databaseProductName)) {
-            setQueryRewriter(new MysqlQueryRewriter(this));
-        } else if (DATABASE_PRODUCT_POSTGRESQL.equals(_databaseProductName)) {
-            setQueryRewriter(new PostgresqlQueryRewriter(this));
-        } else if (DATABASE_PRODUCT_SQLSERVER.equals(_databaseProductName)) {
-            setQueryRewriter(new SQLServerQueryRewriter(this));
-        } else if (DATABASE_PRODUCT_DB2.equals(_databaseProductName)
-                || (_databaseProductName != null && _databaseProductName.startsWith(DATABASE_PRODUCT_DB2_PREFIX))) {
-            setQueryRewriter(new DB2QueryRewriter(this));
-        } else if (DATABASE_PRODUCT_HSQLDB.equals(_databaseProductName)) {
-            setQueryRewriter(new HsqldbQueryRewriter(this));
-        } else if (DATABASE_PRODUCT_H2.equals(_databaseProductName)) {
-            setQueryRewriter(new H2QueryRewriter(this));
-        } else {
-            setQueryRewriter(new DefaultQueryRewriter(this));
-        }
-
-        _supportsBatchUpdates = supportsBatchUpdates;
-        _identifierQuoteString = identifierQuoteString;
-        _usesCatalogsAsSchemas = usesCatalogsAsSchemas;
-        _metadataLoader = new JdbcMetadataLoader(this, _usesCatalogsAsSchemas, _identifierQuoteString);
-    }
-
-    /**
-     * Creates the strategy based on a {@link Connection}
-     * 
-     * @param connection
-     *            the database connection
-     */
-    public JdbcDataContext(Connection connection) {
-        this(connection, TableType.DEFAULT_TABLE_TYPES, null);
-    }
-
-    /**
-     * Creates the strategy based on a {@link DataSource}
-     * 
-     * @param dataSource
-     *            the data source
-     */
-    public JdbcDataContext(DataSource dataSource) {
-        this(dataSource, TableType.DEFAULT_TABLE_TYPES, null);
-    }
-
-    private boolean supportsBatchUpdates(DatabaseMetaData metaData) {
-        if ("true".equals(System.getProperty(SYSTEM_PROPERTY_BATCH_UPDATES))) {
-            return true;
-        }
-        if ("false".equals(System.getProperty(SYSTEM_PROPERTY_BATCH_UPDATES))) {
-            return false;
-        }
-
-        try {
-            return metaData.supportsBatchUpdates();
-        } catch (Exception e) {
-            logger.warn("Could not determine if driver support batch updates, returning false", e);
-            return false;
-        }
-    }
-
-    private boolean usesCatalogsAsSchemas(DatabaseMetaData metaData) {
-        boolean result = true;
-        ResultSet rs = null;
-        try {
-            rs = metaData.getSchemas();
-            while (rs.next() && result) {
-                result = false;
-            }
-        } catch (SQLException e) {
-            throw JdbcUtils.wrapException(e, "retrieve schema and catalog metadata");
-        } finally {
-            close(null, rs, null);
-        }
-        return result;
-    }
-
-    @Override
-    public CompiledQuery compileQuery(Query query) {
-        return new JdbcCompiledQuery(this, query);
-    }
-
-    @Override
-    public DataSet executeQuery(CompiledQuery compiledQuery, Object... values) {
-
-        final JdbcCompiledQuery jdbcCompiledQuery = (JdbcCompiledQuery) compiledQuery;
-
-        final Query query = jdbcCompiledQuery.getQuery();
-        final int countMatches = jdbcCompiledQuery.getParameters().size();
-
-        final int valueArrayLength = values.length;
-
-        if (countMatches != valueArrayLength) {
-            throw new MetaModelException("Number of parameters in query and number of values does not match.");
-        }
-
-        final JdbcCompiledQueryLease lease = jdbcCompiledQuery.borrowLease();
-        final DataSet dataSet;
-        try {
-            dataSet = execute(lease.getConnection(), query, lease.getStatement(), jdbcCompiledQuery, lease, values);
-        } catch (SQLException e) {
-            // only close in case of an error - the JdbcDataSet will close
-            // otherwise
-            jdbcCompiledQuery.returnLease(lease);
-            throw JdbcUtils.wrapException(e, "execute compiled query");
-        }
-
-        return dataSet;
-    }
-
-    private DataSet execute(Connection connection, Query query, Statement statement, JdbcCompiledQuery compiledQuery,
-            JdbcCompiledQueryLease lease, Object[] values) throws SQLException {
-        if (_databaseProductName.equals(DATABASE_PRODUCT_POSTGRESQL)) {
-
-            try {
-                // this has to be done in order to make a result set not load
-                // all data in memory only for Postgres.
-                connection.setAutoCommit(false);
-            } catch (Exception e) {
-                logger.warn("Could not disable auto-commit (PostgreSQL specific hack)", e);
-            }
-        }
-
-        ResultSet resultSet = null;
-
-        boolean postProcessFirstRow = false;
-        final Integer firstRow = query.getFirstRow();
-        if (firstRow != null) {
-            if (_queryRewriter.isFirstRowSupported()) {
-                logger.debug("First row property will be treated by query rewriter");
-            } else {
-                postProcessFirstRow = true;
-            }
-        }
-
-        boolean postProcessMaxRows = false;
-        Integer maxRows = query.getMaxRows();
-        if (maxRows != null) {
-            if (postProcessFirstRow) {
-                // if First row is being post processed, we need to
-                // increment the "Max rows" accordingly (but subtract one, since
-                // firstRow is 1-based).
-                maxRows = maxRows + (firstRow - 1);
-                query = query.clone().setMaxRows(maxRows);
-
-                logger.debug("Setting Max rows to {} because of post processing strategy of First row.", maxRows);
-            }
-
-            if (_queryRewriter.isMaxRowsSupported()) {
-                logger.debug("Max rows property will be treated by query rewriter");
-            } else {
-                try {
-                    statement.setMaxRows(maxRows);
-                } catch (SQLException e) {
-                    if (logger.isInfoEnabled()) {
-                        logger.info("setMaxRows(" + maxRows + ") was rejected.", e);
-                    }
-                    postProcessMaxRows = true;
-                }
-            }
-        }
-
-        DataSet dataSet = null;
-        try {
-            final int fetchSize = getFetchSize(query, statement);
-
-            logger.debug("Applying fetch_size={}", fetchSize);
-
-            try {
-                statement.setFetchSize(fetchSize);
-            } catch (Exception e) {
-                // Ticket #372: Sometimes an exception is thrown here even
-                // though it's contrary to the jdbc spec. We'll proceed without
-                // doing anything about it though.
-                logger.info("Could not get or set fetch size on Statement: {}", e.getMessage());
-            }
-
-            if (lease == null) {
-                final String queryString = _queryRewriter.rewriteQuery(query);
-
-                logger.debug("Executing rewritten query: {}", queryString);
-
-                resultSet = statement.executeQuery(queryString);
-            } else {
-                PreparedStatement preparedStatement = (PreparedStatement) statement;
-                for (int i = 0; i < values.length; i++) {
-                    preparedStatement.setObject(i + 1, values[i]);
-                }
-                resultSet = preparedStatement.executeQuery();
-            }
-            try {
-                resultSet.setFetchSize(fetchSize);
-            } catch (Exception e) {
-                logger.warn("Could not set fetch size on ResultSet: {}", e.getMessage());
-            }
-
-            if (postProcessFirstRow) {
-                // we iterate to the "first row" using the resultset itself.
-                for (int i = 1; i < firstRow; i++) {
-                    if (!resultSet.next()) {
-                        // the result set was not as long as the first row
-                        if (resultSet != null) {
-                            resultSet.close();
-                        }
-                        return new EmptyDataSet(query.getSelectClause().getItems());
-                    }
-                }
-            }
-
-            if (lease == null) {
-                dataSet = new JdbcDataSet(query, this, connection, statement, resultSet);
-            } else {
-                dataSet = new JdbcDataSet(compiledQuery, lease, resultSet);
-            }
-
-            if (postProcessMaxRows) {
-                dataSet = new MaxRowsDataSet(dataSet, maxRows);
-            }
-        } catch (SQLException exception) {
-            if (resultSet != null) {
-                resultSet.close();
-            }
-            throw exception;
-        }
-        return dataSet;
-    }
-
-    public DataSet executeQuery(Query query) throws MetaModelException {
-
-        final Connection connection = getConnection();
-        final Statement statement;
-        try {
-            statement = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
-        } catch (SQLException e) {
-            throw JdbcUtils.wrapException(e, "create statement for query");
-        }
-        DataSet dataSet = null;
-        try {
-
-            dataSet = execute(connection, query, statement, null, null, null);
-
-        } catch (SQLException e) {
-            // only close in case of an error - the JdbcDataSet will close
-            // otherwise
-            close(connection, null, statement);
-            throw JdbcUtils.wrapException(e, "execute query");
-        }
-
-        return dataSet;
-    }
-
-    private int getFetchSize(Query query, final Statement statement) {
-        try {
-            final int defaultFetchSize = statement.getFetchSize();
-            if (DATABASE_PRODUCT_MYSQL.equals(_databaseProductName) && defaultFetchSize == Integer.MIN_VALUE) {
-                return defaultFetchSize;
-            }
-        } catch (Exception e) {
-            // exceptions here are ignored.
-            logger.debug("Ignoring exception while getting fetch size", e);
-        }
-        return _fetchSizeCalculator.getFetchSize(query);
-    }
-
-    /**
-     * Quietly closes any of the parameterized JDBC objects
-     * 
-     * @param connection
-     * 
-     * @param rs
-     * @param st
-     */
-    public void close(Connection connection, ResultSet rs, Statement st) {
-        closeIfNescesary(connection);
-        FileHelper.safeClose(rs, st);
-    }
-
-    /**
-     * Convenience method to get the available catalogNames using this
-     * connection.
-     * 
-     * @return a String-array with the names of the available catalogs.
-     */
-    public String[] getCatalogNames() {
-        Connection connection = getConnection();
-
-        // Retrieve metadata
-        DatabaseMetaData metaData = null;
-        ResultSet rs = null;
-        try {
-            metaData = connection.getMetaData();
-        } catch (SQLException e) {
-            throw JdbcUtils.wrapException(e, "retrieve metadata");
-        }
-
-        // Retrieve catalogs
-        logger.debug("Retrieving catalogs");
-        List<String> catalogs = new ArrayList<String>();
-        try {
-            rs = metaData.getCatalogs();
-            while (rs.next()) {
-                String catalogName = rs.getString(1);
-                logger.debug("Found catalogName: {}", catalogName);
-                catalogs.add(catalogName);
-            }
-        } catch (SQLException e) {
-            logger.error("Error retrieving catalog metadata", e);
-        } finally {
-            close(connection, rs, null);
-            logger.debug("Retrieved {} catalogs", catalogs.size());
-        }
-        return catalogs.toArray(new String[catalogs.size()]);
-    }
-
-    /**
-     * Gets the delegate from the JDBC API (ie. Connection or DataSource) that
-     * is being used to perform database interactions.
-     * 
-     * @return either a DataSource or a Connection, depending on the
-     *         configuration of the DataContext.
-     */
-    public Object getDelegate() {
-        if (_dataSource == null) {
-            return _connection;
-        }
-        return _dataSource;
-    }
-
-    /**
-     * Gets an appropriate connection object to use - either a dedicated
-     * connection or a new connection from the datasource object.
-     * 
-     * Hint: Use the {@link #close(Connection, ResultSet, Statement)} method to
-     * close the connection (and any ResultSet or Statements involved).
-     */
-    public Connection getConnection() {
-        if (_dataSource == null) {
-            return _connection;
-        }
-        try {
-            return _dataSource.getConnection();
-        } catch (SQLException e) {
-            throw JdbcUtils.wrapException(e, "establish connection");
-        }
-    }
-
-    private void closeIfNescesary(Connection con) {
-        if (con != null) {
-            if (_dataSource != null) {
-                // closing connections after individual usage is only nescesary
-                // when they are being pulled from a DataSource.
-                FileHelper.safeClose(con);
-            }
-        }
-    }
-
-    public String getDefaultSchemaName() {
-        // Use a boolean to check if the result has been
-        // found, because a schema name can actually be
-        // null (for example in the case of Firebird
-        // databases).
-        boolean found = false;
-        String result = null;
-        String[] schemaNames = getSchemaNames();
-
-        // First strategy: If there's only one schema available, that must
-        // be it
-        if (schemaNames.length == 1) {
-            result = schemaNames[0];
-            found = true;
-        }
-
-        if (!found) {
-            Connection connection = getConnection();
-            try {
-                DatabaseMetaData metaData = connection.getMetaData();
-
-                // Second strategy: Find default schema name by examining the
-                // URL
-                if (!found) {
-                    String url = metaData.getURL();
-                    if (url != null && url.length() > 0) {
-                        if (schemaNames.length > 0) {
-                            StringTokenizer st = new StringTokenizer(url, "/\\:");
-                            int tokenCount = st.countTokens();
-                            if (tokenCount > 0) {
-                                for (int i = 1; i < tokenCount; i++) {
-                                    st.nextToken();
-                                }
-                                String lastToken = st.nextToken();
-
-                                for (int i = 0; i < schemaNames.length && !found; i++) {
-                                    String schemaName = schemaNames[i];
-                                    if (lastToken.indexOf(schemaName) != -1) {
-                                        result = schemaName;
-                                        found = true;
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-
-                // Third strategy: Check for schema equal to username
-                if (!found) {
-                    String username = metaData.getUserName();
-                    if (username != null) {
-                        for (int i = 0; i < schemaNames.length && !found; i++) {
-                            if (username.equalsIgnoreCase(schemaNames[i])) {
-                                result = schemaNames[i];
-                                found = true;
-                            }
-                        }
-                    }
-                }
-
-            } catch (SQLException e) {
-                throw JdbcUtils.wrapException(e, "determine default schema name");
-            } finally {
-                closeIfNescesary(connection);
-            }
-
-            // Fourth strategy: Find default schema name by vendor-specific
-            // hacks
-            if (!found) {
-                if (DATABASE_PRODUCT_POSTGRESQL.equalsIgnoreCase(_databaseProductName)) {
-                    if (_catalogName == null) {
-                        result = "public";
-                    } else {
-                        result = _catalogName;
-                    }
-                    found = true;
-                }
-                if (DATABASE_PRODUCT_HSQLDB.equalsIgnoreCase(_databaseProductName)) {
-                    for (int i = 0; i < schemaNames.length && !found; i++) {
-                        String schemaName = schemaNames[i];
-                        if ("PUBLIC".equals(schemaName)) {
-                            result = schemaName;
-                            found = true;
-                            break;
-                        }
-                    }
-                }
-                if (DATABASE_PRODUCT_SQLSERVER.equals(_databaseProductName)) {
-                    for (int i = 0; i < schemaNames.length && !found; i++) {
-                        String schemaName = schemaNames[i];
-                        if ("dbo".equals(schemaName)) {
-                            result = schemaName;
-                            found = true;
-                            break;
-                        }
-                    }
-                }
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Microsoft SQL Server returns users instead of schemas when calling
-     * metadata.getSchemas() This is a simple workaround.
-     * 
-     * @return
-     * @throws SQLException
-     */
-    private Set<String> getSchemaSQLServerNames(DatabaseMetaData metaData) throws SQLException {
-        // Distinct schema names. metaData.getTables() is a denormalized
-        // resultset
-        Set<String> schemas = new HashSet<String>();
-        ResultSet rs = metaData.getTables(_catalogName, null, null, JdbcUtils.getTableTypesAsStrings(_tableTypes));
-        while (rs.next()) {
-            schemas.add(rs.getString("TABLE_SCHEM"));
-        }
-        return schemas;
-    }
-
-    public JdbcDataContext setQueryRewriter(IQueryRewriter queryRewriter) {
-        if (queryRewriter == null) {
-            throw new IllegalArgumentException("Query rewriter cannot be null");
-        }
-        _queryRewriter = queryRewriter;
-        return this;
-    }
-
-    public IQueryRewriter getQueryRewriter() {
-        return _queryRewriter;
-    }
-
-    public String getIdentifierQuoteString() {
-        return _identifierQuoteString;
-    }
-
-    @Override
-    protected String[] getSchemaNamesInternal() {
-        Connection connection = getConnection();
-        try {
-            DatabaseMetaData metaData = connection.getMetaData();
-            Collection<String> result = new ArrayList<String>();
-
-            if (DATABASE_PRODUCT_SQLSERVER.equals(_databaseProductName)) {
-                result = getSchemaSQLServerNames(metaData);
-            } else if (_usesCatalogsAsSchemas) {
-                String[] catalogNames = getCatalogNames();
-                for (String name : catalogNames) {
-                    logger.debug("Found catalogName: {}", name);
-                    result.add(name);
-                }
-            } else {
-                ResultSet rs = metaData.getSchemas();
-                while (rs.next()) {
-                    String schemaName = rs.getString(1);
-                    logger.debug("Found schemaName: {}", schemaName);
-                    result.add(schemaName);
-                }
-                rs.close();
-            }
-
-            if (DATABASE_PRODUCT_MYSQL.equals(_databaseProductName)) {
-                result.remove("information_schema");
-            }
-
-            // If still no schemas are found, add a schema with a null-name
-            if (result.isEmpty()) {
-                logger.info("No schemas or catalogs found. Creating unnamed schema.");
-                result.add(null);
-            }
-            return result.toArray(new String[result.size()]);
-        } catch (SQLException e) {
-            throw JdbcUtils.wrapException(e, "get schema names");
-        } finally {
-            closeIfNescesary(connection);
-        }
-    }
-
-    @Override
-    protected Schema getSchemaByNameInternal(String name) {
-        JdbcSchema schema = new JdbcSchema(name, _metadataLoader);
-        _metadataLoader.loadTables(schema);
-        return schema;
-    }
-
-    public FetchSizeCalculator getFetchSizeCalculator() {
-        return _fetchSizeCalculator;
-    }
-
-    @Override
-    public void executeUpdate(final UpdateScript update) {
-        final JdbcUpdateCallback updateCallback;
-
-        if (_supportsBatchUpdates && update instanceof BatchUpdateScript) { 
-            updateCallback = new JdbcBatchUpdateCallback(this);
-        } else {
-            updateCallback = new JdbcSimpleUpdateCallback(this);
-        }
-
-        try {
-            if (isSingleConnection() && isDefaultAutoCommit()) {
-                // if auto-commit is going to be switched off and on during
-                // updates, then the update needs to be synchronized, to avoid
-                // race-conditions when switching off and on.
-                synchronized (_connection) {
-                    update.run(updateCallback);
-                }
-            } else {
-                update.run(updateCallback);
-            }
-            updateCallback.close(true);
-        } catch (RuntimeException e) {
-            updateCallback.close(false);
-            throw e;
-        }
-    }
-
-    protected boolean isSingleConnection() {
-        return _singleConnection;
-    }
-
-    protected boolean isDefaultAutoCommit() {
-        return _isDefaultAutoCommit;
-    }
-
-    @Override
-    protected boolean isQualifiedPathDelim(char c) {
-        if (_identifierQuoteString == null || _identifierQuoteString.length() == 0) {
-            return super.isQualifiedPathDelim(c);
-        }
-        return c == '.' || c == _identifierQuoteString.charAt(0);
-    }
-
-    public TableType[] getTableTypes() {
-        return _tableTypes;
-    }
-
-    public String getCatalogName() {
-        return _catalogName;
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/e2e2b37a/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcDataSet.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcDataSet.java b/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcDataSet.java
deleted file mode 100644
index 09b3689..0000000
--- a/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcDataSet.java
+++ /dev/null
@@ -1,229 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.eobjects.metamodel.jdbc;
-
-import java.io.InputStream;
-import java.io.Reader;
-import java.sql.Blob;
-import java.sql.Clob;
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-
-import org.eobjects.metamodel.MetaModelException;
-import org.eobjects.metamodel.data.AbstractDataSet;
-import org.eobjects.metamodel.data.DefaultRow;
-import org.eobjects.metamodel.data.Row;
-import org.eobjects.metamodel.query.Query;
-import org.eobjects.metamodel.query.SelectItem;
-import org.eobjects.metamodel.schema.Column;
-import org.eobjects.metamodel.schema.ColumnType;
-import org.eobjects.metamodel.util.FileHelper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * DataSet implementation that wraps a JDBC resultset.
- * 
- * @author Kasper Sørensen
- */
-final class JdbcDataSet extends AbstractDataSet {
-
-	private static final Logger logger = LoggerFactory.getLogger(JdbcDataSet.class);
-
-	private final JdbcCompiledQuery _compiledQuery;
-	private final JdbcCompiledQueryLease _lease;
-	private final Statement _statement;
-	private final ResultSet _resultSet;
-	private final JdbcDataContext _jdbcDataContext;
-	private final Connection _connection;
-	private Row _row;
-	private boolean _closed;
-
-	/**
-	 * Constructor used for regular query execution.
-	 * 
-	 * @param query
-	 * @param jdbcDataContext
-	 * @param connection
-	 * @param statement
-	 * @param resultSet
-	 */
-	public JdbcDataSet(Query query, JdbcDataContext jdbcDataContext, Connection connection, Statement statement,
-			ResultSet resultSet) {
-		super(query.getSelectClause().getItems());
-		if (query == null || statement == null || resultSet == null) {
-			throw new IllegalArgumentException("Arguments cannot be null");
-		}
-		_jdbcDataContext = jdbcDataContext;
-		_connection = connection;
-		_statement = statement;
-		_resultSet = resultSet;
-		_closed = false;
-		_compiledQuery = null;
-		_lease = null;
-	}
-
-	/**
-	 * Constructor used for compiled query execution
-	 * 
-	 * @param query
-	 * @param jdbcDataContext
-	 * @param resultSet
-	 */
-	public JdbcDataSet(JdbcCompiledQuery compiledQuery, JdbcCompiledQueryLease lease, ResultSet resultSet) {
-		super(compiledQuery.getSelectItems());
-		if (compiledQuery == null || lease == null || resultSet == null) {
-			throw new IllegalArgumentException("Arguments cannot be null");
-		}
-
-		_compiledQuery = compiledQuery;
-		_lease = lease;
-
-		_jdbcDataContext = null;
-		_connection = null;
-		_statement = null;
-		_resultSet = resultSet;
-		_closed = false;
-	}
-
-	/**
-	 * {@inheritDoc}
-	 */
-	@Override
-	public Row getRow() {
-		return _row;
-	}
-
-	/**
-	 * {@inheritDoc}
-	 */
-	@Override
-	public boolean next() throws MetaModelException {
-		try {
-			boolean result = _resultSet.next();
-			if (result) {
-				Object[] values = new Object[getHeader().size()];
-				for (int i = 0; i < values.length; i++) {
-
-					values[i] = getValue(_resultSet, i);
-
-					try {
-						// some drivers return boxed primitive types in stead of
-						// nulls (such as false in stead of null for a Boolean
-						// column)
-						if (_resultSet.wasNull()) {
-							values[i] = null;
-						}
-					} catch (Exception e) {
-						logger.debug("Could not invoke wasNull() method on resultset, error message: {}",
-								e.getMessage());
-					}
-				}
-				_row = new DefaultRow(getHeader(), values);
-			} else {
-				_row = null;
-			}
-			return result;
-		} catch (SQLException e) {
-			throw JdbcUtils.wrapException(e, "get next record in resultset");
-		}
-	}
-
-	private Object getValue(ResultSet resultSet, int i) throws SQLException {
-		final SelectItem selectItem = getHeader().getSelectItem(i);
-		final int columnIndex = i + 1;
-		if (selectItem.getFunction() == null) {
-			Column column = selectItem.getColumn();
-			if (column != null) {
-				ColumnType type = column.getType();
-				try {
-					switch (type) {
-					case TIME:
-						return _resultSet.getTime(columnIndex);
-					case DATE:
-						return _resultSet.getDate(columnIndex);
-					case TIMESTAMP:
-						return _resultSet.getTimestamp(columnIndex);
-					case BLOB:
-						final Blob blob = _resultSet.getBlob(columnIndex);
-						if (isLobConversionEnabled()) {
-							final InputStream inputStream = blob.getBinaryStream();
-							final byte[] bytes = FileHelper.readAsBytes(inputStream);
-							return bytes;
-						}
-						return blob;
-					case BINARY:
-					case VARBINARY:
-					case LONGVARBINARY:
-						return _resultSet.getBytes(columnIndex);
-					case CLOB:
-					case NCLOB:
-						final Clob clob = _resultSet.getClob(columnIndex);
-						if (isLobConversionEnabled()) {
-							final Reader reader = clob.getCharacterStream();
-							final String result = FileHelper.readAsString(reader);
-							return result;
-						}
-						return clob;
-					case BIT:
-					case BOOLEAN:
-						return _resultSet.getBoolean(columnIndex);
-					}
-				} catch (Exception e) {
-					logger.warn("Failed to retrieve " + type
-							+ " value using type-specific getter, retrying with generic getObject(...) method", e);
-				}
-			}
-		}
-		return _resultSet.getObject(columnIndex);
-	}
-
-	private boolean isLobConversionEnabled() {
-		final String systemProperty = System.getProperty(JdbcDataContext.SYSTEM_PROPERTY_CONVERT_LOBS);
-		return "true".equals(systemProperty);
-	}
-
-	/**
-	 * {@inheritDoc}
-	 */
-	@Override
-	public void close() {
-		if (_closed) {
-			return;
-		}
-		if (_jdbcDataContext != null) {
-			_jdbcDataContext.close(_connection, _resultSet, _statement);
-		}
-		if (_compiledQuery != null) {
-			_compiledQuery.returnLease(_lease);
-		}
-		_closed = true;
-	}
-
-	@Override
-	protected void finalize() throws Throwable {
-		super.finalize();
-		if (!_closed) {
-			logger.warn("finalize() invoked, but DataSet is not closed. Invoking close() on {}", this);
-			close();
-		}
-	}
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/e2e2b37a/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcDeleteBuilder.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcDeleteBuilder.java b/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcDeleteBuilder.java
deleted file mode 100644
index 73d8989..0000000
--- a/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcDeleteBuilder.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.eobjects.metamodel.jdbc;
-
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-import java.util.List;
-
-import org.eobjects.metamodel.MetaModelException;
-import org.eobjects.metamodel.delete.AbstractRowDeletionBuilder;
-import org.eobjects.metamodel.delete.RowDeletionBuilder;
-import org.eobjects.metamodel.jdbc.dialects.IQueryRewriter;
-import org.eobjects.metamodel.query.FilterItem;
-import org.eobjects.metamodel.query.FromItem;
-import org.eobjects.metamodel.schema.Table;
-import org.eobjects.metamodel.util.FileHelper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * {@link RowDeletionBuilder} that issues an SQL DELETE FROM statement
- * 
- * @author Kasper Sørensen
- */
-final class JdbcDeleteBuilder extends AbstractRowDeletionBuilder {
-
-    private static final Logger logger = LoggerFactory.getLogger(JdbcDeleteBuilder.class);
-
-    private final JdbcUpdateCallback _updateCallback;
-    private final IQueryRewriter _queryRewriter;
-    private final boolean _inlineValues;
-
-    public JdbcDeleteBuilder(JdbcUpdateCallback updateCallback, Table table, IQueryRewriter queryRewriter) {
-        this(updateCallback, table, queryRewriter, false);
-    }
-
-    public JdbcDeleteBuilder(JdbcUpdateCallback updateCallback, Table table, IQueryRewriter queryRewriter,
-            boolean inlineValues) {
-        super(table);
-        _updateCallback = updateCallback;
-        _queryRewriter = queryRewriter;
-        _inlineValues = inlineValues;
-    }
-
-    @Override
-    public void execute() throws MetaModelException {
-        String sql = createSqlStatement();
-
-        logger.debug("Delete statement created: {}", sql);
-        final boolean reuseStatement = !_inlineValues;
-        final PreparedStatement st = _updateCallback.getPreparedStatement(sql, reuseStatement);
-        try {
-            if (reuseStatement) {
-                int valueCounter = 1;
-                final List<FilterItem> whereItems = getWhereItems();
-                for (FilterItem whereItem : whereItems) {
-                    if (JdbcUtils.isPreparedParameterCandidate(whereItem)) {
-                        Object operand = whereItem.getOperand();
-                        st.setObject(valueCounter, operand);
-                        valueCounter++;
-                    }
-                }
-            }
-            _updateCallback.executePreparedStatement(st, reuseStatement);
-        } catch (SQLException e) {
-            throw JdbcUtils.wrapException(e, "execute delete statement: " + sql);
-        } finally {
-            if (_inlineValues) {
-                FileHelper.safeClose(st);
-            }
-        }
-    }
-
-    protected String createSqlStatement() {
-        StringBuilder sb = new StringBuilder();
-        sb.append("DELETE FROM ");
-        sb.append(_queryRewriter.rewriteFromItem(new FromItem(getTable())));
-        sb.append(JdbcUtils.createWhereClause(getWhereItems(), _queryRewriter, _inlineValues));
-        return sb.toString();
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/e2e2b37a/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcDropTableBuilder.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcDropTableBuilder.java b/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcDropTableBuilder.java
deleted file mode 100644
index a5dafb9..0000000
--- a/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcDropTableBuilder.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.eobjects.metamodel.jdbc;
-
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-
-import org.eobjects.metamodel.drop.AbstractTableDropBuilder;
-import org.eobjects.metamodel.drop.TableDropBuilder;
-import org.eobjects.metamodel.jdbc.dialects.IQueryRewriter;
-import org.eobjects.metamodel.query.FromItem;
-import org.eobjects.metamodel.schema.Schema;
-import org.eobjects.metamodel.schema.Table;
-
-/**
- * {@link TableDropBuilder} that issues an SQL DROP TABLE statement
- * 
- * @author Kasper Sørensen
- */
-final class JdbcDropTableBuilder extends AbstractTableDropBuilder implements TableDropBuilder {
-
-    private final JdbcUpdateCallback _updateCallback;
-    private final IQueryRewriter _queryRewriter;
-
-    public JdbcDropTableBuilder(JdbcUpdateCallback updateCallback, Table table, IQueryRewriter queryRewriter) {
-        super(table);
-        _updateCallback = updateCallback;
-        _queryRewriter = queryRewriter;
-    }
-
-    @Override
-    public void execute() {
-        String sql = createSqlStatement();
-
-        PreparedStatement statement = _updateCallback.getPreparedStatement(sql, false);
-        try {
-            _updateCallback.executePreparedStatement(statement, false);
-
-            // remove the table reference from the schema
-            final Schema schema = getTable().getSchema();
-            if (schema instanceof JdbcSchema) {
-                ((JdbcSchema) schema).refreshTables();
-            }
-        } catch (SQLException e) {
-            throw JdbcUtils.wrapException(e, "execute drop table statement: " + sql);
-        }
-    }
-
-    protected String createSqlStatement() {
-        FromItem fromItem = new FromItem(getTable());
-        String tableLabel = _queryRewriter.rewriteFromItem(fromItem);
-
-        return "DROP TABLE " + tableLabel;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/e2e2b37a/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcInsertBuilder.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcInsertBuilder.java b/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcInsertBuilder.java
deleted file mode 100644
index edf0316..0000000
--- a/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcInsertBuilder.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.eobjects.metamodel.jdbc;
-
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-import java.util.Arrays;
-
-import org.eobjects.metamodel.insert.AbstractRowInsertionBuilder;
-import org.eobjects.metamodel.insert.RowInsertionBuilder;
-import org.eobjects.metamodel.jdbc.dialects.IQueryRewriter;
-import org.eobjects.metamodel.query.FromItem;
-import org.eobjects.metamodel.schema.Column;
-import org.eobjects.metamodel.schema.Table;
-import org.eobjects.metamodel.util.FileHelper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * {@link RowInsertionBuilder} that issues an SQL INSERT statement
- * 
- * @author Kasper Sørensen
- */
-final class JdbcInsertBuilder extends AbstractRowInsertionBuilder<JdbcUpdateCallback> {
-
-	private static final Logger logger = LoggerFactory.getLogger(JdbcInsertBuilder.class);
-
-	private final boolean _inlineValues;
-	private final IQueryRewriter _queryRewriter;
-
-	public JdbcInsertBuilder(JdbcUpdateCallback updateCallback, Table table, IQueryRewriter queryRewriter) {
-		this(updateCallback, table, false, queryRewriter);
-	}
-
-	public JdbcInsertBuilder(JdbcUpdateCallback updateCallback, Table table, boolean isInlineValues,
-			IQueryRewriter queryRewriter) {
-		super(updateCallback, table);
-		if (!(table instanceof JdbcTable)) {
-			throw new IllegalArgumentException("Not a valid JDBC table: " + table);
-		}
-
-		_inlineValues = isInlineValues;
-		_queryRewriter = queryRewriter;
-	}
-
-	@Override
-	public void execute() {
-		final String sql = createSqlStatement();
-		if (logger.isDebugEnabled()) {
-			logger.debug("Inserting: {}", Arrays.toString(getValues()));
-			logger.debug("Insert statement created: {}", sql);
-		}
-		final JdbcUpdateCallback updateCallback = getUpdateCallback();
-		final boolean reuseStatement = !_inlineValues;
-		final PreparedStatement st = updateCallback.getPreparedStatement(sql, reuseStatement);
-		try {
-			if (reuseStatement) {
-				Column[] columns = getColumns();
-				Object[] values = getValues();
-				boolean[] explicitNulls = getExplicitNulls();
-				int valueCounter = 1;
-				for (int i = 0; i < columns.length; i++) {
-					boolean explicitNull = explicitNulls[i];
-					if (values[i] != null || explicitNull) {
-						JdbcUtils.setStatementValue(st, valueCounter, columns[i], values[i]);
-						valueCounter++;
-					}
-				}
-			}
-			updateCallback.executePreparedStatement(st, reuseStatement);
-		} catch (SQLException e) {
-			throw JdbcUtils.wrapException(e, "execute insert statement: " + sql);
-		} finally {
-			if (_inlineValues) {
-				FileHelper.safeClose(st);
-			}
-		}
-	}
-	
-	protected String createSqlStatement() {
-	    return createSqlStatement(_inlineValues);
-	}
-
-	private String createSqlStatement(boolean inlineValues) {
-		final Object[] values = getValues();
-		final Table table = getTable();
-		final StringBuilder sb = new StringBuilder();
-
-		final String tableLabel = _queryRewriter.rewriteFromItem(new FromItem(table));
-
-		sb.append("INSERT INTO ");
-		sb.append(tableLabel);
-		sb.append(" (");
-		Column[] columns = getColumns();
-		boolean[] explicitNulls = getExplicitNulls();
-		boolean firstValue = true;
-		for (int i = 0; i < columns.length; i++) {
-			if (values[i] != null || explicitNulls[i]) {
-				if (firstValue) {
-					firstValue = false;
-				} else {
-					sb.append(',');
-				}
-				String columnName = columns[i].getName();
-				columnName = getUpdateCallback().quoteIfNescesary(columnName);
-				sb.append(columnName);
-			}
-		}
-
-		sb.append(") VALUES (");
-		firstValue = true;
-		for (int i = 0; i < columns.length; i++) {
-			if (values[i] != null || explicitNulls[i]) {
-				if (firstValue) {
-					firstValue = false;
-				} else {
-					sb.append(',');
-				}
-				if (inlineValues) {
-					sb.append(JdbcUtils.getValueAsSql(columns[i], values[i], _queryRewriter));
-				} else {
-					sb.append('?');
-				}
-			}
-		}
-		sb.append(")");
-		String sql = sb.toString();
-		return sql;
-	}
-
-	@Override
-	public String toSql() {
-	    return createSqlStatement(true);
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/e2e2b37a/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcMetadataLoader.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcMetadataLoader.java b/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcMetadataLoader.java
deleted file mode 100644
index ef92593..0000000
--- a/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcMetadataLoader.java
+++ /dev/null
@@ -1,427 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.eobjects.metamodel.jdbc;
-
-import java.sql.Connection;
-import java.sql.DatabaseMetaData;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Set;
-import java.util.StringTokenizer;
-import java.util.concurrent.ConcurrentHashMap;
-
-import org.eobjects.metamodel.MetaModelException;
-import org.eobjects.metamodel.schema.Column;
-import org.eobjects.metamodel.schema.ColumnType;
-import org.eobjects.metamodel.schema.MutableColumn;
-import org.eobjects.metamodel.schema.MutableRelationship;
-import org.eobjects.metamodel.schema.Schema;
-import org.eobjects.metamodel.schema.Table;
-import org.eobjects.metamodel.schema.TableType;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * {@link MetadataLoader} for JDBC metadata loading.
- */
-final class JdbcMetadataLoader implements MetadataLoader {
-
-	private static final Logger logger = LoggerFactory.getLogger(JdbcMetadataLoader.class);
-
-	private final JdbcDataContext _dataContext;
-	private final boolean _usesCatalogsAsSchemas;
-	private final String _identifierQuoteString;
-
-	// these three sets contains the system identifies of whether specific items
-	// have been loaded for tables/schemas. Using system identities avoid having
-	// to call equals(...) method etc. while doing lazy loading of these items.
-	// Invoking equals(...) would be prone to stack overflows ...
-	private final Set<Integer> _loadedRelations;
-	private final Set<Integer> _loadedColumns;
-	private final Set<Integer> _loadedIndexes;
-	private final Set<Integer> _loadedPrimaryKeys;
-
-	public JdbcMetadataLoader(JdbcDataContext dataContext, boolean usesCatalogsAsSchemas, String identifierQuoteString) {
-		_dataContext = dataContext;
-		_usesCatalogsAsSchemas = usesCatalogsAsSchemas;
-		_identifierQuoteString = identifierQuoteString;
-		_loadedRelations = Collections.newSetFromMap(new ConcurrentHashMap<Integer, Boolean>());
-		_loadedColumns = Collections.newSetFromMap(new ConcurrentHashMap<Integer, Boolean>());
-		_loadedIndexes = Collections.newSetFromMap(new ConcurrentHashMap<Integer, Boolean>());
-		_loadedPrimaryKeys = Collections.newSetFromMap(new ConcurrentHashMap<Integer, Boolean>());
-	}
-
-	@Override
-	public void loadTables(JdbcSchema schema) {
-		final Connection connection = _dataContext.getConnection();
-		try {
-			final DatabaseMetaData metaData = connection.getMetaData();
-
-			// Creates string array to represent the table types
-			final String[] types = JdbcUtils.getTableTypesAsStrings(_dataContext.getTableTypes());
-			loadTables(schema, metaData, types);
-		} catch (SQLException e) {
-			throw JdbcUtils.wrapException(e, "retrieve table metadata for " + schema.getName());
-		} finally {
-			_dataContext.close(connection, null, null);
-		}
-	}
-
-	private void loadTables(JdbcSchema schema, DatabaseMetaData metaData, String[] types) {
-		String catalogName = _dataContext.getCatalogName();
-
-		ResultSet rs = null;
-		try {
-			if (logger.isDebugEnabled()) {
-				logger.debug("Querying for table types " + Arrays.toString(types) + " in catalog: " + catalogName
-						+ ", schema: " + schema.getName());
-			}
-			if (_usesCatalogsAsSchemas) {
-				rs = metaData.getTables(schema.getName(), null, null, types);
-			} else {
-				rs = metaData.getTables(catalogName, schema.getName(), null, types);
-			}
-			schema.clearTables();
-			int tableNumber = -1;
-			while (rs.next()) {
-				tableNumber++;
-				String tableCatalog = rs.getString(1);
-				String tableSchema = rs.getString(2);
-				String tableName = rs.getString(3);
-				String tableTypeName = rs.getString(4);
-				TableType tableType = TableType.getTableType(tableTypeName);
-				String tableRemarks = rs.getString(5);
-
-				if (logger.isDebugEnabled()) {
-					logger.debug("Found table: tableCatalog=" + tableCatalog + ",tableSchema=" + tableSchema
-							+ ",tableName=" + tableName);
-				}
-
-				if (tableSchema == null) {
-					tableSchema = tableCatalog;
-				}
-
-				JdbcTable table = new JdbcTable(tableName, tableType, schema, this);
-				table.setRemarks(tableRemarks);
-				table.setQuote(_identifierQuoteString);
-				schema.addTable(table);
-			}
-
-			final int tablesReturned = tableNumber + 1;
-			if (tablesReturned == 0) {
-				logger.info("No table metadata records returned for schema '{}'", schema.getName());
-			} else {
-				logger.debug("Returned {} table metadata records for schema '{}'", new Object[] { tablesReturned,
-						schema.getName() });
-			}
-
-		} catch (SQLException e) {
-			throw JdbcUtils.wrapException(e, "retrieve table metadata for " + schema.getName());
-		} finally {
-			_dataContext.close(null, rs, null);
-		}
-	}
-
-	@Override
-	public void loadIndexes(JdbcTable table) {
-		final int identity = System.identityHashCode(table);
-		if (_loadedIndexes.contains(identity)) {
-			return;
-		}
-		synchronized (this) {
-			if (_loadedIndexes.contains(identity)) {
-				return;
-			}
-
-			final Connection connection = _dataContext.getConnection();
-			try {
-				DatabaseMetaData metaData = connection.getMetaData();
-				loadIndexes(table, metaData);
-				_loadedIndexes.add(identity);
-			} catch (SQLException e) {
-				throw JdbcUtils.wrapException(e, "load indexes");
-			} finally {
-				_dataContext.close(connection, null, null);
-			}
-		}
-	}
-
-	@Override
-	public void loadPrimaryKeys(JdbcTable table) {
-		final int identity = System.identityHashCode(table);
-		if (_loadedPrimaryKeys.contains(identity)) {
-			return;
-		}
-		synchronized (this) {
-			if (_loadedPrimaryKeys.contains(identity)) {
-				return;
-			}
-			final Connection connection = _dataContext.getConnection();
-			try {
-				DatabaseMetaData metaData = connection.getMetaData();
-				loadPrimaryKeys(table, metaData);
-				_loadedPrimaryKeys.add(identity);
-			} catch (SQLException e) {
-				throw JdbcUtils.wrapException(e, "load primary keys");
-			} finally {
-				_dataContext.close(connection, null, null);
-			}
-		}
-	}
-
-	private void loadPrimaryKeys(JdbcTable table, DatabaseMetaData metaData) throws MetaModelException {
-		Schema schema = table.getSchema();
-		ResultSet rs = null;
-
-		try {
-			if (_usesCatalogsAsSchemas) {
-				rs = metaData.getPrimaryKeys(schema.getName(), null, table.getName());
-			} else {
-				rs = metaData.getPrimaryKeys(_dataContext.getCatalogName(), schema.getName(), table.getName());
-			}
-			while (rs.next()) {
-				String columnName = rs.getString(4);
-				if (columnName != null) {
-					MutableColumn column = (MutableColumn) table.getColumnByName(columnName);
-					if (column != null) {
-						column.setPrimaryKey(true);
-					} else {
-						logger.error("Indexed column \"{}\" could not be found in table: {}", columnName, table);
-					}
-				}
-			}
-		} catch (SQLException e) {
-			throw JdbcUtils.wrapException(e, "retrieve primary keys for " + table.getName());
-		} finally {
-			_dataContext.close(null, rs, null);
-		}
-	}
-
-	private void loadIndexes(Table table, DatabaseMetaData metaData) throws MetaModelException {
-		Schema schema = table.getSchema();
-		ResultSet rs = null;
-		// Ticket #170: IndexInfo is nice-to-have, not need-to-have, so
-		// we will do a nice failover on SQLExceptions
-		try {
-			if (_usesCatalogsAsSchemas) {
-				rs = metaData.getIndexInfo(schema.getName(), null, table.getName(), false, true);
-			} else {
-				rs = metaData.getIndexInfo(_dataContext.getCatalogName(), schema.getName(), table.getName(), false,
-						true);
-			}
-			while (rs.next()) {
-				String columnName = rs.getString(9);
-				if (columnName != null) {
-					MutableColumn column = (MutableColumn) table.getColumnByName(columnName);
-					if (column != null) {
-						column.setIndexed(true);
-					} else {
-						logger.error("Indexed column \"{}\" could not be found in table: {}", columnName, table);
-					}
-				}
-			}
-		} catch (SQLException e) {
-			throw JdbcUtils.wrapException(e, "retrieve index information for " + table.getName());
-		} finally {
-			_dataContext.close(null, rs, null);
-		}
-	}
-
-	/**
-	 * Loads column metadata (no indexes though) for a table
-	 * 
-	 * @param table
-	 */
-	@Override
-	public void loadColumns(JdbcTable table) {
-		final int identity = System.identityHashCode(table);
-		if (_loadedColumns.contains(identity)) {
-			return;
-		}
-		synchronized (this) {
-			if (_loadedColumns.contains(identity)) {
-				return;
-			}
-
-			final Connection connection = _dataContext.getConnection();
-			try {
-				DatabaseMetaData metaData = connection.getMetaData();
-				loadColumns(table, metaData);
-				_loadedColumns.add(identity);
-			} catch (Exception e) {
-				logger.error("Could not load columns for table: " + table, e);
-			} finally {
-				_dataContext.close(connection, null, null);
-			}
-		}
-	}
-
-	private void loadColumns(JdbcTable table, DatabaseMetaData metaData) {
-		final Schema schema = table.getSchema();
-		ResultSet rs = null;
-		try {
-			if (logger.isDebugEnabled()) {
-				logger.debug("Querying for columns in table: " + table.getName());
-			}
-			int columnNumber = -1;
-			if (_usesCatalogsAsSchemas) {
-				rs = metaData.getColumns(schema.getName(), null, table.getName(), null);
-			} else {
-				rs = metaData.getColumns(_dataContext.getCatalogName(), schema.getName(), table.getName(), null);
-			}
-			while (rs.next()) {
-				columnNumber++;
-				final String columnName = rs.getString(4);
-				if (_identifierQuoteString == null && new StringTokenizer(columnName).countTokens() > 1) {
-					logger.warn("column name contains whitespace: \"" + columnName + "\".");
-				}
-
-				final int jdbcType = rs.getInt(5);
-				final String nativeType = rs.getString(6);
-				final Integer columnSize = rs.getInt(7);
-
-				if (logger.isDebugEnabled()) {
-					logger.debug("Found column: table=" + table.getName() + ",columnName=" + columnName
-							+ ",nativeType=" + nativeType + ",columnSize=" + columnSize);
-				}
-
-				final ColumnType columnType = _dataContext.getQueryRewriter().getColumnType(jdbcType, nativeType,
-						columnSize);
-
-				final int jdbcNullable = rs.getInt(11);
-				final Boolean nullable;
-				if (jdbcNullable == DatabaseMetaData.columnNullable) {
-					nullable = true;
-				} else if (jdbcNullable == DatabaseMetaData.columnNoNulls) {
-					nullable = false;
-				} else {
-					nullable = null;
-				}
-
-				final String remarks = rs.getString(12);
-
-				final JdbcColumn column = new JdbcColumn(columnName, columnType, table, columnNumber, nullable);
-				column.setRemarks(remarks);
-				column.setNativeType(nativeType);
-				column.setColumnSize(columnSize);
-				column.setQuote(_identifierQuoteString);
-				table.addColumn(column);
-			}
-
-			final int columnsReturned = columnNumber + 1;
-			if (columnsReturned == 0) {
-				logger.info("No column metadata records returned for table '{}' in schema '{}'", table.getName(),
-						schema.getName());
-			} else {
-				logger.debug("Returned {} column metadata records for table '{}' in schema '{}'", new Object[] {
-						columnsReturned, table.getName(), schema.getName() });
-			}
-
-		} catch (SQLException e) {
-			throw JdbcUtils.wrapException(e, "retrieve table metadata for " + table.getName());
-		} finally {
-			_dataContext.close(null, rs, null);
-		}
-	}
-
-	@Override
-	public void loadRelations(JdbcSchema schema) {
-		final int identity = System.identityHashCode(schema);
-		if (_loadedRelations.contains(identity)) {
-			return;
-		}
-		synchronized (this) {
-			if (_loadedRelations.contains(identity)) {
-				return;
-			}
-			final Connection connection = _dataContext.getConnection();
-			try {
-				final Table[] tables = schema.getTables();
-				final DatabaseMetaData metaData = connection.getMetaData();
-				for (Table table : tables) {
-					loadRelations(table, metaData);
-				}
-				_loadedRelations.add(identity);
-			} catch (Exception e) {
-				logger.error("Could not load relations for schema: " + schema, e);
-			} finally {
-				_dataContext.close(connection, null, null);
-			}
-		}
-	}
-
-	private void loadRelations(Table table, DatabaseMetaData metaData) {
-		Schema schema = table.getSchema();
-		ResultSet rs = null;
-		try {
-			if (_usesCatalogsAsSchemas) {
-				rs = metaData.getImportedKeys(schema.getName(), null, table.getName());
-			} else {
-				rs = metaData.getImportedKeys(_dataContext.getCatalogName(), schema.getName(), table.getName());
-			}
-			loadRelations(rs, schema);
-		} catch (SQLException e) {
-			throw JdbcUtils.wrapException(e, "retrieve imported keys for " + table.getName());
-		} finally {
-			_dataContext.close(null, rs, null);
-		}
-	}
-
-	private void loadRelations(ResultSet rs, Schema schema) throws SQLException {
-		while (rs.next()) {
-			String pkTableName = rs.getString(3);
-			String pkColumnName = rs.getString(4);
-
-			Column pkColumn = null;
-			Table pkTable = schema.getTableByName(pkTableName);
-			if (pkTable != null) {
-				pkColumn = pkTable.getColumnByName(pkColumnName);
-			}
-			if (logger.isDebugEnabled()) {
-				logger.debug("Found primary key relation: tableName=" + pkTableName + ",columnName=" + pkColumnName
-						+ ", matching column: " + pkColumn);
-			}
-
-			String fkTableName = rs.getString(7);
-			String fkColumnName = rs.getString(8);
-			Column fkColumn = null;
-			Table fkTable = schema.getTableByName(fkTableName);
-			if (fkTable != null) {
-				fkColumn = fkTable.getColumnByName(fkColumnName);
-			}
-			if (logger.isDebugEnabled()) {
-				logger.debug("Found foreign key relation: tableName=" + fkTableName + ",columnName=" + fkColumnName
-						+ ", matching column: " + fkColumn);
-			}
-
-			if (pkColumn == null || fkColumn == null) {
-				logger.error(
-						"Could not find relation columns: pkTableName={},pkColumnName={},fkTableName={},fkColumnName={}",
-						new Object[] { pkTableName, pkColumnName, fkTableName, fkColumnName });
-				logger.error("pkColumn={}", pkColumn);
-				logger.error("fkColumn={}", fkColumn);
-			} else {
-				MutableRelationship.createRelationship(new Column[] { pkColumn }, new Column[] { fkColumn });
-			}
-		}
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/e2e2b37a/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcSchema.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcSchema.java b/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcSchema.java
deleted file mode 100644
index 28285f4..0000000
--- a/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcSchema.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.eobjects.metamodel.jdbc;
-
-import java.io.ObjectStreamException;
-
-import org.eobjects.metamodel.schema.MutableSchema;
-import org.eobjects.metamodel.schema.MutableTable;
-import org.eobjects.metamodel.schema.Schema;
-
-/**
- * Schema implementation for JDBC data contexts
- * 
- * @author Kasper Sørensen
- */
-final class JdbcSchema extends MutableSchema {
-
-	private static final long serialVersionUID = 7543633400859277467L;
-	private transient MetadataLoader _metadataLoader;
-
-	public JdbcSchema(String name, MetadataLoader metadataLoader) {
-		super(name);
-		_metadataLoader = metadataLoader;
-	}
-
-	protected void refreshTables() {
-		if (_metadataLoader != null) {
-			_metadataLoader.loadTables(this);
-		}
-	}
-
-	public void loadRelations() {
-		if (_metadataLoader != null) {
-			_metadataLoader.loadRelations(this);
-		}
-	}
-
-	public Schema toSerializableForm() {
-		MutableTable[] tables = getTables();
-		for (MutableTable table : tables) {
-			table.getColumns();
-			table.getIndexedColumns();
-			table.getPrimaryKeys();
-		}
-		loadRelations();
-		return this;
-	}
-
-	/**
-	 * Called by the Java Serialization API to serialize the object.
-	 */
-	private Object writeReplace() throws ObjectStreamException {
-		return toSerializableForm();
-	}
-}
\ No newline at end of file