package jef.database.dialect.type;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import jef.database.dialect.DatabaseDialect;
import jef.database.jdbc.result.IResultSet;
/**
* 要求的数据库类型为Boolean,但实际上根据数据库特性,有BIT、CHAR(1)、BOOLEAN等多种实现
* @author jiyi
*
*/
public final class DelegatorBoolean extends AColumnMapping{
private AColumnMapping real;
private DatabaseDialect profile;
public Object jdbcSet(PreparedStatement st, Object value, int index, DatabaseDialect dialect) throws SQLException {
if(real==null || this.profile!=dialect){
init(dialect);
}
return real.jdbcSet(st, value, index, dialect);
}
private void init(DatabaseDialect profile) {
int type=profile.getImplementationSqlType(Types.BOOLEAN);
if(type==Types.BIT){
real=new BitBooleanMapping();
}else if(type==Types.CHAR){
real=new CharBooleanMapping();
}else if(type==Types.TINYINT || type==Types.NUMERIC || type==Types.INTEGER){
real=new NumIntBooleanMapping();
}else{
real=new BooleanBoolMapping();
}
real.init(field, rawColumnName, columnDef, meta);
}
public int getSqlType() {
return real.getSqlType();
}
@Override
protected String getSqlExpression(Object value, DatabaseDialect profile) {
if(real==null){
init(profile);
}
return real.getSqlExpression(value, profile);
}
public Object jdbcGet(IResultSet rs, int n) throws SQLException {
if(real==null){
init(rs.getProfile());
}
return real.jdbcGet(rs, n);
}
@Override
protected Class<?> getDefaultJavaType() {
return Boolean.class;
}
@Override
public void jdbcUpdate(ResultSet rs, String columnIndex, Object value, DatabaseDialect dialect) throws SQLException {
if(real==null || this.profile!=dialect){
init(profile);
}
real.jdbcUpdate(rs, columnIndex, value, dialect);
}
}