Fledge
An open source edge computing platform for industrial users
Connection Class Reference

Public Member Functions

 Connection ()
 Create a database connection. More...
 
 ~Connection ()
 Destructor for the database connection. More...
 
bool retrieve (const std::string &schema, const std::string &table, const std::string &condition, std::string &resultSet)
 
bool retrieveReadings (const std::string &condition, std::string &resultSet)
 
int insert (const std::string &table, const std::string &data)
 Insert data into a table.
 
int update (const std::string &table, const std::string &data)
 
int deleteRows (const std::string &table, const std::string &condition)
 
int appendReadings (const char *readings)
 Append a set of readings to the readings table.
 
bool fetchReadings (unsigned long id, unsigned int blksize, std::string &resultSet)
 Fetch a block of readings from the reading table. More...
 
unsigned int purgeReadings (unsigned long age, unsigned int flags, unsigned long sent, std::string &results)
 Purge readings from the reading table.
 
unsigned int purgeReadingsByRows (unsigned long rowcount, unsigned int flags, unsigned long sent, std::string &results)
 Purge readings from the reading table leaving a number of rows equal to the parameter rows. More...
 
unsigned long purgeOperation (const char *sql, const char *logSection, const char *phase, bool retrieve)
 Execute a SQL command for the purge task.
 
long tableSize (const std::string &table)
 
void setTrace (bool flag)
 Enable or disable the tracing of SQL statements. More...
 
int create_table_snapshot (const std::string &table, const std::string &id)
 
int load_table_snapshot (const std::string &table, const std::string &id)
 
int delete_table_snapshot (const std::string &table, const std::string &id)
 
bool get_table_snapshots (const std::string &table, std::string &resultSet)
 
bool aggregateQuery (const rapidjson::Value &payload, std::string &resultSet)
 
int create_schema (const std::string &payload)
 Create schema of tables. More...
 
bool findSchemaFromDB (const std::string &service, const std::string &name, std::string &resultSet)
 Find existing payload schema from the DB fledge.service_schema table. More...
 
unsigned int purgeReadingsAsset (const std::string &asset)
 
void setMaxReadingRows (long rows)
 
bool parseDatabaseStorageSchema (int &version, const std::string &res, std::unordered_map< std::string, std::unordered_set< columnRec, columnRecHasher, columnRecComparator > > &tableColumnMap, std::unordered_map< std::string, std::vector< std::string > > &tableIndexMap, bool &schemaCreationRequest)
 This function parses the fledge.service_schema table payload retrieved in and outputs a set of data structures containg the information about the tables and their columns and indexes. More...
 
 Connection (ConnectionManager *manager)
 Create a SQLite3 database connection. More...
 
bool createSchema (const std::string &schema)
 Create schema and populate with tables and indexes as defined in the JSON schema definition. More...
 
bool retrieve (const std::string &schema, const std::string &table, const std::string &condition, std::string &resultSet)
 
int insert (const std::string &schema, const std::string &table, const std::string &data)
 Insert data into a table.
 
int update (const std::string &schema, const std::string &table, const std::string &data)
 
int deleteRows (const std::string &schema, const std::string &table, const std::string &condition)
 
int create_table_snapshot (const std::string &table, const std::string &id)
 
int load_table_snapshot (const std::string &table, const std::string &id)
 
int delete_table_snapshot (const std::string &table, const std::string &id)
 
bool get_table_snapshots (const std::string &table, std::string &resultSet)
 
int appendReadings (const char *readings)
 
int readingStream (ReadingStream **readings, bool commit)
 Append a stream of readings to SQLite db. More...
 
bool fetchReadings (unsigned long id, unsigned int blksize, std::string &resultSet)
 
bool retrieveReadings (const std::string &condition, std::string &resultSet)
 
unsigned int purgeReadings (unsigned long age, unsigned int flags, unsigned long sent, std::string &results)
 
unsigned int purgeReadingsByRows (unsigned long rowcount, unsigned int flags, unsigned long sent, std::string &results)
 
long tableSize (const std::string &table)
 
void setTrace (bool)
 
bool formatDate (char *formatted_date, size_t formatted_date_size, const char *date)
 
bool aggregateQuery (const rapidjson::Value &payload, std::string &resultSet)
 
bool getNow (std::string &Now)
 
sqlite3 * getDbHandle ()
 
void setUsedDbId (int dbId)
 Append a set of readings to the readings table.
 
void shutdownAppendReadings ()
 Wait until all the threads executing the appendReadings are shutted down.
 
unsigned int purgeReadingsAsset (const std::string &asset)
 
bool vacuum ()
 Execute a SQLite VACUUM command on the database. More...
 
bool supportsReadings ()
 
bool createSchema (const std::string &schema)
 
bool retrieve (const std::string &schema, const std::string &table, const std::string &condition, std::string &resultSet)
 
int insert (const std::string &schema, const std::string &table, const std::string &data)
 
int update (const std::string &schema, const std::string &table, const std::string &data)
 
int deleteRows (const std::string &schema, const std::string &table, const std::string &condition)
 
int create_table_snapshot (const std::string &table, const std::string &id)
 
int load_table_snapshot (const std::string &table, const std::string &id)
 
int delete_table_snapshot (const std::string &table, const std::string &id)
 
bool get_table_snapshots (const std::string &table, std::string &resultSet)
 
int appendReadings (const char *readings)
 
int readingStream (ReadingStream **readings, bool commit)
 
bool fetchReadings (unsigned long id, unsigned int blksize, std::string &resultSet)
 
bool retrieveReadings (const std::string &condition, std::string &resultSet)
 
unsigned int purgeReadings (unsigned long age, unsigned int flags, unsigned long sent, std::string &results)
 
unsigned int purgeReadingsByRows (unsigned long rowcount, unsigned int flags, unsigned long sent, std::string &results)
 
long tableSize (const std::string &table)
 
void setTrace (bool)
 
bool formatDate (char *formatted_date, size_t formatted_date_size, const char *date)
 
bool aggregateQuery (const rapidjson::Value &payload, std::string &resultSet)
 
bool getNow (std::string &Now)
 
unsigned int purgeReadingsAsset (const std::string &asset)
 
bool vacuum ()
 
void setPurgeBlockSize (unsigned long purgeBlockSize)
 

Static Public Member Functions

static bool formatDate (char *formatted_date, size_t formatted_date_size, const char *date)
 Format a date to a fixed format with milliseconds, microseconds and timezone expressed, examples : More...
 

Constructor & Destructor Documentation

◆ Connection() [1/2]

Connection::Connection ( )

Create a database connection.

Create a SQLite3 database connection.

Make a connection to the database and check backend connection was successfully made Note: we assume the database already exists, so the flag SQLITE_OPEN_CREATE is not added in sqlite3_open_v2 call

◆ ~Connection()

Connection::~Connection ( )

Destructor for the database connection.

Close the connection to Postgres

Close the connection to SQLite3 db

◆ Connection() [2/2]

Connection::Connection ( ConnectionManager manager)

Create a SQLite3 database connection.

Make a connection to the database and check backend connection was successfully made Note: we assume the database already exists, so the flag SQLITE_OPEN_CREATE is not added in sqlite3_open_v2 call

Member Function Documentation

◆ create_schema()

int Connection::create_schema ( const std::string &  payload)

Create schema of tables.

Parameters
payloadThe payload containing information about schema of tables to create
Returns
true if the tables can be crated successfully

◆ createSchema()

bool Connection::createSchema ( const std::string &  schema)

Create schema and populate with tables and indexes as defined in the JSON schema definition.

Parameters
schemaThe schema defintion as a JSON document containing information about schema of tables to create
Returns
true if the schema was created

◆ fetchReadings()

bool Connection::fetchReadings ( unsigned long  id,
unsigned int  blksize,
std::string &  resultSet 
)

Fetch a block of readings from the reading table.

Fetch a block of readings from the reading table It might not work with SQLite 3.

Fetch, used by the north side, returns timestamp in UTC.

NOTE : it expects to handle a date having a fixed format with milliseconds, microseconds and timezone expressed, like for example :

2019-01-11 15:45:01.123456+01:00

◆ findSchemaFromDB()

bool Connection::findSchemaFromDB ( const std::string &  service,
const std::string &  schema,
std::string &  resultSet 
)

Find existing payload schema from the DB fledge.service_schema table.

Parameters
serviceThe string containing service name
nameThe string containing schema name
Returns
resultSet string containing the output of the sql query executed

◆ formatDate()

bool Connection::formatDate ( char *  formatted_date,
size_t  buffer_size,
const char *  date 
)
static

Format a date to a fixed format with milliseconds, microseconds and timezone expressed, examples :

case - formatted |2019-01-01 10:01:01.000000+00:00| date |2019-01-01 10:01:01| case - formatted |2019-02-01 10:02:01.000000+00:00| date |2019-02-01 10:02:01.0| case - formatted |2019-02-02 10:02:02.841000+00:00| date |2019-02-02 10:02:02.841| case - formatted |2019-02-03 10:02:03.123456+00:00| date |2019-02-03 10:02:03.123456| case - formatted |2019-03-01 10:03:01.100000+00:00| date |2019-03-01 10:03:01.1+00:00| case - formatted |2019-03-02 10:03:02.123000+00:00| date |2019-03-02 10:03:02.123+00:00| case - formatted |2019-03-03 10:03:03.123456+00:00| date |2019-03-03 10:03:03.123456+00:00| case - formatted |2019-03-04 10:03:04.123456+01:00| date |2019-03-04 10:03:04.123456+01:00| case - formatted |2019-03-05 10:03:05.123456-01:00| date |2019-03-05 10:03:05.123456-01:00| case - formatted |2019-03-04 10:03:04.123456+02:30| date |2019-03-04 10:03:04.123456+02:30| case - formatted |2019-03-05 10:03:05.123456-02:30| date |2019-03-05 10:03:05.123456-02:30|

Parameters
outfalse if the date is invalid

◆ parseDatabaseStorageSchema()

bool Connection::parseDatabaseStorageSchema ( int &  version,
const std::string &  res,
std::unordered_map< std::string, std::unordered_set< columnRec, columnRecHasher, columnRecComparator > > &  tableColumnMap,
std::unordered_map< std::string, std::vector< std::string > > &  tableIndexMap,
bool &  schemaCreationRequest 
)

This function parses the fledge.service_schema table payload retrieved in and outputs a set of data structures containg the information about the tables and their columns and indexes.

Parameters
[out]versionversion retrieved form payload
[in]resoutput containing payload information
[out]tableColumnMapmap[tablename —> set of columns]
[out]tableIndexMapmap[tablename —> indexes] where each index is a comma separated string of columns

◆ purgeReadingsByRows()

unsigned int Connection::purgeReadingsByRows ( unsigned long  rowcount,
unsigned int  flags,
unsigned long  sent,
std::string &  results 
)

Purge readings from the reading table leaving a number of rows equal to the parameter rows.

Purge readings from the reading table.

◆ readingStream()

int Connection::readingStream ( ReadingStream **  readings,
bool  commit 
)

Append a stream of readings to SQLite db.

Parameters
readingsreadings to store into the SQLite db
commitif true a database commit is executed and a new transaction will be opened at the next execution

TODO: the current code should be adapted to use the multi databases/tables implementation

Parameters
readingsreadings to store into the SQLite db
commitif true a database commit is executed and a new transaction will be opened at the next execution

◆ setTrace()

void Connection::setTrace ( bool  flag)
inline

Enable or disable the tracing of SQL statements.

Parameters
flagDesired state of the SQL trace flag

◆ vacuum()

bool Connection::vacuum ( )

Execute a SQLite VACUUM command on the database.

Add a vacuum funtion, this is not needed for SQLite In Memory, but is here to satisfy the interface requirement.


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