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

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 RdbmsInfoMssql.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= "RdbmsInfoMssql", 
  34.     functions= {
  35.       "getRdbmsInfo::"
  36.     }, 
  37.     extends= "RdbmsInfo"
  38.   }
  39.   return moduleInfo
  40. end
  41. -- ----------------------------------------------------------------------------------------
  42. -- @brief Function to get information about Mssql
  43. --
  44. --   Returns a db.mgmt.Rdbms struct with infos about the rdbms
  45. -- 
  46. -- @return a new created db.mgmt.Rdbms GRT value struct 
  47. -- ----------------------------------------------------------------------------------------
  48. function getRdbmsInfo(args)
  49.   local rdbmsMgmt= args[1]
  50.   -- create Rdbms object
  51.   local rdbms= grtV.newObj("db.mgmt.Rdbms", "Mssql", "{C31762DD-0C04-45A0-8030-C05A2382E004}", grtV.toLua(rdbmsMgmt._id))
  52.   rdbms.caption= "MS SQL Server"
  53.   rdbms.databaseObjectPackage= "db.mssql"
  54.   
  55.   -- create simple datatypes for Rdbms
  56.   createSimpleDatatypes(rdbmsMgmt, rdbms)
  57.   -- add driver to the Rdbms' list of drivers
  58.   grtV.insert(rdbms.drivers, getDriverMssqlJdbc(rdbms))
  59.   rdbms.defaultDriver= rdbms.drivers[1]
  60.   return grt.success(rdbms)
  61. end
  62. -- ----------------------------------------------------------------------------------------
  63. -- @brief Builds the list of simple datatypes
  64. --
  65. --   Helper function to build the list of simple datatypes
  66. -- 
  67. -- @param rdbmsMgmt the Grt value of the Rdbms Management
  68. -- @param rdbms the Grt value of the Rdbms
  69. -- ----------------------------------------------------------------------------------------
  70. function createSimpleDatatypes(rdbmsMgmt, rdbms)
  71.   local dt
  72.   local owner= grtV.toLua(rdbms._id)
  73.   local group
  74.   -- --------------------------------------------------------------------------------------
  75.   -- numeric group
  76.   do
  77.     group= __RdbmsManagement_lua.getDatatypeGroupByNameLua(rdbmsMgmt, "numeric")
  78.   
  79.     -- DECIMAL
  80.     dt= grtV.newObj("db.SimpleDatatype", "DECIMAL", "{5D9C607E-6CB2-4F5B-AB11-40AAC9AC35E2}", owner)
  81.     dt.group= group
  82.     dt.numericPrecision= 28
  83.     dt.numericScale= 28
  84.     grtV.insert(rdbms.simpleDatatypes, dt)
  85.   
  86.     -- NUMERIC
  87.     dt= grtV.newObj("db.SimpleDatatype", "NUMERIC", "{76446D77-57AA-48FC-AB86-D81B23D32D95}", owner)
  88.     dt.group= group
  89.     dt.numericPrecision= 28
  90.     dt.numericScale= 28
  91.     grtV.insert(rdbms.simpleDatatypes, dt)
  92.   
  93.     -- FLOAT
  94.     dt= grtV.newObj("db.SimpleDatatype", "FLOAT", "{1A50E390-1E17-4DBA-8781-626D629564CA}", owner)
  95.     dt.group= group
  96.     dt.numericPrecision= 15
  97.     dt.numericScale= 15
  98.     grtV.insert(rdbms.simpleDatatypes, dt)
  99.   
  100.     -- REAL
  101.     dt= grtV.newObj("db.SimpleDatatype", "REAL", "{16470D1F-C339-4235-9764-61C17A9A6E5B}", owner)
  102.     dt.group= group
  103.     dt.numericPrecision= 7
  104.     dt.numericScale= 7
  105.     grtV.insert(rdbms.simpleDatatypes, dt)
  106.   
  107.     -- TINYINT
  108.     dt= grtV.newObj("db.SimpleDatatype", "TINYINT", "{4C220187-EBAA-458F-81FC-B22656B0F1B6}", owner)
  109.     dt.group= group
  110.     dt.numericPrecision= 3
  111.     grtV.insert(rdbms.simpleDatatypes, dt)
  112.   
  113.     -- SMALLINT
  114.     dt= grtV.newObj("db.SimpleDatatype", "SMALLINT", "{A3DD29A8-7FAF-42B5-A61B-D47BE005A31E}", owner)
  115.     dt.group= group
  116.     dt.numericPrecision= 5
  117.     grtV.insert(rdbms.simpleDatatypes, dt)
  118.   
  119.     -- INT
  120.     dt= grtV.newObj("db.SimpleDatatype", "INT", "{3CA215AC-B2D1-4539-BF42-DF184FD5BA7C}", owner)
  121.     dt.group= group
  122.     dt.numericPrecision= 10
  123.     grtV.insert(rdbms.simpleDatatypes, dt)
  124.   
  125.     -- BIGINT
  126.     dt= grtV.newObj("db.SimpleDatatype", "BIGINT", "{27E9AFDB-1798-48A4-85B7-6F1B26ED7C08}", owner)
  127.     dt.group= group
  128.     dt.numericPrecision= 19
  129.     grtV.insert(rdbms.simpleDatatypes, dt)
  130.   end
  131.   
  132.   -- --------------------------------------------------------------------------------------
  133.   -- string group
  134.   do
  135.     group= __RdbmsManagement_lua.getDatatypeGroupByNameLua(rdbmsMgmt, "string")
  136.   
  137.     -- CHAR
  138.     dt= grtV.newObj("db.SimpleDatatype", "CHAR", "{DBA4AF53-EA75-4FEA-9602-955754FD6C5E}", owner)
  139.     dt.group= group
  140.     dt.characterMaximumLength= 8000
  141.     grtV.insert(rdbms.simpleDatatypes, dt)
  142.   
  143.     -- VARCHAR
  144.     dt= grtV.newObj("db.SimpleDatatype", "VARCHAR", "{A4D27A90-0803-4CCE-BEAA-E2A60B075017}", owner)
  145.     dt.group= group
  146.     dt.characterMaximumLength= 8000
  147.     grtV.insert(rdbms.simpleDatatypes, dt)
  148.   
  149.     -- NCHAR
  150.     dt= grtV.newObj("db.SimpleDatatype", "NCHAR", "{962B8C30-4F84-477B-940D-D8245F8E57FB}", owner)
  151.     dt.group= group
  152.     dt.characterMaximumLength= 4000
  153.     grtV.insert(rdbms.simpleDatatypes, dt)
  154.   
  155.     -- NVARCHAR
  156.     dt= grtV.newObj("db.SimpleDatatype", "NVARCHAR", "{0A860931-EFDD-4FAF-A00C-D7FAC4F76856}", owner)
  157.     dt.group= group
  158.     dt.characterMaximumLength= 4000
  159.     grtV.insert(rdbms.simpleDatatypes, dt)
  160.   end
  161.   
  162.   -- --------------------------------------------------------------------------------------
  163.   -- text group
  164.   do
  165.     group= __RdbmsManagement_lua.getDatatypeGroupByNameLua(rdbmsMgmt, "text")
  166.   
  167.     -- TEXT
  168.     dt= grtV.newObj("db.SimpleDatatype", "TEXT", "{83B6CCD8-9CB2-444A-BAAD-455F5DBC3B73}", owner)
  169.     dt.group= group
  170.     dt.characterMaximumLength= -31
  171.     grtV.insert(rdbms.simpleDatatypes, dt)
  172.   
  173.     -- NTEXT
  174.     dt= grtV.newObj("db.SimpleDatatype", "NTEXT", "{73903640-5E47-4182-87FF-C5A69372F0E6}", owner)
  175.     dt.group= group
  176.     dt.characterMaximumLength= -30
  177.     grtV.insert(rdbms.simpleDatatypes, dt)
  178.   end
  179.   
  180.   -- --------------------------------------------------------------------------------------
  181.   -- blob group
  182.   do
  183.     group= __RdbmsManagement_lua.getDatatypeGroupByNameLua(rdbmsMgmt, "blob")
  184.   
  185.     -- IMAGE
  186.     dt= grtV.newObj("db.SimpleDatatype", "IMAGE", "{35366D07-7CED-450A-BC85-A26372731166}", owner)
  187.     dt.group= group
  188.     dt.characterOctetLength= -31
  189.     grtV.insert(rdbms.simpleDatatypes, dt)
  190.   
  191.     -- BINARY
  192.     dt= grtV.newObj("db.SimpleDatatype", "BINARY", "{08177DE8-36A1-4BCA-9340-AF57A0E635E9}", owner)
  193.     dt.group= group
  194.     dt.characterOctetLength= 8000
  195.     grtV.insert(rdbms.simpleDatatypes, dt)
  196.   
  197.     -- VARBINARY
  198.     dt= grtV.newObj("db.SimpleDatatype", "VARBINARY", "{F5A21752-AAF4-46A9-A9F0-3B117CA1CA56}", owner)
  199.     dt.group= group
  200.     dt.characterOctetLength= 8000
  201.     grtV.insert(rdbms.simpleDatatypes, dt)
  202.   end
  203.   
  204.   -- --------------------------------------------------------------------------------------
  205.   -- datetime group
  206.   do
  207.     group= __RdbmsManagement_lua.getDatatypeGroupByNameLua(rdbmsMgmt, "datetime")
  208.   
  209.     -- DATETIME
  210.     dt= grtV.newObj("db.SimpleDatatype", "DATETIME", "{F1DA3FBD-C75A-4B05-AFF8-F897F3B82739}", owner)
  211.     dt.group= group
  212.     dt.dateTimePrecision= 8
  213.     grtV.insert(rdbms.simpleDatatypes, dt)
  214.   
  215.     -- SMALLDATETIME
  216.     dt= grtV.newObj("db.SimpleDatatype", "SMALLDATETIME", "{757F5494-3FC5-4DB5-B844-C1F06C952279}", owner)
  217.     dt.group= group
  218.     dt.dateTimePrecision= 6
  219.     grtV.insert(rdbms.simpleDatatypes, dt)
  220.   
  221.     -- TIMESTAMP
  222.     dt= grtV.newObj("db.SimpleDatatype", "TIMESTAMP", "{C593D7F9-F047-4142-9D6D-BA55C6BEB4A5}", owner)
  223.     dt.group= group
  224.     dt.dateTimePrecision= 8
  225.     grtV.insert(rdbms.simpleDatatypes, dt)
  226.   end
  227.   
  228.   -- --------------------------------------------------------------------------------------
  229.   -- various group
  230.   do
  231.     group= __RdbmsManagement_lua.getDatatypeGroupByNameLua(rdbmsMgmt, "various")
  232.     
  233.     -- BIT
  234.     dt= grtV.newObj("db.SimpleDatatype", "BIT", "{64B57C32-49FE-47B4-A006-E2E68B948FE8}", owner)
  235.     dt.group= group
  236.     dt.numericPrecision= 1
  237.     grtV.insert(rdbms.simpleDatatypes, dt)
  238.     
  239.     -- MONEY
  240.     dt= grtV.newObj("db.SimpleDatatype", "MONEY", "{73580086-E192-4621-ACA9-8FC435833325}", owner)
  241.     dt.group= group
  242.     dt.numericPrecision= 19
  243.     dt.numericScale= 4
  244.     grtV.insert(rdbms.simpleDatatypes, dt)
  245.   
  246.     -- SMALLMONEY
  247.     dt= grtV.newObj("db.SimpleDatatype", "SMALLMONEY", "{3D4F9D59-C34B-4D99-AAC8-38FF348B237B}", owner)
  248.     dt.group= group
  249.     dt.numericPrecision= 10
  250.     dt.numericScale= 4
  251.     grtV.insert(rdbms.simpleDatatypes, dt)
  252.   
  253.     -- UNIQUEIDENTIFIER
  254.     dt= grtV.newObj("db.SimpleDatatype", "UNIQUEIDENTIFIER", "{64C9B531-9E3C-4667-97A7-6992E395263E}", owner)
  255.     dt.group= group
  256.     dt.characterOctetLength= 16
  257.     grtV.insert(rdbms.simpleDatatypes, dt)
  258.   end
  259. end
  260. -- ----------------------------------------------------------------------------------------
  261. -- @brief Function to get the MS SQL driver
  262. --
  263. --   Helper function to return infos about the Jdbc driver
  264. -- 
  265. -- @param owner the Grt value of the Rdbms
  266. --
  267. -- @return a new created GRT value of struct "db.mgmt.Driver" containing the driver infos
  268. -- ----------------------------------------------------------------------------------------
  269. function getDriverMssqlJdbc(owner)
  270.   -- create driver object
  271.   local driver= grtV.newObj("db.mgmt.JdbcDriver", "jTDS102", 
  272.     "{9437F83E-FF9E-4831-9132-B4502303C229}", grtV.toLua(owner._id))
  273.   -- set driver values
  274.   driver.caption= "MS SQL JDBC Driver"
  275.   driver.description= "JDBC driver to connect to MS SQL Server 2000 and 2005."
  276.   driver.filesTarget= "./java/lib/"
  277.   grtV.insert(driver.files, "jtds-1.2.jar")
  278.   driver.downloadUrl= "http://sourceforge.net/project/showfiles.php?group_id=33291"
  279.   -- Jdbc specific settings
  280.   driver.className= "net.sourceforge.jtds.jdbc.Driver"
  281.   driver.connectionStringTemplate= "jdbc:jtds:sqlserver://%host%:%port%/%database%;user=%username%;password=%password%" ..
  282.     ";charset=utf-8;domain=%domain%"
  283.   -- add driver parameters
  284.   __RdbmsInfo_lua.addDriverParamDefaults(driver, driver.parameters, 1, "1433")
  285.   local param= __RdbmsInfo_lua.getDriverParameter(owner, "database", "Database:", 
  286.     "Name of the database, e.g. Northwind.", "string", -1, 218, "", 0, 1)
  287.   param.lookupValueModule= "ReverseEngineeringMssql"
  288.   param.lookupValueMethod= "getCatalogs"
  289.   grtV.insert(driver.parameters, param)
  290.   grtV.insert(driver.parameters, __RdbmsInfo_lua.getDriverParameter(owner, "domain", "Domain:", 
  291.     "If specificed, NTLM authentication is used.", "string", -1, 218, "", 0, 0))
  292.   -- advanced parameters
  293.   grtV.insert(driver.parameters, __RdbmsInfo_lua.getDriverParameter(owner, "jdbcConnStr", "Connection String:", 
  294.     "Jdbc Connection String", "string", -1, 218, "", 1, 0))
  295.   
  296.   driver.defaultModules= 
  297.     {
  298.       ReverseEngineeringModule= "ReverseEngineeringMssql",
  299.       MigrationModule= "MigrationMssql",
  300.       TransformationModule= ""
  301.     }
  302.   if grt.moduleExists("BaseJava") then
  303.     driver.isAccessable= true
  304.     driver.isInstalled= grt.getRes(BaseJava:javaClassExists(driver.className))
  305.   else
  306.     driver.isAccessable= false
  307.     driver.isInstalled= false
  308.   end
  309.   return driver
  310. end