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:37 UTC

[1/6] git commit: Converted ColumnType to an interface and made 'core' module compile/work

Repository: incubator-metamodel
Updated Branches:
  refs/heads/master ac9690d87 -> 816aa8618


Converted ColumnType to an interface and made 'core' module compile/work

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

Branch: refs/heads/master
Commit: 0423261ceefd77944d1af7fb39bbc7719b93579f
Parents: 828c82d
Author: Kasper Sørensen <i....@gmail.com>
Authored: Tue Mar 25 21:31:16 2014 +0100
Committer: Kasper Sørensen <i....@gmail.com>
Committed: Fri Apr 4 07:42:28 2014 +0200

----------------------------------------------------------------------
 .../org/apache/metamodel/schema/ColumnType.java | 274 +++---------
 .../apache/metamodel/schema/ColumnTypeImpl.java | 244 +++++++++++
 .../org/apache/metamodel/util/FormatHelper.java | 437 +++++++++----------
 .../metamodel/util/SimpleTableDefParser.java    |   3 +-
 .../apache/metamodel/schema/ColumnTypeTest.java |  38 +-
 5 files changed, 539 insertions(+), 457 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/0423261c/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 839384e..44d5e87 100644
--- a/core/src/main/java/org/apache/metamodel/schema/ColumnType.java
+++ b/core/src/main/java/org/apache/metamodel/schema/ColumnType.java
@@ -25,192 +25,108 @@ 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.lang.reflect.Field;
-import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.sql.Blob;
 import java.sql.Clob;
-import java.sql.Time;
-import java.sql.Timestamp;
 import java.sql.Types;
 import java.util.Comparator;
-import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.metamodel.util.NumberComparator;
-import org.apache.metamodel.util.ObjectComparator;
-import org.apache.metamodel.util.TimeComparator;
-import org.apache.metamodel.util.ToStringComparator;
+import org.apache.metamodel.util.HasName;
 
 /**
- * Represents the data-type of columns. Most of the elements in this enum are
- * based on the JDBC {@link Types} class, but with a few additions.
+ * Represents the data-type of columns.
  */
-public enum ColumnType {
+public interface ColumnType extends HasName {
 
-    /**
+    /*
      * Literal
      */
-    CHAR(LITERAL_TYPE), VARCHAR(LITERAL_TYPE), LONGVARCHAR(LITERAL_TYPE), CLOB(LITERAL_TYPE), NCHAR(LITERAL_TYPE), NVARCHAR(
-            LITERAL_TYPE), LONGNVARCHAR(LITERAL_TYPE), NCLOB(LITERAL_TYPE),
-
-    /**
+    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 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);
+
+    /*
      * Numbers
      */
-    TINYINT(NUMBER_TYPE), SMALLINT(NUMBER_TYPE), INTEGER(NUMBER_TYPE), BIGINT(NUMBER_TYPE), FLOAT(NUMBER_TYPE), REAL(
-            NUMBER_TYPE), DOUBLE(NUMBER_TYPE), NUMERIC(NUMBER_TYPE), DECIMAL(NUMBER_TYPE),
-
-    /**
+    public static final ColumnType TINYINT = new ColumnTypeImpl("TINYINT", NUMBER_TYPE, Short.class);
+    public static final ColumnType SMALLINT = new ColumnTypeImpl("SMALLINT", NUMBER_TYPE, Short.class);
+    public static final ColumnType INTEGER = new ColumnTypeImpl("INTEGER", NUMBER_TYPE, Integer.class);
+    public static final ColumnType BIGINT = new ColumnTypeImpl("BIGINT", NUMBER_TYPE, BigInteger.class);
+    public static final ColumnType FLOAT = new ColumnTypeImpl("FLOAT", NUMBER_TYPE, Double.class);
+    public static final ColumnType REAL = new ColumnTypeImpl("REAL", NUMBER_TYPE, Double.class);
+    public static final ColumnType DOUBLE = new ColumnTypeImpl("DOUBLE", NUMBER_TYPE, Double.class);
+    public static final ColumnType NUMERIC = new ColumnTypeImpl("NUMERIC", NUMBER_TYPE, Double.class);
+    public static final ColumnType DECIMAL = new ColumnTypeImpl("DECIMAL", NUMBER_TYPE, Double.class);
+
+    /*
      * Time based
      */
-    DATE(TIME_TYPE), TIME(TIME_TYPE), TIMESTAMP(TIME_TYPE),
+    public static final ColumnType DATE = new ColumnTypeImpl("DATE", TIME_TYPE);
+    public static final ColumnType TIME = new ColumnTypeImpl("TIME", TIME_TYPE);
+    public static final ColumnType TIMESTAMP = new ColumnTypeImpl("TIMESTAMP", TIME_TYPE);
 
-    /**
+    /*
      * Booleans
      */
-    BIT(BOOLEAN_TYPE), BOOLEAN(BOOLEAN_TYPE),
+    public static final ColumnType BIT = new ColumnTypeImpl("BIT", BOOLEAN_TYPE);
+    public static final ColumnType BOOLEAN = new ColumnTypeImpl("BOOLEAN", BOOLEAN_TYPE);
 
-    /**
+    /*
      * Binary types
      */
-    BINARY(BINARY_TYPE), VARBINARY(BINARY_TYPE), LONGVARBINARY(BINARY_TYPE), BLOB(BINARY_TYPE),
+    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);
 
-    /**
+    /*
      * Other types (as defined in {@link Types}).
      */
-    NULL(OTHER_TYPE), OTHER(OTHER_TYPE), JAVA_OBJECT(OTHER_TYPE), DISTINCT(OTHER_TYPE), STRUCT(OTHER_TYPE), ARRAY(
-            OTHER_TYPE), REF(OTHER_TYPE), DATALINK(OTHER_TYPE), ROWID(OTHER_TYPE), SQLXML(OTHER_TYPE),
-
-    /**
+    public static final ColumnType NULL = new ColumnTypeImpl("NULL", OTHER_TYPE);
+    public static final ColumnType OTHER = new ColumnTypeImpl("OTHER", OTHER_TYPE);
+    public static final ColumnType JAVA_OBJECT = new ColumnTypeImpl("JAVA_OBJECT", OTHER_TYPE);
+    public static final ColumnType DISTINCT = new ColumnTypeImpl("DISTINCT", OTHER_TYPE);
+    public static final ColumnType STRUCT = new ColumnTypeImpl("STRUCT", OTHER_TYPE);
+    public static final ColumnType ARRAY = new ColumnTypeImpl("ARRAY", OTHER_TYPE);
+    public static final ColumnType REF = new ColumnTypeImpl("REF", OTHER_TYPE);
+    public static final ColumnType DATALINK = new ColumnTypeImpl("DATALINK", OTHER_TYPE);
+    public static final ColumnType ROWID = new ColumnTypeImpl("ROWID", OTHER_TYPE);
+    public static final ColumnType SQLXML = new ColumnTypeImpl("SQLXML", OTHER_TYPE);
+
+    /*
      * Additional types (added by MetaModel for non-JDBC datastores)
      */
-    LIST(OTHER_TYPE), MAP(OTHER_TYPE);
+    public static final ColumnType LIST = new ColumnTypeImpl("LIST", OTHER_TYPE, List.class);
+    public static final ColumnType MAP = new ColumnTypeImpl("MAP", OTHER_TYPE, Map.class);
 
-    private final SuperColumnType _superType;
+    public Comparator<Object> getComparator();
 
-    private ColumnType(SuperColumnType superType) {
-        if (superType == null) {
-            throw new IllegalArgumentException("SuperColumnType cannot be null");
-        }
-        _superType = superType;
-    }
+    public boolean isBoolean();
 
-    public Comparator<Object> getComparator() {
-        if (isTimeBased()) {
-            return TimeComparator.getComparator();
-        }
-        if (isNumber()) {
-            return NumberComparator.getComparator();
-        }
-        if (isLiteral()) {
-            return ToStringComparator.getComparator();
-        }
-        return ObjectComparator.getComparator();
-    }
+    public boolean isBinary();
 
-    public boolean isBoolean() {
-        return _superType == BOOLEAN_TYPE;
-    }
+    public boolean isNumber();
 
-    public boolean isBinary() {
-        return _superType == BINARY_TYPE;
-    }
+    public boolean isTimeBased();
 
-    public boolean isNumber() {
-        return _superType == NUMBER_TYPE;
-    }
+    public boolean isLiteral();
 
-    public boolean isTimeBased() {
-        return _superType == TIME_TYPE;
-    }
-
-    public boolean isLiteral() {
-        return _superType == LITERAL_TYPE;
-    }
-
-    public boolean isLargeObject() {
-        switch (this) {
-        case BLOB:
-        case CLOB:
-        case NCLOB:
-            return true;
-        default:
-            return false;
-        }
-    }
+    public boolean isLargeObject();
 
     /**
      * @return a java class that is appropriate for handling column values of
      *         this column type
      */
-    public Class<?> getJavaEquivalentClass() {
-        switch (this) {
-        case TINYINT:
-        case SMALLINT:
-            return Short.class;
-        case INTEGER:
-            return Integer.class;
-        case BIGINT:
-            return BigInteger.class;
-        case DECIMAL:
-        case NUMERIC:
-        case FLOAT:
-        case REAL:
-        case DOUBLE:
-            return Double.class;
-        case DATE:
-        case TIME:
-        case TIMESTAMP:
-            return Date.class;
-        case BLOB:
-            return Blob.class;
-        case CLOB:
-        case NCLOB:
-            return Clob.class;
-        case MAP:
-            return Map.class;
-        case LIST:
-            return List.class;
-        default:
-            // All other types have fitting java equivalent classes in the super
-            // type
-            return _superType.getJavaEquivalentClass();
-        }
-    }
-
-    public SuperColumnType getSuperType() {
-        return _superType;
-    }
+    public Class<?> getJavaEquivalentClass();
 
-    /**
-     * Finds the ColumnType enum corresponding to the incoming JDBC
-     * type-constant
-     */
-    public static ColumnType convertColumnType(int jdbcType) {
-        try {
-            Field[] fields = JdbcTypes.class.getFields();
-            // We assume that the JdbcTypes class only consists of constant
-            // integer types, so we make no assertions here
-            for (int i = 0; i < fields.length; i++) {
-                Field field = fields[i];
-                int value = (Integer) field.getInt(null);
-                if (value == jdbcType) {
-                    String fieldName = field.getName();
-                    ColumnType[] enumConstants = ColumnType.class.getEnumConstants();
-                    for (int j = 0; j < enumConstants.length; j++) {
-                        ColumnType columnType = enumConstants[j];
-                        if (fieldName.equals(columnType.toString())) {
-                            return columnType;
-                        }
-                    }
-                }
-            }
-        } catch (Exception e) {
-            throw new IllegalStateException("Could not access fields in JdbcTypes", e);
-        }
-        return OTHER;
-    }
+    public SuperColumnType getSuperType();
 
     /**
      * Gets the JDBC type as per the {@link Types} class.
@@ -220,73 +136,5 @@ public enum ColumnType {
      * @throws IllegalStateException
      *             in case getting the JDBC type was unsuccesful.
      */
-    public int getJdbcType() throws IllegalStateException {
-        final String name = this.toString();
-        try {
-            // We assume that the JdbcTypes class only consists of constant
-            // integer types, so we make no assertions here
-            final Field[] fields = JdbcTypes.class.getFields();
-            for (int i = 0; i < fields.length; i++) {
-                Field field = fields[i];
-                String fieldName = field.getName();
-                if (fieldName.equals(name)) {
-                    int value = (Integer) field.getInt(null);
-                    return value;
-                }
-            }
-            throw new IllegalStateException("No JdbcType found with field name: " + name);
-        } catch (Exception e) {
-            throw new IllegalStateException("Could not access fields in JdbcTypes", e);
-        }
-    }
-
-    /**
-     * Finds the ColumnType enum corresponding to the incoming Java class.
-     * 
-     * @param cls
-     * @return
-     */
-    public static ColumnType convertColumnType(Class<?> cls) {
-        if (cls == null) {
-            throw new IllegalArgumentException("Class cannot be null");
-        }
-
-        final ColumnType type;
-        if (cls == String.class) {
-            type = ColumnType.VARCHAR;
-        } else if (cls == Boolean.class || cls == boolean.class) {
-            type = ColumnType.BOOLEAN;
-        } else if (cls == Character.class || cls == char.class || cls == Character[].class || cls == char[].class) {
-            type = ColumnType.CHAR;
-        } else if (cls == Byte.class || cls == byte.class) {
-            type = ColumnType.TINYINT;
-        } else if (cls == Short.class || cls == short.class) {
-            type = ColumnType.SMALLINT;
-        } else if (cls == Integer.class || cls == int.class) {
-            type = ColumnType.INTEGER;
-        } else if (cls == Long.class || cls == long.class || cls == BigInteger.class) {
-            type = ColumnType.BIGINT;
-        } else if (cls == Float.class || cls == float.class) {
-            type = ColumnType.FLOAT;
-        } else if (cls == Double.class || cls == double.class) {
-            type = ColumnType.DOUBLE;
-        } else if (cls == BigDecimal.class) {
-            type = ColumnType.DECIMAL;
-        } else if (Map.class.isAssignableFrom(cls)) {
-            type = ColumnType.MAP;
-        } else if (List.class.isAssignableFrom(cls)) {
-            type = ColumnType.LIST;
-        } else if (cls == java.sql.Date.class) {
-            type = ColumnType.DATE;
-        } else if (cls == Timestamp.class) {
-            type = ColumnType.TIMESTAMP;
-        } else if (cls == Time.class) {
-            type = ColumnType.TIME;
-        } else if (Date.class.isAssignableFrom(cls)) {
-            type = ColumnType.TIMESTAMP;
-        } else {
-            type = ColumnType.OTHER;
-        }
-        return type;
-    }
+    public int getJdbcType() throws IllegalStateException;
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/0423261c/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
new file mode 100644
index 0000000..2b482a4
--- /dev/null
+++ b/core/src/main/java/org/apache/metamodel/schema/ColumnTypeImpl.java
@@ -0,0 +1,244 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.metamodel.schema;
+
+import java.lang.reflect.Field;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.sql.Time;
+import java.sql.Timestamp;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.metamodel.util.NumberComparator;
+import org.apache.metamodel.util.ObjectComparator;
+import org.apache.metamodel.util.TimeComparator;
+import org.apache.metamodel.util.ToStringComparator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Default implementation of ColumnType
+ */
+public class ColumnTypeImpl implements ColumnType {
+
+    public static final Logger logger = LoggerFactory.getLogger(ColumnTypeImpl.class);
+
+    private final String _name;
+    private final SuperColumnType _superColumnType;
+    private final Class<?> _javaType;
+
+    public ColumnTypeImpl(String name, SuperColumnType superColumnType) {
+        this(name, superColumnType, null);
+    }
+
+    public ColumnTypeImpl(String name, SuperColumnType superColumnType, Class<?> javaType) {
+        if (name == null) {
+            throw new IllegalArgumentException("Name cannot be null");
+        }
+        if (superColumnType == null) {
+            throw new IllegalArgumentException("SuperColumnType cannot be null");
+        }
+        _name = name;
+        _superColumnType = superColumnType;
+        if (javaType == null) {
+            _javaType = superColumnType.getJavaEquivalentClass();
+        } else {
+            _javaType = javaType;
+        }
+    }
+
+    @Override
+    public String getName() {
+        return _name;
+    }
+
+    @Override
+    public Comparator<Object> getComparator() {
+        if (isTimeBased()) {
+            return TimeComparator.getComparator();
+        }
+        if (isNumber()) {
+            return NumberComparator.getComparator();
+        }
+        if (isLiteral()) {
+            return ToStringComparator.getComparator();
+        }
+        return ObjectComparator.getComparator();
+    }
+
+    @Override
+    public boolean isBoolean() {
+        return _superColumnType == SuperColumnType.BOOLEAN_TYPE;
+    }
+
+    @Override
+    public boolean isBinary() {
+        return _superColumnType == SuperColumnType.BINARY_TYPE;
+    }
+
+    @Override
+    public boolean isNumber() {
+        return _superColumnType == SuperColumnType.NUMBER_TYPE;
+    }
+
+    @Override
+    public boolean isTimeBased() {
+        return _superColumnType == SuperColumnType.TIME_TYPE;
+    }
+
+    @Override
+    public boolean isLiteral() {
+        return _superColumnType == SuperColumnType.LITERAL_TYPE;
+    }
+
+    @Override
+    public boolean isLargeObject() {
+        String name = getName();
+        if ("BLOB".equals(name) || "CLOB".equals(name) || "NCLOB".equals(name)) {
+
+        }
+        return false;
+    }
+
+    @Override
+    public Class<?> getJavaEquivalentClass() {
+        return _javaType;
+    }
+
+    @Override
+    public SuperColumnType getSuperType() {
+        return _superColumnType;
+    }
+
+    @Override
+    public int getJdbcType() throws IllegalStateException {
+        final String name = this.toString();
+        try {
+            // We assume that the JdbcTypes class only consists of constant
+            // integer types, so we make no assertions here
+            final Field[] fields = JdbcTypes.class.getFields();
+            for (int i = 0; i < fields.length; i++) {
+                Field field = fields[i];
+                String fieldName = field.getName();
+                if (fieldName.equals(name)) {
+                    int value = (Integer) field.getInt(null);
+                    return value;
+                }
+            }
+            throw new IllegalStateException("No JdbcType found with field name: " + name);
+        } catch (Exception e) {
+            throw new IllegalStateException("Could not access fields in JdbcTypes", e);
+        }
+    }
+
+    @Override
+    public String toString() {
+        return _name;
+    }
+
+    /**
+     * Finds the ColumnType enum corresponding to the incoming JDBC
+     * type-constant
+     */
+    public static ColumnType convertColumnType(int jdbcType) {
+        try {
+            Field[] fields = JdbcTypes.class.getFields();
+            // We assume that the JdbcTypes class only consists of constant
+            // integer types, so we make no assertions here
+            for (int i = 0; i < fields.length; i++) {
+                Field field = fields[i];
+                int value = (Integer) field.getInt(null);
+                if (value == jdbcType) {
+                    String fieldName = field.getName();
+                    return valueOf(fieldName);
+                }
+            }
+        } catch (Exception e) {
+            throw new IllegalStateException("Could not access fields in JdbcTypes", e);
+        }
+        return OTHER;
+    }
+
+    /**
+     * Finds the ColumnType enum corresponding to the incoming Java class.
+     * 
+     * @param cls
+     * @return
+     */
+    public static ColumnType convertColumnType(Class<?> cls) {
+        if (cls == null) {
+            throw new IllegalArgumentException("Class cannot be null");
+        }
+
+        final ColumnType type;
+        if (cls == String.class) {
+            type = ColumnType.VARCHAR;
+        } else if (cls == Boolean.class || cls == boolean.class) {
+            type = ColumnType.BOOLEAN;
+        } else if (cls == Character.class || cls == char.class || cls == Character[].class || cls == char[].class) {
+            type = ColumnType.CHAR;
+        } else if (cls == Byte.class || cls == byte.class) {
+            type = ColumnType.TINYINT;
+        } else if (cls == Short.class || cls == short.class) {
+            type = ColumnType.SMALLINT;
+        } else if (cls == Integer.class || cls == int.class) {
+            type = ColumnType.INTEGER;
+        } else if (cls == Long.class || cls == long.class || cls == BigInteger.class) {
+            type = ColumnType.BIGINT;
+        } else if (cls == Float.class || cls == float.class) {
+            type = ColumnType.FLOAT;
+        } else if (cls == Double.class || cls == double.class) {
+            type = ColumnType.DOUBLE;
+        } else if (cls == BigDecimal.class) {
+            type = ColumnType.DECIMAL;
+        } else if (Map.class.isAssignableFrom(cls)) {
+            type = ColumnType.MAP;
+        } else if (List.class.isAssignableFrom(cls)) {
+            type = ColumnType.LIST;
+        } else if (cls == java.sql.Date.class) {
+            type = ColumnType.DATE;
+        } else if (cls == Timestamp.class) {
+            type = ColumnType.TIMESTAMP;
+        } else if (cls == Time.class) {
+            type = ColumnType.TIME;
+        } else if (Date.class.isAssignableFrom(cls)) {
+            type = ColumnType.TIMESTAMP;
+        } else {
+            type = ColumnType.OTHER;
+        }
+        return type;
+    }
+
+    public static ColumnType valueOf(String fieldName) {
+        try {
+            Field columnTypeField = ColumnType.class.getField(fieldName);
+            if (columnTypeField != null) {
+                columnTypeField.setAccessible(true);
+                Object columnType = columnTypeField.get(ColumnType.class);
+                return (ColumnType) columnType;
+            }
+        } catch (Exception e) {
+            logger.error("Failed to resolve JDBC type in ColumnType constants: " + fieldName, e);
+        }
+        return null;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/0423261c/core/src/main/java/org/apache/metamodel/util/FormatHelper.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/util/FormatHelper.java b/core/src/main/java/org/apache/metamodel/util/FormatHelper.java
index f087d10..bffc96d 100644
--- a/core/src/main/java/org/apache/metamodel/util/FormatHelper.java
+++ b/core/src/main/java/org/apache/metamodel/util/FormatHelper.java
@@ -33,241 +33,230 @@ import org.apache.metamodel.schema.ColumnType;
  */
 public final class FormatHelper {
 
-	/**
-	 * Creates a uniform number format which is similar to that of eg. Java
-	 * doubles. The format will not include thousand separators and it will use
-	 * a dot as a decimal separator.
-	 * 
-	 * @return
-	 */
-	public static NumberFormat getUiNumberFormat() {
-		DecimalFormatSymbols symbols = new DecimalFormatSymbols();
-		symbols.setDecimalSeparator('.');
-		DecimalFormat format = new DecimalFormat("###.##", symbols);
-		format.setGroupingUsed(false);
-		return format;
-	}
+    /**
+     * Creates a uniform number format which is similar to that of eg. Java
+     * doubles. The format will not include thousand separators and it will use
+     * a dot as a decimal separator.
+     * 
+     * @return
+     */
+    public static NumberFormat getUiNumberFormat() {
+        DecimalFormatSymbols symbols = new DecimalFormatSymbols();
+        symbols.setDecimalSeparator('.');
+        DecimalFormat format = new DecimalFormat("###.##", symbols);
+        format.setGroupingUsed(false);
+        return format;
+    }
 
-	public static NumberFormat getSqlNumberFormat() {
-		DecimalFormatSymbols symbols = new DecimalFormatSymbols();
-		symbols.setDecimalSeparator('.');
-		DecimalFormat format = new DecimalFormat("###.##", symbols);
-		format.setGroupingUsed(false);
-		format.setMaximumFractionDigits(100);
-		return format;
-	}
+    public static NumberFormat getSqlNumberFormat() {
+        DecimalFormatSymbols symbols = new DecimalFormatSymbols();
+        symbols.setDecimalSeparator('.');
+        DecimalFormat format = new DecimalFormat("###.##", symbols);
+        format.setGroupingUsed(false);
+        format.setMaximumFractionDigits(100);
+        return format;
+    }
 
-	public static String formatSqlBoolean(ColumnType columnType, boolean b) {
-		if (columnType == ColumnType.BIT) {
-			if (b) {
-				return "1";
-			} else {
-				return "0";
-			}
-		} else {
-			if (b) {
-				return "TRUE";
-			} else {
-				return "FALSE";
-			}
-		}
-	}
+    public static String formatSqlBoolean(ColumnType columnType, boolean b) {
+        if (columnType == ColumnType.BIT) {
+            if (b) {
+                return "1";
+            } else {
+                return "0";
+            }
+        } else {
+            if (b) {
+                return "TRUE";
+            } else {
+                return "FALSE";
+            }
+        }
+    }
 
-	/**
-	 * Formats a date according to a specific column type (DATE, TIME or
-	 * TIMESTAMP)
-	 * 
-	 * @param columnType
-	 *            the column type
-	 * @param date
-	 *            the date value
-	 * @return
-	 */
-	public static String formatSqlTime(ColumnType columnType, Date date) {
-		return formatSqlTime(columnType, date, true);
-	}
+    /**
+     * Formats a date according to a specific column type (DATE, TIME or
+     * TIMESTAMP)
+     * 
+     * @param columnType
+     *            the column type
+     * @param date
+     *            the date value
+     * @return
+     */
+    public static String formatSqlTime(ColumnType columnType, Date date) {
+        return formatSqlTime(columnType, date, true);
+    }
 
-	/**
-	 * Formats a date according to a specific column type (DATE, TIME or
-	 * TIMESTAMP)
-	 * 
-	 * @param columnType
-	 *            the column type
-	 * @param date
-	 *            the date value
-	 * @param typeCastDeclaration
-	 *            whether or not to include a type cast declaration
-	 * @param beforeDateLiteral
-	 *            before date literal
-	 * @param afterDateLiteral
-	 *            after date literal
-	 * @return
-	 */
-	public static String formatSqlTime(ColumnType columnType, Date date,
-			boolean typeCastDeclaration, String beforeDateLiteral,
-			String afterDateLiteral) {
-		if (columnType == null) {
-			throw new IllegalArgumentException("Column type cannot be null");
-		}
-		final DateFormat format;
-		final String typePrefix;
-		switch (columnType) {
-		case DATE:
-			format = DateUtils.createDateFormat("yyyy-MM-dd");
-			typePrefix = "DATE";
-			break;
-		case TIME:
-			format = DateUtils.createDateFormat("HH:mm:ss");
-			typePrefix = "TIME";
-			break;
-		case TIMESTAMP:
-			format = DateUtils.createDateFormat("yyyy-MM-dd HH:mm:ss");
-			typePrefix = "TIMESTAMP";
-			break;
-		default:
-			throw new IllegalArgumentException(
-					"Cannot format time value of type: " + columnType);
-		}
+    /**
+     * Formats a date according to a specific column type (DATE, TIME or
+     * TIMESTAMP)
+     * 
+     * @param columnType
+     *            the column type
+     * @param date
+     *            the date value
+     * @param typeCastDeclaration
+     *            whether or not to include a type cast declaration
+     * @param beforeDateLiteral
+     *            before date literal
+     * @param afterDateLiteral
+     *            after date literal
+     * @return
+     */
+    public static String formatSqlTime(ColumnType columnType, Date date, boolean typeCastDeclaration,
+            String beforeDateLiteral, String afterDateLiteral) {
+        if (columnType == null) {
+            throw new IllegalArgumentException("Column type cannot be null");
+        }
+        final DateFormat format;
+        final String typePrefix;
+        if (columnType.isTimeBased()) {
+            if (columnType == ColumnType.DATE) {
+                format = DateUtils.createDateFormat("yyyy-MM-dd");
+                typePrefix = "DATE";
+            } else if (columnType == ColumnType.TIME) {
+                format = DateUtils.createDateFormat("HH:mm:ss");
+                typePrefix = "TIME";
+            } else {
+                format = DateUtils.createDateFormat("yyyy-MM-dd HH:mm:ss");
+                typePrefix = "TIMESTAMP";
+            }
 
-		if (typeCastDeclaration) {
-			return typePrefix + " " + beforeDateLiteral + format.format(date)  + afterDateLiteral;
-		} else {
-			return format.format(date);
-		}
-	}
-	
-	/**
-	 * Formats a date according to a specific column type (DATE, TIME or TIMESTAMP). For backward compatibility.
-	 * @param columnType
-	 * @param date
-	 * @param typeCastDeclaration
-	 * @return
-	 */
-	public static String formatSqlTime(ColumnType columnType, Date date, boolean typeCastDeclaration) {
-		   return formatSqlTime(columnType, date, typeCastDeclaration, "\'", "\'");
-	}
+        } else {
+            throw new IllegalArgumentException("Cannot format time value of type: " + columnType);
+        }
 
-	/**
-	 * Parses a SQL string representation of a time based value
-	 * 
-	 * @param type
-	 * @param value
-	 * @return
-	 */
-	public static Date parseSqlTime(ColumnType columnType, String value) {
-		final String[] formats;
-		switch (columnType) {
-		case DATE:
-			formats = new String[] { "yyyy-MM-dd", };
-			break;
-		case TIME:
-			formats = new String[] { "HH:mm:ss", "HH:mm" };
-			break;
-		case TIMESTAMP:
-			formats = new String[] { "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm",
-					"yyyy-MM-dd" };
-			break;
-		default:
-			throw new IllegalArgumentException(
-					"Cannot parse time value of type: " + columnType);
-		}
+        if (typeCastDeclaration) {
+            return typePrefix + " " + beforeDateLiteral + format.format(date) + afterDateLiteral;
+        } else {
+            return format.format(date);
+        }
+    }
 
-		for (String format : formats) {
-			try {
-				DateFormat dateFormat = DateUtils.createDateFormat(format);
-				return dateFormat.parse(value);
-			} catch (ParseException e) {
-				// proceed to next format
-			}
-		}
+    /**
+     * Formats a date according to a specific column type (DATE, TIME or
+     * TIMESTAMP). For backward compatibility.
+     * 
+     * @param columnType
+     * @param date
+     * @param typeCastDeclaration
+     * @return
+     */
+    public static String formatSqlTime(ColumnType columnType, Date date, boolean typeCastDeclaration) {
+        return formatSqlTime(columnType, date, typeCastDeclaration, "\'", "\'");
+    }
 
-		throw new IllegalArgumentException("String value '" + value
-				+ "' not parseable as a " + columnType);
-	}
+    /**
+     * Parses a SQL string representation of a time based value
+     * 
+     * @param type
+     * @param value
+     * @return
+     */
+    public static Date parseSqlTime(ColumnType columnType, String value) {
+        final String[] formats;
+        if (columnType.isTimeBased()) {
+            if (columnType == ColumnType.DATE) {
+                formats = new String[] { "yyyy-MM-dd" };
+            } else if (columnType == ColumnType.TIME) {
+                formats = new String[] { "HH:mm:ss", "HH:mm" };
+            } else {
+                formats = new String[] { "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM-dd" };
+            }
+        } else {
+            throw new IllegalArgumentException("Cannot parse time value of type: " + columnType);
+        }
 
-	public static String formatSqlValue(ColumnType columnType, Object value) {
-		if (value == null) {
-			return "NULL";
-		}
-		if (value instanceof QueryParameter) {
-			return value.toString();
-		}
-		if (value.getClass().isArray()) {
-			value = CollectionUtils.toList(value);
-		}
-		if (value instanceof Iterable) {
-			StringBuilder sb = new StringBuilder();
-			sb.append('(');
-			for (Object item : (Iterable<?>) value) {
-				if (sb.length() > 1) {
-					sb.append(" , ");
-				}
-				sb.append(formatSqlValue(columnType, item));
-			}
-			sb.append(')');
-			return sb.toString();
-		} else if (isNumber(columnType, value)) {
-			NumberFormat numberFormat = getSqlNumberFormat();
-			Number n = NumberComparator.toNumber(value);
-			if (n == null) {
-				throw new IllegalStateException("Could not convert " + value
-						+ " to number");
-			}
-			String numberString = numberFormat.format(n);
-			return numberString;
-		} else if (isBoolean(columnType, value)) {
-			Boolean b = BooleanComparator.toBoolean(value);
-			if (b == null) {
-				throw new IllegalStateException("Could not convert " + value
-						+ " to boolean");
-			}
-			String booleanString = formatSqlBoolean(columnType, b);
-			return booleanString;
-		} else if (isTimeBased(columnType, value)) {
-			Date date = TimeComparator.toDate(value);
-			if (date == null) {
-				throw new IllegalStateException("Could not convert " + value
-						+ " to date");
-			}
-			String timeString = formatSqlTime(columnType, date);
-			return timeString;
-		} else if (isLiteral(columnType, value)) {
-			return '\'' + value.toString() + '\'';
-		} else {
-			if (columnType == null) {
-				throw new IllegalStateException("Value type not supported: "
-						+ value);
-			}
-			throw new IllegalStateException("Column type not supported: "
-					+ columnType);
-		}
-	}
+        for (String format : formats) {
+            try {
+                DateFormat dateFormat = DateUtils.createDateFormat(format);
+                return dateFormat.parse(value);
+            } catch (ParseException e) {
+                // proceed to next format
+            }
+        }
 
-	private static boolean isTimeBased(ColumnType columnType, Object operand) {
-		if (columnType == null) {
-			return TimeComparator.isTimeBased(operand);
-		}
-		return columnType.isTimeBased();
-	}
+        throw new IllegalArgumentException("String value '" + value + "' not parseable as a " + columnType);
+    }
 
-	private static boolean isBoolean(ColumnType columnType, Object operand) {
-		if (columnType == null) {
-			return operand instanceof Boolean;
-		}
-		return columnType.isBoolean();
-	}
+    public static String formatSqlValue(ColumnType columnType, Object value) {
+        if (value == null) {
+            return "NULL";
+        }
+        if (value instanceof QueryParameter) {
+            return value.toString();
+        }
+        if (value.getClass().isArray()) {
+            value = CollectionUtils.toList(value);
+        }
+        if (value instanceof Iterable) {
+            StringBuilder sb = new StringBuilder();
+            sb.append('(');
+            for (Object item : (Iterable<?>) value) {
+                if (sb.length() > 1) {
+                    sb.append(" , ");
+                }
+                sb.append(formatSqlValue(columnType, item));
+            }
+            sb.append(')');
+            return sb.toString();
+        } else if (isNumber(columnType, value)) {
+            NumberFormat numberFormat = getSqlNumberFormat();
+            Number n = NumberComparator.toNumber(value);
+            if (n == null) {
+                throw new IllegalStateException("Could not convert " + value + " to number");
+            }
+            String numberString = numberFormat.format(n);
+            return numberString;
+        } else if (isBoolean(columnType, value)) {
+            Boolean b = BooleanComparator.toBoolean(value);
+            if (b == null) {
+                throw new IllegalStateException("Could not convert " + value + " to boolean");
+            }
+            String booleanString = formatSqlBoolean(columnType, b);
+            return booleanString;
+        } else if (isTimeBased(columnType, value)) {
+            Date date = TimeComparator.toDate(value);
+            if (date == null) {
+                throw new IllegalStateException("Could not convert " + value + " to date");
+            }
+            String timeString = formatSqlTime(columnType, date);
+            return timeString;
+        } else if (isLiteral(columnType, value)) {
+            return '\'' + value.toString() + '\'';
+        } else {
+            if (columnType == null) {
+                throw new IllegalStateException("Value type not supported: " + value);
+            }
+            throw new IllegalStateException("Column type not supported: " + columnType);
+        }
+    }
 
-	private static boolean isNumber(ColumnType columnType, Object operand) {
-		if (columnType == null) {
-			return operand instanceof Number;
-		}
-		return columnType.isNumber();
-	}
+    private static boolean isTimeBased(ColumnType columnType, Object operand) {
+        if (columnType == null) {
+            return TimeComparator.isTimeBased(operand);
+        }
+        return columnType.isTimeBased();
+    }
 
-	private static boolean isLiteral(ColumnType columnType, Object operand) {
-		if (columnType == null) {
-			return operand instanceof String;
-		}
-		return columnType.isLiteral();
-	}
+    private static boolean isBoolean(ColumnType columnType, Object operand) {
+        if (columnType == null) {
+            return operand instanceof Boolean;
+        }
+        return columnType.isBoolean();
+    }
+
+    private static boolean isNumber(ColumnType columnType, Object operand) {
+        if (columnType == null) {
+            return operand instanceof Number;
+        }
+        return columnType.isNumber();
+    }
+
+    private static boolean isLiteral(ColumnType columnType, Object operand) {
+        if (columnType == null) {
+            return operand instanceof String;
+        }
+        return columnType.isLiteral();
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/0423261c/core/src/main/java/org/apache/metamodel/util/SimpleTableDefParser.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/util/SimpleTableDefParser.java b/core/src/main/java/org/apache/metamodel/util/SimpleTableDefParser.java
index 46f3ff0..7239321 100644
--- a/core/src/main/java/org/apache/metamodel/util/SimpleTableDefParser.java
+++ b/core/src/main/java/org/apache/metamodel/util/SimpleTableDefParser.java
@@ -22,6 +22,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.metamodel.schema.ColumnType;
+import org.apache.metamodel.schema.ColumnTypeImpl;
 
 public class SimpleTableDefParser {
 
@@ -100,7 +101,7 @@ public class SimpleTableDefParser {
                 int separator = columnDefinition.lastIndexOf(" ");
                 String columnName = columnDefinition.substring(0, separator).trim();
                 String columnTypeString = columnDefinition.substring(separator).trim();
-                ColumnType columnType = ColumnType.valueOf(columnTypeString);
+                ColumnType columnType = ColumnTypeImpl.valueOf(columnTypeString);
 
                 columnNames.add(columnName);
                 columnTypes.add(columnType);

http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/0423261c/core/src/test/java/org/apache/metamodel/schema/ColumnTypeTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/metamodel/schema/ColumnTypeTest.java b/core/src/test/java/org/apache/metamodel/schema/ColumnTypeTest.java
index 674d362..58b843a 100644
--- a/core/src/test/java/org/apache/metamodel/schema/ColumnTypeTest.java
+++ b/core/src/test/java/org/apache/metamodel/schema/ColumnTypeTest.java
@@ -34,59 +34,59 @@ import junit.framework.TestCase;
 public class ColumnTypeTest extends TestCase {
 
 	public void testConvertColumnTypeFromJdbcTypes() throws Exception {
-		ColumnType type = ColumnType.convertColumnType(Types.VARCHAR);
+		ColumnType type = ColumnTypeImpl.convertColumnType(Types.VARCHAR);
 		assertEquals(ColumnType.VARCHAR, type);
 		
-		type = ColumnType.convertColumnType(Types.DATE);
+		type = ColumnTypeImpl.convertColumnType(Types.DATE);
         assertEquals(ColumnType.DATE, type);
 
-		type = ColumnType.convertColumnType(Types.TIME);
+		type = ColumnTypeImpl.convertColumnType(Types.TIME);
 		assertEquals(ColumnType.TIME, type);
 
-		type = ColumnType.convertColumnType(Types.TIMESTAMP);
+		type = ColumnTypeImpl.convertColumnType(Types.TIMESTAMP);
 		assertEquals(ColumnType.TIMESTAMP, type);
 
-		type = ColumnType.convertColumnType(42397443);
+		type = ColumnTypeImpl.convertColumnType(42397443);
 		assertEquals(ColumnType.OTHER, type);
 		
-		type = ColumnType.convertColumnType(-42397443);
+		type = ColumnTypeImpl.convertColumnType(-42397443);
 		assertEquals(ColumnType.OTHER, type);
 	}
 	
 	public void testConvertColumnTypeFromJavaClass() throws Exception {
-		ColumnType type = ColumnType.convertColumnType(String.class);
+		ColumnType type = ColumnTypeImpl.convertColumnType(String.class);
 		assertEquals(ColumnType.VARCHAR, type);
 
-		type = ColumnType.convertColumnType(Time.class);
+		type = ColumnTypeImpl.convertColumnType(Time.class);
 		assertEquals(ColumnType.TIME, type);
 
-		type = ColumnType.convertColumnType(Timestamp.class);
+		type = ColumnTypeImpl.convertColumnType(Timestamp.class);
 		assertEquals(ColumnType.TIMESTAMP, type);
 		
-		type = ColumnType.convertColumnType(java.sql.Date.class);
+		type = ColumnTypeImpl.convertColumnType(java.sql.Date.class);
 		assertEquals(ColumnType.DATE, type);
 
-		type = ColumnType.convertColumnType(Date.class);
+		type = ColumnTypeImpl.convertColumnType(Date.class);
 		assertEquals(ColumnType.TIMESTAMP, type);
 		
-		type = ColumnType.convertColumnType(Integer.class);
+		type = ColumnTypeImpl.convertColumnType(Integer.class);
 		assertEquals(ColumnType.INTEGER, type);
 		
-		type = ColumnType.convertColumnType(Object.class);
+		type = ColumnTypeImpl.convertColumnType(Object.class);
 		assertEquals(ColumnType.OTHER, type);
 		
-		type = ColumnType.convertColumnType(Map.class);
+		type = ColumnTypeImpl.convertColumnType(Map.class);
 		assertEquals(ColumnType.MAP, type);
-		type = ColumnType.convertColumnType(HashMap.class);
+		type = ColumnTypeImpl.convertColumnType(HashMap.class);
 		assertEquals(ColumnType.MAP, type);
-		type = ColumnType.convertColumnType(TreeMap.class);
+		type = ColumnTypeImpl.convertColumnType(TreeMap.class);
 		assertEquals(ColumnType.MAP, type);
 		
-		type = ColumnType.convertColumnType(List.class);
+		type = ColumnTypeImpl.convertColumnType(List.class);
 		assertEquals(ColumnType.LIST, type);
-		type = ColumnType.convertColumnType(ArrayList.class);
+		type = ColumnTypeImpl.convertColumnType(ArrayList.class);
 		assertEquals(ColumnType.LIST, type);
-		type = ColumnType.convertColumnType(LinkedList.class);
+		type = ColumnTypeImpl.convertColumnType(LinkedList.class);
 		assertEquals(ColumnType.LIST, type);
 	}
 }
\ No newline at end of file


[3/6] git commit: Minor fix to MongoDbDataContext

Posted by ka...@apache.org.
Minor fix to MongoDbDataContext

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

Branch: refs/heads/master
Commit: 80be0a389e1defcc4aeb2bf2bff7611c16fd88d5
Parents: 743e891
Author: Kasper Sørensen <i....@gmail.com>
Authored: Sat May 3 19:41:16 2014 +0200
Committer: Kasper Sørensen <i....@gmail.com>
Committed: Sat May 3 19:41:16 2014 +0200

----------------------------------------------------------------------
 .../java/org/apache/metamodel/mongodb/MongoDbDataContext.java   | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/80be0a38/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 4e3ee5f..9da4ecf 100644
--- a/mongodb/src/main/java/org/apache/metamodel/mongodb/MongoDbDataContext.java
+++ b/mongodb/src/main/java/org/apache/metamodel/mongodb/MongoDbDataContext.java
@@ -43,11 +43,8 @@ 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.MutableColumn;
 import org.apache.metamodel.schema.MutableSchema;
 import org.apache.metamodel.schema.MutableTable;
 import org.apache.metamodel.schema.Schema;


[5/6] git commit: Minor post-merge issue resolutions.

Posted by ka...@apache.org.
Minor post-merge issue resolutions.

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

Branch: refs/heads/master
Commit: a7b347503e7bbc6c030ae5bef25839606b9b68c6
Parents: dc107fc
Author: Kasper Sørensen <i....@gmail.com>
Authored: Sat May 3 19:53:28 2014 +0200
Committer: Kasper Sørensen <i....@gmail.com>
Committed: Sat May 3 19:53:28 2014 +0200

----------------------------------------------------------------------
 .../org/apache/metamodel/couchdb/CouchDbDataContext.java    | 9 ++++++---
 pom.xml                                                     | 1 +
 2 files changed, 7 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/a7b34750/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 bcd82ed..7e85001 100644
--- a/couchdb/src/main/java/org/apache/metamodel/couchdb/CouchDbDataContext.java
+++ b/couchdb/src/main/java/org/apache/metamodel/couchdb/CouchDbDataContext.java
@@ -45,18 +45,21 @@ import org.apache.metamodel.util.SimpleTableDef;
 import org.codehaus.jackson.JsonNode;
 import org.ektorp.CouchDbConnector;
 import org.ektorp.CouchDbInstance;
+import org.ektorp.DbAccessException;
 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.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * DataContext implementation for CouchDB
  */
 public class CouchDbDataContext extends QueryPostprocessDataContext implements UpdateableDataContext {
-    
+
     private static final Logger logger = LoggerFactory.getLogger(CouchDbDataContext.class);
 
     public static final int DEFAULT_PORT = 5984;
@@ -116,8 +119,8 @@ public class CouchDbDataContext extends QueryPostprocessDataContext implements U
     public static SimpleTableDef detectTable(CouchDbConnector connector) {
         final SortedMap<String, Set<ColumnType>> columnsAndTypes = new TreeMap<String, Set<ColumnType>>();
 
-        final StreamingViewResult streamingView = connector.queryForStreamingView(new ViewQuery().allDocs().includeDocs(true)
-                .limit(1000));
+        final StreamingViewResult streamingView = connector.queryForStreamingView(new ViewQuery().allDocs()
+                .includeDocs(true).limit(1000));
         try {
             final Iterator<Row> rowIterator = streamingView.iterator();
             while (safeHasNext(rowIterator)) {

http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/a7b34750/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index a844217..45cd86f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -335,6 +335,7 @@
 							<exclude>NOTICE.txt</exclude>
 							<exclude>LICENSE.txt</exclude>
 							<exclude>KEYS</exclude>
+							<exclude>*.md</exclude>
 							<exclude>example-metamodel-integrationtest-configuration.properties</exclude>
 							<exclude>**/.gitignore/**</exclude>
 							<exclude>.git/**</exclude>


[4/6] git commit: Merge branch 'master' into columntype_as_interface

Posted by ka...@apache.org.
Merge branch 'master' into columntype_as_interface

Conflicts:
	couchdb/src/main/java/org/apache/metamodel/couchdb/CouchDbDataContext.java


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

Branch: refs/heads/master
Commit: dc107fc6330df685e2a2eef64f0351acc3e808b3
Parents: 80be0a3 ac9690d
Author: Kasper Sørensen <i....@gmail.com>
Authored: Sat May 3 19:46:23 2014 +0200
Committer: Kasper Sørensen <i....@gmail.com>
Committed: Sat May 3 19:46:23 2014 +0200

----------------------------------------------------------------------
 CHANGES.txt                                     |   6 +-
 CONTRIBUTE.md                                   |  45 ++
 README                                          |   6 +-
 core/pom.xml                                    |   2 +-
 .../metamodel/data/RowPublisherDataSet.java     |   7 +-
 couchdb/pom.xml                                 |   2 +-
 .../metamodel/couchdb/CouchDbDataContext.java   |  13 +-
 .../couchdb/CouchDbDataContextTest.java         | 127 ++--
 .../metamodel/couchdb/CouchDbTestCase.java      |  80 +++
 csv/pom.xml                                     |   2 +-
 ...del-integrationtest-configuration.properties |  46 ++
 excel/pom.xml                                   |   2 +-
 .../excel/DefaultSpreadsheetReaderDelegate.java |   2 -
 .../metamodel/excel/ExcelDataContext.java       |   4 +
 .../excel/XlsxSpreadsheetReaderDelegate.java    |   2 -
 .../metamodel/excel/ExcelDataContextTest.java   |  72 ++-
 fixedwidth/pom.xml                              |   2 +-
 full/pom.xml                                    |   2 +-
 hbase/pom.xml                                   |   9 +-
 .../metamodel/hbase/HBaseDataContextTest.java   |  28 +-
 .../apache/metamodel/hbase/HBaseTestCase.java   |  74 +++
 jdbc/pom.xml                                    |   2 +-
 mongodb/pom.xml                                 |   2 +-
 .../mongodb/MongoDbDataContextTest.java         | 586 +++++++++----------
 .../metamodel/mongodb/MongoDbTestCase.java      |  94 +++
 openoffice/pom.xml                              |   2 +-
 pojo/pom.xml                                    |   2 +-
 pom.xml                                         |  11 +-
 salesforce/pom.xml                              |   2 +-
 .../salesforce/SalesforceTestCase.java          |  17 +-
 spring/pom.xml                                  |   2 +-
 sugarcrm/pom.xml                                |   2 +-
 .../metamodel/sugarcrm/SugarCrmTestCase.java    |  18 +-
 xml/pom.xml                                     |   2 +-
 34 files changed, 826 insertions(+), 449 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/dc107fc6/couchdb/src/main/java/org/apache/metamodel/couchdb/CouchDbDataContext.java
----------------------------------------------------------------------


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

Posted by ka...@apache.org.
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 {


[6/6] git commit: METAMODEL-54: Converted ColumnType from enum to interface

Posted by ka...@apache.org.
METAMODEL-54: Converted ColumnType from enum to interface

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

Branch: refs/heads/master
Commit: 816aa86187fa1ced3634feaf3ed3094077bffb20
Parents: a7b3475
Author: Kasper Sørensen <i....@gmail.com>
Authored: Sun May 18 20:59:44 2014 +0200
Committer: Kasper Sørensen <i....@gmail.com>
Committed: Sun May 18 20:59:44 2014 +0200

----------------------------------------------------------------------
 CHANGES.txt                                                        | 1 +
 .../metamodel/util/LegacyDeserializationObjectInputStream.java     | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/816aa861/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 6918be3..bf07730 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,6 +1,7 @@
 Apache MetaModel 4.1.0-incubating
 
  * [METAMODEL-13] - Added support for Apache HBase via the new module "MetaModel-hbase"
+ * [METAMODEL-54] - ColumnType converted from enum to interface to allow for further specialization in modules
  * [METAMODEL-41] - Added a parser for SimpleTableDef objects (SimpleTableDefParser). It parses statements similar to CREATE TABLE statements, although without the "CREATE TABLE" prefix. For example: foo (bar INTEGER, baz VARCHAR)
  * [METAMODEL-11] - New module "MetaModel-spring" which adds a convenient FactoryBean to produce various types of DataContext objects based on externalizable parameters, for Spring framework users.
  * [METAMODEL-32] - Fixed thread-safety issue in Excel module when tables (sheets) metadata is updated.

http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/816aa861/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 ad7e4fb..c5ab2e5 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();