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

MySQL数据库

开发平台:

SQL

  1. -- ----------------------------------------------------------------------------------------
  2. -- Copyright (C) 2004 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 RdbmsManagement.lua
  20. -- @brief Module that contains functionality for database management
  21. -- ----------------------------------------------------------------------------------------
  22. -- ----------------------------------------------------------------------------------------
  23. -- @brief Returns the information about this module
  24. --
  25. --   Every Grt module has to implement this function to return information about the 
  26. -- module. Note that new functions that should be exposed to the Grt have to be listed 
  27. -- here. Function that are not exposed should start with a underscore.
  28. --
  29. -- @return A dict that contains the name and the function names of the module
  30. -- ----------------------------------------------------------------------------------------
  31. function getModuleInfo()
  32.   local moduleInfo= {
  33.     name= "RdbmsManagement", 
  34.     functions= {
  35.       "getManagementInfo::",
  36.       "storeConns::",
  37.       "getDatatypeGroupByName::",
  38.       "getDefaultDriverByName::"
  39.     }, 
  40.     extends= ""
  41.   }
  42.   return moduleInfo
  43. end
  44. -- ----------------------------------------------------------------------------------------
  45. -- @brief Returns a dict containing connection management information
  46. --
  47. --   Returns a structed dict that contains a list of all drivers and stored connections.
  48. -- New drivers have to be added here
  49. --
  50. -- @return a db.mgmt.Management dict
  51. -- ----------------------------------------------------------------------------------------
  52. function getManagementInfo()
  53.   -- Create new management object
  54.   local rdbmsMgmt= grtV.newObj("db.mgmt.Management", "rdbmsManagement", grt.newGuid(), "")
  55.   -- -------------------------------
  56.   -- Get datatype groups
  57.   getDatatypeGroups(rdbmsMgmt)
  58.   -- -------------------------------
  59.   -- Get rdbms information
  60.   local modules= grtM.get("RdbmsInfo")
  61.   local i
  62.   -- Call the getRdbmsInfo function of all modules that extend RdbmsInfo
  63.   for i= 1, table.getn(modules) do
  64.     local rdbms= grtM.callFunction(modules[i], "getRdbmsInfo", rdbmsMgmt)
  65.     grtV.insert(rdbmsMgmt.rdbms, rdbms)
  66.   end
  67.   -- -------------------------------
  68.   -- Prepare a list of stored connections
  69.   local storedConnsFilename= grt.getResLua(Base:getAppDataDir()) .. "Connections.xml"
  70.   if grt.fileExists(storedConnsFilename) then
  71.     rdbmsMgmt.storedConns= grtV.load(storedConnsFilename)
  72.   end
  73.   return grt.success(rdbmsMgmt)
  74. end
  75. -- ----------------------------------------------------------------------------------------
  76. -- @brief Stores the given connection list to disk
  77. --
  78. --   Stores the given connection list to the user's connection file on disk so they 
  79. -- can be loaded by getManagementInfo().
  80. --
  81. -- @param connectionList connection list GRT value to store
  82. -- 
  83. -- @return success
  84. -- ----------------------------------------------------------------------------------------
  85. function storeConns(args)
  86.   if args == nil then
  87.     return grt.error("The first argument has to be a list of db.mgmt.Connection objects")
  88.   end
  89.   
  90.   -- force the target directory to be present
  91.   Base:createDir({Base:getAppDataDir()})
  92.   
  93.   if grtError == nil then
  94.     local storedConnsFilename= grtV.toLua(Base:getAppDataDir()) .. "Connections.xml"
  95.     grtV.save(args[1], storedConnsFilename)
  96.     return grt.success()
  97.   else
  98.     return grt.error("The destination directory cannot be created.")
  99.   end
  100. end
  101. -- ----------------------------------------------------------------------------------------
  102. -- @brief Returns the datatype group defined by a name
  103. --
  104. --   Returns the datatype group defined by the submitted name
  105. --
  106. -- @param mgmtPath global path of the rdbms management value
  107. -- @param groupName the name of the datatype group
  108. --
  109. -- @return the datatype group or an error if there is no such group
  110. -- ----------------------------------------------------------------------------------------
  111. function getDatatypeGroupByName(args)
  112.   local groupList= args[1].datatypeGroups
  113.   local i
  114.   if groupList ~= nil then
  115.     for i= 1, grtV.getn(groupList) do
  116.       if (string.lower(grtV.toLua(args[2])) == grtV.toLua(groupList[i].name)) then
  117.         return grt.success(groupList[i])
  118.       end
  119.     end
  120.   end
  121.   return grt.error(_("No such datatype group"))
  122. end
  123. -- ----------------------------------------------------------------------------------------
  124. -- @brief Fills the given list with driver information
  125. --
  126. --   Helper function to fill the given list with driver information
  127. --
  128. -- @param drivers a typed list that will hold the drivers
  129. -- ----------------------------------------------------------------------------------------
  130. function getDatatypeGroupByNameLua(rdbmsMgmt, groupName)
  131.   local groupList
  132.   local i
  133.   
  134.   if rdbmsMgmt ~= nil then
  135.     groupList= rdbmsMgmt.datatypeGroups
  136.   
  137.     if groupList ~= nil then
  138.       for i= 1, grtV.getn(groupList) do
  139.         if (string.lower(groupName) == grtV.toLua(groupList[i].name)) then
  140.           return groupList[i]
  141.         end
  142.       end
  143.     end
  144.   end
  145.   
  146.   return ""
  147. end
  148. -- ----------------------------------------------------------------------------------------
  149. -- @brief Fills the given list with driver information
  150. --
  151. --   Helper function to fill the given list with driver information
  152. --
  153. -- @param drivers a typed list that will hold the drivers
  154. -- ----------------------------------------------------------------------------------------
  155. function getDatatypeGroups(rdbmsMgmt)
  156.   local groupList= rdbmsMgmt.datatypeGroups
  157.   local group
  158.   -- Numeric group
  159.   group= grtV.newObj("db.DatatypeGroup", "numeric", "{A0B5D6E6-E94C-482A-8608-8EF7AF4FB560}", grtV.toLua(rdbmsMgmt._id))
  160.   group.caption= _("Numeric Types")
  161.   group.description= _("Datatypes to store numbers of different sizes")
  162.   grtV.insert(groupList, group)
  163.   -- String group
  164.   group= grtV.newObj("db.DatatypeGroup", "string", "{92F0945A-4658-47A0-A3EA-423F4AB13694}", grtV.toLua(rdbmsMgmt._id))
  165.   group.caption= _("Strings")
  166.   group.description= _("Datatypes to store shorter text")
  167.   grtV.insert(groupList, group)
  168.   -- Text group
  169.   group= grtV.newObj("db.DatatypeGroup", "text", "{F48E12A6-C67D-43EC-8FA6-EC30D75E5528}", grtV.toLua(rdbmsMgmt._id))
  170.   group.caption= _("Long Text Types")
  171.   group.description= _("Datatypes to store long text")
  172.   grtV.insert(groupList, group)
  173.   -- Blob group
  174.   group= grtV.newObj("db.DatatypeGroup", "blob", "{640A39CD-A559-4366-BBCD-734F638B361D}", grtV.toLua(rdbmsMgmt._id))
  175.   group.caption= _("Blob Types")
  176.   group.description= _("Datatypes to store binary data")
  177.   grtV.insert(groupList, group)
  178.   -- Datetime group
  179.   group= grtV.newObj("db.DatatypeGroup", "datetime", "{06431E19-2E93-4DE3-8487-A8DF4A25DA96}", grtV.toLua(rdbmsMgmt._id))
  180.   group.caption= "Date and Time Types"
  181.   group.description= "Datatypes to store date and time values"
  182.   grtV.insert(groupList, group)
  183.   -- Geo group
  184.   group= grtV.newObj("db.DatatypeGroup", "gis", "{C1ABB46A-9AF9-420C-B31B-95AFE921C085}", grtV.toLua(rdbmsMgmt._id))
  185.   group.caption= "Geographical Types"
  186.   group.description= "Datatypes to store geographical information"
  187.   grtV.insert(groupList, group)
  188.   -- Various group
  189.   group= grtV.newObj("db.DatatypeGroup", "various", "{BBE4BC2C-D462-46B7-AC2E-9F0CE17C3686}", grtV.toLua(rdbmsMgmt._id))
  190.   group.caption= "Various Types"
  191.   group.description= "Various datatypes"
  192.   grtV.insert(groupList, group)
  193.   -- Userdefined group
  194.   group= grtV.newObj("db.DatatypeGroup", "userdefined", "{3D44C889-03BA-4783-A02D-ACDF4943257E}", grtV.toLua(rdbmsMgmt._id))
  195.   group.caption= "Userdefined Types"
  196.   group.description= "Datatypes defined by a user"
  197.   grtV.insert(groupList, group)
  198.   
  199.   -- Structured Datatypes group
  200.   group= grtV.newObj("db.DatatypeGroup", "structured", "{039C02E4-4FBE-4D5C-9E89-39A3E74E77F7}", grtV.toLua(rdbmsMgmt._id))
  201.   group.caption= "Structured Types"
  202.   group.description= "Structured datatypes consisting of a collection of simple and other structured datatypes"
  203.   grtV.insert(groupList, group)
  204. end
  205. -- ----------------------------------------------------------------------------------------
  206. -- @brief Returns the default driver of the RDBMS with the given name
  207. --
  208. --   Looks up the defaut driver of the RDBMS with the given name in 
  209. -- in /rdbmsMgmt/rdbms
  210. --
  211. -- @param the default driver or an error if no RDBMS with this name can be found
  212. -- ----------------------------------------------------------------------------------------
  213. function getDefaultDriverByName(args)
  214.   local rdbmsList= grtV.getGlobal("/rdbmsMgmt/rdbms")
  215.   local rdbmsName= grtV.toLua(args[1])
  216.   local rdbms= grtV.getListItemByObjName(rdbmsList, rdbmsName)
  217.   
  218.   if rdbms ~= nil then
  219.     return grt.success(rdbms.defaultDriver)
  220.   else
  221.     return grt.error(string.format(_("Cannot find RDBMS with the name %s."), rdbmsName))
  222.   end
  223. end