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();