[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