diff options
author | Eike Stepper | 2007-09-14 16:02:25 +0000 |
---|---|---|
committer | Eike Stepper | 2007-09-14 16:02:25 +0000 |
commit | b42106615879659c36254dd3da6d5bb3ab40aa22 (patch) | |
tree | 455f7fa66b20130d41d51c5fac36fd268288232e /plugins/org.eclipse.net4j.db/src/org | |
parent | bcb4bc5dca959e9bd56911c03e0e3fdf41b0fae0 (diff) | |
download | cdo-b42106615879659c36254dd3da6d5bb3ab40aa22.tar.gz cdo-b42106615879659c36254dd3da6d5bb3ab40aa22.tar.xz cdo-b42106615879659c36254dd3da6d5bb3ab40aa22.zip |
[202833] Horizontal Mapping Strategy
https://bugs.eclipse.org/bugs/show_bug.cgi?id=202833
Diffstat (limited to 'plugins/org.eclipse.net4j.db/src/org')
5 files changed, 53 insertions, 36 deletions
diff --git a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/DBUtil.java b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/DBUtil.java index 0d1e83dd42..502caa0e4c 100644 --- a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/DBUtil.java +++ b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/DBUtil.java @@ -186,6 +186,26 @@ public final class DBUtil } } + public static int update(Connection connection, String sql) + { + if (TRACER.isEnabled()) TRACER.trace(sql); + Statement statement = null; + + try + { + statement = connection.createStatement(); + return statement.executeUpdate(sql); + } + catch (SQLException ex) + { + throw new DBException(ex); + } + finally + { + close(statement); + } + } + public static void insertRow(Connection connection, IDBAdapter dbAdapter, IDBTable table, Object... args) throws DBException { @@ -214,29 +234,10 @@ public final class DBUtil builder.append(")"); String sql = builder.toString(); - if (TRACER.isEnabled()) + int count = update(connection, sql); + if (count == 0) { - TRACER.trace(sql); - } - - Statement statement = null; - - try - { - statement = connection.createStatement(); - int count = statement.executeUpdate(sql); - if (count == 0) - { - throw new DBException("No row inserted into table " + table); - } - } - catch (SQLException ex) - { - throw new DBException(ex); - } - finally - { - close(statement); + throw new DBException("No row inserted into table " + table); } } diff --git a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBAdapter.java b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBAdapter.java index 21fe31b976..2a13003c8d 100644 --- a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBAdapter.java +++ b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBAdapter.java @@ -16,6 +16,7 @@ import org.eclipse.net4j.util.registry.IRegistry; import java.sql.Connection; import java.sql.Driver; import java.sql.Statement; +import java.util.Set; /** * @author Eike Stepper @@ -30,9 +31,9 @@ public interface IDBAdapter public Driver getJDBCDriver(); - public void createTables(Iterable<? extends IDBTable> tables, Connection connection) throws DBException; + public Set<IDBTable> createTables(Iterable<? extends IDBTable> tables, Connection connection) throws DBException; - public void createTable(IDBTable table, Statement statement) throws DBException; + public boolean createTable(IDBTable table, Statement statement) throws DBException; public String mangleTableName(String name, int attempt); diff --git a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBSchema.java b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBSchema.java index bfd606fa9c..2f9e90b161 100644 --- a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBSchema.java +++ b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBSchema.java @@ -13,6 +13,7 @@ package org.eclipse.net4j.db; import javax.sql.DataSource; import java.sql.Connection; +import java.util.Set; /** * @author Eike Stepper @@ -25,9 +26,9 @@ public interface IDBSchema extends IDBElement public IDBTable[] getTables(); - public void create(IDBAdapter dbAdapter, Connection connection) throws DBException; + public Set<IDBTable> create(IDBAdapter dbAdapter, Connection connection) throws DBException; - public void create(IDBAdapter dbAdapter, ConnectionProvider connectionProvider) throws DBException; + public Set<IDBTable> create(IDBAdapter dbAdapter, ConnectionProvider connectionProvider) throws DBException; - public void create(IDBAdapter dbAdapter, DataSource dataSource) throws DBException; + public Set<IDBTable> create(IDBAdapter dbAdapter, DataSource dataSource) throws DBException; } diff --git a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBAdapter.java b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBAdapter.java index 0c06c8eb92..a2ad6c673f 100644 --- a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBAdapter.java +++ b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBAdapter.java @@ -24,6 +24,8 @@ import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; +import java.util.HashSet; +import java.util.Set; /** * @author Eike Stepper @@ -52,8 +54,9 @@ public abstract class DBAdapter implements IDBAdapter return version; } - public void createTables(Iterable<? extends IDBTable> tables, Connection connection) throws DBException + public Set<IDBTable> createTables(Iterable<? extends IDBTable> tables, Connection connection) throws DBException { + Set<IDBTable> createdTables = new HashSet<IDBTable>(); Statement statement = null; try @@ -61,7 +64,10 @@ public abstract class DBAdapter implements IDBAdapter statement = connection.createStatement(); for (IDBTable table : tables) { - createTable(table, statement); + if (createTable(table, statement)) + { + createdTables.add(table); + } } } catch (SQLException ex) @@ -72,16 +78,21 @@ public abstract class DBAdapter implements IDBAdapter { DBUtil.close(statement); } + + return createdTables; } - public void createTable(IDBTable table, Statement statement) throws DBException + public boolean createTable(IDBTable table, Statement statement) throws DBException { + boolean created = true; + try { doCreateTable((DBTable)table, statement); } catch (SQLException ex) { + created = false; if (TRACER.isEnabled()) { TRACER.trace("-- " + ex.getMessage()); @@ -89,6 +100,7 @@ public abstract class DBAdapter implements IDBAdapter } validateTable((DBTable)table, statement); + return created; } public String mangleTableName(String name, int attempt) diff --git a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBSchema.java b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBSchema.java index 8c7778a5c7..95a372c1e6 100644 --- a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBSchema.java +++ b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBSchema.java @@ -15,12 +15,14 @@ import org.eclipse.net4j.db.DBException; import org.eclipse.net4j.db.DBUtil; import org.eclipse.net4j.db.IDBAdapter; import org.eclipse.net4j.db.IDBSchema; +import org.eclipse.net4j.db.IDBTable; import javax.sql.DataSource; import java.sql.Connection; import java.util.HashMap; import java.util.Map; +import java.util.Set; /** * @author Eike Stepper @@ -86,19 +88,19 @@ public class DBSchema extends DBElement implements IDBSchema return locked = true; } - public void create(IDBAdapter dbAdapter, Connection connection) throws DBException + public Set<IDBTable> create(IDBAdapter dbAdapter, Connection connection) throws DBException { - dbAdapter.createTables(tables.values(), connection); + return dbAdapter.createTables(tables.values(), connection); } - public void create(IDBAdapter dbAdapter, ConnectionProvider connectionProvider) throws DBException + public Set<IDBTable> create(IDBAdapter dbAdapter, ConnectionProvider connectionProvider) throws DBException { Connection connection = null; try { connection = connectionProvider.getConnection(); - create(dbAdapter, connection); + return create(dbAdapter, connection); } finally { @@ -106,9 +108,9 @@ public class DBSchema extends DBElement implements IDBSchema } } - public void create(IDBAdapter dbAdapter, DataSource dataSource) throws DBException + public Set<IDBTable> create(IDBAdapter dbAdapter, DataSource dataSource) throws DBException { - create(dbAdapter, DBUtil.createConnectionProvider(dataSource)); + return create(dbAdapter, DBUtil.createConnectionProvider(dataSource)); } void assertUnlocked() throws DBException |