package railo.runtime.orm;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import railo.runtime.PageContext;
import railo.runtime.db.DataSource;
import railo.runtime.db.DatasourceConnection;
import railo.runtime.db.DatasourceConnectionImpl;
import railo.runtime.db.SQL;
import railo.runtime.exp.PageException;
import railo.runtime.exp.PageRuntimeException;
import railo.runtime.op.Caster;
public class ORMDatasourceConnection implements DatasourceConnection {
private DataSource datasource;
private Connection connection;
private Boolean supportsGetGeneratedKeys;
public ORMDatasourceConnection(PageContext pc, ORMSession session) {
datasource=session.getDataSource();
// this should never happen
if(datasource==null) {
try {
datasource=ORMUtil.getDataSource(pc);
}
catch (PageException pe) {
throw new PageRuntimeException(pe);
}
}
connection=new ORMConnection(pc,session);
}
public Connection getConnection() {
// TODO Auto-generated method stub
return connection;
}
@Override
public DataSource getDatasource() {
return datasource;
}
@Override
public String getPassword() {
return datasource.getPassword();
}
@Override
public String getUsername() {
return datasource.getUsername();
}
@Override
public boolean isTimeout() {
return false;
}
@Override
public boolean equals(Object obj) {
if(this==obj) return true;
if(!(obj instanceof ORMDatasourceConnection)) return false;
return DatasourceConnectionImpl.equals(this, (DatasourceConnection) obj);
}
public boolean supportsGetGeneratedKeys() {
if(supportsGetGeneratedKeys==null){
try {
supportsGetGeneratedKeys=Caster.toBoolean(getConnection().getMetaData().supportsGetGeneratedKeys());
} catch (Throwable t) {
return false;
}
}
return supportsGetGeneratedKeys.booleanValue();
}
public PreparedStatement getPreparedStatement(SQL sql, boolean createGeneratedKeys, boolean allowCaching) throws SQLException {
if(createGeneratedKeys) return getConnection().prepareStatement(sql.getSQLString(),Statement.RETURN_GENERATED_KEYS);
return getConnection().prepareStatement(sql.getSQLString());
}
@Override
public PreparedStatement getPreparedStatement(SQL sql, int resultSetType, int resultSetConcurrency) throws SQLException {
return getConnection().prepareStatement(sql.getSQLString(),resultSetType,resultSetConcurrency);
}
@Override
public void close() throws SQLException {
getConnection().close();
}
}