001    package railo.runtime.orm;
002    
003    import java.sql.Connection;
004    import java.sql.PreparedStatement;
005    import java.sql.SQLException;
006    import java.sql.Statement;
007    
008    import railo.runtime.PageContext;
009    import railo.runtime.db.DataSource;
010    import railo.runtime.db.DatasourceConnection;
011    import railo.runtime.db.DatasourceConnectionImpl;
012    import railo.runtime.db.SQL;
013    import railo.runtime.op.Caster;
014    
015    public class ORMDatasourceConnection implements DatasourceConnection {
016    
017            private DataSource datasource;
018            private Connection connection;
019            private Boolean supportsGetGeneratedKeys;
020    
021            public ORMDatasourceConnection(PageContext pc, ORMSession session) {
022                    datasource=session.getEngine().getDataSource();
023                    connection=new ORMConnection(pc,session);
024            }
025    
026            public Connection getConnection() {
027                    // TODO Auto-generated method stub
028                    return connection;
029            }
030    
031            @Override
032            public DataSource getDatasource() {
033                    return datasource;
034            }
035    
036            @Override
037            public String getPassword() {
038                    return datasource.getPassword();
039            }
040    
041            @Override
042            public String getUsername() {
043                    return datasource.getUsername();
044            }
045    
046            @Override
047            public boolean isTimeout() {
048                    return false;
049            }
050            
051    
052    
053            @Override
054            public boolean equals(Object obj) {
055                    if(this==obj) return true;
056                    if(!(obj instanceof ORMDatasourceConnection)) return false;
057                    return DatasourceConnectionImpl.equals(this, (DatasourceConnection) obj);
058            }
059    
060            public boolean supportsGetGeneratedKeys() {
061                    if(supportsGetGeneratedKeys==null){
062                            try {
063                                    supportsGetGeneratedKeys=Caster.toBoolean(getConnection().getMetaData().supportsGetGeneratedKeys());
064                            } catch (Throwable t) {
065                                    return false;
066                            }
067                    }
068                    return supportsGetGeneratedKeys.booleanValue();
069            }
070    
071            public PreparedStatement getPreparedStatement(SQL sql, boolean createGeneratedKeys, boolean allowCaching) throws SQLException {
072                    if(createGeneratedKeys) return getConnection().prepareStatement(sql.getSQLString(),Statement.RETURN_GENERATED_KEYS);
073                    return getConnection().prepareStatement(sql.getSQLString());
074            }
075    
076            @Override
077            public PreparedStatement getPreparedStatement(SQL sql, int resultSetType, int resultSetConcurrency) throws SQLException {
078                    return getConnection().prepareStatement(sql.getSQLString(),resultSetType,resultSetConcurrency);
079            }
080    
081            @Override
082            public void close() throws SQLException {
083                    getConnection().close();
084            }
085    
086    }