diff options
Diffstat (limited to 'src/libutil/sqlite_utils.h')
-rw-r--r-- | src/libutil/sqlite_utils.h | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/src/libutil/sqlite_utils.h b/src/libutil/sqlite_utils.h new file mode 100644 index 0000000..5411a47 --- /dev/null +++ b/src/libutil/sqlite_utils.h @@ -0,0 +1,90 @@ +/*- + * Copyright 2016 Vsevolod Stakhov + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef SRC_LIBUTIL_SQLITE_UTILS_H_ +#define SRC_LIBUTIL_SQLITE_UTILS_H_ + +#include "config.h" +#include "mem_pool.h" +#include "sqlite3.h" + +#define RSPAMD_SQLITE3_STMT_MULTIPLE (1 << 0) + +#ifdef __cplusplus +extern "C" { +#endif + +struct rspamd_sqlite3_prstmt { + gint idx; + const gchar *sql; + const gchar *args; + sqlite3_stmt *stmt; + gint result; + const gchar *ret; + gint flags; +}; + +/** + * Create prepared statements for specified database from init statements + * @param db + * @param max_idx + * @param err + * @return new prepared statements array or NULL + */ +GArray *rspamd_sqlite3_init_prstmt(sqlite3 *db, + struct rspamd_sqlite3_prstmt *init_stmt, + gint max_idx, + GError **err); + +/** + * Run prepared statements by its index getting parameters and setting results from + * varargs structure + * @param db + * @param stmts + * @param idx + * @return + */ +gint rspamd_sqlite3_run_prstmt(rspamd_mempool_t *pool, sqlite3 *db, GArray *stmts, + gint idx, ...); + +/** + * Close and free prepared statements + * @param db + * @param stmts + */ +void rspamd_sqlite3_close_prstmt(sqlite3 *db, GArray *stmts); + +/** + * Creates or opens sqlite database trying to share it between processes + * @param path + * @param create_sql + * @return + */ +sqlite3 *rspamd_sqlite3_open_or_create(rspamd_mempool_t *pool, + const gchar *path, const gchar *create_sql, + guint32 version, GError **err); + + +/** + * Sync sqlite3 db ensuring that all wal things are done + * @param db + */ +gboolean rspamd_sqlite3_sync(sqlite3 *db, gint *wal_frames, gint *wal_checkpoints); + +#ifdef __cplusplus +} +#endif + +#endif /* SRC_LIBUTIL_SQLITE_UTILS_H_ */ |