diff -r 014ba3ab3903 -r 10c8c6f0da14 dbd/mysql/connection.c --- a/dbd/mysql/connection.c Tue Dec 02 21:11:27 2008 +0000 +++ b/dbd/mysql/connection.c Wed Dec 03 08:44:40 2008 +0000 @@ -48,6 +48,11 @@ return 2; } + /* + * by default turn off autocommit + */ + mysql_autocommit(conn->mysql, 0); + luaL_getmetatable(L, DBD_MYSQL_CONNECTION); lua_setmetatable(L, -2); @@ -55,6 +60,22 @@ } /* + * success = connection:autocommit(on) + */ +static int connection_autocommit(lua_State *L) { + connection_t *conn = (connection_t *)luaL_checkudata(L, 1, DBD_MYSQL_CONNECTION); + int on = lua_toboolean(L, 2); + int err = 0; + + if (conn->mysql) { + err = mysql_autocommit(conn->mysql, on); + } + + lua_pushboolean(L, !err); + return 1; +} + +/* * success = connection:close() */ static int connection_close(lua_State *L) { @@ -71,6 +92,21 @@ return 1; } +/* + * success = connection:commit() + */ +static int connection_commit(lua_State *L) { + connection_t *conn = (connection_t *)luaL_checkudata(L, 1, DBD_MYSQL_CONNECTION); + int err = 0; + + if (conn->mysql) { + err = mysql_commit(conn->mysql); + } + + lua_pushboolean(L, !err); + return 1; +} + /* * ok = connection:ping() */ @@ -103,6 +139,21 @@ } /* + * success = connection:rollback() + */ +static int connection_rollback(lua_State *L) { + connection_t *conn = (connection_t *)luaL_checkudata(L, 1, DBD_MYSQL_CONNECTION); + int err = 0; + + if (conn->mysql) { + err = mysql_rollback(conn->mysql); + } + + lua_pushboolean(L, !err); + return 1; +} + +/* * __gc */ static int connection_gc(lua_State *L) { @@ -114,9 +165,12 @@ int dbd_mysql_connection(lua_State *L) { static const luaL_Reg connection_methods[] = { + {"autocommit", connection_autocommit}, {"close", connection_close}, + {"commit", connection_commit}, {"ping", connection_ping}, {"prepare", connection_prepare}, + {"rollback", connection_rollback}, {NULL, NULL} };