Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- MySQL = {
- Async = {},
- Sync = {},
- }
- local function safeParameters(params)
- if nil == params then
- return {[''] = ''}
- end
- assert(type(params) == "table", "A table is expected")
- assert(params[1] == nil, "Parameters should not be an array, but a map (key / value pair) instead")
- if next(params) == nil then
- return {[''] = ''}
- end
- return params
- end
- ---
- -- Execute a query with no result required, sync version
- --
- -- @param query
- -- @param params
- --
- -- @return int Number of rows updated
- --
- function MySQL.Sync.execute(query, params)
- assert(type(query) == "string", "The SQL Query must be a string")
- local res = 0
- local finishedQuery = false
- exports['mysql-async']:mysql_execute(query, safeParameters(params), function (result)
- res = result
- finishedQuery = true
- end)
- repeat Citizen.Wait(0) until finishedQuery == true
- return res
- end
- ---
- -- Execute a query and fetch all results in an sync way
- --
- -- @param query
- -- @param params
- --
- -- @return table Query results
- --
- function MySQL.Sync.fetchAll(query, params)
- assert(type(query) == "string", "The SQL Query must be a string")
- local res = {}
- local finishedQuery = false
- exports['mysql-async']:mysql_fetch_all(query, safeParameters(params), function (result)
- res = result
- finishedQuery = true
- end)
- repeat Citizen.Wait(0) until finishedQuery == true
- return res
- end
- ---
- -- Execute a query and fetch the first column of the first row, sync version
- -- Useful for count function by example
- --
- -- @param query
- -- @param params
- --
- -- @return mixed Value of the first column in the first row
- --
- function MySQL.Sync.fetchScalar(query, params)
- assert(type(query) == "string", "The SQL Query must be a string")
- local res = ''
- local finishedQuery = false
- exports['mysql-async']:mysql_fetch_scalar(query, safeParameters(params), function (result)
- res = result
- finishedQuery = true
- end)
- repeat Citizen.Wait(0) until finishedQuery == true
- return res
- end
- ---
- -- Execute a query and retrieve the last id insert, sync version
- --
- -- @param query
- -- @param params
- --
- -- @return mixed Value of the last insert id
- --
- function MySQL.Sync.insert(query, params)
- assert(type(query) == "string", "The SQL Query must be a string")
- local res = 0
- local finishedQuery = false
- exports['mysql-async']:mysql_insert(query, safeParameters(params), function (result)
- res = result
- finishedQuery = true
- end)
- repeat Citizen.Wait(0) until finishedQuery == true
- return res
- end
- ---
- -- Execute a List of querys and returns bool true when all are executed successfully
- --
- -- @param querys
- -- @param params
- --
- -- @return bool if the transaction was successful
- --
- function MySQL.Sync.transaction(querys, params)
- local res = 0
- local finishedQuery = false
- exports['mysql-async']:mysql_transaction(query, params, function (result)
- res = result
- finishedQuery = true
- end)
- repeat Citizen.Wait(0) until finishedQuery == true
- return res
- end
- ---
- -- Execute a query with no result required, async version
- --
- -- @param query
- -- @param params
- -- @param func(int)
- --
- function MySQL.Async.execute(query, params, func)
- assert(type(query) == "string", "The SQL Query must be a string")
- exports['mysql-async']:mysql_execute(query, safeParameters(params), func)
- end
- ---
- -- Execute a query and fetch all results in an async way
- --
- -- @param query
- -- @param params
- -- @param func(table)
- --
- function MySQL.Async.fetchAll(query, params, func)
- assert(type(query) == "string", "The SQL Query must be a string")
- exports['mysql-async']:mysql_fetch_all(query, safeParameters(params), func)
- end
- ---
- -- Execute a query and fetch the first column of the first row, async version
- -- Useful for count function by example
- --
- -- @param query
- -- @param params
- -- @param func(mixed)
- --
- function MySQL.Async.fetchScalar(query, params, func)
- assert(type(query) == "string", "The SQL Query must be a string")
- exports['mysql-async']:mysql_fetch_scalar(query, safeParameters(params), func)
- end
- ---
- -- Execute a query and retrieve the last id insert, async version
- --
- -- @param query
- -- @param params
- -- @param func(string)
- --
- function MySQL.Async.insert(query, params, func)
- assert(type(query) == "string", "The SQL Query must be a string")
- exports['mysql-async']:mysql_insert(query, safeParameters(params), func)
- end
- ---
- -- Execute a List of querys and returns bool true when all are executed successfully
- --
- -- @param querys
- -- @param params
- -- @param func(bool)
- --
- function MySQL.Async.transaction(querys, params, func)
- return exports['mysql-async']:mysql_transaction(querys, params, func)
- end
- function MySQL.ready (callback)
- Citizen.CreateThread(function ()
- -- add some more error handling
- while GetResourceState('mysql-async') ~= 'started' do
- Citizen.Wait(0)
- end
- while not exports['mysql-async']:is_ready() do
- Citizen.Wait(0)
- end
- callback()
- end)
- end
- set mysql_connection_string "server=localhost;uid=mysqluser;password=password;database=essentialmode"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement