30 filepath(path), db(nullptr), stmt(nullptr), database_open(true)
33 std::filesystem::remove(filepath);
36 int error_code = sqlite3_open(filepath.c_str(), &db);
37 if (error_code != SQLITE_OK)
39 ARMARX_ERROR_S <<
"Error opening database: " << sqlite3_errmsg(db);
42 database_open =
false;
47 char* zErrMsg =
nullptr;
48 std::string sql_create_table =
"CREATE TABLE TopicData("
49 "ID INTEGER PRIMARY KEY,"
54 error_code = sqlite3_exec(db, sql_create_table.c_str(),
nullptr,
nullptr, &zErrMsg);
55 if (error_code != SQLITE_OK)
61 sqlite3_free(zErrMsg);
63 database_open =
false;
66 sqlite3_free(zErrMsg);
70 sql_create_table =
"CREATE TABLE Topics(TOPIC TEXT);";
71 error_code = sqlite3_exec(db, sql_create_table.c_str(),
nullptr,
nullptr, &zErrMsg);
72 if (error_code != SQLITE_OK)
78 sqlite3_free(zErrMsg);
80 database_open =
false;
83 sqlite3_free(zErrMsg);
86 std::string sql_insert_into =
87 "INSERT INTO TopicData (ID, TIME, TOPIC, OPERATIONNAME, DATA) VALUES (?, ?, ?, ?, ?);";
88 error_code = sqlite3_prepare_v2(db, sql_insert_into.c_str(), -1, &stmt,
nullptr);
89 if (error_code != SQLITE_OK)
91 ARMARX_ERROR_S <<
"Can not prepare sql statement: " << sqlite3_errmsg(db);
93 sqlite3_finalize(stmt);
95 database_open =
false;
101 error_code = sqlite3_exec(db,
"BEGIN TRANSACTION",
nullptr,
nullptr, &zErrMsg);
102 if (error_code != SQLITE_OK)
108 sqlite3_free(zErrMsg);
110 database_open =
false;
113 sqlite3_free(zErrMsg);
123 char* zErrMsg =
nullptr;
124 int error_code = sqlite3_exec(db,
"END TRANSACTION",
nullptr,
nullptr, &zErrMsg);
125 if (error_code != SQLITE_OK)
132 sqlite3_free(zErrMsg);
135 sqlite3_finalize(stmt);
139 std::filesystem::path
161 char* zErrMsg =
nullptr;
165 std::string sql_insert_table =
166 "INSERT INTO Topics VALUES ('" + topicData.
topicName +
"');";
167 int error_code = sqlite3_exec(db, sql_insert_table.c_str(),
nullptr,
nullptr, &zErrMsg);
168 if (error_code != SQLITE_OK)
174 sqlite3_free(zErrMsg);
175 sqlite3_finalize(stmt);
177 database_open =
false;
180 sqlite3_free(zErrMsg);
189 int error_code_ID = sqlite3_bind_null(stmt, 1);
190 int error_code_time =
191 sqlite3_bind_int64(stmt, 2, (sqlite3_int64)topicData.
timestamp.toMicroSeconds());
192 int error_code_topic =
193 sqlite3_bind_text(stmt, 3, topicData.
topicName.c_str(), -1, SQLITE_STATIC);
194 int error_code_operation =
195 sqlite3_bind_text(stmt, 4, topicData.
operationName.c_str(), -1, SQLITE_STATIC);
196 int error_code_data = sqlite3_bind_blob(
197 stmt, 5, topicData.
inParams.data(), topicData.
inParams.size(), SQLITE_STATIC);
199 if (error_code_ID != SQLITE_OK || error_code_time != SQLITE_OK ||
200 error_code_topic != SQLITE_OK || error_code_operation != SQLITE_OK ||
201 error_code_data != SQLITE_OK)
204 sqlite3_finalize(stmt);
206 database_open =
false;
211 int error_code_step = sqlite3_step(stmt);
212 if (error_code_step != SQLITE_DONE)
214 ARMARX_ERROR_S <<
"Can not execute sql statement: " << sqlite3_errmsg(db);
215 sqlite3_finalize(stmt);
217 database_open =
false;
225 sqlite3_clear_bindings(stmt);