Advertisement
Isigar

Multirow insert statement

Feb 6th, 2023
1,368
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.04 KB | None | 0 0
  1.  
  2. RegisterCommand('test_sql', function()
  3.     local function isLast(tbl, i)
  4.         return i == table.len(tbl)
  5.     end
  6.  
  7.     local function tableKeys(tbl)
  8.         local keys = {}
  9.         for k, _ in pairs(tbl) do
  10.             table.insert(keys, k)
  11.         end
  12.         return keys
  13.     end
  14.  
  15.     local function prepareMultipleRowsInsert(basicQuery, values)
  16.         local query = basicQuery
  17.         local i = 1
  18.         local parametersMap = {}
  19.         for _, data in ipairs(values) do
  20.             local queryPart = '('
  21.             local inI = 1
  22.             local keyMap = {}
  23.             local valueKeyMap = {}
  24.             for key, value in pairs(data) do
  25.                 valueKeyMap[key] = value
  26.             end
  27.             for ind, v in ipairs(tableKeys(data)) do
  28.                 keyMap[ind] = v
  29.             end
  30.  
  31.             for _, key in pairs(keyMap) do
  32.                 local value = valueKeyMap[key]
  33.                 local newKey = '@' .. key .. i
  34.                 if isLast(data, inI) then
  35.                     queryPart = queryPart .. newKey
  36.                 else
  37.                     queryPart = queryPart .. newKey .. ', '
  38.                 end
  39.                 parametersMap[newKey] = value
  40.  
  41.                 inI = inI + 1
  42.             end
  43.  
  44.             queryPart = queryPart .. ')'
  45.  
  46.             if i == 1 then
  47.                 query = query .. string.format("%s", queryPart)
  48.             else
  49.                 query = query .. string.format(", %s", queryPart)
  50.             end
  51.  
  52.             i = i + 1
  53.         end
  54.         return query, parametersMap
  55.     end
  56.  
  57.     local query, parametersMap = prepareMultipleRowsInsert('INSERT INTO `rcore_multiple_insert` (`identifier`, `chat`) VALUES ', {
  58.         {
  59.             ['identifier'] = 'steam:11000010f1c5b5f',
  60.             ['chat'] = 'some cool message',
  61.         },
  62.         {
  63.             ['identifier'] = 'license:',
  64.             ['chat'] = 'other message',
  65.         }
  66.     })
  67.  
  68.     print(query, dumpTable(parametersMap))
  69.  
  70.     --TODO CHECK
  71.     --MySQL.Sync.execute(query, parametersMap)
  72. end)
Tags: lua sql fiveM
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement