/* Function to set PRAGMA to sqlite db * Input: * void *db_conn : Sqlite connection * char *pragma_key : PRAGMA to be set * char *pragma_value : the value of the PRAGMA * Return: * On success return 0 * On failure return -1 * */ int gf_sqlite3_set_pragma (void *db_conn, char *pragma_key, char *pragma_value) { int ret = -1; gf_sql_connection_t *sql_conn = db_conn; char sqlstring[GF_NAME_MAX] = ""; char *db_pragma_value = NULL; CHECK_SQL_CONN (sql_conn, out); GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, pragma_key, out); GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, pragma_value, out); GF_SQLITE3_SET_PRAGMA(sqlstring, pragma_key, "%s", pragma_value, ret, out); ret = gf_sqlite3_pragma (db_conn, pragma_key, &db_pragma_value); if (ret < 0) { gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED, "Failed to get %s pragma", pragma_key); } else { gf_msg (GFDB_STR_SQLITE3, GF_LOG_INFO, 0, 0, "Value set on DB %s : %s", pragma_key, db_pragma_value); } GF_FREE (db_pragma_value); ret = 0; out: return ret; }
static inline int apply_sql_params_db(gf_sql_connection_t *sql_conn, dict_t *param_dict) { int ret = -1; char *temp_str = NULL; char sqlite3_config_str[PATH_MAX] = ""; GF_ASSERT(sql_conn); GF_ASSERT(param_dict); /*Extract sql page_size from param_dict, * if not specified default value will be GF_SQL_DEFAULT_PAGE_SIZE*/ temp_str = NULL; GET_DB_PARAM_FROM_DICT_DEFAULT(GFDB_STR_SQLITE3, param_dict, GFDB_SQL_PARAM_PAGE_SIZE, temp_str, GF_SQL_DEFAULT_PAGE_SIZE); sql_conn->page_size = atoi(temp_str); /*Apply page_size on the sqlite db*/ GF_SQLITE3_SET_PRAGMA(sqlite3_config_str, "page_size", "%ld", sql_conn->page_size, ret, out); /*Extract sql cache size from param_dict, * if not specified default value will be * GF_SQL_DEFAULT_CACHE_SIZE pages*/ temp_str = NULL; GET_DB_PARAM_FROM_DICT_DEFAULT(GFDB_STR_SQLITE3, param_dict, GFDB_SQL_PARAM_CACHE_SIZE, temp_str, GF_SQL_DEFAULT_CACHE_SIZE); sql_conn->cache_size = atoi(temp_str); /*Apply cache size on the sqlite db*/ GF_SQLITE3_SET_PRAGMA(sqlite3_config_str, "cache_size", "%ld", sql_conn->cache_size, ret, out); /*Extract sql journal mode from param_dict, * if not specified default value will be * GF_SQL_DEFAULT_JOURNAL_MODE i.e "wal"*/ temp_str = NULL; GET_DB_PARAM_FROM_DICT_DEFAULT(GFDB_STR_SQLITE3, param_dict, GFDB_SQL_PARAM_JOURNAL_MODE, temp_str, GF_SQL_DEFAULT_JOURNAL_MODE); sql_conn->journal_mode = gf_sql_str2jm (temp_str); /*Apply journal mode to the sqlite db*/ GF_SQLITE3_SET_PRAGMA(sqlite3_config_str, "journal_mode", "%s", temp_str, ret, out); /*Only when the journal mode is WAL, wal_autocheckpoint makes sense*/ if (sql_conn->journal_mode == gf_sql_jm_wal) { /*Extract sql wal auto check point from param_dict * if not specified default value will be * GF_SQL_DEFAULT_WAL_AUTOCHECKPOINT pages*/ temp_str = NULL; GET_DB_PARAM_FROM_DICT_DEFAULT(GFDB_STR_SQLITE3, param_dict, GFDB_SQL_PARAM_WAL_AUTOCHECK, temp_str, GF_SQL_DEFAULT_WAL_AUTOCHECKPOINT); sql_conn->wal_autocheckpoint = atoi(temp_str); /*Apply wal auto check point to the sqlite db*/ GF_SQLITE3_SET_PRAGMA(sqlite3_config_str, "wal_autocheckpoint", "%ld", sql_conn->wal_autocheckpoint, ret, out); } /*Extract sql synchronous from param_dict * if not specified default value will be GF_SQL_DEFAULT_SYNC*/ temp_str = NULL; GET_DB_PARAM_FROM_DICT_DEFAULT(GFDB_STR_SQLITE3, param_dict, GFDB_SQL_PARAM_SYNC, temp_str, GF_SQL_DEFAULT_SYNC); sql_conn->synchronous = gf_sql_str2sync_t (temp_str); /*Apply synchronous to the sqlite db*/ GF_SQLITE3_SET_PRAGMA(sqlite3_config_str, "synchronous", "%d", sql_conn->synchronous, ret, out); /*Extract sql auto_vacuum from param_dict * if not specified default value will be GF_SQL_DEFAULT_AUTO_VACUUM*/ temp_str = NULL; GET_DB_PARAM_FROM_DICT_DEFAULT(GFDB_STR_SQLITE3, param_dict, GFDB_SQL_PARAM_AUTO_VACUUM, temp_str, GF_SQL_DEFAULT_AUTO_VACUUM); sql_conn->auto_vacuum = gf_sql_str2av_t (temp_str); /*Apply auto_vacuum to the sqlite db*/ GF_SQLITE3_SET_PRAGMA(sqlite3_config_str, "auto_vacuum", "%d", sql_conn->auto_vacuum, ret, out); ret = 0; out: return ret; }