void ParseMessage(uint64_t seqno, const char *buf) { switch (buf[1]) { case 0x21: return AddLong(seqno, buf); case 0x22: return AddShort(seqno, buf); case 0x2F: return AddExpanded(seqno, buf); case 0x23: return Executed(seqno, buf); case 0x24: return ExecutedAtPriceSize(seqno, buf); case 0x25: return ReduceLong(seqno, buf); case 0x26: return ReduceShort(seqno, buf); case 0x27: return ModifyLong(seqno, buf); case 0x28: return ModifyShort(seqno, buf); case 0x29: return Delete(seqno, buf); case 0x2A: return TradeLong(seqno, buf); case 0x2B: return TradeShort(seqno, buf); case 0x30: return TradeExpanded(seqno, buf); } }
void ODBC_Connection::ExecuteQuery(QString query) { // clean result tables for (int i = 0; i < m_lSQLResultTables.count(); i++) { ODBC_StandardItemModel* pModel = m_lSQLResultTables.at(i); if (pModel != NULL) { if (!pModel->IsExtracted()) { delete pModel; pModel = NULL; m_lSQLResultTables.removeAt(i); i--; } } } if (mQuery.isActive()) mQuery.finish(); mQuery.clear(); Logging::getInstance()->WriteLog(INFORMATION, QString("Executing statement \"%1\" of connection \"%2\"...").arg(query, m_sConnectionName)); mTime = mTime.currentTime(); mTime.start(); // count the time, the query execution takes mQuery.setForwardOnly(ODBC_OptionsDialog::getInstance()->ForwardOnly()); if (!mQuery.exec(query)) { QString sError = mQuery.lastError().text(); m_sLogText = QString("<table><tr><td><b>%1</b></td><td><font color='#FF0000'>%2</font></td></tr></table>").arg(QDateTime::currentDateTime().toString("(hh:mm:ss)"), sError.replace('<', "<").replace('>', ">")); Logging::getInstance()->WriteLog(ERR, sError); } else { if (mQuery.isSelect()) { m_iResultTableCount = 0; m_lSQLResultTables.clear(); bool first = true; do { QSqlRecord sqlRecord = mQuery.record(); int columns = sqlRecord.count(); ODBC_StandardItemModel* model = new ODBC_StandardItemModel(); model->setColumnCount(columns); QStringList headerLabels; for (int i = 0; i < columns; i++) headerLabels.append(sqlRecord.fieldName(i)); model->setHorizontalHeaderLabels(headerLabels); int iResultCount = 0; bool bLimitResults = ODBC_OptionsDialog::getInstance()->LimitResults(); int iResultLimit = ODBC_OptionsDialog::getInstance()->GetResultLimitCount(); while (mQuery.next()) { if (bLimitResults) { if (iResultCount == iResultLimit) { m_bWaitForAnswer = true; emit LimitReached(); while (m_bWaitForAnswer) QThread::sleep(1); if (!m_bContinueFetch) break; bLimitResults = false; } } QList<QStandardItem*> itemList; for (int column = 0; column < columns; column++) { QStandardItem *item = new QStandardItem(mQuery.value(column).toString()); itemList.append(item); } model->appendRow(itemList); iResultCount++; } if (first) { if (m_pMainModel != NULL) { if (m_pMainModel->IsExtracted()) m_pMainModel->SetMainModel(false); else { delete m_pMainModel; m_pMainModel = NULL; } } m_pMainModel = model; m_pMainModel->SetMainModel(true); first = false; } else { m_lSQLResultTables.append(model); m_iResultTableCount++; } } while (mQuery.nextResult()); } int iNumRowsAffected = mQuery.numRowsAffected(); if (iNumRowsAffected == -1) { m_sLogText = QString("<table><tr><td><b>%1</b></td><td>%2</td></tr></table>").arg(QDateTime::currentDateTime().toString("(hh:mm:ss)"), "Query executed successfully after " + QString().setNum(mTime.elapsed()) + " ms!"); Logging::getInstance()->WriteLog(INFORMATION, QString("Statement executed succssfully after %1 ms").arg(QString().setNum(mTime.elapsed()))); } else { m_sLogText = QString("<table><tr><td><b>%1</b></td><td>%2</td></tr><tr><td></td><td>%3</td></tr></table>").arg(QDateTime::currentDateTime().toString("(hh:mm:ss)"), "Query executed successfully after " + QString().setNum(mTime.elapsed()) + " ms!", QString().setNum(iNumRowsAffected) + " row(s) affected\n"); Logging::getInstance()->WriteLog(INFORMATION, QString("Statement executed succssfully after %1 ms, %2 row(s) affected").arg(QString().setNum(mTime.elapsed()), QString().setNum(iNumRowsAffected))); } if (m_slStatementHistory.count() != 0) { if (m_slStatementHistory.value(m_iCurrentHistoryIndex) != query) { m_slStatementHistory << query; m_iCurrentHistoryIndex = (m_slStatementHistory.count() - 1); } } else m_slStatementHistory << query; } emit Executed(); }