Skip to content

Instantly share code, notes, and snippets.

@Tom9729
Created November 9, 2014 19:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Tom9729/54d20869c9e6d1e44c32 to your computer and use it in GitHub Desktop.
Save Tom9729/54d20869c9e6d1e44c32 to your computer and use it in GitHub Desktop.
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