Phone & identifier database base implementation
+ Added the phone which is working already. + Added RP-Radio for testing.
This commit is contained in:
@@ -0,0 +1,159 @@
|
||||
-- lib/MySQL.lua provides complete compatibility for resources designed for mysql-async
|
||||
-- As of v2.0.0 this is the preferred method of interacting with oxmysql
|
||||
-- * You can use mysql-async syntax or oxmysql syntax (refer to issue #77 or line 118)
|
||||
-- * Using this lib provides minor improvements to performance and helps debug poor queries
|
||||
-- * If using mysql-async syntax, a resource is not explicity bound to using oxmysql
|
||||
|
||||
-- todo: new annotations; need to see if I can get it working with metatables, otherwise it'll need stubs
|
||||
|
||||
local Store = {}
|
||||
|
||||
local function addStore(query, cb)
|
||||
assert(type(query) == 'string', 'The SQL Query must be a string')
|
||||
local store = #Store+1
|
||||
Store[store] = query
|
||||
if cb then cb(store) else return store end
|
||||
end
|
||||
|
||||
local MySQL = {
|
||||
Sync = { store = addStore },
|
||||
Async = { store = addStore },
|
||||
|
||||
ready = function(cb)
|
||||
CreateThread(function()
|
||||
repeat
|
||||
Wait(50)
|
||||
until GetResourceState('oxmysql') == 'started'
|
||||
cb()
|
||||
end)
|
||||
end
|
||||
}
|
||||
|
||||
local type = type
|
||||
|
||||
local function safeArgs(query, parameters, cb, transaction)
|
||||
if type(query) == 'number' then query = Store[query] end
|
||||
|
||||
if transaction then
|
||||
assert(type(query) == 'table', ('Transaction query expects a table, received %s'):format(query))
|
||||
else
|
||||
assert(type(query) == 'string', ('Query expects a string, received %s'):format(query))
|
||||
end
|
||||
|
||||
if parameters then
|
||||
local type = type(parameters)
|
||||
if type ~= 'table' and type ~= 'function' then
|
||||
error(('Parameters expected table or function, received %s'):format(parameters))
|
||||
end
|
||||
end
|
||||
|
||||
if cb then
|
||||
local type = type(cb)
|
||||
if type ~= 'function' and (type == 'table' and not cb.__cfx_functionReference) then
|
||||
error(('Callback expects a function, received %s'):format(cb))
|
||||
end
|
||||
end
|
||||
|
||||
return query, parameters, cb
|
||||
end
|
||||
|
||||
local promise = promise
|
||||
local oxmysql = exports.oxmysql
|
||||
local Await = Citizen.Await
|
||||
local GetCurrentResourceName = GetCurrentResourceName()
|
||||
|
||||
local function await(fn, query, parameters)
|
||||
local p = promise.new()
|
||||
fn(nil, query, parameters, function(result)
|
||||
p:resolve(result)
|
||||
end, GetCurrentResourceName)
|
||||
return Await(p)
|
||||
end
|
||||
|
||||
setmetatable(MySQL, {
|
||||
__index = function(self, method)
|
||||
local state = GetResourceState('oxmysql')
|
||||
if state == 'started' or state == 'starting' then
|
||||
self[method] = setmetatable({}, {
|
||||
|
||||
__call = function(_, query, parameters, cb)
|
||||
return oxmysql[method](nil, safeArgs(query, parameters, cb, method == 'transaction'))
|
||||
end,
|
||||
|
||||
__index = function(_, index)
|
||||
assert(index == 'await', ('unable to index MySQL.%s.%s, expected .await'):format(method, index))
|
||||
self[method].await = function(query, parameters)
|
||||
return await(oxmysql[method], safeArgs(query, parameters, nil, method == 'transaction'))
|
||||
end
|
||||
return self[method].await
|
||||
end
|
||||
})
|
||||
|
||||
return self[method]
|
||||
else
|
||||
error(('^1oxmysql resource state is %s - unable to trigger exports.oxmysql:%s^0'):format(state, method), 0)
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
local alias = {
|
||||
fetchAll = 'query',
|
||||
fetchScalar = 'scalar',
|
||||
fetchSingle = 'single',
|
||||
insert = 'insert',
|
||||
execute = 'update',
|
||||
transaction = 'transaction',
|
||||
prepare = 'prepare'
|
||||
}
|
||||
|
||||
local alias_mt = {
|
||||
__index = function(self, key)
|
||||
if alias[key] then
|
||||
MySQL.Async[key] = MySQL[alias[key]]
|
||||
MySQL.Sync[key] = MySQL[alias[key]].await
|
||||
alias[key] = nil
|
||||
return self[key]
|
||||
end
|
||||
end
|
||||
}
|
||||
|
||||
setmetatable(MySQL.Async, alias_mt)
|
||||
setmetatable(MySQL.Sync, alias_mt)
|
||||
|
||||
_ENV.MySQL = MySQL
|
||||
|
||||
--[[
|
||||
exports.oxmysql:query (previously exports.oxmysql:execute)
|
||||
MySQL.Async.fetchAll = MySQL.query
|
||||
MySQL.Sync.fetchAll = MySQL.query.await
|
||||
|
||||
|
||||
exports.oxmysql:scalar
|
||||
MySQL.Async.fetchScalar = MySQL.scalar
|
||||
MySQL.Sync.fetchScalar = MySQL.scalar.await
|
||||
|
||||
|
||||
exports.oxmysql:single
|
||||
MySQL.Async.fetchSingle = MySQL.single
|
||||
MySQL.Sync.fetchSingle = MySQL.single.await
|
||||
|
||||
|
||||
exports.oxmysql:insert
|
||||
MySQL.Async.insert = MySQL.insert
|
||||
MySQL.Sync.insert = MySQL.insert.await
|
||||
|
||||
|
||||
exports.oxmysql:update
|
||||
MySQL.Async.execute = MySQL.update
|
||||
MySQL.Sync.execute = MySQL.update.await
|
||||
|
||||
|
||||
exports.oxmysql:transaction
|
||||
MySQL.Async.transaction = MySQL.transaction
|
||||
MySQL.Sync.transaction = MySQL.transaction.await
|
||||
|
||||
|
||||
exports.oxmysql:prepare
|
||||
MySQL.Async.prepare = MySQL.prepare
|
||||
MySQL.Sync.prepare = MySQL.prepare.await
|
||||
--]]
|
||||
Reference in New Issue
Block a user