Let's make the varargs version of updatePartial a little safer by requiring a
typed (ColumnExp, Comparable) as our first pair of arguments and only let you get jiggy after that.
This commit is contained in:
@@ -531,10 +531,11 @@ public abstract class DepotRepository
|
|||||||
* values that duplicate another row already in the database.
|
* values that duplicate another row already in the database.
|
||||||
* @throws DatabaseException if any problem is encountered communicating with the database.
|
* @throws DatabaseException if any problem is encountered communicating with the database.
|
||||||
*/
|
*/
|
||||||
protected <T extends PersistentRecord> int updatePartial (Key<T> key, Object... fieldsValues)
|
protected <T extends PersistentRecord> int updatePartial (
|
||||||
|
Key<T> key, ColumnExp field, Comparable<?> value, Object... fieldsValues)
|
||||||
throws DatabaseException
|
throws DatabaseException
|
||||||
{
|
{
|
||||||
return updatePartial(key.getPersistentClass(), key, key, fieldsValues);
|
return updatePartial(key.getPersistentClass(), key, key, field, value, fieldsValues);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -552,7 +553,7 @@ public abstract class DepotRepository
|
|||||||
* @throws DatabaseException if any problem is encountered communicating with the database.
|
* @throws DatabaseException if any problem is encountered communicating with the database.
|
||||||
*/
|
*/
|
||||||
protected <T extends PersistentRecord> int updatePartial (
|
protected <T extends PersistentRecord> int updatePartial (
|
||||||
Key<T> key, Map<ColumnExp, ? extends SQLExpression> fieldsValues)
|
Key<T> key, Map<ColumnExp, ?> fieldsValues)
|
||||||
throws DatabaseException
|
throws DatabaseException
|
||||||
{
|
{
|
||||||
return updatePartial(key.getPersistentClass(), key, key, fieldsValues);
|
return updatePartial(key.getPersistentClass(), key, key, fieldsValues);
|
||||||
@@ -580,17 +581,16 @@ public abstract class DepotRepository
|
|||||||
*/
|
*/
|
||||||
protected <T extends PersistentRecord> int updatePartial (
|
protected <T extends PersistentRecord> int updatePartial (
|
||||||
Class<T> type, final WhereClause key, CacheInvalidator invalidator,
|
Class<T> type, final WhereClause key, CacheInvalidator invalidator,
|
||||||
Map<ColumnExp, ? extends SQLExpression> fieldsValues)
|
Map<ColumnExp, ?> fieldsValues)
|
||||||
throws DatabaseException
|
throws DatabaseException
|
||||||
{
|
{
|
||||||
// separate the arguments into keys and values
|
// separate the arguments into keys and values
|
||||||
final ColumnExp[] fields = new ColumnExp[fieldsValues.size()];
|
final ColumnExp[] fields = new ColumnExp[fieldsValues.size()];
|
||||||
final SQLExpression[] values = new SQLExpression[fields.length];
|
final SQLExpression[] values = new SQLExpression[fields.length];
|
||||||
int ii = 0;
|
int ii = 0;
|
||||||
for (Map.Entry<ColumnExp, ? extends SQLExpression> entry : fieldsValues.entrySet()) {
|
for (Map.Entry<ColumnExp, ?> entry : fieldsValues.entrySet()) {
|
||||||
fields[ii] = entry.getKey();
|
fields[ii] = entry.getKey();
|
||||||
values[ii] = entry.getValue();
|
values[ii++] = makeValue(entry.getValue());
|
||||||
ii ++;
|
|
||||||
}
|
}
|
||||||
return updatePartial(type, key, invalidator, fields, values);
|
return updatePartial(type, key, invalidator, fields, values);
|
||||||
}
|
}
|
||||||
@@ -617,19 +617,18 @@ public abstract class DepotRepository
|
|||||||
* @throws DatabaseException if any problem is encountered communicating with the database.
|
* @throws DatabaseException if any problem is encountered communicating with the database.
|
||||||
*/
|
*/
|
||||||
protected <T extends PersistentRecord> int updatePartial (
|
protected <T extends PersistentRecord> int updatePartial (
|
||||||
Class<T> type, final WhereClause key, CacheInvalidator invalidator, Object... fieldsValues)
|
Class<T> type, final WhereClause key, CacheInvalidator invalidator,
|
||||||
|
ColumnExp field, Comparable<?> value, Object... fieldsValues)
|
||||||
throws DatabaseException
|
throws DatabaseException
|
||||||
{
|
{
|
||||||
// separate the arguments into keys and values
|
// separate the arguments into keys and values
|
||||||
final ColumnExp[] fields = new ColumnExp[fieldsValues.length/2];
|
final ColumnExp[] fields = new ColumnExp[fieldsValues.length/2+1];
|
||||||
final SQLExpression[] values = new SQLExpression[fields.length];
|
final SQLExpression[] values = new SQLExpression[fields.length+1];
|
||||||
|
fields[0] = field;
|
||||||
|
values[0] = makeValue(value);
|
||||||
for (int ii = 0, idx = 0; ii < fields.length; ii++) {
|
for (int ii = 0, idx = 0; ii < fields.length; ii++) {
|
||||||
fields[ii] = (ColumnExp)fieldsValues[idx++];
|
fields[ii+1] = (ColumnExp)fieldsValues[idx++];
|
||||||
if (fieldsValues[idx] instanceof SQLExpression) {
|
values[ii+1] = makeValue(fieldsValues[idx++]);
|
||||||
values[ii] = (SQLExpression)fieldsValues[idx++];
|
|
||||||
} else {
|
|
||||||
values[ii] = new ValueExp(fieldsValues[idx++]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return updatePartial(type, key, invalidator, fields, values);
|
return updatePartial(type, key, invalidator, fields, values);
|
||||||
}
|
}
|
||||||
@@ -925,6 +924,11 @@ public abstract class DepotRepository
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected SQLExpression makeValue (Object value)
|
||||||
|
{
|
||||||
|
return (value instanceof SQLExpression) ? (SQLExpression)value : new ValueExp(value);
|
||||||
|
}
|
||||||
|
|
||||||
protected PersistenceContext _ctx;
|
protected PersistenceContext _ctx;
|
||||||
protected List<DataMigration> _dataMigs = Lists.newArrayList();
|
protected List<DataMigration> _dataMigs = Lists.newArrayList();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import java.sql.Timestamp;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
|
|
||||||
import com.samskivert.jdbc.StaticConnectionProvider;
|
import com.samskivert.jdbc.StaticConnectionProvider;
|
||||||
@@ -98,8 +99,8 @@ public class TestRepository extends DepotRepository
|
|||||||
// repo.update(record, TestRecord.AGE, TestRecord.NAME, TestRecord.NUMBERS);
|
// repo.update(record, TestRecord.AGE, TestRecord.NAME, TestRecord.NUMBERS);
|
||||||
|
|
||||||
repo.updatePartial(TestRecord.getKey(record.recordId),
|
repo.updatePartial(TestRecord.getKey(record.recordId),
|
||||||
TestRecord.AGE, 25, TestRecord.NAME, "Bob",
|
ImmutableMap.of(TestRecord.AGE, 25, TestRecord.NAME, "Bob",
|
||||||
TestRecord.NUMBERS, new int[] { 1, 2, 3, 4, 5 });
|
TestRecord.NUMBERS, new int[] { 1, 2, 3, 4, 5 }));
|
||||||
System.out.println("Updated " + repo.load(TestRecord.getKey(record.recordId)));
|
System.out.println("Updated " + repo.load(TestRecord.getKey(record.recordId)));
|
||||||
|
|
||||||
for (int ii = 2; ii < CREATE_RECORDS; ii++) {
|
for (int ii = 2; ii < CREATE_RECORDS; ii++) {
|
||||||
|
|||||||
Reference in New Issue
Block a user