package org.test4j.module.dbfit.fixture.fit; import java.sql.PreparedStatement; import java.sql.ResultSet; import org.test4j.module.core.utility.MessageHelper; import org.test4j.module.database.utility.DBHelper; import org.test4j.module.dbfit.environment.DbFitEnvironment; import org.test4j.module.dbfit.model.DataColumn; import org.test4j.module.dbfit.model.DataTable; import org.test4j.module.dbfit.utility.SymbolUtil; @SuppressWarnings({ "rawtypes" }) public class QueryFixture extends RowSetFixture { private DbFitEnvironment dbEnvironment; private String query; private boolean isOrdered; public QueryFixture(DbFitEnvironment environment, String query) { this(environment, query, false); } public QueryFixture(DbFitEnvironment environment, String query, boolean isOrdered) { this.dbEnvironment = environment; this.query = query; this.isOrdered = isOrdered; } public DataTable getDataTable() throws Exception { if (query == null) { query = args[0]; } if (query.startsWith("<<")) { return getFromSymbol(); } MessageHelper.info(String.format("Query: '%s'", query)); PreparedStatement st = null; ResultSet rs = null; try { st = dbEnvironment.createStatementWithBoundFixtureSymbols(query); rs = st.executeQuery(); DataTable dt = new DataTable(rs); return dt; } finally { DBHelper.closeResultSet(rs); rs = null; DBHelper.closeStatement(st); st = null; } } private DataTable getFromSymbol() throws Exception { Object o = SymbolUtil.getSymbol(query.substring(2).trim()); if (o instanceof DataTable) { return (DataTable) o; } ResultSet rs = null; if (o instanceof ResultSet) { rs = (ResultSet) o; } else { String err = "Stored queries can only be used on symbols that contain result sets"; throw new UnsupportedOperationException(err); } try { DataTable dt = new DataTable(rs); return dt; } finally { DBHelper.closeResultSet(rs); rs = null; } } protected boolean isOrdered() { return isOrdered; } @Override protected Class getJavaClassForColumn(DataColumn col) { return dbEnvironment.getJavaClass(col.getDbTypeName()); } }