static stock YSI_g_sDBCurrentTag[MAX_INI_TAG]; stock DB_Open(name[]) { new DB:dbHnd = db_open(name); if (dbHnd) { db_query(dbHnd, "BEGIN;"); } return dbHnd; } stock DB_Close(DB:dbHnd) { if (dbHnd) { db_query(dbHnd, "END;"); db_close(dbHnd); return 1; } return 0; } #define DB_SetTag DB_SetTable stock DB_SetTable(DB:dbHnd, table[]) { if (dbHnd) { new query[64]; format(query, sizeof (query), "CREATE TABLE IF NOT EXISTS %s(key integer NOT NULL PRIMARY KEY AUTOINCREMENT);", table); strcpy(YSI_g_sDBCurrentTag, table, sizeof (YSI_g_sDBCurrentTag)); db_query(dbHnd, query); return 1; } return 0; } stock DB_SetRow(DB:dbHnd, row = -1) { if (dbHnd) { new query[64]; if (row == -1) { format(query, sizeof (query), "INSERT INTO %s (_ROWID_) VALUES (last_insert_rowid() + 1)", YSI_g_sDBCurrentTag); db_query(dbHnd, query); } format(query, sizeof (query), "CREATE TABLE IF NOT EXISTS %s(key integer NOT NULL PRIMARY KEY AUTOINCREMENT);", table); strcpy(YSI_g_sDBCurrentTag, table, sizeof (YSI_g_sDBCurrentTag)); return row; } return -1; } stock DB_WriteString(DB:dbHnd, name[], data[]) { if (dbHnd) { DB_AddColumn(dbHnd, name, "varchar(" #MAX_INI_ENTRY_TEXT ")"); return 1; } return 0; } stock DB_WriteInt(DB:dbHnd, name[], data) { if (dbHnd) { DB_AddColumn(dbHnd, name, "integer"); return 1; } return 0; } stock DB_WriteFloat(DB:dbHnd, name[], Float:data) { if (dbHnd) { DB_AddColumn(dbHnd, name, "real"); return 1; } return 0; } static stock DB_AddColumn(DB:dbHnd, name[], type[]) { new query[256]; format(query, sizeof (query), "SELECT sql FROM sqlite_master WHERE tbl_name = '%s';", YSI_g_sDBCurrentTag); new DBResult:dbResult = db_query(dbHnd, query); if (dbResult) { db_get_field(dbResult, 0, query, sizeof (query)); db_free_result(dbResult); if (wordfind(name, query, chrfind('(', query)) != -1) { return 1; } } format(query, sizeof (query), "ALTER TABLE %s ADD COLUMN %s %s; VACUUM;", YSI_g_sDBCurrentTag, name, type); db_query(dbHnd, query); return 0; }