Created
November 9, 2014 19:18
-
-
Save Tom9729/54d20869c9e6d1e44c32 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/api/src/main/java/org/teiid/language/visitor/SQLStringVisitor.java b/api/src/main/java/org/teiid/language/visitor/SQLStringVisitor.java | |
index eacedb5..92abc54 100644 | |
--- a/api/src/main/java/org/teiid/language/visitor/SQLStringVisitor.java | |
+++ b/api/src/main/java/org/teiid/language/visitor/SQLStringVisitor.java | |
@@ -41,7 +41,9 @@ import org.teiid.language.SQLConstants.NonReserved; | |
import org.teiid.language.SQLConstants.Tokens; | |
import org.teiid.language.SortSpecification.Ordering; | |
import org.teiid.metadata.AbstractMetadataRecord; | |
+import org.teiid.metadata.Column; | |
import org.teiid.metadata.Table; | |
+import org.teiid.translator.TypeFacility; | |
/** | |
@@ -815,18 +817,15 @@ public class SQLStringVisitor extends AbstractLanguageVisitor { | |
} | |
private boolean isGeometry(Expression expr) { | |
- if (expr instanceof MetadataReference) { | |
- MetadataReference mr = (MetadataReference) expr; | |
- AbstractMetadataRecord amr = mr.getMetadataObject(); | |
- if (amr != null) { | |
- String p = amr.getProperty("teiid-rel:blob-type", false); | |
- if (p != null) { | |
- BlobType.Type type = BlobType.Type.valueOf(p); | |
- return type.equals(BlobType.Type.WKB); | |
- } | |
+ String runtimeType = null; | |
+ if (expr instanceof ColumnReference) { | |
+ ColumnReference cr = (ColumnReference) expr; | |
+ Column c = cr.getMetadataObject(); | |
+ if (c != null) { | |
+ runtimeType = c.getRuntimeType(); | |
} | |
} | |
- return false; | |
+ return TypeFacility.RUNTIME_NAMES.GEOMETRY.equals(runtimeType); | |
} | |
public void visit(SubqueryComparison obj) { | |
diff --git a/api/src/main/java/org/teiid/metadata/MetadataFactory.java b/api/src/main/java/org/teiid/metadata/MetadataFactory.java | |
index 9d8c940..b6894fe 100644 | |
--- a/api/src/main/java/org/teiid/metadata/MetadataFactory.java | |
+++ b/api/src/main/java/org/teiid/metadata/MetadataFactory.java | |
@@ -231,6 +231,7 @@ public class MetadataFactory implements Serializable { | |
arrayDimensions++; | |
type = type.substring(0, type.length()-2); | |
} | |
+ //type = type.split("\\.")[0]; | |
Datatype datatype = dataTypes.get(type); | |
if (datatype == null && (!allowNull || !DataTypeManager.DefaultDataTypes.NULL.equals(type))) { | |
//TODO: potentially we want to check the enterprise types, but at | |
diff --git a/api/src/main/java/org/teiid/translator/TypeFacility.java b/api/src/main/java/org/teiid/translator/TypeFacility.java | |
index 4997435..16ad7cd 100644 | |
--- a/api/src/main/java/org/teiid/translator/TypeFacility.java | |
+++ b/api/src/main/java/org/teiid/translator/TypeFacility.java | |
@@ -113,6 +113,7 @@ public class TypeFacility { | |
public static final String CLOB = DataTypeManager.DefaultDataTypes.CLOB; | |
public static final String XML = DataTypeManager.DefaultDataTypes.XML; | |
public static final String VARBINARY = DataTypeManager.DefaultDataTypes.VARBINARY; | |
+ public static final String GEOMETRY = DataTypeManager.DefaultDataTypes.BLOB + "." + BlobType.Type.WKB; | |
} | |
/** | |
diff --git a/common-core/src/main/java/org/teiid/core/types/DataTypeManager.java b/common-core/src/main/java/org/teiid/core/types/DataTypeManager.java | |
index 9c94e42..3e3bfc2 100644 | |
--- a/common-core/src/main/java/org/teiid/core/types/DataTypeManager.java | |
+++ b/common-core/src/main/java/org/teiid/core/types/DataTypeManager.java | |
@@ -417,6 +417,9 @@ public class DataTypeManager { | |
return DefaultDataClasses.NULL; | |
} | |
+ // Trim off subtype. | |
+ name = name.split("\\.")[0]; | |
+ | |
// Hope this is the correct case (as it will be if using the constants | |
Class<?> dataTypeClass = dataTypeNames.get(name); | |
diff --git a/common-core/src/main/java/org/teiid/core/types/JDBCSQLTypeInfo.java b/common-core/src/main/java/org/teiid/core/types/JDBCSQLTypeInfo.java | |
index 38ceb7d..1586702 100644 | |
--- a/common-core/src/main/java/org/teiid/core/types/JDBCSQLTypeInfo.java | |
+++ b/common-core/src/main/java/org/teiid/core/types/JDBCSQLTypeInfo.java | |
@@ -131,6 +131,8 @@ public final class JDBCSQLTypeInfo { | |
if (typeName == null) { | |
return Types.NULL; | |
} | |
+ | |
+ typeName = typeName.split("\\n")[0]; | |
TypeInfo sqlType = NAME_TO_TYPEINFO.get(typeName); | |
diff --git a/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCMetdataProcessor.java b/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCMetdataProcessor.java | |
index f9eadcd..60f3558 100644 | |
--- a/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCMetdataProcessor.java | |
+++ b/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCMetdataProcessor.java | |
@@ -384,14 +384,9 @@ public class JDBCMetdataProcessor implements MetadataProcessor<Connection>{ | |
int type = columns.getInt(5); | |
String typeName = columns.getString(6); | |
int columnSize = columns.getInt(7); | |
- String[] runtimeType = getRuntimeType(type, typeName, columnSize).split("\\."); | |
+ String runtimeType = getRuntimeType(type, typeName, columnSize); | |
//note that the resultset is already ordered by position, so we can rely on just adding columns in order | |
- Column column = metadataFactory.addColumn(columnName, runtimeType[0], table); | |
- | |
- if (runtimeType.length > 1 && TypeFacility.RUNTIME_NAMES.BLOB.equals(runtimeType[0])) { | |
- column.setProperty("teiid-rel:blob-type", BlobType.Type.WKB.name()); | |
- } | |
- | |
+ Column column = metadataFactory.addColumn(columnName, runtimeType, table); | |
column.setNameInSource(quoteName(columnName)); | |
column.setPrecision(columnSize); | |
column.setLength(columnSize); | |
diff --git a/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/mysql/MySQLExecutionFactory.java b/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/mysql/MySQLExecutionFactory.java | |
index 9f84656..ef02fcd 100644 | |
--- a/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/mysql/MySQLExecutionFactory.java | |
+++ b/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/mysql/MySQLExecutionFactory.java | |
@@ -399,7 +399,7 @@ public class MySQLExecutionFactory extends JDBCExecutionFactory { | |
@Override | |
protected String getRuntimeType(int type, String typeName, int precision) { | |
if ("geometry".equalsIgnoreCase(typeName)) { | |
- return TypeFacility.RUNTIME_NAMES.BLOB + "." + BlobType.Type.WKB; | |
+ return TypeFacility.RUNTIME_NAMES.GEOMETRY; | |
} | |
return super.getRuntimeType(type, typeName, precision); | |
} | |
diff --git a/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/oracle/OracleExecutionFactory.java b/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/oracle/OracleExecutionFactory.java | |
index da7d6a6..94675d2 100644 | |
--- a/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/oracle/OracleExecutionFactory.java | |
+++ b/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/oracle/OracleExecutionFactory.java | |
@@ -903,7 +903,7 @@ public class OracleExecutionFactory extends JDBCExecutionFactory { | |
return TypeFacility.RUNTIME_NAMES.STRING; | |
} | |
if ("MDSYS.SDO_GEOMETRY".equalsIgnoreCase(typeName)) { | |
- return TypeFacility.RUNTIME_NAMES.BLOB + "." + BlobType.Type.WKB; | |
+ return TypeFacility.RUNTIME_NAMES.GEOMETRY; | |
} | |
return super.getRuntimeType(type, typeName, precision); | |
} | |
diff --git a/engine/src/main/resources/org/teiid/metadata/types.dat b/engine/src/main/resources/org/teiid/metadata/types.dat | |
index f703f53..6128e44 100644 | |
--- a/engine/src/main/resources/org/teiid/metadata/types.dat | |
+++ b/engine/src/main/resources/org/teiid/metadata/types.dat | |
@@ -4,6 +4,7 @@ mmuuid:569dfa00-c456-1e24-9b01-c8207cd53eb7|||anySimpleType|false|java.math.BigD | |
mmuuid:f2249740-a078-1e26-9b08-d6079ebe1f0d|||decimal|false|java.math.BigDecimal|2147483647|bigdecimal|bigdecimal||2147483647|10|bigdecimal|2147483647|Searchable|true|Basic|Atomic | |
mmuuid:822b9a40-a066-1e26-9b08-d6079ebe1f0d|||decimal|false|java.math.BigInteger|2147483647|biginteger|biginteger||2147483647|10|biginteger|0|Searchable|true|Basic|Atomic | |
mmuuid:5a793100-1836-1ed0-ba0f-f2334f5fbf95|||base64Binary|false|org.teiid.core.types.BlobType|2147483647|blob|blob||0||blob|0|Unsearchable||Basic|Atomic | |
+mmuuid:5a793100-1836-1ed0-ba0f-f2334f5fbf96|||base64Binary|false|org.teiid.core.types.BlobType|2147483647|blob.WKB|blob.WKB||0||blob.WKB|0|Unsearchable||Basic|Atomic | |
mmuuid:62472700-a064-1e26-9b08-d6079ebe1f0d|||string|true|java.lang.Character|1|char|char||0||char|0|Searchable||Basic|Atomic | |
mmuuid:559646c0-4941-1ece-b22b-f49159d22ad3|||string|true|org.teiid.core.types.ClobType|2147483647|clob|clob||0||clob|0|Like_Only||Basic|Atomic | |
mmuuid:051a0640-b4e8-1e26-9f33-b76fd9d5fa79|||base64Binary|false|java.lang.Object|2147483647|object|object||0||object|0|Unsearchable||Basic|Atomic |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment