io.ebeaninternal.server.querydefn.DefaultOrmUpdate Maven / Gradle / Ivy
package io.ebeaninternal.server.querydefn;
import io.ebean.Database;
import io.ebean.Update;
import io.ebeaninternal.api.BindParams;
import io.ebeaninternal.api.SpiUpdate;
import java.io.Serializable;
/**
* Default implementation of OrmUpdate.
*/
public final class DefaultOrmUpdate implements SpiUpdate, Serializable {
private static final long serialVersionUID = -8791423602246515438L;
private transient final Database server;
private final Class> beanType;
private final String name;
private String label;
private final BindParams bindParams = new BindParams();
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.
*/
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.
*/
public DefaultOrmUpdate(Class> beanType, Database 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 setTimeout(int secs) {
this.timeout = secs;
return this;
}
@Override
public Class> beanType() {
return beanType;
}
/**
* Return the timeout in seconds.
*/
@Override
public int timeout() {
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.
*
*/
@Override
public DefaultOrmUpdate setNotifyCache(boolean notifyCache) {
this.notifyCache = notifyCache;
return this;
}
/**
* 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 setLabel(String label) {
this.label = label;
return this;
}
@Override
public String label() {
return label;
}
@Override
public String updateStatement() {
return updateStatement;
}
@Override
public DefaultOrmUpdate set(int position, Object value) {
bindParams.setParameter(position, value);
return this;
}
@Override
public DefaultOrmUpdate setParameter(int position, Object value) {
bindParams.setParameter(position, value);
return this;
}
@Override
public DefaultOrmUpdate setNull(int position, int jdbcType) {
bindParams.setNullParameter(position, jdbcType);
return this;
}
@Override
public DefaultOrmUpdate setNullParameter(int position, int jdbcType) {
bindParams.setNullParameter(position, jdbcType);
return this;
}
@Override
public DefaultOrmUpdate set(String name, Object value) {
bindParams.setParameter(name, value);
return this;
}
@Override
public DefaultOrmUpdate setParameter(String name, Object param) {
bindParams.setParameter(name, param);
return this;
}
@Override
public DefaultOrmUpdate setNull(String name, int jdbcType) {
bindParams.setNullParameter(name, jdbcType);
return this;
}
@Override
public DefaultOrmUpdate setNullParameter(String name, int jdbcType) {
bindParams.setNullParameter(name, jdbcType);
return this;
}
/**
* Return the bind parameters.
*/
@Override
public BindParams bindParams() {
return bindParams;
}
@Override
public String getGeneratedSql() {
return generatedSql;
}
@Override
public void setGeneratedSql(String generatedSql) {
this.generatedSql = generatedSql;
}
@Override
public String baseTable() {
return baseTable;
}
@Override
public OrmUpdateType ormUpdateType() {
return type;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy