diff trajectorymanagement/src/DBSQLiteAccess.h @ 1159:e1e7acef8eab

moved trajectory management library into Traffic Intelligence
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Mon, 22 Feb 2021 22:09:35 -0500
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/trajectorymanagement/src/DBSQLiteAccess.h	Mon Feb 22 22:09:35 2021 -0500
@@ -0,0 +1,185 @@
+#ifndef DBSQLITEACCESS_H_
+#define DBSQLITEACCESS_H_
+
+#include "opencv2/core/core.hpp"
+
+#include <sqlite3.h>
+
+#include <sstream>
+#include <string>
+#include <vector>
+#include <map>
+
+template<typename T> class TrajectoryElement;
+
+/**
+ * DBSQLiteAccess class.
+ *
+ * The DBSQLiteAccess class allows to perform basic operations on the database like connecting, disconnecting, creating a table, deleting a table or executing other statements.
+ */
+class DBSQLiteAccess
+{
+public:
+	/**
+	 * Constructor.
+	 */
+	DBSQLiteAccess();
+
+	/**
+	 * Destructor.
+	 */
+	virtual ~DBSQLiteAccess();
+
+	/**
+	 * Connect to the database.
+	 *
+	 * @param[in] database name of the database
+	 * @return information whether the operation was successful
+	 */
+	bool connect(const char *database);
+
+	/**
+	 * Inform whether the connection to the database has been established.
+	 *
+	 * @return information whether the connection to the database has been established
+	 */
+	bool isConnected();
+
+	/**
+	 * Disconnect from the database.
+	 *
+	 * @return information whether the operation was successful
+	 */
+	bool disconnect();
+
+	int sqliteErrCode();
+
+	/**
+	 * Get error message.
+	 *
+	 * @return last error message
+	 */
+	const char *sqliteErrMsg();
+
+	/**
+	 * Execute statement.
+	 *
+	 * @param[in] statement statement
+	 * @return information whether the operation was successful
+	 */
+	bool executeStatement(const char *statement);
+
+	bool executeStatementGetSingleValue(const char *statement, std::string& result);
+
+	template<typename T>
+	bool executeStatementGetSingleValue(const char *statement, T& result)
+	{
+		char **dbResult = 0;
+		int nrows, ncols;
+		bool success = executeStatement(statement, &dbResult, nrows, ncols);
+
+		if (success && nrows == 1 && ncols == 1 && dbResult[1] != NULL)
+		{
+		  std::istringstream is(dbResult[1]);
+		  is >> result;
+		}
+		else
+		{
+			success = false;
+		}
+
+		sqlite3_free_table(dbResult);
+
+		return success;
+	}
+
+	/**
+	 * Execute statement and get results.
+	 *
+	 * @param[in] statement statement
+	 * @return result as a matrix of strings
+	 */
+	bool executeStatementGetMatrix(const char *statement, std::vector<std::vector<std::string> >& result);
+
+	/**
+	 * Execute statement and get results of a select.
+	 *
+	 * @param[in] statement statement
+	 * @return result as a matrix of strings
+	 */
+	bool executeStatementSelect(std::vector<std::vector<std::string> >& result, const char *statement);
+
+	/** Execute statement and get result of select as a list of integers (eg trajectory ids) */
+	bool executeStatementSelectIntegers(std::vector<int>& result, const char *statement);
+
+	/** Execute statement and get result of select as a list of integers (more than one per row, eg trajectory first and last frames) */
+	bool executeStatementSelectMultipleIntegers(std::vector<std::vector<int> >& result, const char *statement);
+
+	/**
+	 * Execute statement and get results of a select for two integers followed by two floats.
+	 *
+	 * @param[in] statement statement
+	 * @return result as a matrix of strings
+	 */
+	bool executeStatementSelectTrajectoryElements(std::map<int, std::vector<TrajectoryElement<cv::Point2f> > >& trajectoryElements, const char *statement);
+
+/**
+	 * Execute statement and get results of a select for two integers (prototype id and matched trajectory id)
+	 *
+	 * @param[in] 
+	 * @return result as a matrix of strings
+	 */
+	bool executeStatementSelectPrototypeMatches(std::multimap<int,int>& matches, const char *statement);
+
+	/**
+	 * Execute begin transaction command.
+	 *
+	 * @return information whether the operation was successful
+	 */
+	bool begin();
+
+	/**
+	 * Execute end transaction command.
+	 *
+	 * @return information whether the operation was successful
+	 */
+	bool end();
+
+	/**
+	 * Execute rollback transaction command.
+	 *
+	 * @return information whether the operation was successful
+	 */
+	bool rollback();
+
+	/**
+	 * Execute commit transaction command.
+	 *
+	 * @return information whether the operation was successful
+	 */
+	bool commit();
+
+private:
+	/**
+	 * Pointer to SQLite3 class.
+	 */
+	sqlite3 *db;
+
+	/**
+	 * Information whether a connection has been established.
+	 */
+	bool connected;
+
+	/**
+	 * Execute statement and get result.
+	 *
+	 * @param[in] statement statement
+	 * @param[out] result results
+	 * @param[out] nrows of rows in the returned data \a result
+	 * @param[out] ncols of columns in the returned data \a result
+	 * @return information whether the operation was successful
+	 */
+	bool executeStatement(const char *statement, char ***result, int &nrows, int &ncols);
+};
+
+#endif /* DBSQLITEACCESS_H_ */