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, const std::string &semName)
 SQLiteOutput constructor. More...
 
 ~SQLiteOutput ()
 Destructor. 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
 
template<>
bool Bind (sqlite3_stmt *stmt, int pos, const double &value) const
 
template<>
bool Bind (sqlite3_stmt *stmt, int pos, const uint32_t &value) const
 
template<>
bool Bind (sqlite3_stmt *stmt, int pos, const long &value) const
 
template<>
bool Bind (sqlite3_stmt *stmt, int pos, const long long &value) const
 
template<>
bool Bind (sqlite3_stmt *stmt, int pos, const uint16_t &value) const
 
template<>
bool Bind (sqlite3_stmt *stmt, int pos, const uint8_t &value) const
 
template<>
bool Bind (sqlite3_stmt *stmt, int pos, const int &value) const
 
template<>
bool Bind (sqlite3_stmt *stmt, int pos, const std::string &value) const
 
template<>
int RetrieveColumn (sqlite3_stmt *stmt, int pos) const
 
template<>
uint32_t RetrieveColumn (sqlite3_stmt *stmt, int pos) const
 
template<>
double RetrieveColumn (sqlite3_stmt *stmt, int pos) const
 
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 system semaphore. More...
 
bool WaitExec (sqlite3_stmt *stmt) const
 Execute a command, waiting on a system semaphore. More...
 
bool WaitPrepare (sqlite3_stmt **stmt, const std::string &cmd) const
 Prepare a statement, waiting on a system semaphore. 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 system semaphore. More...
 
int WaitExec (sqlite3 *db, sqlite3_stmt *stmt) const
 Execute a statement, waiting on a system semaphore. More...
 
int WaitPrepare (sqlite3 *db, sqlite3_stmt **stmt, const std::string &cmd) const
 Prepare a statement, waiting on a system semaphore. More...
 

Static Protected Member Functions

static bool CheckError (sqlite3 *db, int rc, const std::string &cmd, sem_t *sem, 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)
 
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::string m_semName
 System semaphore name. 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 system semaphore.

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,
const std::string &  semName 
)

SQLiteOutput constructor.

Parameters
namedatabase name
semNamesystem semaphore name

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

References m_db, and NS_ABORT_MSG_UNLESS.

◆ ~SQLiteOutput()

ns3::SQLiteOutput::~SQLiteOutput ( )

Destructor.

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

References m_db, and NS_ABORT_MSG_UNLESS.

Member Function Documentation

◆ Bind() [1/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

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

References NS_FATAL_ERROR, and NS_UNUSED.

◆ Bind() [2/10]

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

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

References ns3::Time::GetSeconds().

+ Here is the call graph for this function:

◆ Bind() [3/10]

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

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

◆ Bind() [4/10]

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

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

◆ Bind() [5/10]

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

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

◆ Bind() [6/10]

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

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

◆ Bind() [7/10]

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

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

◆ Bind() [8/10]

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

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

◆ Bind() [9/10]

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

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

◆ Bind() [10/10]

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

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

◆ CheckError()

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

Check any error in the db.

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

Definition at line 327 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 321 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/4]

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

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

◆ RetrieveColumn() [2/4]

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

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

◆ RetrieveColumn() [3/4]

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

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

◆ RetrieveColumn() [4/4]

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

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

References NS_FATAL_ERROR, and NS_UNUSED.

◆ 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 47 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 54 of file sqlite-output.cc.

References second::cmd, and m_db.

Referenced by SetJournalInMemory(), and SpinExec().

+ Here is the caller graph for this function:

◆ SpinExec() [2/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 60 of file sqlite-output.cc.

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

+ Here is the call graph for this function:

◆ SpinExec() [3/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 351 of file sqlite-output.cc.

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

+ Here is the call graph for this function:

◆ SpinExec() [4/4]

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

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

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

+ 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 295 of file sqlite-output.cc.

Referenced by SpinExec(), and WaitExec().

+ Here is the caller graph for this function:

◆ SpinPrepare() [1/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 86 of file sqlite-output.cc.

References second::cmd, and m_db.

Referenced by SpinExec(), and WaitExec().

+ Here is the caller graph for this function:

◆ SpinPrepare() [2/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 267 of file sqlite-output.cc.

References second::cmd.

◆ 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 307 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 282 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 system semaphore.

Parameters
cmdCommand to be executed
Returns
true in case of success

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

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

Referenced by WaitExec().

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

◆ WaitExec() [2/4]

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

Execute a command, waiting on a system semaphore.

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

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

References m_db, and WaitExec().

+ Here is the call graph for this function:

◆ WaitExec() [3/4]

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

Execute a command, waiting on a system semaphore.

Parameters
dbDatabase
cmdCommand
Returns
Sqlite error code

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

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

+ Here is the call graph for this function:

◆ WaitExec() [4/4]

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

Execute a statement, waiting on a system semaphore.

Parameters
dbDatabase
stmtStatement
Returns
Sqlite error code

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

References CheckError(), m_semName, NS_ABORT_MSG_IF, NS_FATAL_ERROR, SpinFinalize(), and SpinStep().

+ Here is the call graph for this function:

◆ WaitPrepare() [1/2]

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

Prepare a statement, waiting on a system semaphore.

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

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

References second::cmd, and m_db.

◆ WaitPrepare() [2/2]

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

Prepare a statement, waiting on a system semaphore.

Parameters
dbDatabase
stmtStatement
cmdCommand to prepare
Returns
Sqlite error code

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

References CheckError(), second::cmd, m_semName, NS_ABORT_MSG_IF, and NS_FATAL_ERROR.

+ Here is the call graph for this function:

Member Data Documentation

◆ m_db

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

Database pointer.

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

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

◆ m_dBname

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

Database name.

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

◆ m_semName

std::string ns3::SQLiteOutput::m_semName
private

System semaphore name.

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

Referenced by WaitExec(), and WaitPrepare().


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