Package org.jtester.module.dbfit.db.fixture

Source Code of org.jtester.module.dbfit.db.fixture.StoreQueryFixture

package org.jtester.module.dbfit.db.fixture;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.List;

import org.jtester.fit.JTesterFixture;
import org.jtester.module.database.environment.DBEnvironment;
import org.jtester.module.database.util.DBHelper;
import org.jtester.module.dbfit.db.model.DataRow;
import org.jtester.module.dbfit.db.model.DataTable;

import fit.Parse;

public class StoreQueryFixture extends JTesterFixture {
  private DBEnvironment dbEnvironment;
  private String query;
  private String symbolName;

  // public StoreQueryFixture() {
  // dbEnvironment = DbFactory.instance().factory();//
  // DbEnvironmentFactory.getDefaultEnvironment();
  // }

  public StoreQueryFixture(DBEnvironment 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.jtester.fit.util.SymbolUtil.setSymbol(symbolName, values.get(0));
    } catch (Exception sqle) {
      throw new Error(sqle);
    } finally {
      DBHelper.closeResultSet(rs);
      rs = null;
      DBHelper.closeStatement(st);
      st = null;
    }
  }
}
TOP

Related Classes of org.jtester.module.dbfit.db.fixture.StoreQueryFixture

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.