diff options
author | Eike Stepper | 2007-10-07 07:23:57 +0000 |
---|---|---|
committer | Eike Stepper | 2007-10-07 07:23:57 +0000 |
commit | 278e8a6062c12ee55a24860feb3971872a3e228a (patch) | |
tree | c6ab31e7c7dafdbee8b78e5018f5984c6ea451a4 /plugins/org.eclipse.net4j.db | |
parent | e59bc745a649a94d8ca1a927af41558fc821ebd7 (diff) | |
download | cdo-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')
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()); |