Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2007-08-15 10:21:47 +0000
committerEike Stepper2007-08-15 10:21:47 +0000
commit76185a225a698cb986b0c15ce41e0c8d1f3ca20b (patch)
tree79b330c10293400044de11c24eeb2d59d620969f /plugins/org.eclipse.net4j.db
parent6434426a789a12a3aed34ea1ff37719fc14e69fc (diff)
downloadcdo-76185a225a698cb986b0c15ce41e0c8d1f3ca20b.tar.gz
cdo-76185a225a698cb986b0c15ce41e0c8d1f3ca20b.tar.xz
cdo-76185a225a698cb986b0c15ce41e0c8d1f3ca20b.zip
*** empty log message ***
Diffstat (limited to 'plugins/org.eclipse.net4j.db')
-rw-r--r--plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/DBUtil.java63
-rw-r--r--plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBField.java25
-rw-r--r--plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBAdapter.java42
-rw-r--r--plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBSchema.java12
-rw-r--r--plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/bundle/OM.java67
5 files changed, 144 insertions, 65 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 5b9deacc56..0274b3fe33 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
@@ -12,6 +12,7 @@ package org.eclipse.net4j.db;
import org.eclipse.net4j.internal.db.DBSchema;
import org.eclipse.net4j.internal.db.bundle.OM;
+import org.eclipse.net4j.internal.util.om.trace.ContextTracer;
import org.eclipse.net4j.util.ReflectUtil;
import javax.sql.DataSource;
@@ -21,6 +22,7 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
+import java.util.Arrays;
import java.util.Map;
/**
@@ -28,6 +30,8 @@ import java.util.Map;
*/
public final class DBUtil
{
+ private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG_SQL, DBUtil.class);
+
private DBUtil()
{
}
@@ -124,22 +128,27 @@ public final class DBUtil
builder.append(field.getTable());
String sql = builder.toString();
- Statement stmt = null;
- ResultSet rs = null;
+ if (TRACER.isEnabled())
+ {
+ TRACER.trace(sql);
+ }
+
+ Statement statement = null;
+ ResultSet resultSet = null;
try
{
- stmt = connection.createStatement();
+ statement = connection.createStatement();
try
{
- rs = stmt.executeQuery(sql);
- if (!rs.first())
+ resultSet = statement.executeQuery(sql);
+ if (!resultSet.next())
{
return 0;
}
- return rs.getInt(1);
+ return resultSet.getInt(1);
}
catch (SQLException ex)
{
@@ -147,7 +156,7 @@ public final class DBUtil
}
finally
{
- close(rs);
+ close(resultSet);
}
}
catch (SQLException ex)
@@ -156,16 +165,17 @@ public final class DBUtil
}
finally
{
- close(stmt);
+ close(statement);
}
}
- public static void insertRow(Connection connection, IDBTable table, Object... args) throws DBException
+ public static void insert(Connection connection, IDBTable table, Object... args) throws DBException
{
IDBField[] fields = table.getFields();
if (fields.length != args.length)
{
- throw new IllegalArgumentException("fields.length != args.length");
+ throw new IllegalArgumentException("Wrong number of args for " + table + ": " + Arrays.asList(args) + " --> "
+ + Arrays.asList(table.getFields()));
}
StringBuilder builder = new StringBuilder();
@@ -186,19 +196,40 @@ public final class DBUtil
builder.append(")");
String sql = builder.toString();
- PreparedStatement stmt = null;
+ if (TRACER.isEnabled())
+ {
+ builder = new StringBuilder();
+ builder.append("INSERT INTO ");
+ builder.append(table);
+ builder.append(" VALUES (");
+
+ for (int i = 0; i < fields.length; i++)
+ {
+ if (i > 0)
+ {
+ builder.append(", ");
+ }
+
+ builder.append(args[i]);
+ }
+
+ builder.append(")");
+ TRACER.trace(builder.toString());
+ }
+
+ PreparedStatement statement = null;
try
{
- stmt = connection.prepareStatement(sql);
+ statement = connection.prepareStatement(sql);
for (int i = 0; i < fields.length; i++)
{
IDBField field = fields[i];
- stmt.setObject(i, args[i], field.getType().getCode());
+ statement.setObject(i + 1, args[i], field.getType().getCode());
}
- stmt.execute();
- if (stmt.getUpdateCount() == 0)
+ statement.execute();
+ if (statement.getUpdateCount() == 0)
{
throw new DBException("No row inserted into table " + table);
}
@@ -209,7 +240,7 @@ public final class DBUtil
}
finally
{
- close(stmt);
+ close(statement);
}
}
}
diff --git a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBField.java b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBField.java
index df6281bfe2..44994ca37d 100644
--- a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBField.java
+++ b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBField.java
@@ -51,26 +51,45 @@ public interface IDBField
DECIMAL(3), //
CHAR(1), //
VARCHAR(12), //
- LONGVARCHAR(-1), //
+ LONGVARCHAR(-1, "LONG VARCHAR"), //
DATE(91), //
TIME(92), //
TIMESTAMP(93), //
BINARY(-2), //
VARBINARY(-3), //
- LONGVARBINARY(-4), //
+ LONGVARBINARY(-4, "LONG VARBINARY"), //
BLOB(2004), //
CLOB(2005); //
private int code;
- private Type(int code)
+ private String keyword;
+
+ private Type(int code, String keyword)
{
this.code = code;
+ this.keyword = keyword;
+ }
+
+ private Type(int code)
+ {
+ this(code, null);
}
public int getCode()
{
return code;
}
+
+ public String getKeyword()
+ {
+ return keyword == null ? super.toString() : keyword;
+ }
+
+ @Override
+ public String toString()
+ {
+ return getKeyword();
+ }
}
}
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 647a0af970..dbcb729fb8 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
@@ -13,6 +13,8 @@ package org.eclipse.net4j.internal.db;
import org.eclipse.net4j.db.DBException;
import org.eclipse.net4j.db.IDBAdapter;
import org.eclipse.net4j.db.IDBField.Type;
+import org.eclipse.net4j.internal.db.bundle.OM;
+import org.eclipse.net4j.internal.util.om.trace.ContextTracer;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
@@ -24,6 +26,8 @@ import java.sql.Statement;
*/
public abstract class DBAdapter implements IDBAdapter
{
+ private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG_SQL, DBAdapter.class);
+
private String name;
private String version;
@@ -52,7 +56,10 @@ public abstract class DBAdapter implements IDBAdapter
}
catch (SQLException ex)
{
- System.out.println(ex.getMessage());
+ if (TRACER.isEnabled())
+ {
+ TRACER.trace(ex.getMessage());
+ }
}
validateTable(table, statement);
@@ -80,7 +87,11 @@ public abstract class DBAdapter implements IDBAdapter
builder.append(")");
String sql = builder.toString();
- System.out.println(sql);
+ if (TRACER.isEnabled())
+ {
+ TRACER.trace(sql);
+ }
+
statement.execute(sql);
}
@@ -111,16 +122,16 @@ public abstract class DBAdapter implements IDBAdapter
case DATE:
case TIME:
case TIMESTAMP:
+ case LONGVARCHAR:
+ case LONGVARBINARY:
case BLOB:
case CLOB:
return type.toString();
case CHAR:
case VARCHAR:
- case LONGVARCHAR:
case BINARY:
case VARBINARY:
- case LONGVARBINARY:
return type.toString() + field.formatPrecision();
case NUMERIC:
@@ -151,17 +162,18 @@ public abstract class DBAdapter implements IDBAdapter
+ table.getFieldCount());
}
- for (int i = 0; i < columnCount; i++)
- {
- int existingCode = metaData.getColumnType(i + 1);
- DBField field = table.getField(i);
- int code = field.getType().getCode();
- if (code != existingCode)
- {
- throw new DBException("DBField " + field.getFullName() + " has type " + existingCode + " instead of " + code
- + " (" + field.getType() + ")");
- }
- }
+ // for (int i = 0; i < columnCount; i++)
+ // {
+ // int existingCode = metaData.getColumnType(i + 1);
+ // DBField field = table.getField(i);
+ // int code = field.getType().getCode();
+ // if (code != existingCode)
+ // {
+ // throw new DBException("DBField " + field.getFullName() + " has type " +
+ // existingCode + " instead of " + code
+ // + " (" + field.getType() + ")");
+ // }
+ // }
}
catch (SQLException ex)
{
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 5ecabe3c60..9d94722c53 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
@@ -11,6 +11,7 @@
package org.eclipse.net4j.internal.db;
import org.eclipse.net4j.db.DBException;
+import org.eclipse.net4j.db.DBUtil;
import org.eclipse.net4j.db.IDBAdapter;
import org.eclipse.net4j.db.IDBSchema;
@@ -78,10 +79,12 @@ public class DBSchema implements IDBSchema
public void create(IDBAdapter dbAdapter, DataSource dataSource)
{
+ Connection connection = null;
+ Statement statement = null;
try
{
- Connection connection = dataSource.getConnection();
- Statement statement = connection.createStatement();
+ connection = dataSource.getConnection();
+ statement = connection.createStatement();
for (DBTable table : tables.values())
{
dbAdapter.createTable(table, statement);
@@ -91,6 +94,11 @@ public class DBSchema implements IDBSchema
{
throw new DBException(ex);
}
+ finally
+ {
+ DBUtil.close(statement);
+ DBUtil.close(connection);
+ }
}
@Override
diff --git a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/bundle/OM.java b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/bundle/OM.java
index 5b935718be..10703a8e9a 100644
--- a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/bundle/OM.java
+++ b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/bundle/OM.java
@@ -24,6 +24,8 @@ import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtensionRegistry;
import org.eclipse.core.runtime.Platform;
+import org.osgi.framework.BundleContext;
+
/**
* @author Eike Stepper
*/
@@ -41,44 +43,51 @@ public abstract class OM
public static final String EXT_POINT = "dbAdapters";
- static void start() throws Exception
+ /**
+ * @author Eike Stepper
+ */
+ public static final class Activator extends OSGiActivator
{
- IExtensionRegistry registry = Platform.getExtensionRegistry();
- IConfigurationElement[] elements = registry.getConfigurationElementsFor(BUNDLE_ID, EXT_POINT);
- for (final IConfigurationElement element : elements)
+ public Activator()
+ {
+ super(BUNDLE);
+ }
+
+ @Override
+ public void start(BundleContext context) throws Exception
+ {
+ super.start(context);
+ initAdapterRegistry();
+ }
+
+ private void initAdapterRegistry()
{
- if ("dbAdapter".equals(element.getName()))
+ IExtensionRegistry registry = Platform.getExtensionRegistry();
+ IConfigurationElement[] elements = registry.getConfigurationElementsFor(BUNDLE_ID, EXT_POINT);
+ for (final IConfigurationElement element : elements)
{
- DBAdapterDescriptor descriptor = new DBAdapterDescriptor(element.getAttribute("name"))
+ if ("dbAdapter".equals(element.getName()))
{
- @Override
- public IDBAdapter createDBAdapter()
+ DBAdapterDescriptor descriptor = new DBAdapterDescriptor(element.getAttribute("name"))
{
- try
+ @Override
+ public IDBAdapter createDBAdapter()
{
- return (IDBAdapter)element.createExecutableExtension("class");
+ try
+ {
+ return (IDBAdapter)element.createExecutableExtension("class");
+ }
+ catch (CoreException ex)
+ {
+ OM.LOG.error(ex);
+ return null;
+ }
}
- catch (CoreException ex)
- {
- OM.LOG.error(ex);
- return null;
- }
- }
- };
+ };
- DBAdapterRegistry.INSTANCE.addDescriptor(descriptor);
+ DBAdapterRegistry.INSTANCE.addDescriptor(descriptor);
+ }
}
}
}
-
- /**
- * @author Eike Stepper
- */
- public static final class Activator extends OSGiActivator
- {
- public Activator()
- {
- super(BUNDLE);
- }
- }
}

Back to the top