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 2014/05/18 21:00:38 UTC

[2/6] git commit: Adapted other modules to work with the ColumnType-as-an-interface change.

Adapted other modules to work with the ColumnType-as-an-interface
change.

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

Branch: refs/heads/master
Commit: 743e891f62924682cef5fbcf37d6e6db0e64e2e9
Parents: 0423261
Author: Kasper Sørensen <i....@gmail.com>
Authored: Tue Mar 25 22:04:10 2014 +0100
Committer: Kasper Sørensen <i....@gmail.com>
Committed: Fri Apr 4 07:47:44 2014 +0200

----------------------------------------------------------------------
 .../org/apache/metamodel/schema/ColumnType.java |   9 +-
 .../apache/metamodel/schema/ColumnTypeImpl.java |  14 +-
 .../LegacyDeserializationObjectInputStream.java |   2 +-
 .../metamodel/couchdb/CouchDbDataContext.java   |  22 +-
 .../org/apache/metamodel/jdbc/JdbcDataSet.java  | 355 +++++++++----------
 .../jdbc/dialects/AbstractQueryRewriter.java    |   3 +-
 .../jdbc/dialects/DB2QueryRewriter.java         |   7 +-
 .../metamodel/mongodb/MongoDbDataContext.java   |   6 +-
 .../metamodel/pojo/ObjectTableDataProvider.java |   3 +-
 .../salesforce/SalesforceDataContext.java       |  13 +-
 .../metamodel/salesforce/SalesforceDataSet.java |  11 +-
 11 files changed, 220 insertions(+), 225 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/743e891f/core/src/main/java/org/apache/metamodel/schema/ColumnType.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/schema/ColumnType.java b/core/src/main/java/org/apache/metamodel/schema/ColumnType.java
index 44d5e87..a2b4a2e 100644
--- a/core/src/main/java/org/apache/metamodel/schema/ColumnType.java
+++ b/core/src/main/java/org/apache/metamodel/schema/ColumnType.java
@@ -25,6 +25,7 @@ import static org.apache.metamodel.schema.SuperColumnType.NUMBER_TYPE;
 import static org.apache.metamodel.schema.SuperColumnType.OTHER_TYPE;
 import static org.apache.metamodel.schema.SuperColumnType.TIME_TYPE;
 
+import java.io.Serializable;
 import java.math.BigInteger;
 import java.sql.Blob;
 import java.sql.Clob;
@@ -38,7 +39,7 @@ import org.apache.metamodel.util.HasName;
 /**
  * Represents the data-type of columns.
  */
-public interface ColumnType extends HasName {
+public interface ColumnType extends HasName, Serializable {
 
     /*
      * Literal
@@ -46,11 +47,11 @@ public interface ColumnType extends HasName {
     public static final ColumnType CHAR = new ColumnTypeImpl("CHAR", LITERAL_TYPE);
     public static final ColumnType VARCHAR = new ColumnTypeImpl("VARCHAR", LITERAL_TYPE);
     public static final ColumnType LONGVARCHAR = new ColumnTypeImpl("LONGVARCHAR", LITERAL_TYPE);
-    public static final ColumnType CLOB = new ColumnTypeImpl("CLOB", LITERAL_TYPE, Clob.class);
+    public static final ColumnType CLOB = new ColumnTypeImpl("CLOB", LITERAL_TYPE, Clob.class, true);
     public static final ColumnType NCHAR = new ColumnTypeImpl("NCHAR", LITERAL_TYPE);
     public static final ColumnType NVARCHAR = new ColumnTypeImpl("NVARCHAR", LITERAL_TYPE);
     public static final ColumnType LONGNVARCHAR = new ColumnTypeImpl("LONGNVARCHAR", LITERAL_TYPE);
-    public static final ColumnType NCLOB = new ColumnTypeImpl("NCLOB", LITERAL_TYPE, Clob.class);
+    public static final ColumnType NCLOB = new ColumnTypeImpl("NCLOB", LITERAL_TYPE, Clob.class, true);
 
     /*
      * Numbers
@@ -84,7 +85,7 @@ public interface ColumnType extends HasName {
     public static final ColumnType BINARY = new ColumnTypeImpl("BINARY", BINARY_TYPE);
     public static final ColumnType VARBINARY = new ColumnTypeImpl("VARBINARY", BINARY_TYPE);
     public static final ColumnType LONGVARBINARY = new ColumnTypeImpl("LONGVARBINARY", BINARY_TYPE);
-    public static final ColumnType BLOB = new ColumnTypeImpl("BLOB", BINARY_TYPE, Blob.class);
+    public static final ColumnType BLOB = new ColumnTypeImpl("BLOB", BINARY_TYPE, Blob.class, true);
 
     /*
      * Other types (as defined in {@link Types}).

http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/743e891f/core/src/main/java/org/apache/metamodel/schema/ColumnTypeImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/schema/ColumnTypeImpl.java b/core/src/main/java/org/apache/metamodel/schema/ColumnTypeImpl.java
index 2b482a4..ce55398 100644
--- a/core/src/main/java/org/apache/metamodel/schema/ColumnTypeImpl.java
+++ b/core/src/main/java/org/apache/metamodel/schema/ColumnTypeImpl.java
@@ -40,17 +40,24 @@ import org.slf4j.LoggerFactory;
  */
 public class ColumnTypeImpl implements ColumnType {
 
+    private static final long serialVersionUID = 1L;
+
     public static final Logger logger = LoggerFactory.getLogger(ColumnTypeImpl.class);
 
     private final String _name;
     private final SuperColumnType _superColumnType;
     private final Class<?> _javaType;
+    private final boolean _largeObject;
 
     public ColumnTypeImpl(String name, SuperColumnType superColumnType) {
         this(name, superColumnType, null);
     }
 
     public ColumnTypeImpl(String name, SuperColumnType superColumnType, Class<?> javaType) {
+        this(name, superColumnType, javaType, false);
+    }
+
+    public ColumnTypeImpl(String name, SuperColumnType superColumnType, Class<?> javaType, boolean largeObject) {
         if (name == null) {
             throw new IllegalArgumentException("Name cannot be null");
         }
@@ -64,6 +71,7 @@ public class ColumnTypeImpl implements ColumnType {
         } else {
             _javaType = javaType;
         }
+        _largeObject = largeObject;
     }
 
     @Override
@@ -112,11 +120,7 @@ public class ColumnTypeImpl implements ColumnType {
 
     @Override
     public boolean isLargeObject() {
-        String name = getName();
-        if ("BLOB".equals(name) || "CLOB".equals(name) || "NCLOB".equals(name)) {
-
-        }
-        return false;
+        return _largeObject;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/743e891f/core/src/main/java/org/apache/metamodel/util/LegacyDeserializationObjectInputStream.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/util/LegacyDeserializationObjectInputStream.java b/core/src/main/java/org/apache/metamodel/util/LegacyDeserializationObjectInputStream.java
index c5ab2e5..ad7e4fb 100644
--- a/core/src/main/java/org/apache/metamodel/util/LegacyDeserializationObjectInputStream.java
+++ b/core/src/main/java/org/apache/metamodel/util/LegacyDeserializationObjectInputStream.java
@@ -34,7 +34,7 @@ public class LegacyDeserializationObjectInputStream extends ObjectInputStream {
     public LegacyDeserializationObjectInputStream(InputStream in) throws IOException, SecurityException {
         super(in);
     }
-
+    
     @Override
     protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {
         String className = desc.getName();

http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/743e891f/couchdb/src/main/java/org/apache/metamodel/couchdb/CouchDbDataContext.java
----------------------------------------------------------------------
diff --git a/couchdb/src/main/java/org/apache/metamodel/couchdb/CouchDbDataContext.java b/couchdb/src/main/java/org/apache/metamodel/couchdb/CouchDbDataContext.java
index 557b7e9..6ff3ee9 100644
--- a/couchdb/src/main/java/org/apache/metamodel/couchdb/CouchDbDataContext.java
+++ b/couchdb/src/main/java/org/apache/metamodel/couchdb/CouchDbDataContext.java
@@ -19,7 +19,7 @@
 package org.apache.metamodel.couchdb;
 
 import java.util.ArrayList;
-import java.util.EnumSet;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map.Entry;
@@ -27,15 +27,6 @@ import java.util.Set;
 import java.util.SortedMap;
 import java.util.TreeMap;
 
-import org.codehaus.jackson.JsonNode;
-import org.ektorp.CouchDbConnector;
-import org.ektorp.CouchDbInstance;
-import org.ektorp.StreamingViewResult;
-import org.ektorp.ViewQuery;
-import org.ektorp.ViewResult.Row;
-import org.ektorp.http.HttpClient;
-import org.ektorp.http.StdHttpClient;
-import org.ektorp.impl.StdCouchDbInstance;
 import org.apache.metamodel.MetaModelException;
 import org.apache.metamodel.MetaModelHelper;
 import org.apache.metamodel.QueryPostprocessDataContext;
@@ -51,6 +42,15 @@ import org.apache.metamodel.schema.MutableTable;
 import org.apache.metamodel.schema.Schema;
 import org.apache.metamodel.schema.Table;
 import org.apache.metamodel.util.SimpleTableDef;
+import org.codehaus.jackson.JsonNode;
+import org.ektorp.CouchDbConnector;
+import org.ektorp.CouchDbInstance;
+import org.ektorp.StreamingViewResult;
+import org.ektorp.ViewQuery;
+import org.ektorp.ViewResult.Row;
+import org.ektorp.http.HttpClient;
+import org.ektorp.http.StdHttpClient;
+import org.ektorp.impl.StdCouchDbInstance;
 
 /**
  * DataContext implementation for CouchDB
@@ -130,7 +130,7 @@ public class CouchDbDataContext extends QueryPostprocessDataContext implements U
                     Set<ColumnType> types = columnsAndTypes.get(key);
 
                     if (types == null) {
-                        types = EnumSet.noneOf(ColumnType.class);
+                        types = new HashSet<ColumnType>();
                         columnsAndTypes.put(key, types);
                     }
 

http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/743e891f/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDataSet.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDataSet.java b/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDataSet.java
index 76b8552..e730b6a 100644
--- a/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDataSet.java
+++ b/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDataSet.java
@@ -46,184 +46,179 @@ import org.slf4j.LoggerFactory;
  */
 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();
-		}
-	}
+    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 {
+                    if (type == ColumnType.TIME) {
+                        return _resultSet.getTime(columnIndex);
+                    } else if (type == ColumnType.DATE) {
+                        return _resultSet.getDate(columnIndex);
+                    } else if (type == ColumnType.TIMESTAMP) {
+                        return _resultSet.getTimestamp(columnIndex);
+                    } else if (type == ColumnType.BLOB) {
+                        final Blob blob = _resultSet.getBlob(columnIndex);
+                        if (isLobConversionEnabled()) {
+                            final InputStream inputStream = blob.getBinaryStream();
+                            final byte[] bytes = FileHelper.readAsBytes(inputStream);
+                            return bytes;
+                        }
+                        return blob;
+                    } else if (type.isBinary()) {
+                        return _resultSet.getBytes(columnIndex);
+                    } else if (type == ColumnType.CLOB || type == ColumnType.NCLOB) {
+                        final Clob clob = _resultSet.getClob(columnIndex);
+                        if (isLobConversionEnabled()) {
+                            final Reader reader = clob.getCharacterStream();
+                            final String result = FileHelper.readAsString(reader);
+                            return result;
+                        }
+                        return clob;
+                    } else if (type.isBoolean()) {
+                        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/743e891f/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/AbstractQueryRewriter.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/AbstractQueryRewriter.java b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/AbstractQueryRewriter.java
index a55ea2a..f83057e 100644
--- a/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/AbstractQueryRewriter.java
+++ b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/AbstractQueryRewriter.java
@@ -35,6 +35,7 @@ import org.apache.metamodel.query.Query;
 import org.apache.metamodel.query.SelectClause;
 import org.apache.metamodel.query.SelectItem;
 import org.apache.metamodel.schema.ColumnType;
+import org.apache.metamodel.schema.ColumnTypeImpl;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -60,7 +61,7 @@ public abstract class AbstractQueryRewriter implements IQueryRewriter {
 
     @Override
     public ColumnType getColumnType(int jdbcType, String nativeType, Integer columnSize) {
-        return ColumnType.convertColumnType(jdbcType);
+        return ColumnTypeImpl.convertColumnType(jdbcType);
     }
 
     public String rewriteQuery(Query query) {

http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/743e891f/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/DB2QueryRewriter.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/DB2QueryRewriter.java b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/DB2QueryRewriter.java
index fcb0e27..03e9318 100644
--- a/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/DB2QueryRewriter.java
+++ b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/DB2QueryRewriter.java
@@ -117,13 +117,10 @@ public class DB2QueryRewriter extends DefaultQueryRewriter implements IQueryRewr
 
     @Override
     public String rewriteColumnType(ColumnType columnType) {
-        switch (columnType) {
-        case BOOLEAN:
-        case BIT:
+        if (columnType == ColumnType.BOOLEAN || columnType == ColumnType.BIT) {
             return "SMALLINT";
-        default:
-            return super.rewriteColumnType(columnType);
         }
+        return super.rewriteColumnType(columnType);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/743e891f/mongodb/src/main/java/org/apache/metamodel/mongodb/MongoDbDataContext.java
----------------------------------------------------------------------
diff --git a/mongodb/src/main/java/org/apache/metamodel/mongodb/MongoDbDataContext.java b/mongodb/src/main/java/org/apache/metamodel/mongodb/MongoDbDataContext.java
index d74ebad..4e3ee5f 100644
--- a/mongodb/src/main/java/org/apache/metamodel/mongodb/MongoDbDataContext.java
+++ b/mongodb/src/main/java/org/apache/metamodel/mongodb/MongoDbDataContext.java
@@ -43,7 +43,11 @@ import org.apache.metamodel.query.Query;
 import org.apache.metamodel.query.SelectItem;
 import org.apache.metamodel.schema.Column;
 import org.apache.metamodel.schema.ColumnType;
+<<<<<<< Upstream, based on origin/master
 import org.apache.metamodel.schema.MutableColumn;
+=======
+import org.apache.metamodel.schema.ColumnTypeImpl;
+>>>>>>> 4abc0d6 Adapted other modules to work with the ColumnType-as-an-interface change.
 import org.apache.metamodel.schema.MutableSchema;
 import org.apache.metamodel.schema.MutableTable;
 import org.apache.metamodel.schema.Schema;
@@ -198,7 +202,7 @@ public class MongoDbDataContext extends QueryPostprocessDataContext implements U
             if (columnType == ObjectId.class) {
                 columnTypes[i] = ColumnType.ROWID;
             } else {
-                columnTypes[i] = ColumnType.convertColumnType(columnType);
+                columnTypes[i] = ColumnTypeImpl.convertColumnType(columnType);
             }
             i++;
         }

http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/743e891f/pojo/src/main/java/org/apache/metamodel/pojo/ObjectTableDataProvider.java
----------------------------------------------------------------------
diff --git a/pojo/src/main/java/org/apache/metamodel/pojo/ObjectTableDataProvider.java b/pojo/src/main/java/org/apache/metamodel/pojo/ObjectTableDataProvider.java
index 65afdf1..5571d0b 100644
--- a/pojo/src/main/java/org/apache/metamodel/pojo/ObjectTableDataProvider.java
+++ b/pojo/src/main/java/org/apache/metamodel/pojo/ObjectTableDataProvider.java
@@ -29,6 +29,7 @@ import java.util.Map.Entry;
 import java.util.Set;
 
 import org.apache.metamodel.schema.ColumnType;
+import org.apache.metamodel.schema.ColumnTypeImpl;
 import org.apache.metamodel.util.SimpleTableDef;
 
 /**
@@ -93,7 +94,7 @@ public final class ObjectTableDataProvider<E> implements TableDataProvider<E> {
 
                         _fieldTypes.put(columnName, returnType);
                         columnNames.add(columnName);
-                        columnTypes.add(ColumnType.convertColumnType(returnType));
+                        columnTypes.add(ColumnTypeImpl.convertColumnType(returnType));
                     }
                 }
             }

http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/743e891f/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceDataContext.java
----------------------------------------------------------------------
diff --git a/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceDataContext.java b/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceDataContext.java
index b904261..730aaae 100644
--- a/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceDataContext.java
+++ b/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceDataContext.java
@@ -38,6 +38,7 @@ import org.apache.metamodel.query.OrderByItem;
 import org.apache.metamodel.query.Query;
 import org.apache.metamodel.query.SelectItem;
 import org.apache.metamodel.schema.Column;
+import org.apache.metamodel.schema.ColumnType;
 import org.apache.metamodel.schema.Schema;
 import org.apache.metamodel.schema.Table;
 import org.slf4j.Logger;
@@ -293,21 +294,17 @@ public class SalesforceDataContext extends QueryPostprocessDataContext implement
             sb.append(operand);
         } else if (operand instanceof Date) {
             final SimpleDateFormat dateFormat;
-            switch (selectItem.getExpectedColumnType()) {
-            case DATE:
+            ColumnType expectedColumnType = selectItem.getExpectedColumnType();
+            if (expectedColumnType == ColumnType.DATE) {
                 // note: we don't apply the timezone for DATE fields, since they
                 // don't contain time-of-day information.
                 dateFormat = new SimpleDateFormat(SOQL_DATE_FORMAT_OUT);
-                break;
-            case TIME:
+            } else if (expectedColumnType == ColumnType.TIME) {
                 dateFormat = new SimpleDateFormat(SOQL_TIME_FORMAT_OUT, Locale.ENGLISH);
                 dateFormat.setTimeZone(SOQL_TIMEZONE);
-                break;
-            case TIMESTAMP:
-            default:
+            } else {
                 dateFormat = new SimpleDateFormat(SOQL_DATE_TIME_FORMAT_OUT, Locale.ENGLISH);
                 dateFormat.setTimeZone(SOQL_TIMEZONE);
-                break;
             }
 
             String str = dateFormat.format((Date) operand);

http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/743e891f/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceDataSet.java
----------------------------------------------------------------------
diff --git a/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceDataSet.java b/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceDataSet.java
index 4bab4bc..2b53d1b 100644
--- a/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceDataSet.java
+++ b/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceDataSet.java
@@ -112,21 +112,16 @@ final class SalesforceDataSet extends AbstractDataSet {
             }
             if (columnType.isTimeBased()) {
                 final SimpleDateFormat dateFormat;
-                switch (columnType) {
-                case DATE:
+                if (columnType == ColumnType.DATE) {
                     // note: we don't apply the timezone for DATE fields, since
                     // they don't contain time-of-day information.
                     dateFormat = new SimpleDateFormat(SalesforceDataContext.SOQL_DATE_FORMAT_IN, Locale.ENGLISH);
-                    break;
-                case TIME:
+                } else if (columnType == ColumnType.TIME) {
                     dateFormat = new SimpleDateFormat(SalesforceDataContext.SOQL_TIME_FORMAT_IN, Locale.ENGLISH);
                     dateFormat.setTimeZone(SalesforceDataContext.SOQL_TIMEZONE);
-                    break;
-                case TIMESTAMP:
-                default:
+                } else {
                     dateFormat = new SimpleDateFormat(SalesforceDataContext.SOQL_DATE_TIME_FORMAT_IN, Locale.ENGLISH);
                     dateFormat.setTimeZone(SalesforceDataContext.SOQL_TIMEZONE);
-                    break;
                 }
 
                 try {