package org.test4j.module.dbfit.fixture.fit;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.List;
import org.test4j.module.database.utility.DBHelper;
import org.test4j.module.dbfit.environment.DbFitEnvironment;
import org.test4j.module.dbfit.fixture.Test4JFixture;
import org.test4j.module.dbfit.model.DataRow;
import org.test4j.module.dbfit.model.DataTable;
import fit.Parse;
public class StoreQueryFixture extends Test4JFixture {
private DbFitEnvironment dbEnvironment;
private String query;
private String symbolName;
public StoreQueryFixture(DbFitEnvironment environment, String query, String symbolName) {
this.dbEnvironment = environment;
this.query = query;
this.symbolName = symbolName;
}
public void doTable(Parse table) {
if (query == null || symbolName == null) {
if (args.length < 2)
throw new UnsupportedOperationException(
"No query and symbol name specified to StoreQuery constructor or argument list");
query = args[0];
symbolName = args[1];
}
if (symbolName.startsWith(">>")) {
symbolName = symbolName.substring(2);
}
PreparedStatement st = null;
ResultSet rs = null;
try {
st = dbEnvironment.createStatementWithBoundFixtureSymbols(query);
rs = st.executeQuery();
DataTable dt = new DataTable(rs);
int rowSize = dt.getRowSize();
if (rowSize == 0) {
throw new RuntimeException("can't retrieve any data by query:" + query);
} else if (rowSize > 1) {
throw new RuntimeException("allowing one row data retrieved by query:" + query);
}
int colSize = dt.getColSize();
if (colSize == 0) {
throw new RuntimeException("can't retrieve any column by query:" + query);
} else if (colSize > 1) {
throw new RuntimeException("allowing one column data retrieved by query:" + query);
}
DataRow row = dt.getUnprocessedRows().get(0);
List<String> values = row.getStringValues();
org.test4j.module.dbfit.utility.SymbolUtil.setSymbol(symbolName, values.get(0));
} catch (Exception sqle) {
throw new Error(sqle);
} finally {
DBHelper.closeResultSet(rs);
rs = null;
DBHelper.closeStatement(st);
st = null;
}
}
}