package io.ebeaninternal.server.querydefn;
import io.ebean.EbeanServer;
import io.ebean.Update;
import io.ebeaninternal.api.BindParams;
import io.ebeaninternal.api.SpiUpdate;
import java.io.Serializable;
Default implementation of OrmUpdate.
/**
* Default implementation of OrmUpdate.
*/
public final class DefaultOrmUpdate<T> implements SpiUpdate<T>, Serializable {
private static final long serialVersionUID = -8791423602246515438L;
private transient final EbeanServer server;
private final Class<?> beanType;
The name of the update.
/**
* The name of the update.
*/
private final String name;
private String label;
The parameters used to bind to the sql.
/**
* The parameters used to bind to the sql.
*/
private final BindParams bindParams = new BindParams();
The sql update or delete statement.
/**
* The sql update or delete statement.
*/
private final String updateStatement;
Automatically detect the table being modified by this sql. This will
register this information so that eBean invalidates cached objects if
required.
/**
* Automatically detect the table being modified by this sql. This will
* register this information so that eBean invalidates cached objects if
* required.
*/
private boolean notifyCache = true;
private int timeout;
private String generatedSql;
private final String baseTable;
private final OrmUpdateType type;
Create with a specific server. This means you can use the
UpdateSql.execute() method.
/**
* Create with a specific server. This means you can use the
* UpdateSql.execute() method.
*/
public DefaultOrmUpdate(Class<?> beanType, EbeanServer server, String baseTable, String updateStatement) {
this.beanType = beanType;
this.server = server;
this.baseTable = baseTable;
this.name = "";
this.updateStatement = updateStatement;
this.type = deriveType(updateStatement);
}
@Override
public DefaultOrmUpdate<T> setTimeout(int secs) {
this.timeout = secs;
return this;
}
@Override
public Class<?> getBeanType() {
return beanType;
}
Return the timeout in seconds.
/**
* Return the timeout in seconds.
*/
@Override
public int getTimeout() {
return timeout;
}
private SpiUpdate.OrmUpdateType deriveType(String updateStatement) {
updateStatement = updateStatement.trim();
int spacepos = updateStatement.indexOf(' ');
if (spacepos == -1) {
return SpiUpdate.OrmUpdateType.UNKNOWN;
} else {
String firstWord = updateStatement.substring(0, spacepos);
if (firstWord.equalsIgnoreCase("update")) {
return SpiUpdate.OrmUpdateType.UPDATE;
} else if (firstWord.equalsIgnoreCase("insert")) {
return SpiUpdate.OrmUpdateType.INSERT;
} else if (firstWord.equalsIgnoreCase("delete")) {
return SpiUpdate.OrmUpdateType.DELETE;
} else {
return SpiUpdate.OrmUpdateType.UNKNOWN;
}
}
}
@Override
public int execute() {
return server.execute(this);
}
Set this to false if you don't want eBean to automatically deduce the
table modification information and process it.
Set this to false if you don't want any cache invalidation or text index
management to occur. You may do this when say you update only one column
and you know that it is not important for cached objects or text indexes.
/**
* Set this to false if you don't want eBean to automatically deduce the
* table modification information and process it.
* <p>
* Set this to false if you don't want any cache invalidation or text index
* management to occur. You may do this when say you update only one column
* and you know that it is not important for cached objects or text indexes.
* </p>
*/
@Override
public DefaultOrmUpdate<T> setNotifyCache(boolean notifyCache) {
this.notifyCache = notifyCache;
return this;
}
Return true if the cache should be notified so that invalidates
appropriate objects.
/**
* Return true if the cache should be notified so that invalidates
* appropriate objects.
*/
@Override
public boolean isNotifyCache() {
return notifyCache;
}
@Override
public String getName() {
return name;
}
@Override
public Update<T> setLabel(String label) {
this.label = label;
return this;
}
@Override
public String getLabel() {
return label;
}
@Override
public String getUpdateStatement() {
return updateStatement;
}
@Override
public DefaultOrmUpdate<T> set(int position, Object value) {
bindParams.setParameter(position, value);
return this;
}
@Override
public DefaultOrmUpdate<T> setParameter(int position, Object value) {
bindParams.setParameter(position, value);
return this;
}
@Override
public DefaultOrmUpdate<T> setNull(int position, int jdbcType) {
bindParams.setNullParameter(position, jdbcType);
return this;
}
@Override
public DefaultOrmUpdate<T> setNullParameter(int position, int jdbcType) {
bindParams.setNullParameter(position, jdbcType);
return this;
}
@Override
public DefaultOrmUpdate<T> set(String name, Object value) {
bindParams.setParameter(name, value);
return this;
}
@Override
public DefaultOrmUpdate<T> setParameter(String name, Object param) {
bindParams.setParameter(name, param);
return this;
}
@Override
public DefaultOrmUpdate<T> setNull(String name, int jdbcType) {
bindParams.setNullParameter(name, jdbcType);
return this;
}
@Override
public DefaultOrmUpdate<T> setNullParameter(String name, int jdbcType) {
bindParams.setNullParameter(name, jdbcType);
return this;
}
Return the bind parameters.
/**
* Return the bind parameters.
*/
@Override
public BindParams getBindParams() {
return bindParams;
}
@Override
public String getGeneratedSql() {
return generatedSql;
}
@Override
public void setGeneratedSql(String generatedSql) {
this.generatedSql = generatedSql;
}
@Override
public String getBaseTable() {
return baseTable;
}
@Override
public OrmUpdateType getOrmUpdateType() {
return type;
}
}