Database
Un wrapper haut-niveau d'oxmysql — migrations idempotentes et CRUD simple, côté serveur.
Un wrapper haut-niveau d'oxmysql — migrations idempotentes et CRUD simple, côté serveur.
lib.db enveloppe oxmysql avec création de table / colonne idempotente et un petit CRUD.
Côté serveur uniquement — garde tout ton code base de données dans server/.
lib.db.ensureTable('myscript_logs', {
{ name = 'id', type = 'INT', primary = true, autoIncrement = true },
{ name = 'identifier', type = 'VARCHAR(60)', notNull = true },
{ name = 'action', type = 'VARCHAR(64)', notNull = true },
{ name = 'created_at', type = 'TIMESTAMP', default = { raw = 'CURRENT_TIMESTAMP' } },
})
lib.db.ensureColumn('myscript_logs', { name = 'duration_ms', type = 'INT' })Les deux sont idempotentes — sûres à lancer à chaque démarrage. Une déf de colonne est { name, type, primary?, autoIncrement?, notNull?, default?, unique? }.
| Fonction | Retour | Description |
|---|---|---|
select(table, where?, columns?) | table[] | Les rows qui matchent where (AND implicite). |
selectOne(table, where, columns?) | table? | Le premier row, ou nil. |
insert(table, data) | number | Le nouvel id auto-incrément. |
update(table, data, where) | number | Rows affectées. |
delete(table, where) | number | Rows affectées. |
select(table, where?, columns?)table[]where (AND implicite).selectOne(table, where, columns?)table?nil.insert(table, data)numberupdate(table, data, where)numberdelete(table, where)numberlocal id = lib.db.insert('myscript_logs', { identifier = ident, action = 'kick' })
local rows = lib.db.select('myscript_logs', { identifier = ident })
local one = lib.db.selectOne('myscript_logs', { id = 42 })
lib.db.update('myscript_logs', { action = 'banned' }, { id = 42 })
lib.db.delete('myscript_logs', { identifier = ident })where = { col = nil } devient col IS NULL. Les booléens sont stockés en 0 / 1.
lib.db.query(sql, params?), lib.db.scalar(...) et lib.db.single(...) sont des passe-plats
vers oxmysql pour ce que le CRUD ne couvre pas. lib.db.transaction(queries) exécute plusieurs
requêtes paramétrées de façon atomique et renvoie un booléen.
local ok = lib.db.transaction({
{ query = 'UPDATE accounts SET balance = balance - ? WHERE id = ?', params = { 100, 1 } },
{ query = 'UPDATE accounts SET balance = balance + ? WHERE id = ?', params = { 100, 2 } },
})Nécessite oxmysql (dependencies { 'oxmysql' }). select sans where renvoie toute la table — filtre toujours sur les grosses. Les colonnes JSON demandent un json.encode de ta part. Ne concatène jamais le SQL — passe toujours les params.