package jef.database.dialect.type;
import java.io.CharArrayReader;
import java.io.IOException;
import java.io.Reader;
import java.sql.Clob;
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;
import jef.tools.IOUtils;
public class ClobCharArrayMapping extends AColumnMapping{
public int getSqlType() {
return java.sql.Types.CLOB;
}
public Object jdbcSet(PreparedStatement st, Object value, int index, DatabaseDialect session) throws SQLException {
if(value==null){
st.setNull(index, session.getImplementationSqlType(Types.CLOB));
}else{
char[] ca=(char[])value;
st.setCharacterStream(index, new CharArrayReader(ca),ca.length);
}
return value;
}
@Override
protected String getSqlExpression(Object value, DatabaseDialect profile) {
throw new UnsupportedOperationException();
}
@Override
public boolean isLob() {
return true;
}
public Object jdbcGet(IResultSet rs, int n) throws SQLException {
Object obj=rs.getObject(n);
if(obj==null)return null;
if(obj instanceof String){
return ((String) obj).toCharArray();
}
Reader reader = ((Clob)obj).getCharacterStream();
try {
return IOUtils.asCharArray(reader);
} catch (IOException e) {
throw new SQLException("Error at reading clob",e);
}
}
@Override
protected Class<?> getDefaultJavaType() {
return char[].class;
}
@Override
public void jdbcUpdate(ResultSet rs, String columnIndex, Object value, DatabaseDialect dialect) throws SQLException {
char[] ca=(char[])value;
rs.updateCharacterStream(columnIndex, new CharArrayReader(ca),ca.length);
}
}