#1938 - API consistency add setParameters(varargs) & setParameter() - migrate from setNextParameter() and setParams()

This commit is contained in:
rob bygrave
2020-02-15 02:01:02 +13:00
parent d236988035
commit 8feb100ac6
44 changed files with 386 additions and 159 deletions
+19 -2
View File
@@ -77,12 +77,29 @@ public interface DtoQuery<T> {
Optional<T> findOneOrEmpty();
/**
* The same as bind for named parameters.
* Bind all the parameters using index positions.
* <p>
* Binds each parameter moving the index position each time.
* <p>
* A convenience for multiple calls to {@link #setParameter(Object)}
*/
DtoQuery<T> setParameters(Object... value);
/**
* Bind the next parameter using index position.
* <p>
* Bind the parameter using index position starting at 1 and incrementing.
* <p>
*/
DtoQuery<T> setParameter(Object value);
/**
* Bind the named parameter.
*/
DtoQuery<T> setParameter(String name, Object value);
/**
* The same as bind for positioned parameters.
* Bind the parameter by its index position (1 based like JDBC).
*/
DtoQuery<T> setParameter(int position, Object value);
+24
View File
@@ -1183,6 +1183,30 @@ public interface Query<T> {
*/
Query<T> setParameter(int position, Object value);
/**
* Bind the next positioned parameter.
*
* <pre>{@code
*
* // a query with a positioned parameters
* String oql = "where status = ? and name = ?";
*
* List<Order> list = DB.createQuery(Order.class, oql)
* .setParameter(OrderStatus.NEW)
* .setParameter("Rob")
* .findList();
*
* }</pre>
*/
Query<T> setParameter(Object value);
/**
* Bind all the positioned parameters.
* <p>
* A convenience for multiple calls to {@link #setParameter(Object)}
*/
Query<T> setParameters(Object... values);
/**
* Set the Id value to query. This is used with findOne().
* <p>
+49 -16
View File
@@ -131,7 +131,7 @@ public interface SqlQuery extends Serializable {
* String sql = "select max(unit_price) from o_order_detail where order_qty > ?";
*
* BigDecimal maxPrice = DB.sqlQuery(sql)
* .setParameter(1, 2)
* .setParameter(42)
* .findSingleAttribute(BigDecimal.class);
*
* }</pre>
@@ -171,31 +171,24 @@ public interface SqlQuery extends Serializable {
* " where unit_price > ? " +
* " order by (unit_price * order_qty) desc";
*
* //
* List<BigDecimal> lineAmounts =
* DB.sqlQuery(sql)
* .setParameter(1, 3)
* .setParameter(42)
* .findSingleAttributeList(BigDecimal.class);
*
* }</pre>
*
* <p>
* The attributeType can be any scalar type that Ebean supports (includes javax time types, Joda types etc).
* </p>
*
* @param attributeType The type of the returned value
*/
<T> List<T> findSingleAttributeList(Class<T> attributeType);
/**
* The same as bind for named parameters.
*/
SqlQuery setParameter(String name, Object value);
/**
* Set one of more positioned parameters.
* <p>
* This is a convenient alternative to multiple calls setParameter().
* This is a convenient alternative to multiple calls to {@link #setParameter(Object)}.
*
* <pre>{@code
*
@@ -203,27 +196,67 @@ public interface SqlQuery extends Serializable {
*
* List<SqlRow> list =
* DB.sqlQuery(sql)
* .setParams("Rob", Status.NEW)
* .setParameters("Rob", Status.NEW)
* .findList();
*
*
* // is the same as ...
* // effectively the same as ...
*
* .setParameter("Rob")
* .setParameter("Status.NEW)
*
* // and ...
*
* List<SqlRow> list =
* DB.sqlQuery(sql)
* .setParameter(1, "Rob")
* .setParameter(2, "Status.NEW)
* .findList();
*
* }</pre>
*/
SqlQuery setParameters(Object... values);
/**
* Deprecated migrate to setParameters(Object... values)
*/
@Deprecated
SqlQuery setParams(Object... values);
/**
* The same as bind for positioned parameters.
* Set the next bind parameter by position.
* <pre>{@code
*
* String sql = "select id, name from customer where name like ? and status = ?";
*
* List<SqlRow> list =
* DB.sqlQuery(sql)
* .setParameter("Rob")
* .setParameter("Status.NEW)
* .findList();
*
* // the same as ...
*
* .setParameters("Rob", Status.NEW)
*
* // and ...
*
* .setParameter(1, "Rob")
* .setParameter(2, "Status.NEW)
*
* }</pre>
*
* @param value The value to bind
*/
SqlQuery setParameter(Object value);
/**
* Bind the parameter by its index position (1 based like JDBC).
*/
SqlQuery setParameter(int position, Object value);
/**
* Bind the named parameter value.
*/
SqlQuery setParameter(String name, Object value);
/**
* Set the index of the first row of the results to return.
*/
+22 -3
View File
@@ -239,28 +239,47 @@ public interface SqlUpdate {
* String sql = "insert into audit_log (id, name, version) values (?,?,?)";
*
* DB.sqlUpdate(sql)
* .setParams(UUID.randomUUID(), "Hello", 1)
* .setParameters(UUID.randomUUID(), "Hello", 1)
* .executeNow();
*
*
* // is the same as ...
*
* DB.sqlUpdate(sql)
* .setParameter(UUID.randomUUID())
* .setParameter("Hello")
* .setParameter(1)
* .executeNow();
*
* // which is the same as ...
*
* DB.sqlUpdate(sql)
* .setParameter(1, UUID.randomUUID())
* .setParameter(2, "Hello")
* .setParameter(3, 1)
* .executeNow();
*
* }</pre>
*
*/
SqlUpdate setParameters(Object... values);
/**
* Deprecated migrate to setParameters(Object... values).
*/
@Deprecated
SqlUpdate setParams(Object... values);
/**
* Set the next positioned parameter.
* Set the next bind parameter by position.
*
* @param value The value to bind
*/
SqlUpdate setParameter(Object value);
/**
* Deprecated migrate to setParameter(value).
*/
@Deprecated
SqlUpdate setNextParameter(Object value);
/**
@@ -38,6 +38,11 @@ public class BindParams implements Serializable {
*/
private String bindHash;
/**
* Helper to add positioned parameters in order.
*/
private int addPos;
public BindParams() {
}
@@ -156,6 +161,19 @@ public class BindParams implements Serializable {
p.setOutType(outType);
}
public void setNextParameters(Object... values) {
for (Object value : values) {
setNextParameter(value);
}
}
/**
* Bind the next positioned parameter.
*/
public void setNextParameter(Object value) {
setParameter(++addPos, value);
}
/**
* Using position set the In value of a parameter. Note that for nulls you
* must use setNullParameter.
@@ -265,6 +265,16 @@ public final class DefaultSqlUpdate implements Serializable, SpiSqlUpdate {
@Override
public SqlUpdate setParams(Object... values) {
return setParameters(values);
}
@Override
public SqlUpdate setNextParameter(Object value) {
return setParameter(value);
}
@Override
public SqlUpdate setParameters(Object... values) {
for (Object value : values) {
setParameter(++addPos, value);
}
@@ -272,7 +282,7 @@ public final class DefaultSqlUpdate implements Serializable, SpiSqlUpdate {
}
@Override
public SqlUpdate setNextParameter(Object value) {
public SqlUpdate setParameter(Object value) {
setParameter(++addPos, value);
return this;
}
@@ -296,7 +306,6 @@ public final class DefaultSqlUpdate implements Serializable, SpiSqlUpdate {
@Override
public SqlUpdate setParameter(int position, Object value) {
if (value instanceof Collection) {
String bindLiteral = "?" + position;
int pos = baseSql.indexOf(bindLiteral);
@@ -317,8 +326,7 @@ public final class DefaultSqlUpdate implements Serializable, SpiSqlUpdate {
@Override
public SqlUpdate setNullParameter(int position, int jdbcType) {
bindParams.setNullParameter(bindExpansion + position, jdbcType);
return this;
return setNull(position, jdbcType);
}
@Override
@@ -335,8 +343,7 @@ public final class DefaultSqlUpdate implements Serializable, SpiSqlUpdate {
@Override
public SqlUpdate setNullParameter(String name, int jdbcType) {
bindParams.setNullParameter(name, jdbcType);
return this;
return setNull(name, jdbcType);
}
/**
@@ -927,7 +927,7 @@ public class BeanDescriptor<T> implements BeanType<T>, STreeType {
public void bindElementValue(SqlUpdate insert, Object value) {
EntityBean bean = (EntityBean) value;
for (BeanProperty property : propertiesBaseScalar) {
insert.setNextParameter(property.getValue(bean));
insert.setParameter(property.getValue(bean));
}
}
@@ -1090,7 +1090,7 @@ public class BeanDescriptor<T> implements BeanType<T>, STreeType {
Object[] bindValues = idBinder.getBindValues(id);
for (Object bindValue : bindValues) {
sqlDelete.setNextParameter(bindValue);
sqlDelete.setParameter(bindValue);
}
return sqlDelete;
@@ -26,7 +26,7 @@ class BeanDescriptorElementScalar<T> extends BeanDescriptorElement<T> {
@Override
public void bindElementValue(SqlUpdate insert, Object value) {
insert.setNextParameter(value);
insert.setParameter(value);
}
@Override
@@ -539,12 +539,12 @@ public abstract class BeanPropertyAssoc<T> extends BeanProperty implements STree
void bindParentIds(DefaultSqlUpdate delete, List<Object> parentIds) {
if (isExportedSimple()) {
delete.setNextParameter(new MultiValueWrapper(parentIds));
delete.setParameter(new MultiValueWrapper(parentIds));
} else {
// embedded ids etc
List<Object> bindValues = flattenParentIds(parentIds);
for (Object bindValue : bindValues) {
delete.setNextParameter(bindValue);
delete.setParameter(bindValue);
}
}
}
@@ -552,12 +552,12 @@ public abstract class BeanPropertyAssoc<T> extends BeanProperty implements STree
void bindParentId(DefaultSqlUpdate sqlUpd, Object parentId) {
if (isExportedSimple()) {
sqlUpd.setNextParameter(parentId);
sqlUpd.setParameter(parentId);
return;
}
EntityBean parent = (EntityBean) parentId;
for (ExportedProperty exportedProperty : exportedProperties) {
sqlUpd.setNextParameter(exportedProperty.getValue(parent));
sqlUpd.setParameter(exportedProperty.getValue(parent));
}
}
@@ -816,7 +816,7 @@ public class BeanPropertyAssocMany<T> extends BeanPropertyAssoc<T> implements ST
parentBean = (EntityBean) idProp.getValue(parentBean);
}
for (ExportedProperty exportedProperty : exportedProperties) {
sql.setNextParameter(exportedProperty.getValue(parentBean));
sql.setParameter(exportedProperty.getValue(parentBean));
}
importedId.bindImport(sql, other);
}
@@ -15,7 +15,7 @@ public class BeanPropertySimpleCollection<T> extends BeanPropertyAssocMany<T> {
@Override
public void bindElementValue(SqlUpdate insert, Object value) {
insert.setNextParameter(value);
insert.setParameter(value);
}
@Override
@@ -275,7 +275,7 @@ public final class IdBinderEmbedded implements IdBinder {
public void bindId(DefaultSqlUpdate sqlUpdate, Object value) {
for (BeanProperty prop : props) {
Object embFieldValue = prop.getValue((EntityBean) value);
sqlUpdate.setNextParameter(embFieldValue);
sqlUpdate.setParameter(embFieldValue);
}
}
@@ -146,7 +146,7 @@ public final class IdBinderSimple implements IdBinder {
@Override
public void addIdInBindValues(DefaultSqlUpdate sqlUpdate, Collection<?> ids) {
sqlUpdate.setNextParameter(new MultiValueWrapper(ids));
sqlUpdate.setParameter(new MultiValueWrapper(ids));
}
@Override
@@ -171,7 +171,7 @@ public final class IdBinderSimple implements IdBinder {
@Override
public void bindId(DefaultSqlUpdate sqlUpdate, Object value) {
sqlUpdate.setNextParameter(value);
sqlUpdate.setParameter(value);
}
@Override
@@ -155,7 +155,7 @@ public class ImportedIdEmbedded implements ImportedId {
}
for (ImportedIdSimple anImported : imported) {
Object scalarValue = anImported.foreignProperty.getValue(embeddedId);
sql.setNextParameter(scalarValue);
sql.setParameter(scalarValue);
}
}
@@ -131,7 +131,7 @@ public final class ImportedIdSimple implements ImportedId, Comparable<ImportedId
if (value == null) {
throw new PersistenceException("Foreign Key value null?");
}
sql.setNextParameter(value);
sql.setParameter(value);
}
@Override
@@ -46,7 +46,7 @@ class SaveManyElementCollection extends SaveManyBase {
Object parentId = request.getBeanId();
for (Object value : collection) {
final SpiSqlUpdate sqlInsert = proto.copy();
sqlInsert.setNextParameter(parentId);
sqlInsert.setParameter(parentId);
many.bindElementValue(sqlInsert, value);
persister.addToFlushQueueLast(sqlInsert, transaction);
}
@@ -48,8 +48,8 @@ class SaveManyElementCollectionMap extends SaveManyBase {
Object parentId = request.getBeanId();
for (Map.Entry<?, ?> entry : entries) {
final SpiSqlUpdate sqlInsert = proto.copy();
sqlInsert.setNextParameter(parentId);
sqlInsert.setNextParameter(entry.getKey());
sqlInsert.setParameter(parentId);
sqlInsert.setParameter(entry.getKey());
many.bindElementValue(sqlInsert, entry.getValue());
persister.addToFlushQueueLast(sqlInsert, transaction);
}
@@ -383,6 +383,16 @@ class DefaultFetchGroupQuery<T> implements SpiFetchGroupQuery<T> {
throw new RuntimeException("EB102: Only select() and fetch() clause is allowed on FetchGroup");
}
@Override
public Query<T> setParameter(Object value) {
throw new RuntimeException("EB102: Only select() and fetch() clause is allowed on FetchGroup");
}
@Override
public Query<T> setParameters(Object... values) {
throw new RuntimeException("EB102: Only select() and fetch() clause is allowed on FetchGroup");
}
@Override
public Query<T> setId(Object id) {
throw new RuntimeException("EB102: Only select() and fetch() clause is allowed on FetchGroup");
@@ -142,6 +142,26 @@ public class DefaultDtoQuery<T> implements SpiDtoQuery<T> {
return this;
}
@Override
public DtoQuery<T> setParameters(Object... values) {
if (ormQuery != null) {
ormQuery.setParameters(values);
} else {
bindParams.setNextParameters(values);
}
return this;
}
@Override
public DtoQuery<T> setParameter(Object value) {
if (ormQuery != null) {
ormQuery.setParameter(value);
} else {
bindParams.setNextParameter(value);
}
return this;
}
@Override
public String toString() {
return "DtoQuery [" + sql + "]";
@@ -1596,6 +1596,24 @@ public class DefaultOrmQuery<T> implements SpiQuery<T> {
return server.findPagedList(this, transaction);
}
@Override
public DefaultOrmQuery<T> setParameter(Object value) {
if (bindParams == null) {
bindParams = new BindParams();
}
bindParams.setNextParameter(value);
return this;
}
@Override
public DefaultOrmQuery<T> setParameters(Object... values) {
if (bindParams == null) {
bindParams = new BindParams();
}
bindParams.setNextParameters(values);
return this;
}
/**
* Set an ordered bind parameter according to its position. Note that the position starts at 1 to
* be consistent with JDBC PreparedStatement. You need to set a parameter value for each ? you
@@ -1615,7 +1633,6 @@ public class DefaultOrmQuery<T> implements SpiQuery<T> {
*/
@Override
public DefaultOrmQuery<T> setParameter(String name, Object value) {
if (namedParams != null) {
ONamedParam param = namedParams.get(name);
if (param != null) {
@@ -34,11 +34,6 @@ public class DefaultRelationalQuery implements SpiSqlQuery {
private int bufferFetchSizeHint;
/**
* Helper to add positioned parameters in order.
*/
private int addPos;
/**
* Bind parameters when using the query language.
*/
@@ -113,10 +108,20 @@ public class DefaultRelationalQuery implements SpiSqlQuery {
}
@Override
@Deprecated
public DefaultRelationalQuery setParams(Object... values) {
for (Object value : values) {
setParameter(++addPos, value);
}
return setParameters(values);
}
@Override
public DefaultRelationalQuery setParameters(Object... values) {
bindParams.setNextParameters(values);
return this;
}
@Override
public DefaultRelationalQuery setParameter(Object value) {
bindParams.setNextParameter(value);
return this;
}