From 8d8d528d2ad52599f11250cfc567fea4f37f2a8b Mon Sep 17 00:00:00 2001 From: Context Git Mirror Bot Date: Tue, 12 Jan 2016 17:15:07 +0100 Subject: 2016-01-12 16:26:00 --- tex/context/base/mkiv/util-sql-tracers.lua | 71 ++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 tex/context/base/mkiv/util-sql-tracers.lua (limited to 'tex/context/base/mkiv/util-sql-tracers.lua') diff --git a/tex/context/base/mkiv/util-sql-tracers.lua b/tex/context/base/mkiv/util-sql-tracers.lua new file mode 100644 index 000000000..44e32d256 --- /dev/null +++ b/tex/context/base/mkiv/util-sql-tracers.lua @@ -0,0 +1,71 @@ +if not modules then modules = { } end modules ['util-sql-tracers'] = { + version = 1.001, + comment = "companion to m-sql.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +local sql = utilities.sql +local tracers = { } +sql.tracers = tracers + +sql.setmethod("swiglib") + +local gsub, lower = string.gsub, string.lower + +local t_names = { + mysql = [[SHOW TABLES FROM `%database%`]], + mssql = [[SELECT table_name FROM %database%.information_schema.tables;]], + mssql = [[SELECT "name" FROM "%database%"."sys"."databases" ORDER BY "name";]], + mssql = [[SELECT name FROM "%database%"."sys"."objects" WHERE "type" IN ('P', 'U', 'V', 'TR', 'FN', 'TF');]], +} + +local t_fields = { + mysql = [[SHOW FIELDS FROM `%database%`.`%table%` ]], + mssql = [[SELECT column_name "field", data_type "type", column_default "default", is_nullable "null" FROM %database%.information_schema.columns WHERE table_name='%table%']], +} + +function sql.tracers.gettables(presets) + local servertype = sql.getserver() + + local results, keys = sql.execute { + presets = presets, + template = t_names[servertype], + variables = { + database = presets.database, + }, + } + + local key = keys and keys[1] + local tables = { } + + if keys then + for i=1,#results do + local name = results[i][key] + local results, keys = sql.execute { + presets = presets, + template = t_fields[servertype], + variables = { + database = presets.database, + table = name + }, + } + if #results > 0 then + for i=1,#results do + local result = table.loweredkeys(results[i]) + -- ms cleanup + result.default = gsub(result.default,"^[%(']+(.-)[%)']+$","%1") + result.null = lower(result.null) + -- + results[i] = result + end + tables[name] = results + else + -- a view + end + end + end + + return tables +end -- cgit v1.2.3