You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ddlutils-dev@db.apache.org by to...@apache.org on 2006/01/17 01:26:38 UTC
svn commit: r369615 -
/db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DumpMetadataTask.java
Author: tomdz
Date: Mon Jan 16 16:26:33 2006
New Revision: 369615
URL: http://svn.apache.org/viewcvs?rev=369615&view=rev
Log:
Made the dump metadata task more robust
Modified:
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DumpMetadataTask.java
Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DumpMetadataTask.java
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DumpMetadataTask.java?rev=369615&r1=369614&r2=369615&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DumpMetadataTask.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DumpMetadataTask.java Mon Jan 16 16:26:33 2006
@@ -29,6 +29,7 @@
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
+import java.util.StringTokenizer;
import org.apache.commons.collections.set.ListOrderedSet;
import org.apache.commons.dbcp.BasicDataSource;
@@ -66,6 +67,8 @@
private String _procedurePattern = "%";
/** The pattern for reading all columns. */
private String _columnPattern = "%";
+ /** The tables types to read; <code>null</code> or an empty list means that we shall read every type. */
+ private String[] _tableTypes = null;
/**
* Adds the data source to use for accessing the database.
@@ -138,6 +141,32 @@
}
/**
+ * Sets the table types as a comma-separated list.
+ *
+ * @param tableTypes The table types
+ */
+ public void setTableTypes(String tableTypes)
+ {
+ ArrayList types = new ArrayList();
+
+ if (tableTypes != null)
+ {
+ StringTokenizer tokenizer = new StringTokenizer(tableTypes, ",");
+
+ while (tokenizer.hasMoreTokens())
+ {
+ String token = tokenizer.nextToken().trim();
+
+ if (token.length() > 0)
+ {
+ types.add(token);
+ }
+ }
+ }
+ _tableTypes = (String[])types.toArray(new String[types.size()]);
+ }
+
+ /**
* {@inheritDoc}
*/
public void execute() throws BuildException
@@ -371,53 +400,85 @@
*/
private void dumpCatalogsAndSchemas(Element parent, DatabaseMetaData metaData) throws SQLException
{
- ArrayList tableTypeList = new ArrayList();
+ String[] tableTypes = _tableTypes;
- // First we need the list of supported table types
- ResultSet result = metaData.getTableTypes();
-
- while (result.next())
+ if ((tableTypes == null) || (tableTypes.length == 0))
{
- tableTypeList.add(getString(result, "TABLE_TYPE"));
- }
- result.close();
+ // First we need the list of supported table types
+ ArrayList tableTypeList = new ArrayList();
+
+ ResultSet result = metaData.getTableTypes();
- String[] tableTypes = (String[])tableTypeList.toArray(new String[tableTypeList.size()]);
- Element catalogsElem = parent.addElement("catalogs");
+ try
+ {
+ while (result.next())
+ {
+ tableTypeList.add(getString(result, "TABLE_TYPE"));
+ }
+ }
+ finally
+ {
+ if (result != null)
+ {
+ result.close();
+ }
+ }
+
+ tableTypes = (String[])tableTypeList.toArray(new String[tableTypeList.size()]);
+ }
// Next we determine and dump the catalogs
- result = metaData.getCatalogs();
+ Element catalogsElem = parent.addElement("catalogs");
+ ResultSet result = metaData.getCatalogs();
- while (result.next())
+ try
{
- String catalogName = getString(result, "TABLE_CAT");
-
- if ((catalogName != null) && (catalogName.length() > 0))
+ while (result.next())
{
- Element catalogElem = catalogsElem.addElement("catalog");
-
- catalogElem.addAttribute("name", catalogName);
+ String catalogName = getString(result, "TABLE_CAT");
+
+ if ((catalogName != null) && (catalogName.length() > 0))
+ {
+ Element catalogElem = catalogsElem.addElement("catalog");
+
+ catalogElem.addAttribute("name", catalogName);
+ }
+ }
+ }
+ finally
+ {
+ if (result != null)
+ {
+ result.close();
}
}
- result.close();
Element schemasElem = parent.addElement("schemas");
// We also dump the schemas (some dbs only support one of the two)
result = metaData.getSchemas();
- while (result.next())
+ try
{
- String schemaName = getString(result, "TABLE_SCHEM");
-
- if ((schemaName != null) && (schemaName.length() > 0))
+ while (result.next())
{
- Element schemaElem = schemasElem.addElement("schema");
-
- schemaElem.addAttribute("name", schemaName);
+ String schemaName = getString(result, "TABLE_SCHEM");
+
+ if ((schemaName != null) && (schemaName.length() > 0))
+ {
+ Element schemaElem = schemasElem.addElement("schema");
+
+ schemaElem.addAttribute("name", schemaName);
+ }
+ }
+ }
+ finally
+ {
+ if (result != null)
+ {
+ result.close();
}
}
- result.close();
dumpTables(parent, metaData, tableTypes);
}
@@ -446,33 +507,53 @@
Element tablesElem = parent.addElement("tables");
Set columns = getColumnsInResultSet(result);
- while (result.next())
+ try
{
- String tableName = getString(result, "TABLE_NAME");
-
- if ((tableName == null) || (tableName.length() == 0))
+ while (result.next())
{
- continue;
- }
-
- Element tableElem = tablesElem.addElement("table");
+ String tableName = getString(result, "TABLE_NAME");
+
+ if ((tableName == null) || (tableName.length() == 0))
+ {
+ continue;
+ }
- tableElem.addAttribute("name", tableName);
- addStringAttribute(result, columns, "TABLE_CAT", tableElem, "catalog");
- addStringAttribute(result, columns, "TABLE_SCHEM", tableElem, "schema");
- addStringAttribute(result, columns, "TABLE_TYPE", tableElem, "type");
- addStringAttribute(result, columns, "REMARKS", tableElem, "remarks");
- addStringAttribute(result, columns, "TYPE_NAME", tableElem, "typeName");
- addStringAttribute(result, columns, "TYPE_CAT", tableElem, "typeCatalog");
- addStringAttribute(result, columns, "TYPE_SCHEM", tableElem, "typeSchema");
- addStringAttribute(result, columns, "SELF_REFERENCING_COL_NAME", tableElem, "identifierColumn");
- addStringAttribute(result, columns, "REF_GENERATION", tableElem, "identifierGeneration");
+ log("Reading table "+tableName, Project.MSG_INFO);
- dumpColumns(tableElem, metaData, _catalogPattern, _schemaPattern, tableName);
- dumpPKs(tableElem, metaData, _catalogPattern, _schemaPattern, tableName);
- dumpVersionColumns(tableElem, metaData, _catalogPattern, _schemaPattern, tableName);
- dumpFKs(tableElem, metaData, _catalogPattern, _schemaPattern, tableName);
- dumpIndices(tableElem, metaData, _catalogPattern, _schemaPattern, tableName);
+ Element tableElem = tablesElem.addElement("table");
+ String catalog = getString(result, "TABLE_CAT");
+ String schema = getString(result, "TABLE_SCHEM");
+
+ tableElem.addAttribute("name", tableName);
+ if (catalog != null)
+ {
+ tableElem.addAttribute("catalog", catalog);
+ }
+ if (schema != null)
+ {
+ tableElem.addAttribute("schema", schema);
+ }
+ addStringAttribute(result, columns, "TABLE_TYPE", tableElem, "type");
+ addStringAttribute(result, columns, "REMARKS", tableElem, "remarks");
+ addStringAttribute(result, columns, "TYPE_NAME", tableElem, "typeName");
+ addStringAttribute(result, columns, "TYPE_CAT", tableElem, "typeCatalog");
+ addStringAttribute(result, columns, "TYPE_SCHEM", tableElem, "typeSchema");
+ addStringAttribute(result, columns, "SELF_REFERENCING_COL_NAME", tableElem, "identifierColumn");
+ addStringAttribute(result, columns, "REF_GENERATION", tableElem, "identifierGeneration");
+
+ dumpColumns(tableElem, metaData, catalog, schema, tableName);
+ dumpPKs(tableElem, metaData, catalog, schema, tableName);
+ dumpVersionColumns(tableElem, metaData, catalog, schema, tableName);
+ dumpFKs(tableElem, metaData, catalog, schema, tableName);
+ dumpIndices(tableElem, metaData, catalog, schema, tableName);
+ }
+ }
+ finally
+ {
+ if (result != null)
+ {
+ result.close();
+ }
}
}
@@ -501,63 +582,73 @@
Set columns = getColumnsInResultSet(result);
- while (result.next())
+ try
{
- String columnName = getString(result, "COLUMN_NAME");
-
- if ((columnName == null) || (columnName.length() == 0))
- {
- continue;
- }
-
- Element columnElem = tableElem.addElement("column");
-
- columnElem.addAttribute("name", columnName);
- addIntAttribute(result, columns, "DATA_TYPE", columnElem, "typeCode");
- addStringAttribute(result, columns, "TYPE_NAME", columnElem, "type");
- addIntAttribute(result, columns, "COLUMN_SIZE", columnElem, "size");
- addIntAttribute(result, columns, "DECIMAL_DIGITS", columnElem, "digits");
- addIntAttribute(result, columns, "NUM_PREC_RADIX", columnElem, "precision");
- if (columns.contains("NULLABLE"))
- {
- switch (result.getInt("NULLABLE"))
- {
- case DatabaseMetaData.columnNoNulls:
- columnElem.addAttribute("nullable", "false");
- break;
- case DatabaseMetaData.columnNullable:
- columnElem.addAttribute("nullable", "true");
- break;
- default:
- columnElem.addAttribute("nullable", "unknown");
- break;
- }
- }
- addStringAttribute(result, columns, "REMARKS", columnElem, "remarks");
- addStringAttribute(result, columns, "COLUMN_DEF", columnElem, "defaultValue");
- addIntAttribute(result, columns, "CHAR_OCTET_LENGTH", columnElem, "maxByteLength");
- addIntAttribute(result, columns, "ORDINAL_POSITION", columnElem, "index");
- if (columns.contains("IS_NULLABLE"))
+ while (result.next())
{
- String value = getString(result, "IS_NULLABLE");
-
- if ("no".equalsIgnoreCase(value))
+ String columnName = getString(result, "COLUMN_NAME");
+
+ if ((columnName == null) || (columnName.length() == 0))
{
- columnElem.addAttribute("isNullable", "false");
+ continue;
}
- else if ("yes".equalsIgnoreCase(value))
+
+ Element columnElem = tableElem.addElement("column");
+
+ columnElem.addAttribute("name", columnName);
+ addIntAttribute(result, columns, "DATA_TYPE", columnElem, "typeCode");
+ addStringAttribute(result, columns, "TYPE_NAME", columnElem, "type");
+ addIntAttribute(result, columns, "COLUMN_SIZE", columnElem, "size");
+ addIntAttribute(result, columns, "DECIMAL_DIGITS", columnElem, "digits");
+ addIntAttribute(result, columns, "NUM_PREC_RADIX", columnElem, "precision");
+ if (columns.contains("NULLABLE"))
{
- columnElem.addAttribute("isNullable", "true");
+ switch (result.getInt("NULLABLE"))
+ {
+ case DatabaseMetaData.columnNoNulls:
+ columnElem.addAttribute("nullable", "false");
+ break;
+ case DatabaseMetaData.columnNullable:
+ columnElem.addAttribute("nullable", "true");
+ break;
+ default:
+ columnElem.addAttribute("nullable", "unknown");
+ break;
+ }
}
- else
+ addStringAttribute(result, columns, "REMARKS", columnElem, "remarks");
+ addStringAttribute(result, columns, "COLUMN_DEF", columnElem, "defaultValue");
+ addIntAttribute(result, columns, "CHAR_OCTET_LENGTH", columnElem, "maxByteLength");
+ addIntAttribute(result, columns, "ORDINAL_POSITION", columnElem, "index");
+ if (columns.contains("IS_NULLABLE"))
{
- columnElem.addAttribute("isNullable", "unknown");
+ String value = getString(result, "IS_NULLABLE");
+
+ if ("no".equalsIgnoreCase(value))
+ {
+ columnElem.addAttribute("isNullable", "false");
+ }
+ else if ("yes".equalsIgnoreCase(value))
+ {
+ columnElem.addAttribute("isNullable", "true");
+ }
+ else
+ {
+ columnElem.addAttribute("isNullable", "unknown");
+ }
}
+ addStringAttribute(result, columns, "SCOPE_CATLOG", columnElem, "refCatalog");
+ addStringAttribute(result, columns, "SCOPE_SCHEMA", columnElem, "refSchema");
+ addStringAttribute(result, columns, "SCOPE_TABLE", columnElem, "refTable");
+ addShortAttribute(result, columns, "SOURCE_DATA_TYPE", columnElem, "sourceTypeCode");
+ }
+ }
+ finally
+ {
+ if (result != null)
+ {
+ result.close();
}
- addStringAttribute(result, columns, "SCOPE_CATLOG", columnElem, "refCatalog");
- addStringAttribute(result, columns, "SCOPE_SCHEMA", columnElem, "refSchema");
- addStringAttribute(result, columns, "SCOPE_TABLE", columnElem, "refTable");
- addShortAttribute(result, columns, "SOURCE_DATA_TYPE", columnElem, "sourceTypeCode");
}
}
@@ -586,20 +677,30 @@
Set columns = getColumnsInResultSet(result);
- while (result.next())
+ try
{
- String columnName = getString(result, "COLUMN_NAME");
-
- if ((columnName == null) || (columnName.length() == 0))
+ while (result.next())
{
- continue;
+ String columnName = getString(result, "COLUMN_NAME");
+
+ if ((columnName == null) || (columnName.length() == 0))
+ {
+ continue;
+ }
+
+ Element pkElem = tableElem.addElement("primaryKey");
+
+ pkElem.addAttribute("column", columnName);
+ addStringAttribute(result, columns, "PK_NAME", pkElem, "name");
+ addShortAttribute(result, columns, "KEY_SEQ", pkElem, "sequenceNumberInPK");
+ }
+ }
+ finally
+ {
+ if (result != null)
+ {
+ result.close();
}
-
- Element pkElem = tableElem.addElement("primaryKey");
-
- pkElem.addAttribute("column", columnName);
- addStringAttribute(result, columns, "PK_NAME", pkElem, "name");
- addShortAttribute(result, columns, "KEY_SEQ", pkElem, "sequenceNumberInPK");
}
}
@@ -628,39 +729,49 @@
Set columns = getColumnsInResultSet(result);
- while (result.next())
+ try
{
- String columnName = getString(result, "COLUMN_NAME");
-
- if ((columnName == null) || (columnName.length() == 0))
- {
- continue;
- }
-
- Element columnElem = tableElem.addElement("versionedColumn");
-
- columnElem.addAttribute("column", columnName);
- addIntAttribute(result, columns, "DATA_TYPE", columnElem, "typeCode");
- addStringAttribute(result, columns, "TYPE_NAME", columnElem, "type");
- addIntAttribute(result, columns, "BUFFER_LENGTH", columnElem, "size");
- addIntAttribute(result, columns, "COLUMN_SIZE", columnElem, "precision");
- addShortAttribute(result, columns, "DECIMAL_DIGITS", columnElem, "scale");
- if (columns.contains("PSEUDO_COLUMN"))
+ while (result.next())
{
- switch (result.getShort("PSEUDO_COLUMN"))
+ String columnName = getString(result, "COLUMN_NAME");
+
+ if ((columnName == null) || (columnName.length() == 0))
+ {
+ continue;
+ }
+
+ Element columnElem = tableElem.addElement("versionedColumn");
+
+ columnElem.addAttribute("column", columnName);
+ addIntAttribute(result, columns, "DATA_TYPE", columnElem, "typeCode");
+ addStringAttribute(result, columns, "TYPE_NAME", columnElem, "type");
+ addIntAttribute(result, columns, "BUFFER_LENGTH", columnElem, "size");
+ addIntAttribute(result, columns, "COLUMN_SIZE", columnElem, "precision");
+ addShortAttribute(result, columns, "DECIMAL_DIGITS", columnElem, "scale");
+ if (columns.contains("PSEUDO_COLUMN"))
{
- case DatabaseMetaData.versionColumnPseudo:
- columnElem.addAttribute("columnType", "pseudo column");
- break;
- case DatabaseMetaData.versionColumnNotPseudo:
- columnElem.addAttribute("columnType", "real column");
- break;
- default:
- columnElem.addAttribute("columnType", "unknown");
- break;
+ switch (result.getShort("PSEUDO_COLUMN"))
+ {
+ case DatabaseMetaData.versionColumnPseudo:
+ columnElem.addAttribute("columnType", "pseudo column");
+ break;
+ case DatabaseMetaData.versionColumnNotPseudo:
+ columnElem.addAttribute("columnType", "real column");
+ break;
+ default:
+ columnElem.addAttribute("columnType", "unknown");
+ break;
+ }
}
}
}
+ finally
+ {
+ if (result != null)
+ {
+ result.close();
+ }
+ }
}
/**
@@ -688,78 +799,88 @@
Set columns = getColumnsInResultSet(result);
- while (result.next())
+ try
{
- Element fkElem = tableElem.addElement("foreignKey");
-
- addStringAttribute(result, columns, "FK_NAME", fkElem, "name");
- addStringAttribute(result, columns, "PK_NAME", fkElem, "primaryKeyName");
- addStringAttribute(result, columns, "PKCOLUMN_NAME", fkElem, "column");
- addStringAttribute(result, columns, "FKTABLE_CAT", fkElem, "foreignCatalog");
- addStringAttribute(result, columns, "FKTABLE_SCHEM", fkElem, "foreignSchema");
- addStringAttribute(result, columns, "FKTABLE_NAME", fkElem, "foreignTable");
- addStringAttribute(result, columns, "FKCOLUMN_NAME", fkElem, "foreignColumn");
- addShortAttribute(result, columns, "KEY_SEQ", fkElem, "sequenceNumberInFK");
- if (columns.contains("UPDATE_RULE"))
- {
- switch (result.getShort("UPDATE_RULE"))
- {
- case DatabaseMetaData.importedKeyNoAction:
- fkElem.addAttribute("updateRule", "no action");
- break;
- case DatabaseMetaData.importedKeyCascade:
- fkElem.addAttribute("updateRule", "cascade PK change");
- break;
- case DatabaseMetaData.importedKeySetNull:
- fkElem.addAttribute("updateRule", "set FK to NULL");
- break;
- case DatabaseMetaData.importedKeySetDefault:
- fkElem.addAttribute("updateRule", "set FK to default");
- break;
- default:
- fkElem.addAttribute("updateRule", "unknown");
- break;
- }
- }
- if (columns.contains("DELETE_RULE"))
- {
- switch (result.getShort("DELETE_RULE"))
- {
- case DatabaseMetaData.importedKeyNoAction:
- case DatabaseMetaData.importedKeyRestrict:
- fkElem.addAttribute("deleteRule", "no action");
- break;
- case DatabaseMetaData.importedKeyCascade:
- fkElem.addAttribute("deleteRule", "cascade PK change");
- break;
- case DatabaseMetaData.importedKeySetNull:
- fkElem.addAttribute("deleteRule", "set FK to NULL");
- break;
- case DatabaseMetaData.importedKeySetDefault:
- fkElem.addAttribute("deleteRule", "set FK to default");
- break;
- default:
- fkElem.addAttribute("deleteRule", "unknown");
- break;
- }
- }
- if (columns.contains("DEFERRABILITY"))
- {
- switch (result.getShort("DEFERRABILITY"))
- {
- case DatabaseMetaData.importedKeyInitiallyDeferred:
- fkElem.addAttribute("deferrability", "initially deferred");
- break;
- case DatabaseMetaData.importedKeyInitiallyImmediate:
- fkElem.addAttribute("deferrability", "immediately deferred");
- break;
- case DatabaseMetaData.importedKeyNotDeferrable:
- fkElem.addAttribute("deferrability", "not deferred");
- break;
- default:
- fkElem.addAttribute("deferrability", "unknown");
- break;
+ while (result.next())
+ {
+ Element fkElem = tableElem.addElement("foreignKey");
+
+ addStringAttribute(result, columns, "FK_NAME", fkElem, "name");
+ addStringAttribute(result, columns, "PK_NAME", fkElem, "primaryKeyName");
+ addStringAttribute(result, columns, "PKCOLUMN_NAME", fkElem, "column");
+ addStringAttribute(result, columns, "FKTABLE_CAT", fkElem, "foreignCatalog");
+ addStringAttribute(result, columns, "FKTABLE_SCHEM", fkElem, "foreignSchema");
+ addStringAttribute(result, columns, "FKTABLE_NAME", fkElem, "foreignTable");
+ addStringAttribute(result, columns, "FKCOLUMN_NAME", fkElem, "foreignColumn");
+ addShortAttribute(result, columns, "KEY_SEQ", fkElem, "sequenceNumberInFK");
+ if (columns.contains("UPDATE_RULE"))
+ {
+ switch (result.getShort("UPDATE_RULE"))
+ {
+ case DatabaseMetaData.importedKeyNoAction:
+ fkElem.addAttribute("updateRule", "no action");
+ break;
+ case DatabaseMetaData.importedKeyCascade:
+ fkElem.addAttribute("updateRule", "cascade PK change");
+ break;
+ case DatabaseMetaData.importedKeySetNull:
+ fkElem.addAttribute("updateRule", "set FK to NULL");
+ break;
+ case DatabaseMetaData.importedKeySetDefault:
+ fkElem.addAttribute("updateRule", "set FK to default");
+ break;
+ default:
+ fkElem.addAttribute("updateRule", "unknown");
+ break;
+ }
+ }
+ if (columns.contains("DELETE_RULE"))
+ {
+ switch (result.getShort("DELETE_RULE"))
+ {
+ case DatabaseMetaData.importedKeyNoAction:
+ case DatabaseMetaData.importedKeyRestrict:
+ fkElem.addAttribute("deleteRule", "no action");
+ break;
+ case DatabaseMetaData.importedKeyCascade:
+ fkElem.addAttribute("deleteRule", "cascade PK change");
+ break;
+ case DatabaseMetaData.importedKeySetNull:
+ fkElem.addAttribute("deleteRule", "set FK to NULL");
+ break;
+ case DatabaseMetaData.importedKeySetDefault:
+ fkElem.addAttribute("deleteRule", "set FK to default");
+ break;
+ default:
+ fkElem.addAttribute("deleteRule", "unknown");
+ break;
+ }
}
+ if (columns.contains("DEFERRABILITY"))
+ {
+ switch (result.getShort("DEFERRABILITY"))
+ {
+ case DatabaseMetaData.importedKeyInitiallyDeferred:
+ fkElem.addAttribute("deferrability", "initially deferred");
+ break;
+ case DatabaseMetaData.importedKeyInitiallyImmediate:
+ fkElem.addAttribute("deferrability", "immediately deferred");
+ break;
+ case DatabaseMetaData.importedKeyNotDeferrable:
+ fkElem.addAttribute("deferrability", "not deferred");
+ break;
+ default:
+ fkElem.addAttribute("deferrability", "unknown");
+ break;
+ }
+ }
+ }
+ }
+ finally
+ {
+ if (result != null)
+ {
+ result.close();
}
}
}
@@ -789,56 +910,66 @@
Set columns = getColumnsInResultSet(result);
- while (result.next())
+ try
{
- Element indexElem = tableElem.addElement("index");
-
- addStringAttribute(result, columns, "INDEX_NAME", indexElem, "name");
- addBooleanAttribute(result, columns, "NON_UNIQUE", indexElem, "nonUnique");
- addStringAttribute(result, columns, "INDEX_QUALIFIER", indexElem, "indexCatalog");
- if (columns.contains("TYPE"))
- {
- switch (result.getShort("TYPE"))
- {
- case DatabaseMetaData.tableIndexStatistic:
- indexElem.addAttribute("type", "table statistics");
- break;
- case DatabaseMetaData.tableIndexClustered:
- indexElem.addAttribute("type", "clustered");
- break;
- case DatabaseMetaData.tableIndexHashed:
- indexElem.addAttribute("type", "hashed");
- break;
- case DatabaseMetaData.tableIndexOther:
- indexElem.addAttribute("type", "other");
- break;
- default:
- indexElem.addAttribute("type", "unknown");
- break;
- }
- }
- addStringAttribute(result, columns, "COLUMN_NAME", indexElem, "column");
- addShortAttribute(result, columns, "ORDINAL_POSITION", indexElem, "sequenceNumberInIndex");
- if (columns.contains("ASC_OR_DESC"))
+ while (result.next())
{
- String value = getString(result, "ASC_OR_DESC");
-
- if ("A".equalsIgnoreCase(value))
- {
- indexElem.addAttribute("sortOrder", "ascending");
- }
- else if ("D".equalsIgnoreCase(value))
+ Element indexElem = tableElem.addElement("index");
+
+ addStringAttribute(result, columns, "INDEX_NAME", indexElem, "name");
+ addBooleanAttribute(result, columns, "NON_UNIQUE", indexElem, "nonUnique");
+ addStringAttribute(result, columns, "INDEX_QUALIFIER", indexElem, "indexCatalog");
+ if (columns.contains("TYPE"))
{
- indexElem.addAttribute("sortOrder", "descending");
+ switch (result.getShort("TYPE"))
+ {
+ case DatabaseMetaData.tableIndexStatistic:
+ indexElem.addAttribute("type", "table statistics");
+ break;
+ case DatabaseMetaData.tableIndexClustered:
+ indexElem.addAttribute("type", "clustered");
+ break;
+ case DatabaseMetaData.tableIndexHashed:
+ indexElem.addAttribute("type", "hashed");
+ break;
+ case DatabaseMetaData.tableIndexOther:
+ indexElem.addAttribute("type", "other");
+ break;
+ default:
+ indexElem.addAttribute("type", "unknown");
+ break;
+ }
}
- else
+ addStringAttribute(result, columns, "COLUMN_NAME", indexElem, "column");
+ addShortAttribute(result, columns, "ORDINAL_POSITION", indexElem, "sequenceNumberInIndex");
+ if (columns.contains("ASC_OR_DESC"))
{
- indexElem.addAttribute("sortOrder", "unknown");
+ String value = getString(result, "ASC_OR_DESC");
+
+ if ("A".equalsIgnoreCase(value))
+ {
+ indexElem.addAttribute("sortOrder", "ascending");
+ }
+ else if ("D".equalsIgnoreCase(value))
+ {
+ indexElem.addAttribute("sortOrder", "descending");
+ }
+ else
+ {
+ indexElem.addAttribute("sortOrder", "unknown");
+ }
}
+ addIntAttribute(result, columns, "CARDINALITY", indexElem, "cardinality");
+ addIntAttribute(result, columns, "PAGES", indexElem, "pages");
+ addStringAttribute(result, columns, "FILTER_CONDITION", indexElem, "filter");
+ }
+ }
+ finally
+ {
+ if (result != null)
+ {
+ result.close();
}
- addIntAttribute(result, columns, "CARDINALITY", indexElem, "cardinality");
- addIntAttribute(result, columns, "PAGES", indexElem, "pages");
- addStringAttribute(result, columns, "FILTER_CONDITION", indexElem, "filter");
}
}
@@ -865,41 +996,53 @@
Element proceduresElem = parent.addElement("procedures");
Set columns = getColumnsInResultSet(result);
- while (result.next())
+ try
{
- String procedureName = getString(result, "PROCEDURE_NAME");
-
- if ((procedureName == null) || (procedureName.length() == 0))
+ while (result.next())
{
- continue;
- }
+ String procedureName = getString(result, "PROCEDURE_NAME");
+
+ if ((procedureName == null) || (procedureName.length() == 0))
+ {
+ continue;
+ }
- Element procedureElem = proceduresElem.addElement("procedure");
+ log("Reading procedure "+procedureName, Project.MSG_INFO);
- procedureElem.addAttribute("name", procedureName);
- addStringAttribute(result, columns, "PROCEDURE_CAT", procedureElem, "catalog");
- addStringAttribute(result, columns, "PROCEDURE_SCHEM", procedureElem, "schema");
- addStringAttribute(result, columns, "REMARKS", procedureElem, "remarks");
- if (columns.contains("PROCEDURE_TYPE"))
- {
- switch (result.getShort("PROCEDURE_TYPE"))
+ Element procedureElem = proceduresElem.addElement("procedure");
+
+ procedureElem.addAttribute("name", procedureName);
+ addStringAttribute(result, columns, "PROCEDURE_CAT", procedureElem, "catalog");
+ addStringAttribute(result, columns, "PROCEDURE_SCHEM", procedureElem, "schema");
+ addStringAttribute(result, columns, "REMARKS", procedureElem, "remarks");
+ if (columns.contains("PROCEDURE_TYPE"))
{
- case DatabaseMetaData.procedureReturnsResult:
- procedureElem.addAttribute("type", "returns result");
- break;
- case DatabaseMetaData.procedureNoResult:
- procedureElem.addAttribute("type", "doesn't return result");
- break;
- case DatabaseMetaData.procedureResultUnknown:
- procedureElem.addAttribute("type", "may return result");
- break;
- default:
- procedureElem.addAttribute("type", "unknown");
- break;
+ switch (result.getShort("PROCEDURE_TYPE"))
+ {
+ case DatabaseMetaData.procedureReturnsResult:
+ procedureElem.addAttribute("type", "returns result");
+ break;
+ case DatabaseMetaData.procedureNoResult:
+ procedureElem.addAttribute("type", "doesn't return result");
+ break;
+ case DatabaseMetaData.procedureResultUnknown:
+ procedureElem.addAttribute("type", "may return result");
+ break;
+ default:
+ procedureElem.addAttribute("type", "unknown");
+ break;
+ }
}
+
+ dumpProcedure(procedureElem, metaData, "%", "%", procedureName);
+ }
+ }
+ finally
+ {
+ if (result != null)
+ {
+ result.close();
}
-
- dumpProcedure(procedureElem, metaData, "%", "%", procedureName);
}
}
@@ -928,65 +1071,75 @@
Set columns = getColumnsInResultSet(result);
- while (result.next())
+ try
{
- String columnName = getString(result, "COLUMN_NAME");
-
- if ((columnName == null) || (columnName.length() == 0))
- {
- continue;
- }
-
- Element columnElem = procedureElem.addElement("column");
-
- columnElem.addAttribute("name", columnName);
- if (columns.contains("COLUMN_TYPE"))
+ while (result.next())
{
- switch (result.getShort("COLUMN_TYPE"))
+ String columnName = getString(result, "COLUMN_NAME");
+
+ if ((columnName == null) || (columnName.length() == 0))
{
- case DatabaseMetaData.procedureColumnIn:
- columnElem.addAttribute("type", "in parameter");
- break;
- case DatabaseMetaData.procedureColumnInOut:
- columnElem.addAttribute("type", "in/out parameter");
- break;
- case DatabaseMetaData.procedureColumnOut:
- columnElem.addAttribute("type", "out parameter");
- break;
- case DatabaseMetaData.procedureColumnReturn:
- columnElem.addAttribute("type", "return value");
- break;
- case DatabaseMetaData.procedureColumnResult:
- columnElem.addAttribute("type", "result column in ResultSet");
- break;
- default:
- columnElem.addAttribute("type", "unknown");
- break;
+ continue;
}
- }
-
- addIntAttribute(result, columns, "DATA_TYPE", columnElem, "typeCode");
- addStringAttribute(result, columns, "TYPE_NAME", columnElem, "type");
- addIntAttribute(result, columns, "LENGTH", columnElem, "length");
- addIntAttribute(result, columns, "PRECISION", columnElem, "precision");
- addShortAttribute(result, columns, "SCALE", columnElem, "short");
- addShortAttribute(result, columns, "RADIX", columnElem, "radix");
- if (columns.contains("NULLABLE"))
- {
- switch (result.getInt("NULLABLE"))
+
+ Element columnElem = procedureElem.addElement("column");
+
+ columnElem.addAttribute("name", columnName);
+ if (columns.contains("COLUMN_TYPE"))
+ {
+ switch (result.getShort("COLUMN_TYPE"))
+ {
+ case DatabaseMetaData.procedureColumnIn:
+ columnElem.addAttribute("type", "in parameter");
+ break;
+ case DatabaseMetaData.procedureColumnInOut:
+ columnElem.addAttribute("type", "in/out parameter");
+ break;
+ case DatabaseMetaData.procedureColumnOut:
+ columnElem.addAttribute("type", "out parameter");
+ break;
+ case DatabaseMetaData.procedureColumnReturn:
+ columnElem.addAttribute("type", "return value");
+ break;
+ case DatabaseMetaData.procedureColumnResult:
+ columnElem.addAttribute("type", "result column in ResultSet");
+ break;
+ default:
+ columnElem.addAttribute("type", "unknown");
+ break;
+ }
+ }
+
+ addIntAttribute(result, columns, "DATA_TYPE", columnElem, "typeCode");
+ addStringAttribute(result, columns, "TYPE_NAME", columnElem, "type");
+ addIntAttribute(result, columns, "LENGTH", columnElem, "length");
+ addIntAttribute(result, columns, "PRECISION", columnElem, "precision");
+ addShortAttribute(result, columns, "SCALE", columnElem, "short");
+ addShortAttribute(result, columns, "RADIX", columnElem, "radix");
+ if (columns.contains("NULLABLE"))
{
- case DatabaseMetaData.procedureNoNulls:
- columnElem.addAttribute("nullable", "false");
- break;
- case DatabaseMetaData.procedureNullable:
- columnElem.addAttribute("nullable", "true");
- break;
- default:
- columnElem.addAttribute("nullable", "unknown");
- break;
+ switch (result.getInt("NULLABLE"))
+ {
+ case DatabaseMetaData.procedureNoNulls:
+ columnElem.addAttribute("nullable", "false");
+ break;
+ case DatabaseMetaData.procedureNullable:
+ columnElem.addAttribute("nullable", "true");
+ break;
+ default:
+ columnElem.addAttribute("nullable", "unknown");
+ break;
+ }
}
+ addStringAttribute(result, columns, "REMARKS", columnElem, "remarks");
+ }
+ }
+ finally
+ {
+ if (result != null)
+ {
+ result.close();
}
- addStringAttribute(result, columns, "REMARKS", columnElem, "remarks");
}
}