diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/dblib.lua | 33 | 
1 files changed, 24 insertions, 9 deletions
| diff --git a/lib/dblib.lua b/lib/dblib.lua index b514375..b361cd1 100644 --- a/lib/dblib.lua +++ b/lib/dblib.lua @@ -99,11 +99,11 @@ _luadb = {      generate_fields = function(db, ddl)          local k, v -        local r, r2 = {}, {} +        local r, alters, keys = {}, {}, {}          for k, v in pairs(ddl) do              r[k] = "" -            r2[k] = {} +            alters[k] = {}              r[k] = _luadb.get_canon_type(v.type, k) @@ -132,11 +132,12 @@ _luadb = {              end              if options.PRI then -                r[k] = r[k] .. " PRIMARY KEY" +                table.insert(keys, k) +                keys[k] = true              end              if options.UNIQ then -                table.insert(r2[k], "ADD UNIQUE (`@fieldname@`)") +                table.insert(alters[k], "ADD UNIQUE (`@fieldname@`)")              end              if options.AUTO then @@ -150,11 +151,11 @@ _luadb = {                  r[k] = r[k] .. ' DEFAULT "' .. db.sql_escape(v.default) .. '"'              end          end -        return r, r2 +        return r, alters, keys      end,      opentable = function(db, tablename, ddl) -        local fields, alters = _luadb.generate_fields(db, ddl) +        local fields, alters, keys = _luadb.generate_fields(db, ddl)          local tname = "`" .. db._.prefix .. db.sql_escape(tablename) .. "`"          local operations = 0 @@ -175,7 +176,21 @@ _luadb = {                      q = q .. "`" .. db.sql_escape(k) .. "` " .. v                  end -                q = q .. ");" +                if #keys then +                    q = q .. ", PRIMARY KEY (" +                    first = true +                    for k, v in ipairs(fields) do +                        if not first then +                            q = q .. ", " +                        else +                            first = false +                        end +                        q = q .. "`" .. db.sql_escape(v) .. "`" +                    end +                    q = ")" +                end +                 +                q = q .. ") ENGINE=InnoDB;"                  if db:SafeQuery(q) ~= 0 then                      error("Error creating table " .. tname .. ": " .. db:ErrNO() .. " - " .. db:Error() .. " - query run = " .. q) @@ -235,11 +250,11 @@ _luadb = {              for k, v in pairs(fields) do                  q = nil                  if not dfields[k] then -                    q = "ALTER TABLE " .. tname .. " ADD `" .. db.sql_escape(k) .. "` " .. v .. ";" +                    q = "ALTER TABLE " .. tname .. " ADD `" .. db.sql_escape(k) .. "` " .. v .. (keys[k] and " PRIMARY KEY") .. ";"                  else                      local identicals, alters = _luadb.compare_fields(ddl, dfields[k])                      if not identicals then -                        q = "ALTER TABLE " .. tname .. " MODIFY `" .. db.sql_escape(k) .. "` " .. v .. ";" +                        q = "ALTER TABLE " .. tname .. " MODIFY `" .. db.sql_escape(k) .. "` " .. v .. (keys[k] and " PRIMARY KEY") .. ";"                          local _, a                          for _, a in pairs(alters) do                              a.stmt = string.gsub(a.stmt, "@fieldname@", db.sql_escape(k)) | 
