Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/spi/db/DBSchema.java')
-rw-r--r--plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/spi/db/DBSchema.java63
1 files changed, 38 insertions, 25 deletions
diff --git a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/spi/db/DBSchema.java b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/spi/db/DBSchema.java
index a0302c423e..baeb0e1911 100644
--- a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/spi/db/DBSchema.java
+++ b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/spi/db/DBSchema.java
@@ -21,7 +21,8 @@ import org.eclipse.net4j.db.ddl.IDBIndex;
import org.eclipse.net4j.db.ddl.IDBSchema;
import org.eclipse.net4j.db.ddl.IDBTable;
import org.eclipse.net4j.db.ddl.delta.IDBSchemaDelta;
-import org.eclipse.net4j.internal.db.ddl.DBSchemaElement;
+import org.eclipse.net4j.internal.db.ddl.DBField;
+import org.eclipse.net4j.internal.db.ddl.DBIndex;
import org.eclipse.net4j.internal.db.ddl.DBTable;
import org.eclipse.net4j.internal.db.ddl.delta.DBSchemaDelta;
@@ -54,15 +55,17 @@ public class DBSchema extends DBSchemaElement implements IDBSchema
*/
public static final IDBTable[] NO_TABLES = {};
- private String name;
+ private static final long serialVersionUID = 1L;
private Map<String, DBTable> tables = new HashMap<String, DBTable>();
- private boolean locked;
+ private transient boolean locked;
+
+ private transient int indexCounter;
public DBSchema(String name)
{
- this.name = name;
+ super(name);
}
/**
@@ -78,15 +81,14 @@ public class DBSchema extends DBSchemaElement implements IDBSchema
statement = connection.createStatement();
DatabaseMetaData metaData = connection.getMetaData();
- ResultSet tables = metaData.getTables(null, name, null, new String[] { "TABLE" });
+ ResultSet tables = metaData.getTables(null, getName(), null, new String[] { "TABLE" });
while (tables.next())
{
String tableName = tables.getString(3);
IDBTable table = addTable(tableName);
readFields(table, statement);
-
- readIndices(table, metaData, name);
+ readIndices(table, metaData, getName());
}
}
catch (SQLException ex)
@@ -104,7 +106,7 @@ public class DBSchema extends DBSchemaElement implements IDBSchema
*/
public DBSchema(IDBSchema source)
{
- name = source.getName();
+ super(source.getName());
for (IDBTable sourceTable : source.getTables())
{
@@ -117,24 +119,33 @@ public class DBSchema extends DBSchemaElement implements IDBSchema
for (IDBIndex sourceIndex : sourceTable.getIndices())
{
- table.addIndex(sourceIndex.getType(), sourceIndex.getFields());
+ DBIndex index = table.addIndex(sourceIndex.getType());
+ for (IDBField sourceField : sourceIndex.getFields())
+ {
+ DBField field = table.getField(sourceField.getPosition());
+ index.addIndexField(field);
+ }
}
}
}
- public String getFullName()
+ /**
+ * Constructor for deserialization.
+ *
+ * @since 4.2
+ */
+ protected DBSchema()
{
- return name;
}
- public IDBSchema getSchema()
+ public String getFullName()
{
- return this;
+ return getName();
}
- public String getName()
+ public IDBSchema getSchema()
{
- return name;
+ return this;
}
/**
@@ -149,7 +160,7 @@ public class DBSchema extends DBSchemaElement implements IDBSchema
}
DBTable table = new DBTable(this, name);
- tables.put(name, table);
+ tables.put(table.getName(), table);
return table;
}
@@ -159,6 +170,7 @@ public class DBSchema extends DBSchemaElement implements IDBSchema
public IDBTable removeTable(String name)
{
assertUnlocked();
+ name = name(name);
return tables.remove(name);
}
@@ -167,6 +179,7 @@ public class DBSchema extends DBSchemaElement implements IDBSchema
*/
public IDBTable getTable(String name)
{
+ name = name(name);
return tables.get(name);
}
@@ -221,6 +234,14 @@ public class DBSchema extends DBSchemaElement implements IDBSchema
return locked = false;
}
+ public void assertUnlocked() throws DBException
+ {
+ if (locked)
+ {
+ throw new DBException("Schema locked: " + this); //$NON-NLS-1$
+ }
+ }
+
public Set<IDBTable> create(IDBAdapter dbAdapter, Connection connection) throws DBException
{
return dbAdapter.createTables(tables.values(), connection);
@@ -345,15 +366,7 @@ public class DBSchema extends DBSchemaElement implements IDBSchema
*/
public String createIndexName(IDBTable table, IDBIndex.Type type, IDBField[] fields, int position)
{
- return "idx_" + table.getName() + "_" + position;
- }
-
- public void assertUnlocked() throws DBException
- {
- if (locked)
- {
- throw new DBException("Schema locked: " + name); //$NON-NLS-1$
- }
+ return "I" + System.currentTimeMillis() + "_" + ++indexCounter;
}
private void readFields(IDBTable table, Statement statement) throws SQLException

Back to the top