Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.net4j.db/src/org/eclipse')
-rw-r--r--plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/DBUtil.java25
-rw-r--r--plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBAdapter.java10
-rw-r--r--plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBConnection.java3
-rw-r--r--plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBConnectionProvider2.java27
-rw-r--r--plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBDatabase.java2
-rw-r--r--plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBConnection.java21
-rw-r--r--plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBDatabase.java26
-rw-r--r--plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBPreparedStatement.java17
-rw-r--r--plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBResultSet.java18
-rw-r--r--plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DataSourceConnectionProvider.java16
-rw-r--r--plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/ddl/DBSchema.java4
-rw-r--r--plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/spi/db/DBAdapter.java52
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)

Back to the top