[teiid-commits] teiid SVN: r4392 - trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc.
teiid-commits at lists.jboss.org
teiid-commits at lists.jboss.org
Sat Sep 1 07:27:37 EDT 2012
Author: shawkins
Date: 2012-09-01 07:27:36 -0400 (Sat, 01 Sep 2012)
New Revision: 4392
Modified:
trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCMetdataProcessor.java
Log:
TEIID-2180 limiting the scope of when a full single shot scan of columns is performed
Modified: trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCMetdataProcessor.java
===================================================================
--- trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCMetdataProcessor.java 2012-09-01 02:29:04 UTC (rev 4391)
+++ trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCMetdataProcessor.java 2012-09-01 11:27:36 UTC (rev 4392)
@@ -100,6 +100,8 @@
private Pattern excludeTables;
private Pattern excludeProcedures;
+ private int excludedTables;
+
public void getConnectorMetadata(Connection conn, MetadataFactory metadataFactory)
throws SQLException, TranslatorException {
DatabaseMetaData metadata = conn.getMetaData();
@@ -235,6 +237,7 @@
String tableName = tables.getString(3);
String fullName = getFullyQualifiedName(tableCatalog, tableSchema, tableName);
if (excludeTables != null && excludeTables.matcher(fullName).matches()) {
+ excludedTables++;
continue;
}
Table table = metadataFactory.addTable(useFullSchemaName?fullName:tableName);
@@ -256,7 +259,24 @@
DatabaseMetaData metadata, Map<String, TableInfo> tableMap)
throws SQLException, TranslatorException {
LogManager.logDetail(LogConstants.CTX_CONNECTOR, "JDBCMetadataProcessor - Importing columns"); //$NON-NLS-1$
- ResultSet columns = metadata.getColumns(catalog, schemaPattern, tableNamePattern, null);
+ boolean singleSchema = schemaPattern != null && !schemaPattern.contains("_") && !schemaPattern.contains("%"); //$NON-NLS-1$ //$NON-NLS-2$
+ if ((excludeTables == null && schemaPattern == null && tableNamePattern == null) //getting everything
+ || (singleSchema && tableNamePattern == null &&
+ (excludeTables == null //getting all from a single schema
+ || tableMap.size() > Math.sqrt(tableMap.size() + excludedTables)))) { //not excluding enough from a single schema
+ ResultSet columns = metadata.getColumns(catalog, schemaPattern, tableNamePattern, null);
+ processColumns(metadataFactory, tableMap, columns);
+ } else {
+ for (TableInfo ti : new LinkedHashSet<TableInfo>(tableMap.values())) {
+ ResultSet columns = metadata.getColumns(catalog, ti.schema, ti.name, null);
+ processColumns(metadataFactory, tableMap, columns);
+ }
+ }
+ }
+
+ private void processColumns(MetadataFactory metadataFactory,
+ Map<String, TableInfo> tableMap, ResultSet columns)
+ throws SQLException, TranslatorException {
int rsColumns = columns.getMetaData().getColumnCount();
while (columns.next()) {
String tableCatalog = columns.getString(1);
More information about the teiid-commits
mailing list