Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2007-10-07 07:23:57 +0000
committerEike Stepper2007-10-07 07:23:57 +0000
commit278e8a6062c12ee55a24860feb3971872a3e228a (patch)
treec6ab31e7c7dafdbee8b78e5018f5984c6ea451a4 /plugins/org.eclipse.net4j.db
parente59bc745a649a94d8ca1a927af41558fc821ebd7 (diff)
downloadcdo-278e8a6062c12ee55a24860feb3971872a3e228a.tar.gz
cdo-278e8a6062c12ee55a24860feb3971872a3e228a.tar.xz
cdo-278e8a6062c12ee55a24860feb3971872a3e228a.zip
[205652] Prevent duplicate resources
https://bugs.eclipse.org/bugs/show_bug.cgi?id=205652
Diffstat (limited to 'plugins/org.eclipse.net4j.db')
-rw-r--r--plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBField.java2
-rw-r--r--plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBTable.java4
-rw-r--r--plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBAdapter.java41
-rw-r--r--plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBField.java5
-rw-r--r--plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBTable.java8
5 files changed, 48 insertions, 12 deletions
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 e89abc8f18..f82cd3d64f 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
@@ -27,6 +27,8 @@ public interface IDBField extends IDBElement
public boolean isNotNull();
+ public void setNotNull(boolean on);
+
public int getPosition();
public String getFullName();
diff --git a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBTable.java b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBTable.java
index 9a7c736e2a..5a1f694c16 100644
--- a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBTable.java
+++ b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBTable.java
@@ -37,9 +37,7 @@ public interface IDBTable extends IDBElement
public IDBField[] getFields();
- public IDBIndex addIndex(IDBIndex.Type type, IDBField field);
-
- public IDBIndex addIndex(IDBIndex.Type type, IDBField[] fields);
+ public IDBIndex addIndex(IDBIndex.Type type, IDBField... fields);
public int getIndexCount();
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 8d85226692..873054449d 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
@@ -15,6 +15,7 @@ import org.eclipse.net4j.db.DBType;
import org.eclipse.net4j.db.DBUtil;
import org.eclipse.net4j.db.IDBAdapter;
import org.eclipse.net4j.db.IDBField;
+import org.eclipse.net4j.db.IDBIndex;
import org.eclipse.net4j.db.IDBTable;
import org.eclipse.net4j.internal.db.bundle.OM;
import org.eclipse.net4j.internal.util.om.trace.ContextTracer;
@@ -140,11 +141,47 @@ public abstract class DBAdapter implements IDBAdapter
builder.append(")");
String sql = builder.toString();
- if (TRACER.isEnabled())
+ if (TRACER.isEnabled()) TRACER.trace(sql);
+ statement.execute(sql);
+
+ DBIndex[] indices = table.getIndices();
+ for (int i = 0; i < indices.length; i++)
+ {
+ createIndex(indices[i], statement, i);
+ }
+ }
+
+ protected void createIndex(DBIndex index, Statement statement, int num) throws SQLException
+ {
+ DBTable table = index.getTable();
+ StringBuilder builder = new StringBuilder();
+ builder.append("CREATE ");
+ if (index.getType() == IDBIndex.Type.UNIQUE)
{
- TRACER.trace(sql);
+ builder.append("UNIQUE ");
}
+ builder.append("INDEX ");
+ builder.append(table);
+ builder.append("_idx");
+ builder.append(num);
+ builder.append(" ON ");
+ builder.append(table);
+ builder.append(" (");
+ IDBField[] fields = index.getFields();
+ for (int i = 0; i < fields.length; i++)
+ {
+ if (i != 0)
+ {
+ builder.append(", ");
+ }
+
+ builder.append(fields[i]);
+ }
+
+ builder.append(")");
+ String sql = builder.toString();
+ if (TRACER.isEnabled()) TRACER.trace(sql);
statement.execute(sql);
}
diff --git a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBField.java b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBField.java
index 1eb7a781c0..f787c30457 100644
--- a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBField.java
+++ b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBField.java
@@ -81,6 +81,11 @@ public class DBField extends DBElement implements IDBField
return notNull;
}
+ public void setNotNull(boolean on)
+ {
+ notNull = on;
+ }
+
public int getPosition()
{
return position;
diff --git a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBTable.java b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBTable.java
index bf1d1e89d2..af7c8bd274 100644
--- a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBTable.java
+++ b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBTable.java
@@ -116,13 +116,7 @@ public class DBTable extends DBElement implements IDBTable
return fields.toArray(new DBField[fields.size()]);
}
- public DBIndex addIndex(Type type, IDBField field)
- {
- IDBField[] fields = { field };
- return addIndex(type, fields);
- }
-
- public DBIndex addIndex(Type type, IDBField[] fields)
+ public DBIndex addIndex(Type type, IDBField... fields)
{
schema.assertUnlocked();
DBIndex index = new DBIndex(this, type, fields, indices.size());

Back to the top