Added special update() provided by Ray.

This allows one to update a record iff some additional criteria are met.
This commit is contained in:
Michael Bayne
2014-10-01 11:19:21 -07:00
parent f663ac9bd4
commit 9874be4034
@@ -4,6 +4,7 @@
package com.samskivert.depot;
import com.samskivert.depot.clause.Where;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
@@ -345,7 +346,21 @@ public abstract class DepotRepository
*
* @throws DatabaseException if any problem is encountered communicating with the database.
*/
public int update (PersistentRecord record)
public int update (PersistentRecord record) throws DatabaseException
{
// avoid empty varargs array creation for this very common call
return update(record, EMPTY_CONDS);
}
/**
* Updates all fields of the supplied persistent object, using its primary key along with the
* supplied extra {@code conditions} to identify the row to be updated.
*
* @return the number of rows modified by this action.
*
* @throws DatabaseException if any problem is encountered communicating with the database.
*/
public int update (PersistentRecord record, SQLExpression<?>... conditions)
throws DatabaseException
{
Class<? extends PersistentRecord> pClass = record.getClass();
@@ -353,7 +368,10 @@ public abstract class DepotRepository
DepotMarshaller<? extends PersistentRecord> marsh = _ctx.getMarshaller(pClass);
Key<? extends PersistentRecord> key = marsh.getPrimaryKey(record);
checkArgument(key != null, "Can't update record with null primary key.");
return doUpdate(key, new UpdateClause(pClass, key, marsh.getColumnFieldNames(), record));
WhereClause where = (conditions.length == 0)
? key
: new Where(Ops.and(Lists.asList(key.getWhereExpression(), conditions)));
return doUpdate(key, new UpdateClause(pClass, where, marsh.getColumnFieldNames(), record));
}
/**
@@ -366,7 +384,7 @@ public abstract class DepotRepository
*
* @throws DatabaseException if any problem is encountered communicating with the database.
*/
public <T extends PersistentRecord> int update (T record, final ColumnExp<?>... modifiedFields)
public <T extends PersistentRecord> int update (T record, ColumnExp<?>... modifiedFields)
throws DatabaseException
{
@SuppressWarnings("unchecked") Class<T> pClass = (Class<T>) record.getClass();
@@ -944,4 +962,6 @@ public abstract class DepotRepository
protected PersistenceContext _ctx;
protected List<DataMigration> _dataMigs = Lists.newArrayList();
protected static SQLExpression<?>[] EMPTY_CONDS = new SQLExpression<?>[0];
}