diff options
Diffstat (limited to 'plugins/org.eclipse.net4j.db/src/org/eclipse')
12 files changed, 205 insertions, 16 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 bbddeb55ef..f019877ea6 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 @@ -28,6 +28,7 @@ import org.eclipse.net4j.util.om.OMPlatform; import org.eclipse.net4j.util.om.monitor.OMMonitor; import org.eclipse.net4j.util.om.monitor.OMMonitor.Async; import org.eclipse.net4j.util.om.trace.ContextTracer; +import org.eclipse.net4j.util.security.IUserAware; import javax.sql.DataSource; @@ -371,7 +372,15 @@ public final class DBUtil public static IDBConnectionProvider createConnectionProvider(DataSource dataSource) { - return new DataSourceConnectionProvider(dataSource); + return createConnectionProvider(dataSource, null); + } + + /** + * @since 4.3 + */ + public static IDBConnectionProvider2 createConnectionProvider(DataSource dataSource, String user) + { + return new DataSourceConnectionProvider(dataSource, user); } /** @@ -584,6 +593,11 @@ public final class DBUtil } } + if (dbName == null && connection instanceof IUserAware) + { + dbName = ((IUserAware)connection).getUserID(); + } + tables = metaData.getTables(null, dbName, null, new String[] { "TABLE" }); //$NON-NLS-1$ while (tables.next()) { @@ -608,12 +622,13 @@ public final class DBUtil */ public static List<Exception> dropAllTables(Connection connection, String dbName) { - List<Exception> exceptions = new ArrayList<Exception>(); Statement statement = null; try { statement = connection.createStatement(); + List<Exception> exceptions = new ArrayList<Exception>(); + for (String tableName : getAllTableNames(connection, dbName)) { String sql = "DROP TABLE " + tableName; //$NON-NLS-1$ @@ -628,6 +643,8 @@ public final class DBUtil exceptions.add(ex); } } + + return exceptions; } catch (SQLException ex) { @@ -637,8 +654,6 @@ public final class DBUtil { close(statement); } - - return exceptions; } /** @@ -812,7 +827,7 @@ public final class DBUtil } catch (SQLException ex) { - throw new DBException(ex); + throw new DBException(ex.getMessage() + " --> " + sql, ex); } finally { 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 78df8c43b9..77eabe24ae 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 @@ -55,6 +55,11 @@ public interface IDBAdapter public DataSource createJDBCDataSource(); /** + * @since 4.3 + */ + public IDBConnectionProvider createConnectionProvider(DataSource dataSource); + + /** * @since 4.2 */ public IDBSchema readSchema(Connection connection, String name); @@ -144,4 +149,9 @@ public interface IDBAdapter * @since 4.2 */ public String sqlModifyField(IDBField field); + + /** + * @since 4.3 + */ + public int convertRowNumberToDriver(int row); } diff --git a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBConnection.java b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBConnection.java index 0867f424c5..c5901d711d 100644 --- a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBConnection.java +++ b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBConnection.java @@ -11,6 +11,7 @@ package org.eclipse.net4j.db; import org.eclipse.net4j.db.IDBPreparedStatement.ReuseProbability; +import org.eclipse.net4j.util.security.IUserAware; import java.sql.Connection; import java.sql.PreparedStatement; @@ -22,7 +23,7 @@ import java.sql.SQLException; * @noimplement This interface is not intended to be implemented by clients. * @noextend This interface is not intended to be extended by clients. */ -public interface IDBConnection extends Connection +public interface IDBConnection extends Connection, IUserAware { public IDBDatabase getDatabase(); diff --git a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBConnectionProvider2.java b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBConnectionProvider2.java new file mode 100644 index 0000000000..98731365f1 --- /dev/null +++ b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBConnectionProvider2.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2008, 2011, 2012 Eike Stepper (Berlin, Germany) and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Eike Stepper - initial API and implementation + */ +package org.eclipse.net4j.db; + +import org.eclipse.net4j.util.security.IUserAware; + +import javax.sql.DataSource; + +import java.sql.Connection; + +/** + * Provides a database {@link Connection connection}, roughly comparable with a {@link DataSource data source}. + * + * @author Eike Stepper + * @since 4.3 + */ +public interface IDBConnectionProvider2 extends IDBConnectionProvider, IUserAware +{ +} diff --git a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBDatabase.java b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBDatabase.java index 14cb7c2776..2eb04118e4 100644 --- a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBDatabase.java +++ b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBDatabase.java @@ -22,7 +22,7 @@ import org.eclipse.net4j.util.event.IEvent; * @noextend This interface is not intended to be extended by clients. * @since 4.2 */ -public interface IDBDatabase extends IContainer<IDBConnection>, IDBConnectionProvider, Closeable +public interface IDBDatabase extends IContainer<IDBConnection>, IDBConnectionProvider2, Closeable { public static final int DEFAULT_STATEMENT_CACHE_CAPACITY = 200; diff --git a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBConnection.java b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBConnection.java index 4128f3f852..5d6330e5da 100644 --- a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBConnection.java +++ b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBConnection.java @@ -62,10 +62,16 @@ public final class DBConnection extends DelegatingConnection implements IDBConne return database; } + public String getUserID() + { + return database.getUserID(); + } + @Override public void close() { DBUtil.close(getDelegate()); + // System.out.println("-- Open connections: " + --COUNT); closed = true; database.closeConnection(this); } @@ -208,4 +214,19 @@ public final class DBConnection extends DelegatingConnection implements IDBConne cache.clear(); } } + + public String convertString(DBPreparedStatement preparedStatement, int parameterIndex, String value) + { + return getDatabase().convertString(preparedStatement, parameterIndex, value); + } + + public String convertString(DBResultSet resultSet, int columnIndex, String value) + { + return getDatabase().convertString(resultSet, columnIndex, value); + } + + public String convertString(DBResultSet resultSet, String columnLabel, String value) + { + return getDatabase().convertString(resultSet, columnLabel, value); + } } diff --git a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBDatabase.java b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBDatabase.java index d0a4662e18..4bb00c09b1 100644 --- a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBDatabase.java +++ b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBDatabase.java @@ -24,6 +24,7 @@ import org.eclipse.net4j.spi.db.ddl.InternalDBSchema; import org.eclipse.net4j.util.WrappedException; import org.eclipse.net4j.util.container.SetContainer; import org.eclipse.net4j.util.event.Event; +import org.eclipse.net4j.util.security.IUserAware; import java.sql.Connection; import java.sql.SQLException; @@ -65,6 +66,16 @@ public final class DBDatabase extends SetContainer<IDBConnection> implements IDB activate(); } + public String getUserID() + { + if (connectionProvider instanceof IUserAware) + { + return ((IUserAware)connectionProvider).getUserID(); + } + + return null; + } + public DBAdapter getAdapter() { return adapter; @@ -251,6 +262,21 @@ public final class DBDatabase extends SetContainer<IDBConnection> implements IDB } } + public String convertString(DBPreparedStatement preparedStatement, int parameterIndex, String value) + { + return adapter.convertString(preparedStatement, parameterIndex, value); + } + + public String convertString(DBResultSet resultSet, int columnIndex, String value) + { + return adapter.convertString(resultSet, columnIndex, value); + } + + public String convertString(DBResultSet resultSet, String columnLabel, String value) + { + return adapter.convertString(resultSet, columnLabel, value); + } + /** * @author Eike Stepper */ diff --git a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBPreparedStatement.java b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBPreparedStatement.java index 4e1669e457..295fb361da 100644 --- a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBPreparedStatement.java +++ b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBPreparedStatement.java @@ -119,4 +119,21 @@ public final class DBPreparedStatement extends DelegatingPreparedStatement imple { throw new UnsupportedOperationException(); } + + @Override + public void setString(int parameterIndex, String value) throws SQLException + { + value = getConnection().convertString(this, parameterIndex, value); + super.setString(parameterIndex, value); + } + + public String convertString(DBResultSet resultSet, int columnIndex, String value) throws SQLException + { + return getConnection().convertString(resultSet, columnIndex, value); + } + + public String convertString(DBResultSet resultSet, String columnLabel, String value) throws SQLException + { + return getConnection().convertString(resultSet, columnLabel, value); + } } diff --git a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBResultSet.java b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBResultSet.java index b07a7894e9..5baf6bc23f 100644 --- a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBResultSet.java +++ b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBResultSet.java @@ -28,8 +28,22 @@ public final class DBResultSet extends DelegatingResultSet implements IDBResultS } @Override - public IDBPreparedStatement getStatement() throws SQLException + public DBPreparedStatement getStatement() throws SQLException { - return (IDBPreparedStatement)super.getStatement(); + return (DBPreparedStatement)super.getStatement(); + } + + @Override + public String getString(int columnIndex) throws SQLException + { + String value = super.getString(columnIndex); + return getStatement().convertString(this, columnIndex, value); + } + + @Override + public String getString(String columnLabel) throws SQLException + { + String value = super.getString(columnLabel); + return getStatement().convertString(this, columnLabel, value); } } diff --git a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DataSourceConnectionProvider.java b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DataSourceConnectionProvider.java index dfb603cbdc..53fca9c632 100644 --- a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DataSourceConnectionProvider.java +++ b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DataSourceConnectionProvider.java @@ -11,7 +11,7 @@ package org.eclipse.net4j.internal.db; import org.eclipse.net4j.db.DBException; -import org.eclipse.net4j.db.IDBConnectionProvider; +import org.eclipse.net4j.db.IDBConnectionProvider2; import javax.sql.DataSource; @@ -21,13 +21,16 @@ import java.sql.SQLException; /** * @author Eike Stepper */ -public class DataSourceConnectionProvider implements IDBConnectionProvider +public class DataSourceConnectionProvider implements IDBConnectionProvider2 { - private DataSource dataSource; + private final DataSource dataSource; - public DataSourceConnectionProvider(DataSource dataSource) + private final String user; + + public DataSourceConnectionProvider(DataSource dataSource, String user) { this.dataSource = dataSource; + this.user = user; } public DataSource getDataSource() @@ -35,6 +38,11 @@ public class DataSourceConnectionProvider implements IDBConnectionProvider return dataSource; } + public String getUserID() + { + return user; + } + public Connection getConnection() { try diff --git a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/ddl/DBSchema.java b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/ddl/DBSchema.java index f4cb4fe56c..c5cfc1cc88 100644 --- a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/ddl/DBSchema.java +++ b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/ddl/DBSchema.java @@ -286,7 +286,7 @@ public class DBSchema extends DBSchemaElement implements InternalDBSchema public Set<IDBTable> create(IDBAdapter dbAdapter, DataSource dataSource) throws DBException { - return create(dbAdapter, DBUtil.createConnectionProvider(dataSource)); + return create(dbAdapter, dbAdapter.createConnectionProvider(dataSource)); } public Set<IDBTable> create(IDBAdapter dbAdapter, IDBConnectionProvider connectionProvider) throws DBException @@ -316,7 +316,7 @@ public class DBSchema extends DBSchemaElement implements InternalDBSchema public void drop(IDBAdapter dbAdapter, DataSource dataSource) throws DBException { - drop(dbAdapter, DBUtil.createConnectionProvider(dataSource)); + drop(dbAdapter, dbAdapter.createConnectionProvider(dataSource)); } public void drop(IDBAdapter dbAdapter, IDBConnectionProvider connectionProvider) throws DBException 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 165da1dfe9..e140e5bbc9 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 @@ -15,6 +15,7 @@ import org.eclipse.net4j.db.DBException; import org.eclipse.net4j.db.DBType; import org.eclipse.net4j.db.DBUtil; import org.eclipse.net4j.db.IDBAdapter; +import org.eclipse.net4j.db.IDBConnectionProvider; import org.eclipse.net4j.db.ddl.IDBField; import org.eclipse.net4j.db.ddl.IDBIndex; import org.eclipse.net4j.db.ddl.IDBSchema; @@ -134,6 +135,14 @@ public abstract class DBAdapter implements IDBAdapter } /** + * @since 4.3 + */ + public IDBConnectionProvider createConnectionProvider(DataSource dataSource) + { + return DBUtil.createConnectionProvider(dataSource); + } + + /** * @since 4.2 */ public IDBSchema readSchema(Connection connection, String name) @@ -158,7 +167,7 @@ public abstract class DBAdapter implements IDBAdapter schemaName = null; } - ResultSet tables = metaData.getTables(null, schemaName, null, new String[] { "TABLE" }); + ResultSet tables = readTables(connection, metaData, schemaName); while (tables.next()) { String tableName = tables.getString(3); @@ -179,6 +188,15 @@ public abstract class DBAdapter implements IDBAdapter } /** + * @since 4.3 + */ + protected ResultSet readTables(Connection connection, DatabaseMetaData metaData, String schemaName) + throws SQLException + { + return metaData.getTables(null, schemaName, null, new String[] { "TABLE" }); + } + + /** * @since 4.2 */ protected void readFields(Connection connection, IDBTable table) throws SQLException @@ -698,6 +716,30 @@ public abstract class DBAdapter implements IDBAdapter } /** + * @since 4.3 + */ + public String convertString(PreparedStatement preparedStatement, int parameterIndex, String value) + { + return value; + } + + /** + * @since 4.3 + */ + public String convertString(ResultSet resultSet, int columnIndex, String value) + { + return value; + } + + /** + * @since 4.3 + */ + public String convertString(ResultSet resultSet, String columnLabel, String value) + { + return value; + } + + /** * @since 2.0 */ protected void doCreateTable(IDBTable table, Statement statement) throws SQLException @@ -1043,6 +1085,14 @@ public abstract class DBAdapter implements IDBAdapter } /** + * @since 4.3 + */ + public int convertRowNumberToDriver(int row) + { + return row; + } + + /** * @since 4.2 */ public String format(PreparedStatement stmt) |