From 15c9b1d365b31e37e2163375c5a643179c46e6ff Mon Sep 17 00:00:00 2001
From: Pixel <pixel@nobis-crew.org>
Date: Wed, 30 Sep 2009 16:24:06 -0700
Subject: Fixing a few bugs, moving Desc from hitten to public, and adding the
 rawselect methods.

---
 lib/dblib.lua | 93 +++++++++++++++++++++++++++++++++++++----------------------
 1 file changed, 58 insertions(+), 35 deletions(-)

diff --git a/lib/dblib.lua b/lib/dblib.lua
index 6b4599a..a47b755 100644
--- a/lib/dblib.lua
+++ b/lib/dblib.lua
@@ -194,11 +194,50 @@ END;
         return r, alters, keys, extras
     end,
     
+    newtable = function(tablename, tname, db, ddl)
+        return {
+            insert = _luadb.insert,
+            delete = _luadb.delete,
+            select = _luadb.select,
+            gselect = _luadb.gselect,
+            rselect = _luadb.rselect,
+            grselect = _luadb.grselect,
+            update = _luadb.update,
+            pinsert = function(...) return pcall(_luadb.insert, ...) end,
+            pdelete = function(...) return pcall(_luadb.delete, ...) end,
+            pselect = function(...) return pcall(_luadb.select, ...) end,
+            pgselect = function(...) return pcall(_luadb.gselect, ...) end,
+            prselect = function(...) return pcall(_luadb.rselect, ...) end,
+            pgrselect = function(...) return pcall(_luadb.grselect, ...) end,
+            pupdate = function(...) return pcall(_luadb.update, ...) end,
+            numrows = _luadb.numrows,
+            numfields = _luadb.numfields,
+            nextrow = _luadb.nextrow,
+            count = _luadb.count,
+            restrict = _luadb.restrict,
+            restricter = _luadb.restricter,
+            empty = _luadb.empty,
+            _ = {
+                tablename = tablename,
+                tname = tname,
+                db = db,
+                ddl = ddl,
+                conditions = "1=1",
+            },
+        }
+    end,
+    
     opentable = function(db, tablename, ddl, force_create)
+        local tname
+        if db._.prefix and db._.prefix ~= "" and db._.odbc_name == "oracle" then
+            tname = db._.fq .. db._.prefix .. db._.fq .. '.' .. db._.fq .. db.sql_escape(tablename) .. db._.fq
+        else
+            tname = db._.fq .. db._.prefix .. db.sql_escape(tablename) .. db._.fq
+        end
+        if not ddl then return _luadb.newtable(tablename, tname, db, ddl) end
         local fields, alters, keys, extras = _luadb.generate_fields(db, tablename, ddl)
-        local tname = db._.fq .. db._.prefix .. db.sql_escape(tablename) .. db._.fq
         local operations = 0
-        local dfields = db._.Desc(db, tablename)
+        local dfields = db:Desc(tablename)
         
         if force_create or dfields == nil then
             -- table doesn't exist, create it
@@ -337,32 +376,7 @@ END;
             end
         end
         
-        return {
-            insert = _luadb.insert,
-            delete = _luadb.delete,
-            select = _luadb.select,
-            gselect = _luadb.gselect,
-            update = _luadb.update,
-            pinsert = function(...) return pcall(_luadb.insert, ...) end,
-            pdelete = function(...) return pcall(_luadb.delete, ...) end,
-            pselect = function(...) return pcall(_luadb.select, ...) end,
-            pgselect = function(...) return pcall(_luadb.gselect, ...) end,
-            pupdate = function(...) return pcall(_luadb.update, ...) end,
-            numrows = _luadb.numrows,
-            numfields = _luadb.numfields,
-            nextrow = _luadb.nextrow,
-            count = _luadb.count,
-            restrict = _luadb.restrict,
-            restricter = _luadb.restricter,
-            empty = _luadb.empty,
-            _ = {
-                tablename = tablename,
-                tname = tname,
-                db = db,
-                ddl = ddl,
-                conditions = "1",
-            },
-        }, operations
+        return newtable(tablename, tname, db, ddl), operations
     end,
 
     compare_fields = function(db, ddl, field)
@@ -625,7 +639,7 @@ END;
         end
         
         if foreign then
-            local foreign_conds = "1"
+            local foreign_conds = "1=1"
             stmt = stmt .. " FROM " .. t._.tname
             local found_table, fname, f
             for k, v in pairs(foreign) do
@@ -718,6 +732,10 @@ END;
         return _luadb.iselect(false, ...)
     end,
     
+    rselect = function(...)
+        return _luadb.iselect(true, ...)
+    end,
+    
     numrows = function(t)
         if t._.db._.odbc_name == "mysql" then
 	    return t._.db._.conn:NumRows()
@@ -749,6 +767,11 @@ END;
         return t.nextrow, t
     end,
     
+    grselect = function(t, ...)
+	_luadb.iselect(true, t, ...)
+        return t.nextrow, t
+    end,
+    
     nextrow = function(t)
         if t._.db._.odbc_name == "mysql" then
             return t._.db._.conn:FetchRow()
@@ -756,7 +779,7 @@ END;
             local row = nil
             if t._.db._.rset:next() ~= 0 then
                 row = {}
-                for k, v in t._.db._.fieldsNames do
+                for k, v in pairs(t._.db._.fieldsNames) do
                     row[v] = t._.db._.rset:getString(k)
                 end
             end
@@ -827,7 +850,7 @@ END;
     
     restrict = function(t, conditions)
         -- all in all, "conditions" can just be a direct string. Let the programmer do what he wants, after all.
-        if conditions == nil or conditions == "" then conditions = "1" end
+        if conditions == nil or conditions == "" then conditions = "1=1" end
         t._.conditions = conditions
     end,
 
@@ -861,7 +884,7 @@ END;
     oracle = {
         _SafeQuery = function(db, str, query_type, no_commit)
             local r = -1
-        
+            
             if luadb.debugmode then
                 print(str)
             end
@@ -999,7 +1022,7 @@ END;
                 elseif col.PRECISION_NUM then
                     row.Type = row.Type .. "(" .. col.PRECISION_NUM .. ")"
                 else
-                    if row.Type == "NUMBER" and (col.SCALE + 0) == 0 then
+                    if row.Type == "NUMBER" and (not col.SCALE or ((col.SCALE + 0) == 0)) then
                         row.Type = "INT"
                     end
                     row.Type = row.Type .. "(" .. col.LENGTH .. ")"
@@ -1065,6 +1088,7 @@ luadb = {
             ErrNO = function(db) return db._.conn:ErrNO() end,
             Error = function(db) return db._.conn:Error() end,
             ErrorStr = function(db) return db._.conn:ErrNO() .. " - " .. db._.conn:Error() end,
+            Desc = _luadb.mysql.Desc,
             _ = {
                 fq = '`',
                 eq = '"',
@@ -1075,7 +1099,6 @@ luadb = {
                 base = base,
                 prefix = sql_escape(prefix or ""),
                 odbc_name = "mysql",
-                Desc = _luadb.mysql.Desc,
             },
         }
     end, },
@@ -1106,6 +1129,7 @@ luadb = {
             ErrNO = function(db) return db._.errNO end,
             Error = function(db) return db._.errStr end,
             ErrorStr = function(db) return db._.errStr end,
+            Desc = _luadb.oracle.Desc,
             _ = {
                 fq = '"',
                 eq = "'",
@@ -1116,7 +1140,6 @@ luadb = {
                 base = base,
                 prefix = sql_escape(prefix or ""),
                 odbc_name = "oracle",
-                Desc = _luadb.oracle.Desc,
             },
         }
         
-- 
cgit v1.2.3