#include #include #include #include "../../shared/SimpleLogFile.h" #include "../for_spryware/SpryWareSimple.h" #include "MyPricePlusTable.h" ///////////////////////////////////////////////////////////////////// // MyPricePlusTable ///////////////////////////////////////////////////////////////////// void MyPricePlusTable::addSymbolList(StringList const &symbols) { // SpryWare support said that adding a whole list at once, rather than one // symbol at a time, would make a huge difference in performance. Database::Key key(this, 0); Database::Record record(this); const unsigned bufferLength = Database::KeyRecordListHelper::GetBufferLength ((unsigned)symbols.size(), (unsigned)key.GetLength(), (unsigned)record.GetLength()); Database::KeyRecordListHelper keyRecordHelper(NULL, bufferLength, 0, (unsigned)key.GetLength(), (unsigned)record.GetLength()); for (StringList::const_iterator it = symbols.begin(); it != symbols.end(); it++) { Database::Sku sku; sku.FromString(symbolToSpryWare(*it)); key.SetField(MIS::FID::SKU, sku); unsigned rc = keyRecordHelper.Add(key, record); assert(rc == RETURN_CODE_SUCCESS); } unsigned rc = GetEqual(keyRecordHelper); assert(rc == RETURN_CODE_SUCCESS); } void MyPricePlusTable::deleteSymbolList(StringList const &symbols) { Database::Key key(this, 0); const unsigned bufferLength = Database::KeyListHelper::GetBufferLength((unsigned)symbols.size(), (unsigned)key.GetLength()); Database::KeyListHelper keyHelper(NULL, bufferLength, 0, (unsigned)key.GetLength()); for (StringList::const_iterator it = symbols.begin(); it != symbols.end(); it++) { Database::Sku sku; sku.FromString(symbolToSpryWare(*it)); key.SetField(MIS::FID::SKU, sku); unsigned rc = keyHelper.Add(key); assert(rc == RETURN_CODE_SUCCESS); } unsigned rc = Delete(keyHelper); assert(rc == RETURN_CODE_SUCCESS); } void MyPricePlusTable::addSymbolNow(std::string const &symbol) { StringList list; list.insert(symbol); addSymbolList(list); } bool MyPricePlusTable::getSnapshot(std::string const &symbol, Database::Record &record) { Database::Sku sku; sku.FromString(symbolToSpryWare(symbol)); Database::Key key(this, 0); key.SetField(MIS::FID::SKU, sku); record.Initialize(this); unsigned int rc = LookUp(key, record); return (rc == RETURN_CODE_SUCCESS); }