Fix problems with depot being unable to create a table called domains on postgres.

This commit is contained in:
Ray J. Greenwell
2015-02-19 15:01:44 -08:00
parent 837daa2116
commit e9dd7b1277
4 changed files with 27 additions and 8 deletions
@@ -1022,25 +1022,25 @@ public class DepotMarshaller<T extends PersistentRecord> implements QueryMarshal
return ctx.invoke(new Fetcher.Trivial<TableMetaData>() { return ctx.invoke(new Fetcher.Trivial<TableMetaData>() {
public TableMetaData invoke (PersistenceContext ctx, Connection conn, public TableMetaData invoke (PersistenceContext ctx, Connection conn,
DatabaseLiaison dl) throws SQLException { DatabaseLiaison dl) throws SQLException {
return new TableMetaData(conn.getMetaData(), tableName); return new TableMetaData(conn.getMetaData(), dl, tableName);
} }
}); });
} }
public TableMetaData (DatabaseMetaData meta, String tableName) public TableMetaData (DatabaseMetaData meta, DatabaseLiaison dl, String tableName)
throws SQLException throws SQLException
{ {
tableExists = meta.getTables(null, null, tableName, null).next(); tableExists = meta.getTables(null, dl.getSchemaName(), tableName, null).next();
if (!tableExists) { if (!tableExists) {
return; return;
} }
ResultSet rs = meta.getColumns(null, null, tableName, "%"); ResultSet rs = meta.getColumns(null, dl.getSchemaName(), tableName, "%");
while (rs.next()) { while (rs.next()) {
tableColumns.add(rs.getString("COLUMN_NAME")); tableColumns.add(rs.getString("COLUMN_NAME"));
} }
rs = meta.getIndexInfo(null, null, tableName, false, false); rs = meta.getIndexInfo(null, dl.getSchemaName(), tableName, false, false);
while (rs.next()) { while (rs.next()) {
String indexName = rs.getString("INDEX_NAME"); String indexName = rs.getString("INDEX_NAME");
Set<String> set = indexColumns.get(indexName); Set<String> set = indexColumns.get(indexName);
@@ -1060,7 +1060,7 @@ public class DepotMarshaller<T extends PersistentRecord> implements QueryMarshal
} }
} }
rs = meta.getPrimaryKeys(null, null, tableName); rs = meta.getPrimaryKeys(null, dl.getSchemaName(), tableName);
while (rs.next()) { while (rs.next()) {
pkName = rs.getString("PK_NAME"); pkName = rs.getString("PK_NAME");
pkColumns.add(rs.getString("COLUMN_NAME")); pkColumns.add(rs.getString("COLUMN_NAME"));
@@ -85,7 +85,7 @@ public abstract class BaseLiaison implements DatabaseLiaison
public boolean tableContainsColumn (Connection conn, String table, String column) public boolean tableContainsColumn (Connection conn, String table, String column)
throws SQLException throws SQLException
{ {
ResultSet rs = conn.getMetaData().getColumns(null, null, table, column); ResultSet rs = conn.getMetaData().getColumns(null, getSchemaName(), table, column);
while (rs.next()) { while (rs.next()) {
String tname = rs.getString("TABLE_NAME"); String tname = rs.getString("TABLE_NAME");
String cname = rs.getString("COLUMN_NAME"); String cname = rs.getString("COLUMN_NAME");
@@ -100,7 +100,7 @@ public abstract class BaseLiaison implements DatabaseLiaison
public boolean tableContainsIndex (Connection conn, String table, String index) public boolean tableContainsIndex (Connection conn, String table, String index)
throws SQLException throws SQLException
{ {
ResultSet rs = conn.getMetaData().getIndexInfo(null, null, table, false, true); ResultSet rs = conn.getMetaData().getIndexInfo(null, getSchemaName(), table, false, true);
while (rs.next()) { while (rs.next()) {
String tname = rs.getString("TABLE_NAME"); String tname = rs.getString("TABLE_NAME");
String iname = rs.getString("INDEX_NAME"); String iname = rs.getString("INDEX_NAME");
@@ -298,6 +298,12 @@ public abstract class BaseLiaison implements DatabaseLiaison
return true; return true;
} }
// from DatabaseLiaison
public String getSchemaName ()
{
return null;
}
// from DatabaseLiaison // from DatabaseLiaison
public abstract String tableSQL (String table); public abstract String tableSQL (String table);
@@ -203,6 +203,11 @@ public interface DatabaseLiaison
public boolean dropTable (Connection conn, String name) public boolean dropTable (Connection conn, String name)
throws SQLException; throws SQLException;
/**
* Get the schema name to pass to DatabaseMetaData calls, which may be null.
*/
public String getSchemaName ();
/** /**
* Returns the proper SQL to identify a table. Some databases require table names to be quoted. * Returns the proper SQL to identify a table. Some databases require table names to be quoted.
*/ */
@@ -119,6 +119,14 @@ public class PostgreSQLLiaison extends BaseLiaison
return true; return true;
} }
@Override
public String getSchemaName ()
{
// TODO: is this global to all postgres? Should this be discovered by asking
// DatabaseMetaData.getSchemas()?
return "public";
}
// from DatabaseLiaison // from DatabaseLiaison
public String columnSQL (String column) public String columnSQL (String column)
{ {