_query.lua
上传用户:cccombo
上传日期:2021-01-31
资源大小:16445k
文件大小:6k
源码类别:

MySQL数据库

开发平台:

SQL

  1. -- ----------------------------------------------------------------------------------------
  2. -- Copyright (C) 2005, 2006 MySQL AB
  3. --
  4. -- This program is free software; you can redistribute it and/or modify
  5. -- it under the terms of the GNU General Public License as published by
  6. -- the Free Software Foundation; either version 2 of the License, or
  7. -- (at your option) any later version.
  8. --
  9. -- This program is distributed in the hope that it will be useful,
  10. -- but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. -- GNU General Public License for more details.
  13. --
  14. -- You should have received a copy of the GNU General Public License
  15. -- along with this program; if not, write to the Free Software
  16. -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  17. -- ----------------------------------------------------------------------------------------
  18. -- ----------------------------------------------------------------------------------------
  19. -- @file _query.lua
  20. -- @brief This library contains the query class
  21. -- ----------------------------------------------------------------------------------------
  22. Query= {
  23.     grtQuery= nil,
  24.     grtRes= nil
  25.   }
  26.   
  27. function Query:new(args)
  28.   qryObj= {}
  29.   
  30.   -- set meta table to inherit parent class behaviour
  31.   setmetatable(qryObj, self)
  32.   self.__index = self
  33.   
  34.   -- check arguments
  35.   local name= "Query"
  36.   local argCount= 0
  37.   if type(args) == "string" then
  38.     qryObj.grtQuery= grtV.newObj("db.query.Query", name, "", "")
  39.     qryObj:setSql(args)
  40.   else
  41.     if args ~= nil then
  42.       argCount= table.getn(args)
  43.       if argCount >= 2 then
  44.         name= args[2]
  45.       end
  46.     end
  47.     
  48.     if argCount >= 1 then
  49.       if type(args[1]) == "string" then
  50.         qryObj.grtQuery= grtV.newObj("db.query.Query", name, "", "")
  51.         qryObj:setSql(args[1])
  52.       else
  53.         qryObj.grtQuery= args[1]
  54.       end
  55.     else
  56.       qryObj.grtQuery= grtV.newObj("db.query.Query", name, "", "")
  57.     end
  58.   end
  59.   
  60.   return qryObj
  61. end
  62. function Query:close()
  63.   RdbmsResultSet:close({self.grtRes})
  64. end
  65. function Query:setSql(sql)
  66.   self.grtQuery.sql= sql
  67. end
  68. function Query:getSql()
  69.   return self.grtQuery.sql
  70. end
  71. function Query:setConnection(conn)
  72.   if (conn ~= nil) and (grtS.get(conn) ~= "db.mgmt.Connection") then
  73.     return grt.error("This function takes a db.mgmt.Connection as parameter.")
  74.   end
  75.   
  76.   if conn._id == nil then
  77.     conn._id= grt.newGuid()
  78.   end
  79.   -- make sure the conn is in the lookup cache
  80.   grtV.lookupAdd(conn)
  81.   
  82.   self.grtQuery.connection= conn
  83.   
  84.   -- get query module
  85.   local queryModule= conn.modules.QueryModule
  86.   if queryModule == nil then
  87.     queryModule= self:getConnection().driver.defaultModules.QueryModule
  88.   end
  89.   
  90.   self.grtQuery.moduleName= queryModule
  91. end
  92. function Query:getConnection()
  93.   return self.grtQuery.connection
  94. end
  95. function Query:print(conn)
  96.   if conn ~= nil then
  97.     self:setConnection(conn)
  98.   end
  99.   
  100.   if self.grtQuery.moduleName == nil then
  101.     return grt.error("The connection does not have a query module.")
  102.   end
  103.   
  104.   grtM.callFunction(grtV.toLua(self.grtQuery.moduleName), "queryPrint", 
  105.     {self:getConnection(), self:getSql()})
  106. end
  107. function Query:execute(conn, bufferSize)
  108.   if conn ~= nil then
  109.     self:setConnection(conn)
  110.   end
  111.   
  112.   if self.grtQuery.moduleName == nil then
  113.     return grt.error("The connection does not have a query module.")
  114.   end
  115.   
  116.   self.grtRes= RdbmsResultSet:open({self.grtQuery, bufferSize})
  117.   print(self.grtQuery.moduleName)
  118.   grtM.callFunction(grtV.toLua(self.grtQuery.moduleName), "queryFetchResultSet", {self.grtRes})
  119.   
  120.   return self.grtRes
  121. end
  122. function Query:executeAndFetch(conn, bufferSize)
  123.   self:execute(conn, bufferSize)
  124.   
  125.   while(qry2:fetchNextBlock()) do 
  126.   end
  127. end
  128. function Query:fetchNextBlock()
  129.   if self.grtRes ~= nil then
  130.     grtM.callFunction(grtV.toLua(self.grtQuery.moduleName), "queryFetchResultSet", {self.grtRes})
  131.   end
  132.   
  133.   if (self:status() == 2) then
  134.     return true
  135.   else
  136.     return false
  137.   end
  138. end
  139. function Query:currentRowCount()
  140.   if self.grtRes ~= nil then
  141.     return grtV.toLua(RdbmsResultSet:currentRowCount({self.grtRes}))
  142.   else
  143.     return 0
  144.   end
  145. end
  146. function Query:status()
  147.   if self.grtRes ~= nil then
  148.     return grtV.toLua(RdbmsResultSet:status({self.grtRes}))
  149.   else
  150.     return 0
  151.   end
  152. end
  153. function Query:fieldAsString(index)
  154.   if self.grtRes ~= nil then
  155.     return grtV.toLua(RdbmsResultSet:fieldAsString({self.grtRes, index - 1}))
  156.   else
  157.     return ""
  158.   end
  159. end
  160. function Query:moveNext()
  161.   if self.grtRes ~= nil then
  162.     if grtV.toLua(RdbmsResultSet:moveNext({self.grtRes})) == 1 then
  163.       return true
  164.     else
  165.       return false
  166.     end
  167.   else
  168.     return false
  169.   end
  170. end
  171. function Query:movePrior()
  172.   if self.grtRes ~= nil then
  173.     if grtV.toLua(RdbmsResultSet:movePrior({self.grtRes})) == 1 then
  174.       return true
  175.     else
  176.       return false
  177.     end
  178.   else
  179.     return false
  180.   end
  181. end
  182. function Query:moveFirst()
  183.   if self.grtRes ~= nil then
  184.     if grtV.toLua(RdbmsResultSet:moveFirst({self.grtRes})) == 1 then
  185.       return true
  186.     else
  187.       return false
  188.     end
  189.   else
  190.     return false
  191.   end
  192. end
  193. function Query:moveLast()
  194.   if self.grtRes ~= nil then
  195.     if grtV.toLua(RdbmsResultSet:moveLast({self.grtRes})) == 1 then
  196.       return true
  197.     else
  198.       return false
  199.     end
  200.   else
  201.     return false
  202.   end
  203. end
  204. function Query:columnCount()
  205.   if self.grtRes ~= nil then
  206.     return grtV.getn(self.grtRes.columns)
  207.   else
  208.     return 0
  209.   end
  210. end