com.j256.ormlite.stmt.mapped.BaseMappedStatement Maven / Gradle / Ivy
package com.j256.ormlite.stmt.mapped;
import java.sql.SQLException;
import java.util.List;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.db.DatabaseType;
import com.j256.ormlite.field.FieldType;
import com.j256.ormlite.logger.Logger;
import com.j256.ormlite.logger.LoggerFactory;
import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.table.TableInfo;
/**
* Abstract mapped statement which has common statements used by the subclasses.
*
* @author graywatson
*/
public abstract class BaseMappedStatement {
protected static Logger logger = LoggerFactory.getLogger(BaseMappedStatement.class);
protected final Dao dao;
protected final ConnectionSource connectionSource;
protected final TableInfo tableInfo;
protected final Class clazz;
protected final FieldType idField;
protected final String statement;
protected final FieldType[] argFieldTypes;
protected BaseMappedStatement(Dao dao, TableInfo tableInfo, String statement,
FieldType[] argFieldTypes) {
this.dao = dao;
this.connectionSource = dao.getConnectionSource();
this.tableInfo = tableInfo;
this.clazz = tableInfo.getDataClass();
this.idField = tableInfo.getIdField();
this.statement = statement;
this.argFieldTypes = argFieldTypes;
}
/**
* Return the array of field objects pulled from the data object.
*/
protected Object[] getFieldObjects(Object data) throws SQLException {
Object[] objects = new Object[argFieldTypes.length];
for (int i = 0; i < argFieldTypes.length; i++) {
FieldType fieldType = argFieldTypes[i];
if (fieldType.isAllowGeneratedIdInsert()) {
objects[i] = fieldType.getFieldValueIfNotDefault(data);
} else {
objects[i] = fieldType.extractJavaFieldToSqlArgValue(data);
}
if (objects[i] == null) {
// NOTE: the default value could be null as well
objects[i] = fieldType.getDefaultValue();
}
}
return objects;
}
/**
* Return a field object converted from an id.
*/
protected Object convertIdToFieldObject(ID id) throws SQLException {
return idField.convertJavaFieldToSqlArgValue(id);
}
static void appendWhereFieldEq(DatabaseType databaseType, FieldType fieldType, StringBuilder sb,
List fieldTypeList) {
sb.append("WHERE ");
appendFieldColumnName(databaseType, sb, fieldType, fieldTypeList);
sb.append("= ?");
}
static void appendTableName(DatabaseType databaseType, StringBuilder sb, String prefix, String tableName) {
if (prefix != null) {
sb.append(prefix);
}
databaseType.appendEscapedEntityName(sb, tableName);
sb.append(' ');
}
static void appendTableName(DatabaseType databaseType, StringBuilder sb, String prefix, TableInfo tableInfo) {
if (prefix != null) {
sb.append(prefix);
}
if (tableInfo.getSchemaName() != null && tableInfo.getSchemaName().length() > 0){
databaseType.appendEscapedEntityName(sb, tableInfo.getSchemaName());
sb.append('.');
}
databaseType.appendEscapedEntityName(sb, tableInfo.getTableName());
sb.append(' ');
}
static void appendFieldColumnName(DatabaseType databaseType, StringBuilder sb, FieldType fieldType,
List fieldTypeList) {
databaseType.appendEscapedEntityName(sb, fieldType.getColumnName());
if (fieldTypeList != null) {
fieldTypeList.add(fieldType);
}
sb.append(' ');
}
@Override
public String toString() {
return "MappedStatement: " + statement;
}
}