dbd/mysql/connection.c

changeset 13
10c8c6f0da14
parent 4
c50b0e6f25d6
child 14
98192b7d4e89
--- 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}
     };
 

mercurial