void set_db_version(int db_version) { /** RESULT : sets the database version entry in the database RETURNS : void PURPOSE : to enable database upgrade procedures and error checking NOTES : **/ //check database is open and table exists check_db_open(GET_CALL_INFO); check_table_exists("GAME_DATA_TABLE", GET_CALL_INFO); char *sql="UPDATE GAME_DATA_TABLE SET DB_VERSION = ?"; sqlite3_stmt *stmt=NULL; prepare_query(sql, &stmt, GET_CALL_INFO); sqlite3_bind_int(stmt, 1, db_version); step_query(sql, &stmt, GET_CALL_INFO); destroy_query(sql, &stmt, GET_CALL_INFO); }
void load_db_e3ds(){ /** public function - see header */ log_event(EVENT_INITIALISATION, "loading e3d..."); sqlite3_stmt *stmt; //check database is open and table exists check_db_open(GET_CALL_INFO); check_table_exists("E3D_TABLE", GET_CALL_INFO); char *sql="SELECT * FROM E3D_TABLE"; prepare_query(sql, &stmt, GET_CALL_INFO); //read the sql query result into the e3d array int i=0; int rc=0; while ( (rc = sqlite3_step(stmt)) == SQLITE_ROW) { //get the object id and check that the value does not exceed the maximum permitted int id=sqlite3_column_int(stmt,0); if(id>MAX_E3D_TYPES){ log_event(EVENT_ERROR, "id [%i] exceeds range [%i] in function %s: module %s: line %i", id, MAX_E3D_TYPES, GET_CALL_INFO); stop_server(); } //handle null string which would crash strcpy if(sqlite3_column_text(stmt, 1)) strcpy(e3ds.e3d[id].e3d_filename, (char*)sqlite3_column_text(stmt, 1)); e3ds.e3d[id].object_id=sqlite3_column_int(stmt, 2); log_event(EVENT_INITIALISATION, "loaded [%i] [%s]", id, e3ds.e3d[id].e3d_filename); i++; } destroy_query(sql, &stmt, GET_CALL_INFO); if(i==0){ log_event(EVENT_ERROR, "no e3ds found in database", i); stop_server(); } }
void load_db_char_races(){ /** public function - see header */ //check database is open and table exists check_db_open(GET_CALL_INFO); check_table_exists("RACE_TABLE", GET_CALL_INFO); log_event(EVENT_INITIALISATION, "loading races..."); sqlite3_stmt *stmt; char *sql="SELECT * FROM RACE_TABLE"; prepare_query(sql, &stmt, GET_CALL_INFO); //read the sql query result into the race array int i=0; int rc=0; while ( (rc = sqlite3_step(stmt)) == SQLITE_ROW) { int race_id=sqlite3_column_int(stmt, 0); if(race_id>MAX_RACES) { log_event(EVENT_ERROR, "race_id [%i] exceeds max [%i] in function %s: module %s: line %i", race_id, MAX_RACES, GET_CALL_INFO); stop_server(); } //handle null string which would crash strcpy if(sqlite3_column_text(stmt, 1)) strcpy(races.race[race_id].race_name, (char*)sqlite3_column_text(stmt, 1)); //handle null string which would crash strcpy if(sqlite3_column_text(stmt, 2)) strcpy(races.race[race_id].race_description, (char*)sqlite3_column_text(stmt, 2)); log_event(EVENT_INITIALISATION, "loaded [%i] [%s]", race_id, races.race[race_id].race_name); i++; } destroy_query(sql, &stmt, GET_CALL_INFO); if(i==0){ log_event(EVENT_ERROR, "no races found in database", i); stop_server(); } }
static int load_config(int hard) { struct ast_config *config; struct ast_variable *v; char *sql; config = ast_config_load ("res_sqlite.conf"); if (config) { for (v = ast_variable_browse (config, "general"); v; v = v->next) { if (!strcmp (v->name, "reload")) { do_reload = ast_true(v->value); } } if (!hard) if (!do_reload) { ast_verbose(VERBOSE_PREFIX_2 "RES SQLite Skipping Reload set reload => yes in [general]\n"); return 0; } ast_verbose(VERBOSE_PREFIX_2 "RES SQLite Loading Defaults\n"); has_cdr=-1; has_switch=-1; has_config=-1; has_cli=0; for (v = ast_variable_browse (config, "cdr"); v; v = v->next) { if (!strcmp (v->name, "table")) { strncpy (cdr_table, v->value, sizeof (cdr_table)); has_cdr++; } else if (!strcmp (v->name, "dbfile")) { pick_path(v->value,cdr_dbfile,ARRAY_SIZE); has_cdr++; } } for (v = ast_variable_browse (config, "config"); v; v = v->next) { if (!strcmp (v->name, "table")) { strncpy (config_table, v->value, sizeof (cdr_table)); has_config++; } else if (!strcmp (v->name, "dbfile")) { pick_path(v->value,config_dbfile,ARRAY_SIZE); has_config++; } } for (v = ast_variable_browse (config, "switch"); v; v = v->next) { if (!strcmp (v->name, "table")) { strncpy (switch_table, v->value, sizeof (cdr_table)); has_switch++; } else if (!strcmp (v->name, "dbfile")) { pick_path(v->value,switch_dbfile,ARRAY_SIZE); has_switch++; } } for (v = ast_variable_browse (config, "cli"); v; v = v->next) { if (!strcmp (v->name, "dbfile")) { pick_path(v->value,clidb,ARRAY_SIZE); has_cli++; } } ast_config_destroy (config); } if(has_cdr > 0) { if((sql = sqlite3_mprintf("select count(*) from %q limit 1",cdr_table))) { check_table_exists(cdr_dbfile,sql,create_cdr_sql); sqlite3_free(sql); sql = NULL; } } if(has_config > 0) { if((sql = sqlite3_mprintf("select count(*) from %q limit 1",config_table))) { check_table_exists(config_dbfile,sql,create_config_sql); sqlite3_free(sql); sql = NULL; } } if(has_switch > 0) { if((sql = sqlite3_mprintf("select count(*) from %q limit 1",switch_table))) { check_table_exists(switch_dbfile,sql,create_dialplan_sql); sqlite3_free(sql); sql = NULL; } } return 0; }
void batch_add_genders(char *file_name){ /** public function - see header */ FILE* file; if((file=fopen(file_name, "r"))==NULL){ log_event(EVENT_ERROR, "file [%s] not found", file_name); stop_server(); } char line[160]=""; int line_counter=0; log_event(EVENT_INITIALISATION, "\nAdding genders specified in file [%s]", file_name); fprintf(stderr, "\nAdding genders specified in file [%s]\n", file_name); //check database is open and table exists check_db_open(GET_CALL_INFO); check_table_exists("GENDER_TABLE", GET_CALL_INFO); sqlite3_stmt *stmt; char *sErrMsg = 0; char *sql="INSERT INTO GENDER_TABLE(" \ "GENDER_ID," \ "GENDER_NAME" \ ") VALUES(?, ?)"; prepare_query(sql, &stmt, GET_CALL_INFO); int rc=sqlite3_exec(db, "BEGIN TRANSACTION", NULL, NULL, &sErrMsg); if(rc!=SQLITE_OK){ log_event(EVENT_ERROR, "sqlite3_exec failed", GET_CALL_INFO); log_text(EVENT_ERROR, "return code [%i] message [%s] sql [%s]", rc, *&sErrMsg, sql); } while (fgets(line, sizeof(line), file)) { line_counter++; sscanf(line, "%*s"); char output[2][MAX_LST_LINE_LEN]; memset(&output, 0, sizeof(output)); parse_line(line, output); sqlite3_bind_int(stmt, 1, atoi(output[0])); //gender id sqlite3_bind_text(stmt, 2, output[1], -1, SQLITE_STATIC); //gender name step_query(sql, &stmt, GET_CALL_INFO); sqlite3_clear_bindings(stmt); sqlite3_reset(stmt); fprintf(stderr, "Gender [%i] [%s] added successfully\n", atoi(output[0]), output[1]); log_event(EVENT_SESSION, "Added gender [%i] [%s] to GENDER_TABLE", atoi(output[0]), output[1]); } rc=sqlite3_exec(db, "END TRANSACTION", NULL, NULL, &sErrMsg); if (rc!=SQLITE_OK) { log_event(EVENT_ERROR, "sqlite3_exec failed", GET_CALL_INFO); log_text(EVENT_ERROR, "return code [%i] message [%s] sql [%s]", rc, *sErrMsg, sql); } destroy_query(sql, &stmt, GET_CALL_INFO); fclose(file); //load gender data to memory so this can be used by other functions load_db_genders(); //mark data as loaded genders.data_loaded=true; }