Out with arrays, in with collections.
This commit is contained in:
@@ -494,21 +494,18 @@ public class DepotMarshaller<T extends PersistentRecord> implements QueryMarshal
|
|||||||
|
|
||||||
// figure out the list of fields that correspond to actual table columns and generate the
|
// figure out the list of fields that correspond to actual table columns and generate the
|
||||||
// SQL used to create and migrate our table (unless we're a computed entity)
|
// SQL used to create and migrate our table (unless we're a computed entity)
|
||||||
_columnFields = new ColumnExp<?>[_allFields.length];
|
List<ColumnExp<?>> columnFields = Lists.newArrayList();
|
||||||
ColumnDefinition[] declarations = new ColumnDefinition[_allFields.length];
|
List<ColumnDefinition> declarations = Lists.newArrayList();
|
||||||
int jj = 0;
|
|
||||||
for (ColumnExp<?> field : _allFields) {
|
for (ColumnExp<?> field : _allFields) {
|
||||||
FieldMarshaller<?> fm = _fields.get(field.name);
|
FieldMarshaller<?> fm = _fields.get(field.name);
|
||||||
// include all persistent non-computed fields
|
// include all persistent non-computed fields
|
||||||
ColumnDefinition colDef = fm.getColumnDefinition();
|
ColumnDefinition colDef = fm.getColumnDefinition();
|
||||||
if (colDef != null) {
|
if (colDef != null) {
|
||||||
_columnFields[jj] = field;
|
columnFields.add(field);
|
||||||
declarations[jj] = colDef;
|
declarations.add(colDef);
|
||||||
jj ++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_columnFields = ArrayUtil.splice(_columnFields, jj);
|
_columnFields = columnFields.toArray(new ColumnExp<?>[columnFields.size()]);
|
||||||
declarations = ArrayUtil.splice(declarations, jj);
|
|
||||||
|
|
||||||
// determine whether or not this record has ever been seen
|
// determine whether or not this record has ever been seen
|
||||||
int currentVersion = _meta.getVersion(getTableName(), false);
|
int currentVersion = _meta.getVersion(getTableName(), false);
|
||||||
@@ -681,7 +678,7 @@ public class DepotMarshaller<T extends PersistentRecord> implements QueryMarshal
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void createTable (PersistenceContext ctx, final SQLBuilder builder,
|
protected void createTable (PersistenceContext ctx, final SQLBuilder builder,
|
||||||
final ColumnDefinition[] declarations)
|
final List<ColumnDefinition> declarations)
|
||||||
throws DatabaseException
|
throws DatabaseException
|
||||||
{
|
{
|
||||||
log.info("Creating initial table '" + getTableName() + "'.");
|
log.info("Creating initial table '" + getTableName() + "'.");
|
||||||
@@ -690,15 +687,14 @@ public class DepotMarshaller<T extends PersistentRecord> implements QueryMarshal
|
|||||||
@Override
|
@Override
|
||||||
protected int invoke (Connection conn, DatabaseLiaison liaison) throws SQLException {
|
protected int invoke (Connection conn, DatabaseLiaison liaison) throws SQLException {
|
||||||
// create the table
|
// create the table
|
||||||
String[] primaryKeyColumns = null;
|
List<String> pkColumns = Lists.newArrayList();
|
||||||
if (hasPrimaryKey()) {
|
if (hasPrimaryKey()) {
|
||||||
primaryKeyColumns = new String[_pkColumns.size()];
|
for (int ii = 0; ii < _pkColumns.size(); ii ++) {
|
||||||
for (int ii = 0; ii < primaryKeyColumns.length; ii ++) {
|
pkColumns.add(_pkColumns.get(ii).getColumnName());
|
||||||
primaryKeyColumns[ii] = _pkColumns.get(ii).getColumnName();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
liaison.createTableIfMissing(conn, getTableName(), fieldsToColumns(_columnFields),
|
liaison.createTableIfMissing(conn, getTableName(), fieldsToColumns(_columnFields),
|
||||||
declarations, null, primaryKeyColumns);
|
declarations, pkColumns);
|
||||||
|
|
||||||
// add its indexen
|
// add its indexen
|
||||||
for (CreateIndexClause iclause : _indexes) {
|
for (CreateIndexClause iclause : _indexes) {
|
||||||
@@ -964,14 +960,14 @@ public class DepotMarshaller<T extends PersistentRecord> implements QueryMarshal
|
|||||||
}
|
}
|
||||||
|
|
||||||
// translate an array of field names to an array of column names
|
// translate an array of field names to an array of column names
|
||||||
protected String[] fieldsToColumns (ColumnExp<?>[] fields)
|
protected List<String> fieldsToColumns (ColumnExp<?>[] fields)
|
||||||
{
|
{
|
||||||
String[] columns = new String[fields.length];
|
List<String> columns = Lists.newArrayListWithExpectedSize(fields.length);
|
||||||
for (int ii = 0; ii < columns.length; ii ++) {
|
for (int ii = 0; ii < fields.length; ii ++) {
|
||||||
FieldMarshaller<?> fm = _fields.get(fields[ii].name);
|
FieldMarshaller<?> fm = _fields.get(fields[ii].name);
|
||||||
checkArgument(fm != null, "Unknown field on record [field=%s, class=%s]",
|
checkArgument(fm != null, "Unknown field on record [field=%s, class=%s]",
|
||||||
fields[ii], _pClass);
|
fields[ii], _pClass);
|
||||||
columns[ii] = fm.getColumnName();
|
columns.add(fm.getColumnName());
|
||||||
}
|
}
|
||||||
return columns;
|
return columns;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import java.sql.Connection;
|
|||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.sql.Statement;
|
import java.sql.Statement;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
@@ -37,14 +38,11 @@ public class DepotMetaData
|
|||||||
// create our schema version table if needed
|
// create our schema version table if needed
|
||||||
liaison.createTableIfMissing(
|
liaison.createTableIfMissing(
|
||||||
stmt.getConnection(), SCHEMA_VERSION_TABLE,
|
stmt.getConnection(), SCHEMA_VERSION_TABLE,
|
||||||
new String[] { P_COLUMN, V_COLUMN, MV_COLUMN },
|
Arrays.asList(P_COLUMN, V_COLUMN, MV_COLUMN),
|
||||||
new ColumnDefinition[] {
|
Arrays.asList(new ColumnDefinition("VARCHAR(255)", false, true, null),
|
||||||
new ColumnDefinition("VARCHAR(255)", false, true, null),
|
new ColumnDefinition("INTEGER", false, false, null),
|
||||||
new ColumnDefinition("INTEGER", false, false, null),
|
new ColumnDefinition("INTEGER", false, false, null)),
|
||||||
new ColumnDefinition("INTEGER", false, false, null)
|
Arrays.asList(P_COLUMN));
|
||||||
},
|
|
||||||
null,
|
|
||||||
new String[] { P_COLUMN });
|
|
||||||
|
|
||||||
// slurp in the current versions of all records
|
// slurp in the current versions of all records
|
||||||
readVersions(liaison, stmt);
|
readVersions(liaison, stmt);
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import java.sql.Connection;
|
|||||||
import java.sql.PreparedStatement;
|
import java.sql.PreparedStatement;
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
import com.samskivert.depot.annotation.GeneratedValue;
|
import com.samskivert.depot.annotation.GeneratedValue;
|
||||||
import com.samskivert.depot.annotation.TableGenerator;
|
import com.samskivert.depot.annotation.TableGenerator;
|
||||||
@@ -43,13 +44,10 @@ public class TableValueGenerator extends ValueGenerator
|
|||||||
// make sure our table exists
|
// make sure our table exists
|
||||||
liaison.createTableIfMissing(
|
liaison.createTableIfMissing(
|
||||||
conn, _valueTable,
|
conn, _valueTable,
|
||||||
new String[] { _pkColumnName, _valueColumnName },
|
Arrays.asList(_pkColumnName, _valueColumnName),
|
||||||
new ColumnDefinition[] {
|
Arrays.asList(new ColumnDefinition("VARCHAR(255)", true, false, null),
|
||||||
new ColumnDefinition("VARCHAR(255)", true, false, null),
|
new ColumnDefinition("INTEGER")),
|
||||||
new ColumnDefinition("INTEGER")
|
Arrays.asList(_pkColumnName));
|
||||||
},
|
|
||||||
null,
|
|
||||||
new String[] { _pkColumnName });
|
|
||||||
|
|
||||||
// and also that there's a row in it for us
|
// and also that there's a row in it for us
|
||||||
PreparedStatement stmt = conn.prepareStatement(
|
PreparedStatement stmt = conn.prepareStatement(
|
||||||
|
|||||||
Reference in New Issue
Block a user