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<>
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 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)
 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::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 30 of file sqlite-output.cc.

References m_db, and NS_ABORT_MSG_UNLESS.

◆ ~SQLiteOutput()

ns3::SQLiteOutput::~SQLiteOutput ( )

Destructor.

Definition at line 37 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 144 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 216 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 168 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 180 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 228 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 123 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 132 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 192 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 156 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 204 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 333 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 327 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 100 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 92 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 46 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 53 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 357 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 383 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 59 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 301 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 273 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 85 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 313 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 288 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 66 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 system semaphore.

Parameters
dbDatabase
cmdCommand
Returns
Sqlite error code

Definition at line 433 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() [3/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 398 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:

◆ WaitExec() [4/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 73 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 system semaphore.

Parameters
dbDatabase
stmtStatement
cmdCommand to prepare
Returns
Sqlite error code

Definition at line 238 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:

◆ WaitPrepare() [2/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 79 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 228 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 226 of file sqlite-output.h.

◆ m_semName

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

System semaphore name.

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

Referenced by WaitExec(), and WaitPrepare().


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