ZNZNCOOP

mysql.lua

Mar 17th, 2016
258
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --Библиотека для работы с СУБД MySQL
  2. local event=require("event")
  3. --local ser=require("serialization").serialize
  4. local uns=require("serialization").unserialize
  5. local sig_request="mysql_request"
  6. local sig_ansver ="mysql_ansver"
  7.  
  8. local pushSignal = require("computer").pushSignal
  9. local mysql={}
  10. local lastSession
  11.  
  12. function Lrequest(self, ...) -- Локальная сессия
  13.   lastSession=self
  14.   self.error=nil
  15.   pushSignal(sig_request, self.id, ...)
  16.   local ev_name, id, result
  17.   ev_name, id, result, self.error=event.pull(3, sig_ansver, self.id)
  18.   if ev_name then
  19.     if type(result)=="string" then return uns(result) end
  20.     return result
  21.   end
  22.   self.error="Нет ответа от sql-сервера"
  23.   return false
  24. end
  25.  
  26. function Rrequest(self, ...) -- Удаленная сессия
  27.   self.error="Удаленная сессия пока не поддерживается"
  28.   return false
  29. end
  30.  
  31. -----------------Функции СУБД MySQL--------------------------
  32. -- http://www.php.su/functions/?cat=mysql
  33.  
  34. --mysql_affected_rows -- Возвращает число затронутых прошлой операцией рядов.
  35. --mysql_change_user --  Изменяет пользователя для указанного соединения.
  36. --mysql_client_encoding -- Возвращает кодировку соединения
  37.  
  38. --mysql_close -- Закрывает соединение с сервером MySQL
  39. function mysql.close(session)
  40.   session=session or lastSession
  41.   if session("close") then
  42.     setmetatable(session,nil)
  43.     for k in pairs(session) do session[k]=nil end
  44.     lastSession=nil
  45.     return true
  46.   else
  47.     return false
  48.   end
  49. end
  50. --mysql_connect -- Открывает соединение с сервером MySQL
  51. function mysql.connect( server , username , password )
  52.   server=server or "localhost:3306"
  53.   local session={username=username, password=password}
  54.   session.host, session.port = server:match("(%w+):?(%d*)")
  55.   session.port=tonumber(session.port) or 3306
  56.   if session.host=="localhost" then
  57.     setmetatable(session,{__call=Lrequest}) -- Локальная сессия
  58.   else
  59.     setmetatable(session,{__call=Rrequest}) -- Удаленная сессия
  60.   end
  61.   lastSession=session
  62.   session.id=session("connect")
  63.   if session.id then return session
  64.   else session.error="Невозможно установить соединение с sql-сервером" return false end
  65. end
  66.  
  67. --mysql_create_db -- Создаёт базу данных MySQL-- функция не поддерживается. Используйте mysql_query() с SQL-запросом создания базы данных "CREATE DATABASE"
  68.  
  69. --mysql_data_seek -- Перемещает внутренний указатель в результате запроса
  70. function mysql.data_seek(result, row_number)
  71.   if row_number>#result then return false end
  72.   result.row_ptr=row_number
  73.   return true
  74. end
  75.  
  76. --mysql_db_name -- Возвращает название базы данных
  77. --mysql_db_query -- Переключается к указанной базе данных и посылает запрос
  78. --mysql_drop_db -- Уничтожает базу данных MySQL
  79. --mysql_errno --  Возвращает численный код ошибки выполнения последней операции с MySQL
  80.  
  81. --mysql_error --  Возвращает строку ошибки последней операции с MySQL.
  82. function mysql.error(session)
  83.   session=session or lastSession
  84.   return session.error or ""
  85. end
  86. --mysql_escape_string --  Экранирует SQL спец-символы для mysql_query.
  87.  
  88. --mysql_fetch_array --  Обрабатывает ряд результата запроса, возвращая ассоциативный массив, численный массив или оба.
  89. mysql.ASSOC, mysql.NUM, mysql.BOTH = 1,2,3
  90. function mysql.fetch_array(result , result_type)
  91.   result_type=result_type or mysql.BOTH
  92.   if not result.row_ptr then result.row_ptr=1 end
  93.   if result.row_ptr>#result then return false end
  94.   local res={}
  95.   if result_type==mysql.ASSOC or result_type==mysql.BOTH then
  96.     if type(result.name)=="table" then
  97.       for i=1,#result.name do res[result.name[i]]=result[result.row_ptr][i] end
  98.     else
  99.       res[result.name]=result[result.row_ptr]
  100.     end
  101.   end
  102.   if result_type==mysql.NUM or result_type==mysql.BOTH then
  103.     if type(result.name)=="table" then
  104.       for i=1,#result.name do res[i]=result[result.row_ptr][i] end
  105.     else
  106.       res[1]=result[result.row_ptr]
  107.     end
  108.   end
  109.   result.row_ptr=result.row_ptr+1
  110.   return res
  111. end
  112. function mysql.fetch_arrays(result, result_type)
  113.   mysql.data_seek(result, 1)
  114.   return function() return mysql.fetch_array(result, result_type) or nil end
  115. end
  116.  
  117. --mysql_fetch_assoc --  Обрабатывает ряд результата запроса и возвращает ассоциативный массив.
  118. function mysql.fetch_assoc(result)
  119.   return mysql.fetch_array(result, mysql.ASSOC)
  120. end
  121. --mysql_fetch_field --  Возвращает информацию о колонке из результата запроса в виде объекта.
  122. --mysql_fetch_lengths --  Возвращает длину каждого поля в результате.
  123. --mysql_fetch_object -- Обрабатывает ряд результата запроса и возвращает объект
  124. --mysql_fetch_row -- Орабатывает ряд результата запроса и возвращает неассоциативный массив.
  125. function mysql.fetch_row(result)
  126.   if not result.row_ptr then result.row_ptr=1 end
  127.   if result.row_ptr>#result then return false end
  128.   result.row_ptr=result.row_ptr+1
  129.   return result[result.row_ptr-1]
  130. end
  131. function mysql.fetch_rows(result)
  132.   mysql.data_seek(result, 1)
  133.   return function() return mysql.fetch_row(result) or nil end
  134. end
  135.  
  136. --mysql_field_flags --  Возвращает флаги указанного поля результата запроса.
  137. --mysql_field_len --  Возвращает длину указанного поля.
  138. --mysql_field_name --  Возвращает название указанной колонки результата запроса.
  139. --mysql_field_seek --  Устанавливает внутренний указатель поля на переданное смещение.
  140. --mysql_field_table --  Возвращает название таблицы, которой принадлежит указанное поле.
  141. --mysql_field_type --  Возвращает тип указанного поля результата запроса.
  142. --mysql_free_result -- Освобождает память от результата запроса
  143. --mysql_get_client_info -- Возвращает данные о MySQL-клиенте
  144. --mysql_get_host_info -- Возвращает информацию о соединении с MySQL
  145. --mysql_get_proto_info -- Возвращает информацию о протоколе MySQL
  146. --mysql_get_server_info -- Возвращает информацию о сервере MySQL
  147. --mysql_info --  Возвращает информацию о последнем запросе
  148. --mysql_insert_id --  Возвращает ID, сгенерированный при последнем INSERT-запросе.
  149. --mysql_list_dbs --  Возвращает список баз данных, доступных на сервере.
  150. --mysql_list_fields -- Возвращает список колонок таблицы
  151. --mysql_list_processes -- Возвращает список процессов MySQL
  152. --mysql_list_tables -- Возвращает список таблиц базы данных MySQL
  153.  
  154. --mysql_num_fields -- Возвращает количество полей результата запроса
  155. function mysql.num_fields( result )
  156.   return #result.head
  157. end
  158.  
  159. --mysql_num_rows -- Возвращает количество рядов результата запроса
  160. function mysql.num_rows( result )
  161.   return #result
  162. end
  163.  
  164. --mysql_pconnect --  Устанавливает постоянное соединение с сервером MySQL.
  165. --mysql_ping -- Проверяет соединение с сервером и пересоединяется при необходимости
  166.  
  167. --mysql_query -- Посылает запрос MySQL--Строка запроса НЕ должна заканчиваться точкой с запятой
  168. function mysql.query( query, session )
  169.   session=session or lastSession or mysql.connect()
  170.   if not session then return false end
  171.   return session("query",query)
  172. end
  173.  
  174. --mysql_real_escape_string --  Экранирует специальные символы в строке, используемой в SQL-запросе, принмимая во внимание кодировку соединения.
  175. --mysql_result -- Возвращает данные результата запроса
  176. --mysql_select_db -- Выбирает базу данных MySQL
  177. --mysql_set_charset -- Устанавливает кодировку MySQL по умолчанию
  178. --mysql_stat -- Возвращает текущий статус сервера
  179. --mysql_tablename -- Возвращает имя таблицы, содержащей указанное поле
  180. --mysql_thread_id -- Возвращает ID текущего потока
  181. --mysql_unbuffered_query --  Посылает MySQL SQL-запрос без авто-обработки результата и её буфферизации.
  182.  
  183. return mysql
RAW Paste Data