DatabaseResultSet* TdsDatabaseLayer::RunQueryWithResults(const wxString& strQuery) { ResetErrorCodes(); if (m_pDatabase != NULL) { FreeAllocatedResultSets(); wxArrayString QueryArray = ParseQueries(strQuery); for (unsigned int i=0; i<(QueryArray.size()-1); i++) { char* szErrorMessage = NULL; wxString strErrorMessage = wxT(""); wxString sql = RemoveLastSemiColon(QueryArray[i]); wxCharBuffer sqlBuffer = ConvertToUnicodeStream(sql); //fprintf(stderr, "Running query '%s'\n", sqlBuffer); int nReturn = tds_submit_query(m_pDatabase, sqlBuffer); if (nReturn != TDS_SUCCEED) { //fprintf(stderr, "tds_submit_query() failed for query '%s'\n", sql.c_str()); FreeAllocatedResultSets(); ThrowDatabaseException(); return NULL; } FreeAllocatedResultSets(); } // Create a Prepared statement for the last SQL statement and get a result set from it wxString strQuery = RemoveLastSemiColon(QueryArray[QueryArray.size()-1]); wxCharBuffer sqlBuffer = ConvertToUnicodeStream(strQuery); //fprintf(stderr, "Running query (with results) '%s'\n", sqlBuffer); int nReturn = tds_submit_query(m_pDatabase, sqlBuffer); if (nReturn != TDS_SUCCEED) { //fprintf(stderr, "tds_submit_query() failed for query '%s'\n", sqlBuffer); //fprintf(stderr, "tds_submit_query() failed for query '%s'\n", strQuery.c_str()); FreeAllocatedResultSets(); ThrowDatabaseException(); return NULL; } TdsResultSet* pResultSet = new TdsResultSet(m_pDatabase); if (pResultSet) pResultSet->SetEncoding(GetEncoding()); LogResultSetForCleanup(pResultSet); //fprintf(stderr, "Returning result set\n"); return pResultSet; } else { return NULL; } }
// query database int OTLDatabaseLayer::RunQuery(const wxString& strQuery, bool bParseQuery) { try { wxArrayString QueryArray; if (bParseQuery) QueryArray = ParseQueries(strQuery); else QueryArray.push_back(strQuery); wxArrayString::iterator start = QueryArray.begin(); wxArrayString::iterator stop = QueryArray.end(); while (start != stop) { wxCharBuffer sqlBuffer = ConvertToUnicodeStream((*start)); std::string strSQL(sqlBuffer); strSQL = RemoveLastSemiColon(strSQL); //wxPrintf(_("RunQuery: '%s'\n"), strSQL.c_str()); otl_stream otlStream(1,strSQL.c_str(),m_database); start++; } } catch (otl_exception& e) { SetErrorCode(OTLDatabaseLayer::TranslateErrorCode(e.code)); SetErrorMessage(ConvertFromUnicodeStream((char*)e.msg)); ThrowDatabaseException(); return false; } return true; }
DatabaseResultSet* OTLDatabaseLayer::RunQueryWithResults(const wxString& strQuery) { OTLResultSet* pResultSet = NULL; try { wxArrayString QueryArray = ParseQueries(strQuery); if (QueryArray.size() > 0) { for (unsigned int i=0; i<(QueryArray.size()-1); i++) { wxCharBuffer sqlBuffer = ConvertToUnicodeStream(QueryArray[i]); std::string strSQL(sqlBuffer); strSQL = RemoveLastSemiColon(strSQL); //wxPrintf(_("RunQuery: '%s'\n"), strSQL.c_str()); otl_stream otlStream(1,strSQL.c_str(),m_database); } // Deal with the last query separately wxCharBuffer sqlBuffer = ConvertToUnicodeStream(QueryArray[QueryArray.size()-1]); std::string strSQL(sqlBuffer); strSQL = RemoveLastSemiColon(strSQL); //wxPrintf(_("RunQuery: '%s'\n"), strSQL.c_str()); otl_stream *otlInputStream = new otl_stream(1,strSQL.c_str(),m_database); { //fixme //pOTLStatement->setAutoCommit(m_bAutoCommit); pResultSet = new OTLResultSet(otlInputStream, true); } } } catch (otl_exception& e) { SetErrorCode(OTLDatabaseLayer::TranslateErrorCode(e.code)); SetErrorMessage(ConvertFromUnicodeStream((char*)e.msg)); ThrowDatabaseException(); return NULL; } if (pResultSet) LogResultSetForCleanup(pResultSet); return pResultSet; }
PreparedStatement* TdsDatabaseLayer::PrepareStatement(const wxString& strQuery) { ResetErrorCodes(); if (m_pDatabase != NULL) { wxString sql = RemoveLastSemiColon(strQuery); /* wxCharBuffer sqlBuffer = ConvertToUnicodeStream(sql); TDSDYNAMIC* pStatement = NULL; TDSPARAMINFO* pParameters = NULL; int nReturn = tds_submit_prepare(m_pDatabase, sqlBuffer, NULL, &pStatement, pParameters); if (nReturn != TDS_SUCCEED) { //fprintf(stderr, "tds_submit_prepare() failed for query '%s'\n", strQuery.c_str()); if (pStatement != NULL) tds_free_dynamic(m_pDatabase, pStatement); if (pParameters != NULL) tds_free_param_results(pParameters); FreeAllocatedResultSets(); ThrowDatabaseException(); return NULL; } FreeAllocatedResultSets(); TdsPreparedStatement* pReturnStatement = new TdsPreparedStatement(m_pDatabase, pStatement, strQuery); if (pReturnStatement) pReturnStatement->SetEncoding(GetEncoding()); */ TdsPreparedStatement* pReturnStatement = new TdsPreparedStatement(m_pDatabase, sql); if (pReturnStatement) pReturnStatement->SetEncoding(GetEncoding()); if (pReturnStatement != NULL) LogStatementForCleanup(pReturnStatement); return pReturnStatement; } else { return NULL; } }
// query database int TdsDatabaseLayer::RunQuery(const wxString& strQuery, bool bParseQuery) { ResetErrorCodes(); if (m_pDatabase == NULL) return false; FreeAllocatedResultSets(); wxArrayString QueryArray; if (bParseQuery) QueryArray = ParseQueries(strQuery); else QueryArray.push_back(strQuery); wxArrayString::iterator start = QueryArray.begin(); wxArrayString::iterator stop = QueryArray.end(); while (start != stop) { char* szErrorMessage = NULL; wxString strErrorMessage = wxT(""); wxString sql = RemoveLastSemiColon(*start); wxCharBuffer sqlBuffer = ConvertToUnicodeStream(sql); //fprintf(stderr, "Running query '%s'\n", (const char*)sqlBuffer); int nReturn = tds_submit_query(m_pDatabase, sqlBuffer); if (nReturn != TDS_SUCCEED) { //fprintf(stderr, "tds_submit_query() failed for query '%s'\n", sqlBuffer); //fprintf(stderr, "tds_submit_query() failed for query '%s'\n", (sql).c_str()); FreeAllocatedResultSets(); ThrowDatabaseException(); return false; } FreeAllocatedResultSets(); start++; } return true; }