Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2011-04-12 13:28:20 +0000
committerEike Stepper2011-04-12 13:28:20 +0000
commit9e3d6be89f206821c1017e7286bffb358e516270 (patch)
tree96adaa284996190c546761e62a4bfb4f2b64df93 /plugins/org.eclipse.net4j.db
parentb1b4f3b15c58cd53ae96714b3322ca02004a1363 (diff)
downloadcdo-9e3d6be89f206821c1017e7286bffb358e516270.tar.gz
cdo-9e3d6be89f206821c1017e7286bffb358e516270.tar.xz
cdo-9e3d6be89f206821c1017e7286bffb358e516270.zip
[342532] Net4j DBAdapter.validateTable() reads whole table, inefficient for H2
https://bugs.eclipse.org/bugs/show_bug.cgi?id=342532
Diffstat (limited to 'plugins/org.eclipse.net4j.db')
-rw-r--r--plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/spi/db/DBAdapter.java53
1 files changed, 36 insertions, 17 deletions
diff --git a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/spi/db/DBAdapter.java b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/spi/db/DBAdapter.java
index cf816acaba..783c095400 100644
--- a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/spi/db/DBAdapter.java
+++ b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/spi/db/DBAdapter.java
@@ -400,34 +400,53 @@ public abstract class DBAdapter implements IDBAdapter
*/
protected void validateTable(IDBTable table, Statement statement) throws DBException
{
- String sql = null;
+ int maxRows = 1;
try
{
- StringBuilder builder = new StringBuilder();
- builder.append("SELECT "); //$NON-NLS-1$
- appendFieldNames(builder, table);
- builder.append(" FROM "); //$NON-NLS-1$
- builder.append(table);
- sql = builder.toString();
+ maxRows = statement.getMaxRows();
+ statement.setMaxRows(1);
- if (TRACER.isEnabled())
+ String sql = null;
+
+ try
{
- TRACER.format("{0}", sql); //$NON-NLS-1$
- }
+ StringBuilder builder = new StringBuilder();
+ builder.append("SELECT "); //$NON-NLS-1$
+ appendFieldNames(builder, table);
+ builder.append(" FROM "); //$NON-NLS-1$
+ builder.append(table);
+ sql = builder.toString();
+
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("{0}", sql); //$NON-NLS-1$
+ }
- ResultSet resultSet = statement.executeQuery(sql);
- ResultSetMetaData metaData = resultSet.getMetaData();
- int columnCount = metaData.getColumnCount();
- if (columnCount != table.getFieldCount())
+ ResultSet resultSet = statement.executeQuery(sql);
+ ResultSetMetaData metaData = resultSet.getMetaData();
+ int columnCount = metaData.getColumnCount();
+ if (columnCount != table.getFieldCount())
+ {
+ throw new DBException("DBTable " + table + " has " + columnCount + " columns instead of " //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ + table.getFieldCount());
+ }
+ }
+ catch (SQLException ex)
+ {
+ throw new DBException("Problem with table " + table, ex, sql);
+ }
+ finally
{
- throw new DBException("DBTable " + table + " has " + columnCount + " columns instead of " //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- + table.getFieldCount());
+ if (maxRows != 1)
+ {
+ statement.setMaxRows(1);
+ }
}
}
catch (SQLException ex)
{
- throw new DBException("Problem with table " + table, ex, sql);
+ throw new DBException(ex);
}
}

Back to the top