Exemple #1
0
 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);
   }
 }
Exemple #2
0
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('<', "&lt;").replace('>', "&gt;"));
		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(); 
}