Author: shawkins
Date: 2011-10-19 10:17:27 -0400 (Wed, 19 Oct 2011)
New Revision: 3569
Modified:
trunk/client/src/main/java/org/teiid/client/BatchSerializer.java
trunk/common-core/src/main/java/org/teiid/core/types/DataTypeManager.java
trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/FunctionModifier.java
Log:
TEIID-1750 pushing type codes down to datatypemanager
Modified: trunk/client/src/main/java/org/teiid/client/BatchSerializer.java
===================================================================
--- trunk/client/src/main/java/org/teiid/client/BatchSerializer.java 2011-10-18 19:02:39
UTC (rev 3568)
+++ trunk/client/src/main/java/org/teiid/client/BatchSerializer.java 2011-10-19 14:17:27
UTC (rev 3569)
@@ -35,7 +35,6 @@
import java.util.Arrays;
import java.util.Calendar;
import java.util.HashMap;
-import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.TimeZone;
@@ -54,59 +53,6 @@
*/
public class BatchSerializer {
- /*
- * Public sharing part for the mapping between class and type in format of
Map<class->Integer>.
- */
- public static final int STRING = 0;
- public static final int CHAR = 1;
- public static final int BOOLEAN = 2;
- public static final int BYTE = 3;
- public static final int SHORT = 4;
- public static final int INTEGER = 5;
- public static final int LONG = 6;
- public static final int BIGINTEGER = 7;
- public static final int FLOAT = 8;
- public static final int DOUBLE = 9;
- public static final int BIGDECIMAL = 10;
- public static final int DATE = 11;
- public static final int TIME = 12;
- public static final int TIMESTAMP = 13;
- public static final int OBJECT = 14;
- public static final int BLOB = 15;
- public static final int CLOB = 16;
- public static final int XML = 17;
- public static final int NULL = 18;
-
- private static final Map<Class<?>, Integer> typeMap = new
LinkedHashMap<Class<?>, Integer>(64);
- private static final List<Class<?>> typeList;
-
- static {
- typeMap.put(DataTypeManager.DefaultDataClasses.STRING, STRING);
- typeMap.put(DataTypeManager.DefaultDataClasses.CHAR, CHAR);
- typeMap.put(DataTypeManager.DefaultDataClasses.BOOLEAN, BOOLEAN);
- typeMap.put(DataTypeManager.DefaultDataClasses.BYTE, BYTE);
- typeMap.put(DataTypeManager.DefaultDataClasses.SHORT, SHORT);
- typeMap.put(DataTypeManager.DefaultDataClasses.INTEGER, INTEGER);
- typeMap.put(DataTypeManager.DefaultDataClasses.LONG, LONG);
- typeMap.put(DataTypeManager.DefaultDataClasses.BIG_INTEGER, BIGINTEGER);
- typeMap.put(DataTypeManager.DefaultDataClasses.FLOAT, FLOAT);
- typeMap.put(DataTypeManager.DefaultDataClasses.DOUBLE, DOUBLE);
- typeMap.put(DataTypeManager.DefaultDataClasses.BIG_DECIMAL, BIGDECIMAL);
- typeMap.put(DataTypeManager.DefaultDataClasses.DATE, DATE);
- typeMap.put(DataTypeManager.DefaultDataClasses.TIME, TIME);
- typeMap.put(DataTypeManager.DefaultDataClasses.TIMESTAMP, TIMESTAMP);
- typeMap.put(DataTypeManager.DefaultDataClasses.OBJECT, OBJECT);
- typeMap.put(DataTypeManager.DefaultDataClasses.BLOB, BLOB);
- typeMap.put(DataTypeManager.DefaultDataClasses.CLOB, CLOB);
- typeMap.put(DataTypeManager.DefaultDataClasses.XML, XML);
- typeMap.put(DataTypeManager.DefaultDataClasses.NULL, NULL);
- typeList = new ArrayList<Class<?>>(typeMap.keySet());
- }
-
- public static int getCode(Class<?> source) {
- return typeMap.get(source).intValue();
- }
-
private BatchSerializer() {} // Uninstantiable
private static ColumnSerializer defaultSerializer = new ColumnSerializer();
@@ -145,15 +91,15 @@
@Override
protected void writeObject(ObjectOutput out, Object obj)
throws IOException {
- int code = getCode(obj.getClass());
+ int code = DataTypeManager.getTypeCode(obj.getClass());
out.writeByte((byte)code);
- if (code == BOOLEAN) {
+ if (code == DataTypeManager.BOOLEAN) {
if (Boolean.TRUE.equals(obj)) {
out.write((byte)1);
} else {
out.write((byte)0);
}
- } else if (code != OBJECT) {
+ } else if (code != DataTypeManager.OBJECT) {
ColumnSerializer s =
getSerializer(DataTypeManager.getDataTypeName(obj.getClass()), (byte)1);
s.writeObject(out, obj);
} else {
@@ -165,14 +111,14 @@
protected Object readObject(ObjectInput in) throws IOException,
ClassNotFoundException {
int code = in.readByte();
- if (code == BOOLEAN) {
+ if (code == DataTypeManager.BOOLEAN) {
if (in.readByte() == (byte)0) {
return Boolean.FALSE;
}
return Boolean.TRUE;
}
- if (code != OBJECT) {
- ColumnSerializer s =
getSerializer(DataTypeManager.getDataTypeName(typeList.get(code)), (byte)1);
+ if (code != DataTypeManager.OBJECT) {
+ ColumnSerializer s =
getSerializer(DataTypeManager.getDataTypeName(DataTypeManager.getClass(code)), (byte)1);
return s.readObject(in);
}
return super.readObject(in);
Modified: trunk/common-core/src/main/java/org/teiid/core/types/DataTypeManager.java
===================================================================
--- trunk/common-core/src/main/java/org/teiid/core/types/DataTypeManager.java 2011-10-18
19:02:39 UTC (rev 3568)
+++ trunk/common-core/src/main/java/org/teiid/core/types/DataTypeManager.java 2011-10-19
14:17:27 UTC (rev 3569)
@@ -75,6 +75,8 @@
* need to load the Class object, which may not be in the classpath. The
* advantage of the Class option is speed.
* </p>
+ *
+ * TODO: refactor the string/class/code into an enum
*/
public class DataTypeManager {
@@ -224,6 +226,62 @@
public static final Class<ClobType> CLOB = ClobType.class;
public static final Class<XMLType> XML = XMLType.class;
}
+
+ public static final class DefaultTypeCodes {
+ public static final int STRING = 0;
+ public static final int CHAR = 1;
+ public static final int BOOLEAN = 2;
+ public static final int BYTE = 3;
+ public static final int SHORT = 4;
+ public static final int INTEGER = 5;
+ public static final int LONG = 6;
+ public static final int BIGINTEGER = 7;
+ public static final int FLOAT = 8;
+ public static final int DOUBLE = 9;
+ public static final int BIGDECIMAL = 10;
+ public static final int DATE = 11;
+ public static final int TIME = 12;
+ public static final int TIMESTAMP = 13;
+ public static final int OBJECT = 14;
+ public static final int BLOB = 15;
+ public static final int CLOB = 16;
+ public static final int XML = 17;
+ public static final int NULL = 18;
+ }
+
+ private static final Map<Class<?>, Integer> typeMap = new
LinkedHashMap<Class<?>, Integer>(64);
+ private static final List<Class<?>> typeList;
+
+ static {
+ typeMap.put(DataTypeManager.DefaultDataClasses.STRING, DefaultTypeCodes.STRING);
+ typeMap.put(DataTypeManager.DefaultDataClasses.CHAR, DefaultTypeCodes.CHAR);
+ typeMap.put(DataTypeManager.DefaultDataClasses.BOOLEAN,
DefaultTypeCodes.BOOLEAN);
+ typeMap.put(DataTypeManager.DefaultDataClasses.BYTE, DefaultTypeCodes.BYTE);
+ typeMap.put(DataTypeManager.DefaultDataClasses.SHORT, DefaultTypeCodes.SHORT);
+ typeMap.put(DataTypeManager.DefaultDataClasses.INTEGER,
DefaultTypeCodes.INTEGER);
+ typeMap.put(DataTypeManager.DefaultDataClasses.LONG, DefaultTypeCodes.LONG);
+ typeMap.put(DataTypeManager.DefaultDataClasses.BIG_INTEGER,
DefaultTypeCodes.BIGINTEGER);
+ typeMap.put(DataTypeManager.DefaultDataClasses.FLOAT, DefaultTypeCodes.FLOAT);
+ typeMap.put(DataTypeManager.DefaultDataClasses.DOUBLE, DefaultTypeCodes.DOUBLE);
+ typeMap.put(DataTypeManager.DefaultDataClasses.BIG_DECIMAL,
DefaultTypeCodes.BIGDECIMAL);
+ typeMap.put(DataTypeManager.DefaultDataClasses.DATE, DefaultTypeCodes.DATE);
+ typeMap.put(DataTypeManager.DefaultDataClasses.TIME, DefaultTypeCodes.TIME);
+ typeMap.put(DataTypeManager.DefaultDataClasses.TIMESTAMP,
DefaultTypeCodes.TIMESTAMP);
+ typeMap.put(DataTypeManager.DefaultDataClasses.OBJECT, DefaultTypeCodes.OBJECT);
+ typeMap.put(DataTypeManager.DefaultDataClasses.BLOB, DefaultTypeCodes.BLOB);
+ typeMap.put(DataTypeManager.DefaultDataClasses.CLOB, DefaultTypeCodes.CLOB);
+ typeMap.put(DataTypeManager.DefaultDataClasses.XML, DefaultTypeCodes.XML);
+ typeMap.put(DataTypeManager.DefaultDataClasses.NULL, DefaultTypeCodes.NULL);
+ typeList = new ArrayList<Class<?>>(typeMap.keySet());
+ }
+
+ public static int getTypeCode(Class<?> source) {
+ return typeMap.get(source).intValue();
+ }
+
+ public static Class<?> getClass(int code) {
+ return typeList.get(code);
+ }
/**
* Doubly-nested map of String srcType --> Map of String targetType -->
Modified:
trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/FunctionModifier.java
===================================================================
---
trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/FunctionModifier.java 2011-10-18
19:02:39 UTC (rev 3568)
+++
trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/FunctionModifier.java 2011-10-19
14:17:27 UTC (rev 3569)
@@ -26,7 +26,7 @@
import java.util.List;
-import org.teiid.client.BatchSerializer;
+import org.teiid.core.types.DataTypeManager;
import org.teiid.language.Function;
import org.teiid.language.LanguageObject;
@@ -41,28 +41,28 @@
/*
* Public sharing part for the mapping between class and type in format of
Map<class->Integer>.
*/
- public static final int STRING = BatchSerializer.STRING;
- public static final int CHAR = BatchSerializer.CHAR;
- public static final int BOOLEAN = BatchSerializer.BOOLEAN;
- public static final int BYTE = BatchSerializer.BYTE;
- public static final int SHORT = BatchSerializer.SHORT;
- public static final int INTEGER = BatchSerializer.INTEGER;
- public static final int LONG = BatchSerializer.LONG;
- public static final int BIGINTEGER = BatchSerializer.BIGINTEGER;
- public static final int FLOAT = BatchSerializer.FLOAT;
- public static final int DOUBLE = BatchSerializer.DOUBLE;
- public static final int BIGDECIMAL = BatchSerializer.BIGDECIMAL;
- public static final int DATE = BatchSerializer.DATE;
- public static final int TIME = BatchSerializer.TIME;
- public static final int TIMESTAMP = BatchSerializer.TIMESTAMP;
- public static final int OBJECT = BatchSerializer.OBJECT;
- public static final int BLOB = BatchSerializer.BLOB;
- public static final int CLOB = BatchSerializer.CLOB;
- public static final int XML = BatchSerializer.XML;
- public static final int NULL = BatchSerializer.NULL;
+ public static final int STRING = DataTypeManager.DefaultTypeCodes.STRING;
+ public static final int CHAR = DataTypeManager.DefaultTypeCodes.CHAR;
+ public static final int BOOLEAN = DataTypeManager.DefaultTypeCodes.BOOLEAN;
+ public static final int BYTE = DataTypeManager.DefaultTypeCodes.BYTE;
+ public static final int SHORT = DataTypeManager.DefaultTypeCodes.SHORT;
+ public static final int INTEGER = DataTypeManager.DefaultTypeCodes.INTEGER;
+ public static final int LONG = DataTypeManager.DefaultTypeCodes.LONG;
+ public static final int BIGINTEGER = DataTypeManager.DefaultTypeCodes.BIGINTEGER;
+ public static final int FLOAT = DataTypeManager.DefaultTypeCodes.FLOAT;
+ public static final int DOUBLE = DataTypeManager.DefaultTypeCodes.DOUBLE;
+ public static final int BIGDECIMAL = DataTypeManager.DefaultTypeCodes.BIGDECIMAL;
+ public static final int DATE = DataTypeManager.DefaultTypeCodes.DATE;
+ public static final int TIME = DataTypeManager.DefaultTypeCodes.TIME;
+ public static final int TIMESTAMP = DataTypeManager.DefaultTypeCodes.TIMESTAMP;
+ public static final int OBJECT = DataTypeManager.DefaultTypeCodes.OBJECT;
+ public static final int BLOB = DataTypeManager.DefaultTypeCodes.BLOB;
+ public static final int CLOB = DataTypeManager.DefaultTypeCodes.CLOB;
+ public static final int XML = DataTypeManager.DefaultTypeCodes.XML;
+ public static final int NULL = DataTypeManager.DefaultTypeCodes.NULL;
public static int getCode(Class<?> source) {
- return BatchSerializer.getCode(source);
+ return DataTypeManager.getTypeCode(source);
}
/**