A Discrete-Event Network Simulator
API
ns3::SQLiteOutput Class Reference

A C++ interface towards an SQLITE database. More...

#include "sqlite-output.h"

+ Inheritance diagram for ns3::SQLiteOutput:
+ Collaboration diagram for ns3::SQLiteOutput:

Public Member Functions

 SQLiteOutput (const std::string &name)
 SQLiteOutput constructor. More...
 
 ~SQLiteOutput ()
 Destructor. More...
 
template<>
bool Bind (sqlite3_stmt *stmt, int pos, const double &value) const
 Bind a value to a sqlite statement. More...
 
template<>
bool Bind (sqlite3_stmt *stmt, int pos, const int &value) const
 Bind a value to a sqlite statement. More...
 
template<>
bool Bind (sqlite3_stmt *stmt, int pos, const long &value) const
 Bind a value to a sqlite statement. More...
 
template<>
bool Bind (sqlite3_stmt *stmt, int pos, const long long &value) const
 Bind a value to a sqlite statement. More...
 
template<>
bool Bind (sqlite3_stmt *stmt, int pos, const std::string &value) const
 Bind a value to a sqlite statement. More...
 
template<typename T >
bool Bind (sqlite3_stmt *stmt, int pos, const T &value) const
 Bind a value to a sqlite statement. More...
 
template<>
bool Bind (sqlite3_stmt *stmt, int pos, const Time &value) const
 Bind a value to a sqlite statement. More...
 
template<>
bool Bind (sqlite3_stmt *stmt, int pos, const uint16_t &value) const
 Bind a value to a sqlite statement. More...
 
template<>
bool Bind (sqlite3_stmt *stmt, int pos, const uint32_t &value) const
 Bind a value to a sqlite statement. More...
 
template<>
bool Bind (sqlite3_stmt *stmt, int pos, const uint8_t &value) const
 Bind a value to a sqlite statement. More...
 
template<>
int RetrieveColumn (sqlite3_stmt *stmt, int pos) const
 Retrieve a value from an executed statement. More...
 
template<typename T >
RetrieveColumn (sqlite3_stmt *stmt, int pos) const
 Retrieve a value from an executed statement. More...
 
void SetJournalInMemory ()
 Instruct SQLite to store the journal in memory. More...
 
bool SpinExec (const std::string &cmd) const
 Execute a command until the return value is OK or an ERROR. More...
 
bool SpinExec (sqlite3_stmt *stmt) const
 Execute a command until the return value is OK or an ERROR. More...
 
bool SpinPrepare (sqlite3_stmt **stmt, const std::string &cmd) const
 Prepare a statement. More...
 
bool WaitExec (const std::string &cmd) const
 Execute a command, waiting on a mutex. More...
 
bool WaitExec (sqlite3_stmt *stmt) const
 Execute a command, waiting on a mutex. More...
 
bool WaitPrepare (sqlite3_stmt **stmt, const std::string &cmd) const
 Prepare a statement, waiting on a mutex. More...
 
- Public Member Functions inherited from ns3::SimpleRefCount< SQLiteOutput >
 SimpleRefCount ()
 Default constructor. More...
 
 SimpleRefCount (const SimpleRefCount &o)
 Copy constructor. More...
 
uint32_t GetReferenceCount (void) const
 Get the reference count of the object. More...
 
SimpleRefCountoperator= (const SimpleRefCount &o)
 Assignment operator. More...
 
void Ref (void) const
 Increment the reference count. More...
 
void Unref (void) const
 Decrement the reference count. More...
 

Static Public Member Functions

static int SpinFinalize (sqlite3_stmt *stmt)
 Finalize a statement until the result is ok or an error. More...
 
static int SpinReset (sqlite3_stmt *stmt)
 Reset a statement until the result is ok or an error. More...
 
static int SpinStep (sqlite3_stmt *stmt)
 Execute a step operation on a statement until the result is ok or an error. More...
 

Protected Member Functions

int WaitExec (sqlite3 *db, const std::string &cmd) const
 Execute a command, waiting on a mutex. More...
 
int WaitExec (sqlite3 *db, sqlite3_stmt *stmt) const
 Execute a statement, waiting on a mutex. More...
 
int WaitPrepare (sqlite3 *db, sqlite3_stmt **stmt, const std::string &cmd) const
 Prepare a statement, waiting on a mutex. More...
 

Static Protected Member Functions

static bool CheckError (sqlite3 *db, int rc, const std::string &cmd, bool hardExit)
 Check any error in the db. More...
 
static void Error (sqlite3 *db, const std::string &cmd)
 Fail, printing an error message from sqlite. More...
 
static int SpinExec (sqlite3 *db, const std::string &cmd)
 Execute a command ignoring concurrency problems, retrying instead. More...
 
static int SpinExec (sqlite3 *db, sqlite3_stmt *stmt)
 Execute a Prepared Statement Object ignoring concurrency problems, retrying instead. More...
 
static int SpinPrepare (sqlite3 *db, sqlite3_stmt **stmt, const std::string &cmd)
 Preparing a command ignoring concurrency problems, retrying instead. More...
 

Private Attributes

sqlite3 * m_db
 Database pointer. More...
 
std::string m_dBname
 Database name. More...
 
std::mutex m_mutex
 Mutex. More...
 

Detailed Description

A C++ interface towards an SQLITE database.

The class is able to execute commands, and retrieve results, from an SQLITE database. The methods with the "Spin" prefix, in case of concurrent access to the database, will spin until the operation is applied. The methods with the "Wait" prefix will wait on a mutex.

If you run multiple simulations that write on the same database, it is recommended to use the "Wait" prefixed methods. Otherwise, if the access to the database is unique, using "Spin" methods will speed up database access.

The database is opened in the constructor, and closed in the deconstructor.

Definition at line 45 of file sqlite-output.h.

Constructor & Destructor Documentation

◆ SQLiteOutput()

ns3::SQLiteOutput::SQLiteOutput ( const std::string &  name)

SQLiteOutput constructor.

Parameters
namedatabase name

Definition at line 30 of file sqlite-output.cc.

References m_db, and NS_ABORT_MSG_UNLESS.

◆ ~SQLiteOutput()

ns3::SQLiteOutput::~SQLiteOutput ( )

Destructor.

Definition at line 36 of file sqlite-output.cc.

References m_db, and NS_ABORT_MSG_UNLESS.

Member Function Documentation

◆ Bind() [1/10]

template<>
bool ns3::SQLiteOutput::Bind ( sqlite3_stmt *  stmt,
int  pos,
const double value 
) const

Bind a value to a sqlite statement.

Parameters
stmtSqlite statement
posPosition of the bind argument inside the statement
valueValue to bind
Returns
true on success, false otherwise

Definition at line 143 of file sqlite-output.cc.

◆ Bind() [2/10]

template<>
bool ns3::SQLiteOutput::Bind ( sqlite3_stmt *  stmt,
int  pos,
const int &  value 
) const

Bind a value to a sqlite statement.

Parameters
stmtSqlite statement
posPosition of the bind argument inside the statement
valueValue to bind
Returns
true on success, false otherwise

Definition at line 215 of file sqlite-output.cc.

◆ Bind() [3/10]

template<>
bool ns3::SQLiteOutput::Bind ( sqlite3_stmt *  stmt,
int  pos,
const long &  value 
) const

Bind a value to a sqlite statement.

Parameters
stmtSqlite statement
posPosition of the bind argument inside the statement
valueValue to bind
Returns
true on success, false otherwise

Definition at line 167 of file sqlite-output.cc.

◆ Bind() [4/10]

template<>
bool ns3::SQLiteOutput::Bind ( sqlite3_stmt *  stmt,
int  pos,
const long long &  value 
) const

Bind a value to a sqlite statement.

Parameters
stmtSqlite statement
posPosition of the bind argument inside the statement
valueValue to bind
Returns
true on success, false otherwise

Definition at line 179 of file sqlite-output.cc.

◆ Bind() [5/10]

template<>
bool ns3::SQLiteOutput::Bind ( sqlite3_stmt *  stmt,
int  pos,
const std::string &  value 
) const

Bind a value to a sqlite statement.

Parameters
stmtSqlite statement
posPosition of the bind argument inside the statement
valueValue to bind
Returns
true on success, false otherwise

Definition at line 227 of file sqlite-output.cc.

◆ Bind() [6/10]

template<typename T >
bool ns3::SQLiteOutput::Bind ( sqlite3_stmt *  stmt,
int  pos,
const T &  value 
) const

Bind a value to a sqlite statement.

Parameters
stmtSqlite statement
posPosition of the bind argument inside the statement
valueValue to bind
Returns
true on success, false otherwise

Definition at line 122 of file sqlite-output.cc.

References NS_FATAL_ERROR.

◆ Bind() [7/10]

template<>
bool ns3::SQLiteOutput::Bind ( sqlite3_stmt *  stmt,
int  pos,
const Time value 
) const

Bind a value to a sqlite statement.

Parameters
stmtSqlite statement
posPosition of the bind argument inside the statement
valueValue to bind
Returns
true on success, false otherwise

Definition at line 131 of file sqlite-output.cc.

References ns3::Time::GetSeconds().

+ Here is the call graph for this function:

◆ Bind() [8/10]

template<>
bool ns3::SQLiteOutput::Bind ( sqlite3_stmt *  stmt,
int  pos,
const uint16_t &  value 
) const

Bind a value to a sqlite statement.

Parameters
stmtSqlite statement
posPosition of the bind argument inside the statement
valueValue to bind
Returns
true on success, false otherwise

Definition at line 191 of file sqlite-output.cc.

◆ Bind() [9/10]

template<>
bool ns3::SQLiteOutput::Bind ( sqlite3_stmt *  stmt,
int  pos,
const uint32_t value 
) const

Bind a value to a sqlite statement.

Parameters
stmtSqlite statement
posPosition of the bind argument inside the statement
valueValue to bind
Returns
true on success, false otherwise

Definition at line 155 of file sqlite-output.cc.

◆ Bind() [10/10]

template<>
bool ns3::SQLiteOutput::Bind ( sqlite3_stmt *  stmt,
int  pos,
const uint8_t &  value 
) const

Bind a value to a sqlite statement.

Parameters
stmtSqlite statement
posPosition of the bind argument inside the statement
valueValue to bind
Returns
true on success, false otherwise

Definition at line 203 of file sqlite-output.cc.

◆ CheckError()

bool ns3::SQLiteOutput::CheckError ( sqlite3 *  db,
int  rc,
const std::string &  cmd,
bool  hardExit 
)
staticprotected

Check any error in the db.

Parameters
dbDatabase
rcSqlite return code
cmdCommand
hardExitif true, will exit the program
Returns
true in case of error, false otherwise

Definition at line 318 of file sqlite-output.cc.

References second::cmd, and Error().

Referenced by SpinExec(), WaitExec(), and WaitPrepare().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ Error()

void ns3::SQLiteOutput::Error ( sqlite3 *  db,
const std::string &  cmd 
)
staticprotected

Fail, printing an error message from sqlite.

Parameters
dbDatabase
cmdCommand

Definition at line 312 of file sqlite-output.cc.

References second::cmd, and NS_ABORT_MSG.

Referenced by CheckError().

+ Here is the caller graph for this function:

◆ RetrieveColumn() [1/2]

template<>
double ns3::SQLiteOutput::RetrieveColumn ( sqlite3_stmt *  stmt,
int  pos 
) const

Retrieve a value from an executed statement.

Parameters
stmtsqlite statement
posColumn position
Returns
the value from the executed statement

Definition at line 99 of file sqlite-output.cc.

◆ RetrieveColumn() [2/2]

template<typename T >
T ns3::SQLiteOutput::RetrieveColumn ( sqlite3_stmt *  stmt,
int  pos 
) const

Retrieve a value from an executed statement.

Parameters
stmtsqlite statement
posColumn position
Returns
the value from the executed statement

Definition at line 91 of file sqlite-output.cc.

References NS_FATAL_ERROR.

◆ SetJournalInMemory()

void ns3::SQLiteOutput::SetJournalInMemory ( )

Instruct SQLite to store the journal in memory.

May lead to data losses in case of unexpected program exits.

Definition at line 45 of file sqlite-output.cc.

References NS_LOG_FUNCTION, and SpinExec().

+ Here is the call graph for this function:

◆ SpinExec() [1/4]

bool ns3::SQLiteOutput::SpinExec ( const std::string &  cmd) const

Execute a command until the return value is OK or an ERROR.

Ignore errors due to concurrency, the method will repeat the command instead

Parameters
cmdCommand
Returns
true in case of success

Definition at line 52 of file sqlite-output.cc.

References second::cmd, m_db, and SpinExec().

Referenced by SetJournalInMemory(), and SpinExec().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ SpinExec() [2/4]

int ns3::SQLiteOutput::SpinExec ( sqlite3 *  db,
const std::string &  cmd 
)
staticprotected

Execute a command ignoring concurrency problems, retrying instead.

Parameters
dbDatabase
cmdCommand
Returns
Sqlite error code

Definition at line 337 of file sqlite-output.cc.

References CheckError(), second::cmd, SpinFinalize(), SpinPrepare(), and SpinStep().

+ Here is the call graph for this function:

◆ SpinExec() [3/4]

int ns3::SQLiteOutput::SpinExec ( sqlite3 *  db,
sqlite3_stmt *  stmt 
)
staticprotected

Execute a Prepared Statement Object ignoring concurrency problems, retrying instead.

Parameters
dbDatabase
stmtPrepared Statement Object
Returns
Sqlite error code

Definition at line 363 of file sqlite-output.cc.

References CheckError(), SpinFinalize(), and SpinStep().

+ Here is the call graph for this function:

◆ SpinExec() [4/4]

bool ns3::SQLiteOutput::SpinExec ( sqlite3_stmt *  stmt) const

Execute a command until the return value is OK or an ERROR.

Parameters
stmtSQLite statement
Returns
true in case of success

Definition at line 58 of file sqlite-output.cc.

References CheckError(), m_db, and SpinExec().

+ Here is the call graph for this function:

◆ SpinFinalize()

int ns3::SQLiteOutput::SpinFinalize ( sqlite3_stmt *  stmt)
static

Finalize a statement until the result is ok or an error.

Ignores concurrency errors; it will retry instead of failing.

Parameters
stmtStatement
Returns
Sqlite error code

Definition at line 286 of file sqlite-output.cc.

Referenced by SpinExec(), and WaitExec().

+ Here is the caller graph for this function:

◆ SpinPrepare() [1/2]

int ns3::SQLiteOutput::SpinPrepare ( sqlite3 *  db,
sqlite3_stmt **  stmt,
const std::string &  cmd 
)
staticprotected

Preparing a command ignoring concurrency problems, retrying instead.

Parameters
dbDatabase
stmtStatement
cmdCommand to prepare
Returns
Sqlite error code

Definition at line 258 of file sqlite-output.cc.

References second::cmd.

◆ SpinPrepare() [2/2]

bool ns3::SQLiteOutput::SpinPrepare ( sqlite3_stmt **  stmt,
const std::string &  cmd 
) const

Prepare a statement.

Parameters
stmtSqlite statement
cmdCommand to prepare inside the statement
Returns
true in case of success

Definition at line 84 of file sqlite-output.cc.

References second::cmd, m_db, and SpinPrepare().

Referenced by SpinExec(), SpinPrepare(), and WaitExec().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ SpinReset()

int ns3::SQLiteOutput::SpinReset ( sqlite3_stmt *  stmt)
static

Reset a statement until the result is ok or an error.

Ignores concurrency errors: it will retry instead of failing.

Parameters
stmtStatement
Returns
the return code of reset

Definition at line 298 of file sqlite-output.cc.

◆ SpinStep()

int ns3::SQLiteOutput::SpinStep ( sqlite3_stmt *  stmt)
static

Execute a step operation on a statement until the result is ok or an error.

Ignores concurrency errors; it will retry instead of failing.

Parameters
stmtStatement
Returns
Sqlite error core

Definition at line 273 of file sqlite-output.cc.

Referenced by SpinExec(), and WaitExec().

+ Here is the caller graph for this function:

◆ WaitExec() [1/4]

bool ns3::SQLiteOutput::WaitExec ( const std::string &  cmd) const

Execute a command, waiting on a mutex.

Parameters
cmdCommand to be executed
Returns
true in case of success

Definition at line 65 of file sqlite-output.cc.

References CheckError(), second::cmd, m_db, and WaitExec().

Referenced by WaitExec().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ WaitExec() [2/4]

int ns3::SQLiteOutput::WaitExec ( sqlite3 *  db,
const std::string &  cmd 
) const
protected

Execute a command, waiting on a mutex.

Parameters
dbDatabase
cmdCommand
Returns
Sqlite error code

Definition at line 399 of file sqlite-output.cc.

References CheckError(), second::cmd, m_mutex, SpinFinalize(), SpinPrepare(), and SpinStep().

+ Here is the call graph for this function:

◆ WaitExec() [3/4]

int ns3::SQLiteOutput::WaitExec ( sqlite3 *  db,
sqlite3_stmt *  stmt 
) const
protected

Execute a statement, waiting on a mutex.

Parameters
dbDatabase
stmtStatement
Returns
Sqlite error code

Definition at line 378 of file sqlite-output.cc.

References CheckError(), m_mutex, SpinFinalize(), and SpinStep().

+ Here is the call graph for this function:

◆ WaitExec() [4/4]

bool ns3::SQLiteOutput::WaitExec ( sqlite3_stmt *  stmt) const

Execute a command, waiting on a mutex.

Parameters
stmtSqlite3 statement to be executed
Returns
true in case of success

Definition at line 72 of file sqlite-output.cc.

References m_db, and WaitExec().

+ Here is the call graph for this function:

◆ WaitPrepare() [1/2]

int ns3::SQLiteOutput::WaitPrepare ( sqlite3 *  db,
sqlite3_stmt **  stmt,
const std::string &  cmd 
) const
protected

Prepare a statement, waiting on a mutex.

Parameters
dbDatabase
stmtStatement
cmdCommand to prepare
Returns
Sqlite error code

Definition at line 237 of file sqlite-output.cc.

References CheckError(), second::cmd, and m_mutex.

+ Here is the call graph for this function:

◆ WaitPrepare() [2/2]

bool ns3::SQLiteOutput::WaitPrepare ( sqlite3_stmt **  stmt,
const std::string &  cmd 
) const

Prepare a statement, waiting on a mutex.

Parameters
stmtSqlite statement
cmdCommand to prepare inside the statement
Returns
true in case of success

Definition at line 78 of file sqlite-output.cc.

References second::cmd, m_db, and WaitPrepare().

Referenced by WaitPrepare().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Member Data Documentation

◆ m_db

sqlite3* ns3::SQLiteOutput::m_db
private
Initial value:
{
nullptr
}

Database pointer.

Definition at line 232 of file sqlite-output.h.

Referenced by SQLiteOutput(), ~SQLiteOutput(), SpinExec(), SpinPrepare(), WaitExec(), and WaitPrepare().

◆ m_dBname

std::string ns3::SQLiteOutput::m_dBname
private

Database name.

Definition at line 230 of file sqlite-output.h.

◆ m_mutex

std::mutex ns3::SQLiteOutput::m_mutex
mutableprivate

Mutex.

Definition at line 231 of file sqlite-output.h.

Referenced by WaitExec(), and WaitPrepare().


The documentation for this class was generated from the following files: