diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index 368f59bfe..00eba875b 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -877,10 +877,10 @@ void NetworkOPs::setMode(OperatingMode om) } -std::vector< std::pair > +std::vector< std::pair > NetworkOPs::getAccountTxs(const RippleAddress& account, uint32 minLedger, uint32 maxLedger) { - std::vector< std::pair > affectedAccounts; + std::vector< std::pair > ret; std::string sql = str(boost::format("SELECT LedgerSeq,Status,RawTxn,TxnMeta FROM Transactions where TransID in (SELECT TransID from AccountTransactions " @@ -893,12 +893,24 @@ std::vector< std::pair > SQL_FOREACH(db, sql) { - - affectedAccounts.push_back(std::make_pair(db->getInt("LedgerSeq"), uint256(db->getStrBinary("TransID")))); + Transaction::pointer txn=Transaction::transactionFromSQL(db,false); + + Serializer rawMeta; + int metaSize = 2048; + rawMeta.resize(metaSize); + metaSize = db->getBinary("RawTxn", &*rawMeta.begin(), rawMeta.getLength()); + if (metaSize > rawMeta.getLength()) + { + rawMeta.resize(metaSize); + db->getBinary("RawTxn", &*rawMeta.begin(), rawMeta.getLength()); + }else rawMeta.resize(metaSize); + + TransactionMetaSet::pointer meta= boost::make_shared(txn->getID(), txn->getLedger(), rawMeta.getData()); + ret.push_back(std::make_pair(txn,meta)); } } - return affectedAccounts; + return ret; } std::vector diff --git a/src/cpp/ripple/NetworkOPs.h b/src/cpp/ripple/NetworkOPs.h index 191a21131..78d6aaabe 100644 --- a/src/cpp/ripple/NetworkOPs.h +++ b/src/cpp/ripple/NetworkOPs.h @@ -230,7 +230,7 @@ public: uint256 getConsensusLCL(); // client information retrieval functions - std::vector< std::pair > + std::vector< std::pair > getAccountTxs(const RippleAddress& account, uint32 minLedger, uint32 maxLedger); std::vector getLedgerAffectedAccounts(uint32 ledgerSeq); std::vector getLedgerTransactions(uint32 ledgerSeq); diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index 22be44e00..f28593b0f 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -1300,26 +1300,10 @@ Json::Value RPCHandler::doAccountTransactions(const Json::Value& params) // uint32 currentLedger = 0; for (std::vector< std::pair >::iterator it = txns.begin(), end = txns.end(); it != end; ++it) { - Json::objectValue obj; - obj["tx"]=it->first->getJson(1); - obj["meta"]=it->second->getJson(0); + Json::Value obj(Json::objectValue); + if(it->first) obj["tx"]=it->first->getJson(1); + if(it->second) obj["meta"]=it->second->getJson(0); ret["transactions"].append(obj); - - - Transaction::pointer txn = theApp->getMasterTransaction().fetch(it->second, true); - if (!txn) - { - ret["transactions"].append(it->second.GetHex()); - } - else - { - txn->setLedger(it->first); - ret["transactions"].append(txn->getJson(1)); - - TransactionMetaSet::pointer meta = boost::make_shared( - stTxn.getTransactionID(), lpAccepted->getLedgerSeq(), it.getVL()); - } - } return ret; #ifndef DEBUG diff --git a/src/cpp/ripple/Transaction.cpp b/src/cpp/ripple/Transaction.cpp index 304494826..2f3559575 100644 --- a/src/cpp/ripple/Transaction.cpp +++ b/src/cpp/ripple/Transaction.cpp @@ -245,6 +245,7 @@ Transaction::pointer Transaction::transactionFromSQL(const std::string& sql) return tr; } + Transaction::pointer Transaction::load(const uint256& id) { std::string sql = "SELECT LedgerSeq,Status,RawTxn FROM Transactions WHERE TransID='";