diff options
-rw-r--r-- | include/asterisk/astdb.h | 9 | ||||
-rw-r--r-- | main/db.c | 2 |
2 files changed, 9 insertions, 2 deletions
diff --git a/include/asterisk/astdb.h b/include/asterisk/astdb.h index 8a870ae83..1eff7908c 100644 --- a/include/asterisk/astdb.h +++ b/include/asterisk/astdb.h @@ -50,7 +50,14 @@ int ast_db_get(const char *family, const char *key, char *value, int valuelen); */ int ast_db_get_allocated(const char *family, const char *key, char **out); -/*! \brief Store value addressed by family/key */ +/*! \brief Store value addressed by family/key + * + * Try to insert a row first. If a row already exists with the given key + * we will then perform an update on this row. + * + * The attempt here is to increase disk I/O performance by not deleting an existing + * row and then inserting a new row when one already exists. + */ int ast_db_put(const char *family, const char *key, const char *value); /*! \brief Delete entry in astdb */ @@ -119,7 +119,7 @@ static void db_sync(void); #define DEFINE_SQL_STATEMENT(stmt,sql) static sqlite3_stmt *stmt; \ const char stmt##_sql[] = sql; -DEFINE_SQL_STATEMENT(put_stmt, "INSERT OR REPLACE INTO astdb (key, value) VALUES (?, ?)") +DEFINE_SQL_STATEMENT(put_stmt, "INSERT OR IGNORE INTO astdb (key, value) VALUES (?1, ?2); UPDATE astdb SET value=?2 WHERE changes()=0 AND key=?1") DEFINE_SQL_STATEMENT(get_stmt, "SELECT value FROM astdb WHERE key=?") DEFINE_SQL_STATEMENT(del_stmt, "DELETE FROM astdb WHERE key=?") DEFINE_SQL_STATEMENT(deltree_stmt, "DELETE FROM astdb WHERE key || '/' LIKE ? || '/' || '%'") |