summaryrefslogtreecommitdiff
path: root/lib/dblib.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lib/dblib.lua')
-rw-r--r--lib/dblib.lua85
1 files changed, 66 insertions, 19 deletions
diff --git a/lib/dblib.lua b/lib/dblib.lua
index 65c9013..e9da88a 100644
--- a/lib/dblib.lua
+++ b/lib/dblib.lua
@@ -34,25 +34,32 @@ ddl = {
db = luadb.opendb(host, login, password, database)
t = db:opentable("foobar", ddl)
+t:empty()
-x = t:insert{ field1 = "test1" } -- returns 1
-x = t:insert{ field1 = "test2" } -- returns 2
-x = t:insert{ field1 = "test3" } -- returns 3
+x = t:insert{ field1 = "test1" } -- returns 1
+x = t:insert{ field1 = "test2" } -- returns 2
+x = t:insert{ field1 = "test3" } -- returns 3
x = t:insert{ field1 = "test4", field2 = 18 } -- returns 4
x = t:insert{ field1 = "test5", field2 = 20 } -- returns 5
r = t:restricter()
-t:restrict(r:EQ("id", 3))
-t:update{ field1 = "3tset" }
-t:restrict(r:EQ("field2", 42))
-t:update{ field2 = 28 }
-t:restrict(r:EQ("id", 4))
-t:delete()
+t:restrict(r:EQ("id", 3)) -- WHERE `id` = "3"
+x = t:update{ field1 = "3tset" } -- returns 1
+t:restrict(r:EQ("field2", 42)) -- WHERE `field2` = "42"
+x = t:update{ field2 = 28 } -- returns 3
+t:restrict(r:EQ("id", 4)) -- WHERE `id` = "4"
+x = t:delete() -- returns 1
t:restrict(r:AND(r:LIKE("field1", "test%"), r:NEQ("field2", 20)))
-for r in t:select() do print(r.field1) end
- -- prints the strings "test1" and "test2"
-
+ -- WHERE `field` LIKE "test%" AND `field2` != 20
+for r in t:gselect{ "field1" } do print(r.field1) end
+ -- prints the strings "test1" and "test2"
+t:restrict(r:LIKE("field1", "test%"))
+print(t:count()) -- prints "3"
+t:restrict() -- WHERE 1
+t:select()
+print(t:numrows()) -- prints "4"
+print(t:numfields()) -- prints "3"
]]--
@@ -263,9 +270,15 @@ _luadb = {
insert = _luadb.insert,
delete = _luadb.delete,
select = _luadb.select,
+ gselect = _luadb.gselect,
+ numrows = _luadb.numrows,
+ numfields = _luadb.numfields,
+ nextrow = _luadb.nextrow,
+ count = _luadb.count,
update = _luadb.update,
restrict = _luadb.restrict,
restricter = _luadb.restricter,
+ empty = _luadb.empty,
_ = {
tablename = tablename,
tname = tname,
@@ -376,7 +389,8 @@ _luadb = {
if t._.db:SafeQuery(stmt) ~= 0 then
error("Error deleting row(s) inside table " .. t._.tablename .. ": " .. t._.db:Error())
- end
+ end
+ return t._.db._.conn:NumAffectedRows()
end,
update = function(t, data)
@@ -405,19 +419,20 @@ _luadb = {
if t._.db:SafeQuery(stmt) ~= 0 then
error("Error updating row(s) inside table " .. t._.tablename .. ": " .. t._.db:Error())
- end
+ end
+ return t._.db._.conn:NumAffectedRows()
end,
- select = function(t, fields)
+ iselect = function(t, fields, bypass)
local stmt = "SELECT "
local first = true
local k, v
- if (fields == nil) then
+ if fields == nil then
stmt = stmt .. "*"
else
for k, v in pairs(fields) do
- if not t._.ddl[v] then
+ if not bypass and not t._.ddl[v] then
error("Trying to select a field which doesn't exist: " .. k .. " - inside of table " .. t._.tablename)
end
if not first then
@@ -425,7 +440,11 @@ _luadb = {
else
first = false
end
- stmt = stmt .. "`" .. v .. "`"
+ if bypass then
+ stmt = stmt .. v
+ else
+ stmt = stmt .. "`" .. v .. "`"
+ end
end
end
@@ -435,7 +454,35 @@ _luadb = {
error("Error selecting row(s) inside table " .. t._.tablename .. ": " .. t._.db:Error())
end
- return _luadb.nextrow, t
+ return t:numrows(), t:numfields()
+ end,
+
+ empty = function(t, fields)
+ if t._.db:SafeQuery("TRUNCATE TABLE " .. t._.tname) ~= 0 then
+ error("Error emptying table " .. t._.tablename .. ": " .. t._.db:Error())
+ end
+ end,
+
+ select = function(t, fields)
+ return _luadb.iselect(t, fields)
+ end,
+
+ numrows = function(t)
+ return t._.db._.conn:NumRows()
+ end,
+
+ numfields = function(t)
+ return t._.db._.conn:NumFields()
+ end,
+
+ count = function(t)
+ _luadb.iselect(t, {"COUNT(*) AS count"}, true)
+ return t:nextrow().count
+ end,
+
+ gselect = function(t, fields)
+ _luadb.iselect(t, fields)
+ return t.nextrow, t
end,
nextrow = function(t)