20#include <xrpld/app/ledger/LedgerMaster.h>
21#include <xrpld/app/main/Application.h>
22#include <xrpld/app/misc/HashRouter.h>
23#include <xrpld/app/misc/Transaction.h>
24#include <xrpld/app/rdb/backend/SQLiteDatabase.h>
25#include <xrpld/app/tx/apply.h>
26#include <xrpld/core/DatabaseCon.h>
27#include <xrpl/basics/Log.h>
28#include <xrpl/basics/safe_cast.h>
29#include <xrpl/json/json_reader.h>
30#include <xrpl/protocol/ErrorCodes.h>
31#include <xrpl/protocol/Feature.h>
32#include <xrpl/protocol/jss.h>
40 : mTransaction(stx), mApp(app), j_(app.journal(
"Ledger"))
44 mTransactionID = mTransaction->getTransactionID();
69 char const c = (status) ? (*status)[0] : safe_cast<char>(
txnSqlUnknown);
87 "ripple::Transaction::sqlTransactionStatus : unknown transaction "
94 boost::optional<std::uint64_t>
const& ledgerSeq,
95 boost::optional<std::string>
const& status,
100 rangeCheckedCast<std::uint32_t>(ledgerSeq.value_or(0));
103 auto txn = std::make_shared<STTx const>(it);
105 auto tr = std::make_shared<Transaction>(txn, reason, app);
108 tr->setLedger(inLedger);
117 return load(
id, app, std::nullopt, ec);
147 Throw<std::runtime_error>(
"Failed to get relational database");
150 return db->getTransaction(
id,
range, ec);
178 ret[jss::date] = ct->time_since_epoch().count();
virtual LedgerMaster & getLedgerMaster()=0
virtual RelationalDatabase & getRelationalDatabase()=0
std::optional< NetClock::time_point > getCloseTimeBySeq(LedgerIndex ledgerIndex)
static Transaction::pointer transactionFromSQL(boost::optional< std::uint64_t > const &ledgerSeq, boost::optional< std::string > const &status, Blob const &rawTxn, Application &app)
Transaction(std::shared_ptr< STTx const > const &, std::string &, Application &) noexcept
static std::variant< std::pair< std::shared_ptr< Transaction >, std::shared_ptr< TxMeta > >, TxSearched > load(uint256 const &id, Application &app, error_code_i &ec)
static TransStatus sqlTransactionStatus(boost::optional< std::string > const &status)
Json::Value getJson(JsonOptions options, bool binary=false) const
std::shared_ptr< STTx const > mTransaction
void setStatus(TransStatus status, std::uint32_t ledgerSeq)
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
boost::icl::closed_interval< T > ClosedInterval
A closed interval over the domain T.
std::enable_if_t< std::is_same< T, char >::value||std::is_same< T, unsigned char >::value, Slice > makeSlice(std::array< T, N > const &a)
ClosedInterval< T > range(T low, T high)
Create a closed range interval.
Note, should be treated as flags that can be | and &.