예제 #1
0
AbstractQoreNode *command::read_output(bool list, bool &disconnect, ExceptionSink* xsink) {
   ReferenceHolder<AbstractQoreNode> qresult(xsink);

   ss::ResultFactory rf(xsink);

   for (;;) {
      ResType rt = read_next_result(xsink);
      switch (rt) {
	 case RES_ERROR:
	    return 0;
	 case RES_PARAM:
	    retr_colinfo(xsink);
	    qresult = read_rows(&query->placeholders, xsink);
	    //add_rowcount(*qresult, 1, xsink);
	    rf.add_params(qresult);
	    break;
	 case RES_ROW:
	    qresult = read_rows(0, list, xsink);
	    rf.add(qresult, list);
	    break;
	 case RES_END:
	    return rf.res();
	 case RES_DONE:
	    rf.done(rowcount);
	    continue;
	 case RES_STATUS:
	    retr_colinfo(xsink);
	    qresult = read_rows(0, list, xsink);
	    // TODO: check status?
	    colinfo.set_dirty();
	    continue;
	 default:
	    m_conn.do_exception(xsink, "DBI:SYBASE:EXEC-ERROR",
				"don't know how to handle result type");
	    break;
      }
      if (*xsink)
	 return 0;
   }
}
예제 #2
0
boost::shared_ptr<scidb::QueryResult>
tws::scidb::pool_connection::execute(const std::string& query_str, const bool afl)
{
  boost::shared_ptr< ::scidb::QueryResult > qresult(new ::scidb::QueryResult);

  const ::scidb::SciDB& db_api = ::scidb::getSciDB();

  try
  {
    db_api.executeQuery(query_str, afl, *qresult, handle_);
  }
  catch(const ::scidb::Exception& e)
  {
    throw query_execution_error() << tws::error_description(e.what());
  }
  catch(...)
  {
    throw query_execution_error() << tws::error_description("could not execute query.");
  }

  return qresult;
}