/* Calls step_query for query execution. * Collects and acts on the result status of a query * execution. */ int file_prep_exec(FILE *f, sqlite3_stmt *stmt, const char *response_type) { int result = 0; result = step_query(f, stmt, response_type); switch (result) { case SQLITE_DONE: #ifdef PICO_QL_DEBUG if (!strcmp(response_type, "text/html")) swill_fprintf(f, "<b>DONE<br></b>"); else swill_fprintf(f, "DONE\n"); #endif break; case SQLITE_OK: #ifdef PICO_QL_DEBUG if (!strcmp(response_type, "text/html")) swill_fprintf(f, "<b>OK<br></b>"); else swill_fprintf(f, "OK\n"); #endif break; case SQLITE_ERROR: if (!strcmp(response_type, "text/html")) swill_fprintf(f, "<b>SQL error or missing database.\n</b>"); else swill_fprintf(f, "SQL error or missing database.\n"); break; case SQLITE_MISUSE: if (!strcmp(response_type, "text/html")) swill_fprintf(f, "<b>Library used incorrectly.<br></b>"); else swill_fprintf(f, "Library used incorrectly.\n"); break; } return result; }
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 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; }