Supporting luasql would be a big bonus, though I understand if goal is to provide a "quick and dirty api which is backed by mod_dbd"
http://www.keplerproject.org/luasql/manual.html -Brian On Thu, Jan 3, 2013 at 4:57 PM, Brian McCallister <[email protected]> wrote: > On Thu, Jan 3, 2013 at 5:32 AM, Daniel Gruno <[email protected]> wrote: > >> ------------------------- >> Connecting to a database: >> ------------------------- >> function handler(r) >> local db, error = r:dbopen("mod_dbd") -- Open a mod_dbd connection >> > > Shouldn't this be a method on the server representation, not the request > representation? > > >> if error then ... end >> -- or... >> local db, error = r:dbopen("mysql", >> "server=localhost,user=root,database=somedb") >> -- essentially the same as mod_dbd's connection string. >> do_stuff() >> db:close() -- close the db handle (can also be done by GC) >> > > Hmm, if db here represents a handle, it should prolly be paired with > acquire not open. > > >> local still_running = db:active() -- returns false, since we closed >> -- the connection. >> end >> >> --------- >> Querying: >> --------- >> -- Run a command and get the no. of rows affected: >> local affected, err = db:do(r, "DELETE FROM `table` WHERE 1") >> if err then >> print("DB error: " .. err) >> else >> print("Deleted " .. affected .. " rows!") >> end >> >> -- Run a query and get the rows returned: >> local rows, err = db:query(r, "SELECT `name` FROM `table` WHERE 1") >> > > Check your errors :-) > > Also, be careful what you return, you don't want to the API to force you > to realize all results from a query eagerly. > > >> if rows then >> r:puts("We got " .. #rows " .. " results!") >> for k, row in pairs(rows) do >> print("Name: " .. row[1] .. "<br/>") >> end >> else >> r:puts("DB error: " .. err) >> end >> >> -- Run a prepared statement and inject values into it: >> local rows, err = db:inject(r, "SELECT `name` FROM `tbl` WHERE `id` = >> %u", 1234) >> > > > Hmm, I would expect an API like > > local pstmt, err = h:prepare("...") > ... = pstmt:execute("hello", 7") > -- or ... = pstmt:query("hello", 7") > > or such style api. "Injecting" into implicit prepared statement is a > strange api. > > >> if rows then >> .... >> else >> .... >> end >> >> >> -------------- >> Miscellaneous: >> -------------- >> >> -- escaping strings for use in db queries: >> local escaped = db:escape(r, [[foo"bar'&|baz]]) >> >> >> So, any comments, suggestions, remarks, objections and so on is very >> much welcomed. If there are no big objections to implementing this >> feature, I will consider it as lazy consensus and commit the bindings to >> trunk sometime soon along with updated documentation. >> >> With regards, >> Daniel. >> >> PS: I _have_ checked and double checked the code properly this time, so >> it conforms to the style requirements and works with maintainer mode. I >> know I usually get something wrong, but this time I think it's as close >> to perfect as it can get :) (but then again, I always write something >> bad, so apologies in advance if you find a bug) >> > >
