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; } }
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; }