{
myConnection = ds.getConnection();
if (myConnection == null)
{
throw new PersistenceException("Got a null connection from data source " + ds.toString());
}
DatabaseMetaData dm = myConnection.getMetaData();
if (dm.supportsTransactions())
{
supportsTransactions = true;
}
else
{
supportsTransactions = false;
}
ResultSet rsx = dm.getTypeInfo();
while (rsx.next())
{
TypeMapEntry oneType = new TypeMapEntry();
//--- quikdraw: Changed the resultSet extraction from indexes to
// column names as defined in the Sun JavaDoc for JDBC.
oneType.setTypeName(rsx.getString("TYPE_NAME"));
oneType.setDataType(rsx.getShort("DATA_TYPE"));
try
{
oneType.setPrecision(rsx.getInt("PRECISION"));
}
catch (Exception e)
{
log.warn("Driver returned bad precision, setting to 0");
oneType.setPrecision(0);
}
oneType.setLiteralPrefix(rsx.getString("LITERAL_PREFIX"));
oneType.setLiteralSuffix(rsx.getString("LITERAL_SUFFIX"));
oneType.setCreateParams(rsx.getString("CREATE_PARAMS"));
oneType.setNullable(rsx.getShort("NULLABLE"));
oneType.setCaseSensitive(rsx.getBoolean("CASE_SENSITIVE"));
oneType.setSearchable(rsx.getShort("SEARCHABLE"));
oneType.setUnsigned(rsx.getBoolean("UNSIGNED_ATTRIBUTE"));
oneType.setFixedPrecision(rsx.getBoolean("FIXED_PREC_SCALE"));
oneType.setAutoIncrement(rsx.getBoolean("AUTO_INCREMENT"));
oneType.setLocalTypeName(rsx.getString("LOCAL_TYPE_NAME"));
oneType.setMinScale(rsx.getShort("MINIMUM_SCALE"));
oneType.setMaxScale(rsx.getShort("MAXIMUM_SCALE"));
//--- quikdraw: This was index 16, but the JavaDoc for DatabaseMetaData
// states the index for the Radix is 18.
oneType.setNumPrecRadix(rsx.getInt("NUM_PREC_RADIX"));
String typeAsString = typeToString(oneType.getDataType());
TypeMapEntry oldType = (TypeMapEntry) mapByType.get(typeAsString);
if (oldType == null)
{
mapByType.put(typeAsString, oneType);
}
else
{
dups.add(typeAsString);
}
}
}
catch (SQLException se)
{
throw new PersistenceException(se);
}
finally
{
try
{
if (myConnection != null)
{
myConnection.close();
}
}
catch (SQLException se)
{
throw new PersistenceException(se);
}
}
if (dups.size() > 0)
{