[teiid-commits] teiid SVN: r1618 - trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc.
teiid-commits at lists.jboss.org
teiid-commits at lists.jboss.org
Thu Dec 3 11:02:44 EST 2009
Author: shawkins
Date: 2009-12-03 11:02:44 -0500 (Thu, 03 Dec 2009)
New Revision: 1618
Modified:
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCMetdataProcessor.java
Log:
TEIID-891 changing the default for correcting unsigned types to true and adding logic to quote name in source.
Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCMetdataProcessor.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCMetdataProcessor.java 2009-12-03 16:01:52 UTC (rev 1617)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCMetdataProcessor.java 2009-12-03 16:02:44 UTC (rev 1618)
@@ -46,6 +46,8 @@
import org.teiid.connector.metadata.runtime.BaseColumn.NullType;
import org.teiid.connector.metadata.runtime.ProcedureParameter.Type;
+import com.metamatrix.core.util.StringUtil;
+
/**
* Reads from {@link DatabaseMetaData} and creates metadata through the {@link MetadataFactory}.
*/
@@ -79,11 +81,13 @@
private boolean importIndexes = true;
private boolean importApproximateIndexes = true;
private boolean importProcedures = true;
- private boolean widenUnsingedTypes;
+ private boolean widenUnsingedTypes = true;
+ private boolean quoteNameInSource = true;
//TODO add an option to not fully qualify name in source
private ConnectorLogger logger;
private Set<String> unsignedTypes = new HashSet<String>();
+ private String quoteString;
public JDBCMetdataProcessor(ConnectorLogger logger) {
this.logger = logger;
@@ -93,6 +97,11 @@
throws SQLException, ConnectorException {
DatabaseMetaData metadata = conn.getMetaData();
+ quoteString = metadata.getIdentifierQuoteString();
+ if (quoteString != null && quoteString.trim().length() == 0) {
+ quoteString = null;
+ }
+
if (widenUnsingedTypes) {
ResultSet rs = metadata.getTableTypes();
while (rs.next()) {
@@ -130,9 +139,9 @@
String procedureCatalog = procedures.getString(1);
String procedureSchema = procedures.getString(2);
String procedureName = procedures.getString(3);
- String fullProcedureName = getTableName(procedureCatalog, procedureSchema, procedureName);
+ String fullProcedureName = getFullyQualifiedName(procedureCatalog, procedureSchema, procedureName);
ProcedureRecordImpl procedure = metadataFactory.addProcedure(useFullSchemaName?fullProcedureName:procedureName);
- procedure.setNameInSource(fullProcedureName);
+ procedure.setNameInSource(getFullyQualifiedName(procedureCatalog, procedureSchema, procedureName, true));
ResultSet columns = metadata.getProcedureColumns(catalog, procedureSchema, procedureName, null);
while (columns.next()) {
String columnName = columns.getString(4);
@@ -188,9 +197,9 @@
String tableCatalog = tables.getString(1);
String tableSchema = tables.getString(2);
String tableName = tables.getString(3);
- String fullName = getTableName(tableCatalog, tableSchema, tableName);
+ String fullName = getFullyQualifiedName(tableCatalog, tableSchema, tableName);
Table table = metadataFactory.addTable(useFullSchemaName?fullName:tableName);
- table.setNameInSource(fullName);
+ table.setNameInSource(getFullyQualifiedName(tableCatalog, tableSchema, tableName, true));
table.setSupportsUpdate(true);
String remarks = tables.getString(5);
table.setAnnotation(remarks);
@@ -212,7 +221,7 @@
String tableCatalog = columns.getString(1);
String tableSchema = columns.getString(2);
String tableName = columns.getString(3);
- String fullTableName = getTableName(tableCatalog, tableSchema, tableName);
+ String fullTableName = getFullyQualifiedName(tableCatalog, tableSchema, tableName);
TableInfo tableInfo = tableMap.get(fullTableName);
if (tableInfo == null) {
continue;
@@ -223,6 +232,7 @@
type = checkForUnsigned(type, typeName);
//note that the resultset is already ordered by position, so we can rely on just adding columns in order
Column column = metadataFactory.addColumn(columnName, TypeFacility.getDataTypeNameFromSQLType(type), tableInfo.table);
+ column.setNameInSource(quoteName(columnName));
column.setNativeType(columns.getString(6));
column.setRadix(columns.getInt(10));
column.setNullType(NullType.values()[columns.getShort(11)]);
@@ -236,6 +246,13 @@
}
columns.close();
}
+
+ private String quoteName(String name) {
+ if (quoteNameInSource) {
+ return quoteString + StringUtil.replaceAll(name, quoteString, quoteString + quoteString) + quoteString;
+ }
+ return name;
+ }
private void getPrimaryKeys(MetadataFactory metadataFactory,
DatabaseMetaData metadata, Map<String, TableInfo> tableMap)
@@ -291,7 +308,7 @@
String tableCatalog = fks.getString(1);
String tableSchema = fks.getString(2);
String tableName = fks.getString(3);
- String fullTableName = getTableName(tableCatalog, tableSchema, tableName);
+ String fullTableName = getFullyQualifiedName(tableCatalog, tableSchema, tableName);
pkTable = tableMap.get(fullTableName);
if (pkTable == null) {
throw new ConnectorException(JDBCPlugin.Util.getString("JDBCMetadataProcessor.cannot_find_primary", fullTableName)); //$NON-NLS-1$
@@ -350,14 +367,17 @@
}
}
- private static String getTableName(String tableCatalog, String tableSchema,
- String tableName) {
- String fullName = tableName;
- if (tableSchema != null && tableSchema.length() > 0) {
- fullName = tableSchema + AbstractMetadataRecord.NAME_DELIM_CHAR + fullName;
+ private String getFullyQualifiedName(String catalogName, String schemaName, String objectName) {
+ return getFullyQualifiedName(catalogName, schemaName, objectName, false);
+ }
+
+ private String getFullyQualifiedName(String catalogName, String schemaName, String objectName, boolean quoted) {
+ String fullName = (quoted?quoteName(objectName):objectName);
+ if (schemaName != null && schemaName.length() > 0) {
+ fullName = (quoted?quoteName(schemaName):schemaName) + AbstractMetadataRecord.NAME_DELIM_CHAR + fullName;
}
- if (tableCatalog != null && tableCatalog.length() > 0) {
- fullName = tableCatalog + AbstractMetadataRecord.NAME_DELIM_CHAR + fullName;
+ if (catalogName != null && catalogName.length() > 0) {
+ fullName = (quoted?quoteName(catalogName):catalogName) + AbstractMetadataRecord.NAME_DELIM_CHAR + fullName;
}
return fullName;
}
@@ -405,5 +425,9 @@
public void setWidenUnsingedTypes(boolean widenUnsingedTypes) {
this.widenUnsingedTypes = widenUnsingedTypes;
}
+
+ public void setQuoteNameInSource(boolean quoteIdentifiers) {
+ this.quoteNameInSource = quoteIdentifiers;
+ }
}
More information about the teiid-commits
mailing list