ret = sqlite3_exec(da->db, "CREATE TABLE IF NOT EXISTS " META_TABLE
"(id INTEGER PRIMARY KEY, signature TEXT)"
";", NULL, 0, &sqlite_err);
- if (ret < 0) {
+ if (ret < 0 || sqlite_err) {
log_error("SQL Error: %s\n", sqlite3_errmsg(da->db));
sqlite3_free(sqlite_err);
goto close_db;
int _id;
query = da->stmts[STMT_FIND_TABLE];
- sqlite3_reset(query);
- sqlite3_bind_text(query, 1, signature, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_reset(query);
+ if (ret != SQLITE_OK)
+ log_error("Last call with this query failed: %s", sqlite3_expanded_sql(query));
+
+ ret = sqlite3_bind_text(query, 1, signature, -1, SQLITE_TRANSIENT);
+ if (ret != SQLITE_OK) {
+ log_error("could not bind new values to the query: %s", sqlite3_errmsg(da->db));
+ return ret;
+ }
+
log_debug("query: %s", sqlite3_expanded_sql(query));
ret = sqlite3_step(query);
if (ret == SQLITE_ROW) {
log_debug("creating table:\n%s", query_str);
ret = sqlite3_exec(da->db, query_str, NULL, 0, &sqlite_err);
- if (ret != SQLITE_OK) {
+ if (ret != SQLITE_OK || sqlite_err) {
log_error("SQL Error: %s", sqlite3_errmsg(da->db));
+ sqlite3_free(sqlite_err);
goto free_name;
}
goto free_name;
ret = sqlite3_exec(da->db, query_str, NULL, 0, &sqlite_err);
- if (ret != SQLITE_OK) {
+ if (ret != SQLITE_OK || sqlite_err) {
log_error("SQL Error: %s", sqlite3_errmsg(da->db));
+ sqlite3_free(sqlite_err);
goto free_name;
}
ret = sqlite3_step(query);
if (ret != SQLITE_ROW) {
log_debug("No entry in %s", name);
- return -ENOENT;
+ ret = -ENOENT;
+ goto finalize;
}
log_debug("found matching entry in %s", name);
}
return 0;
+
+finalize:
+ sqlite3_finalize(query);
}
static int sqlite_get_by_oid(struct faultd_database_adapter *adapter, faultd_oid_t *oid, struct faultd_object *result)
return ret;
query = da->stmts[STMT_GET_TABLE_BY_ID];
- sqlite3_reset(query);
- sqlite3_bind_int(query, 1, oid->sqlite.table);
+ ret = sqlite3_reset(query);
+ if (ret != SQLITE_OK)
+ log_error("Last call with this query failed: %s", sqlite3_expanded_sql(query));
+
+ ret = sqlite3_bind_int(query, 1, oid->sqlite.table);
+ if (ret != SQLITE_OK) {
+ log_error("could not bind new values to the query: %s", sqlite3_errmsg(da->db));
+ goto free_name;
+ }
+
log_debug("query: %s", sqlite3_expanded_sql(query));
ret = sqlite3_step(query);
if (ret != SQLITE_ROW) {
query = da->stmts[STMT_FIND_TABLE];
sqlite3_reset(query);
- sqlite3_bind_text(query, 1, signature, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_text(query, 1, signature, -1, SQLITE_TRANSIENT);
+ if (ret != SQLITE_OK) {
+ log_error("could not bind new values to the query: %s", sqlite3_errmsg(da->db));
+ return ret;
+ }
+
log_debug("query: %s", sqlite3_expanded_sql(query));
ret = sqlite3_step(query);
if (ret != SQLITE_ROW) {
static int sqlite_load(struct faultd_database_adapter *adapter, struct faultd_object *query,
struct faultd_object *hints, struct faultd_object *result, uint32_t *nr)
{
- sqlite3_stmt *sql_query, *subquery;
+ sqlite3_stmt *sql_query = NULL, *subquery = NULL;
struct sqlite_adapter *da = to_sqlite_adapter(adapter);
int ret;
const char *name, *signature;
ret = snprintf(query_str, BUFSIZE, "SELECT * FROM %s %s;", name, qsignature);
if (ret < 0 || ret >= BUFSIZE)
- return ret;
+ goto finalize;
log_debug("query: %s", query_str);
ret = sqlite3_prepare_v2(da->db, query_str, -1, &subquery, NULL);
if (ret != SQLITE_OK) {
log_error("SQL Error: %s", sqlite3_errmsg(da->db));
- return ret;
+ goto finalize;
}
ret = bind_values(query, subquery, 1);
log_debug("fetched row %u", n);
ret = snprintf(key, sizeof(key), "%u", n);
- if (ret < 0 || ret >= sizeof(key))
- return -ENOMEM;
+ if (ret < 0 || ret >= sizeof(key)) {
+ ret = -ENOMEM;
+ goto finalize;
+ }
ret = faultd_object_new(&part_result);
if (ret < 0) {
faultd_object_unref(part_result);
n++;
}
+
+ sqlite3_finalize(subquery);
+ subquery = NULL;
}
ret = 0;
finish:
if (ret == 0 && nr != NULL)
*nr = n;
+finalize:
+ if (sql_query)
+ sqlite3_finalize(sql_query);
+ if (subquery)
+ sqlite3_finalize(subquery);
return ret;
}