Character *load_player_by_name(Connection *conn, const char *name) { char buf[400]; sql_stmt *stmt; db_begin_transaction(); int len = sprintf(buf, "select * from character natural join player where name='%s'", escape_sql_str(name)); if (sql_query(buf, len, &stmt) != SQL_OK) { log_data("could not prepare sql statement"); return 0; } Character *ch = new_char(); ch->pc = new_player(conn); if (sql_step(stmt) != SQL_DONE) { load_player_columns(conn->account, ch, stmt); } if (sql_finalize(stmt) != SQL_OK) { log_data("unable to finalize statement"); } load_char_objs(ch); load_char_affects(ch); db_end_transaction(); return ch; }
int load_char_affects(Character *ch) { char buf[400]; sql_stmt *stmt; int total = 0; int len = sprintf(buf, "select * from char_affect where characterId=%" PRId64, ch->id); if (sql_query(buf, len, &stmt) != SQL_OK) { log_data("could not prepare statement"); return 0; } while (sql_step(stmt) != SQL_DONE) { int affId = sql_col_int(stmt, "affectId"); Affect *aff = load_affect_by_id(affId); if (aff != 0) { aff->duration = sql_col_int(stmt, "duration"); affect_to_char(ch, aff); } total++; } if (sql_finalize(stmt) != SQL_OK) { log_data("could not finalize statement"); } return total; }
Character *load_player_by_id(Connection *conn, identifier_t charId) { char buf[400]; sql_stmt *stmt; db_begin_transaction(); int len = sprintf(buf, "select * from character join player on playerId=characterId where characterId=%" PRId64, charId); if (sql_query(buf, len, &stmt) != SQL_OK) { log_data("could not prepare sql statement"); return 0; } Character *ch = new_char(); ch->pc = new_player(conn); if (sql_step(stmt) != SQL_DONE) { load_player_columns(conn->account, ch, stmt); } if (sql_finalize(stmt) != SQL_OK) { log_data("unable to finalize statement"); } load_char_objs(ch); load_char_affects(ch); db_end_transaction(); return ch; }
static int sqlLockAndPrepare(sql * db, /* Database handle. */ const char *zSql, /* UTF-8 encoded SQL statement. */ int nBytes, /* Length of zSql in bytes. */ int saveSqlFlag, /* True to copy SQL text into the sql_stmt */ Vdbe * pOld, /* VM being reprepared */ sql_stmt ** ppStmt, /* OUT: A pointer to the prepared statement */ const char **pzTail) /* OUT: End of parsed string */ { int rc; *ppStmt = 0; if (!sqlSafetyCheckOk(db) || zSql == 0) { return SQL_MISUSE; } rc = sqlPrepare(db, zSql, nBytes, saveSqlFlag, pOld, ppStmt, pzTail); if (rc == SQL_SCHEMA) { sql_finalize(*ppStmt); rc = sqlPrepare(db, zSql, nBytes, saveSqlFlag, pOld, ppStmt, pzTail); } assert(rc == SQL_OK || *ppStmt == 0); return rc; }
int load_npcs(Area *area) { char buf[400]; sql_stmt *stmt; int total = 0; int len = sprintf(buf, "select * from character natural join nonplayer where areaId=%" PRId64, area->id); if (sql_query(buf, len, &stmt) != SQL_OK) { log_data("could not prepare statement"); return 0; } while (sql_step(stmt) != SQL_DONE) { Character *ch = new_char(); ch->npc = new_npc(); ch->npc->area = area; load_npc_columns(ch, stmt); LINK(area->npcs, ch, next_in_area); LINK(first_character, ch, next); total++; } if (sql_finalize(stmt) != SQL_OK) { log_data("could not finalize statement"); } return total; }
Character *load_npc(identifier_t id) { char buf[400]; sql_stmt *stmt; Character *ch = 0; int len = sprintf(buf, "select * from character join nonplayer on nonplayerId=characterId where charId=%" PRId64, id); if (sql_query(buf, len, &stmt) != SQL_OK) { log_data("could not prepare statement"); return 0; } if (sql_step(stmt) != SQL_DONE) { ch = new_char(); ch->npc = new_npc(); load_npc_columns(ch, stmt); LINK(ch->npc->area->npcs, ch, next_in_area); LINK(first_character, ch, next); } if (sql_finalize(stmt) != SQL_OK) { log_data("could not finalize statement"); } return ch; }
CDbxSQLite::~CDbxSQLite() { sql_close(m_sqlite); for (int i = 0; i < sql_prepare_len; i++) sql_finalize(*sql_prepare_stmt[i]); mir_free(sql_prepare_text); mir_free(sql_prepare_stmt); DestroyWindow(m_hAPCWindow); }
static time_t utils_private_setting_get_time(const char *setting, time_t defval) { sqlite3_stmt *stmt; time_t rc = defval; if (setting==NULL) return rc; sql_prepare(g_sqlite, "SELECT val FROM dbrw_core where setting = ?;", &stmt); sqlite3_bind_text(stmt, 1, setting, -1, SQLITE_STATIC); if (sql_step(stmt)==SQLITE_ROW) { rc = (time_t)sqlite3_column_int(stmt, 0); } sql_finalize(stmt); return rc; }
static int utils_private_setting_set_time(const char *setting, time_t val) { sqlite3_stmt *stmt; int rc = 0; if (setting==NULL) return rc; sql_prepare(g_sqlite, "REPLACE INTO dbrw_core VALUES(?,?);", &stmt); sqlite3_bind_text(stmt, 1, setting, -1, SQLITE_STATIC); sqlite3_bind_int(stmt, 2, val); if (sql_step(stmt)==SQLITE_DONE) { rc = 1; } sql_finalize(stmt); return rc; }
int load_char_objs(Character *ch) { char buf[400]; sql_stmt *stmt; int total = 0; int len = sprintf(buf, "select * from char_objects where carriedById=%" PRId64, ch->id); if (sql_query(buf, len, &stmt) != SQL_OK) { log_data("could not prepare statement"); return 0; } while (sql_step(stmt) != SQL_DONE) { Object *obj = new_object(); obj->carriedBy = ch; load_obj_columns(obj, stmt); LINK(obj->area->objects, obj, next_in_area); LINK(first_object, obj, next); if (!obj->inObj) { LINK(ch->carrying, obj, next_content); if (obj->wearLoc != WEAR_NONE) { equip_char(ch, obj, obj->wearLoc); } } else { LINK(obj->inObj->contains, obj, next_content); } total++; } if (sql_finalize(stmt) != SQL_OK) { log_data("could not finalize statement"); } return total; }
int save_char_affects(Character *ch) { char buf[400]; sql_stmt *stmt; int len; Affect *aff; for (aff = ch->affects; aff; aff = aff->next) { len = sprintf(buf, "select charAffectId from char_affect where characterId=%" PRId64 " and affectId=%" PRId64, ch->id, aff->id); if (sql_query(buf, len, &stmt) != SQL_OK) { log_data("could not prepare statement"); return 0; } bool update = sql_step(stmt) != SQL_DONE; sql_int64 id = sql_column_int64(stmt, 1); if (sql_finalize(stmt) != SQL_OK) { log_data("unable to finalize sql statement"); return 0; } if (!save_affect(aff)) { return 0; } field_map char_affect[] = { {"characterId", &ch->id, SQL_INT} , {"affectId", &aff->id, SQL_INT} , {0} }; if (!update) { if (sql_insert_query(char_affect, "char_affect") != SQL_OK) { log_data("could not insert affect"); return 0; } } else { if (sql_update_query(char_affect, "char_affect", id) != SQL_OK) { log_data("could not update character"); return 0; } } } // try and cleanup old objects len = sprintf(buf, "select charAffectId from char_affect where characterId=%" PRId64, ch->id); if (sql_query(buf, len, &stmt) != SQL_OK) { log_data("could not prepare statement"); return 0; } while (sql_step(stmt) != SQL_DONE) { identifier_t id = sql_column_int64(stmt, 1); for (aff = ch->affects; aff; aff = aff->next) { if (aff->id == id) { break; } } if (!aff) { sprintf(buf, "delete from char_affect where characterId=%" PRId64 " and affectId=%" PRId64, ch->id, id); if (sql_exec(buf) != SQL_OK) { log_data("could not delete character affect %" PRId64, id); return 0; } } } if (sql_finalize(stmt) != SQL_OK) { log_data("could not finalize statement"); return 0; } return 1; }
int save_char_objs(Character *ch) { char buf[400]; sql_stmt *stmt; int len; Object *obj; for (obj = ch->carrying; obj; obj = obj->next_content) { len = sprintf(buf, "select objectId from char_objects where carriedById=%" PRId64 " and objectId=%" PRId64, ch->id, obj->id); if (sql_query(buf, len, &stmt) != SQL_OK) { log_data("could not prepare statement"); return 0; } bool update = sql_step(stmt) != SQL_DONE; if (sql_finalize(stmt) != SQL_OK) { log_data("unable to finalize sql statement"); return 0; } if (!update) { obj->id = 0; } if (!save_object(obj)) { return 0; } } // try and cleanup old objects len = sprintf(buf, "select * from char_objects where carriedById=%" PRId64, ch->id); if (sql_query(buf, len, &stmt) != SQL_OK) { log_data("could not prepare statement"); return 0; } while (sql_step(stmt) != SQL_DONE) { obj = ch->carrying; identifier_t id = sql_column_int64(stmt, 0); while (obj) { if (obj->id == id) { break; } obj = obj->next; } if (!obj) { sprintf(buf, "delete from object where carriedById=%" PRId64 " and objectId=%" PRId64, ch->id, id); if (sql_exec(buf) != SQL_OK) { log_data("could not delete character object %" PRId64, id); return 0; } } } if (sql_finalize(stmt) != SQL_OK) { log_data("could not finalize statement"); return 0; } return 1; }