dbd/mysql/statement.c

changeset 21
7956401a0c5e
parent 14
98192b7d4e89
child 23
a4825c3e65e9
--- a/dbd/mysql/statement.c	Fri Dec 12 03:46:34 2008 +0000
+++ b/dbd/mysql/statement.c	Fri Dec 19 09:17:16 2008 +0000
@@ -27,6 +27,21 @@
 } 
 
 /*
+ * num_affected_rows = statement:affected()
+ */
+static int statement_affected(lua_State *L) {
+    statement_t *statement = (statement_t *)luaL_checkudata(L, 1, DBD_MYSQL_STATEMENT);
+
+    if (!statement->stmt) {
+        luaL_error(L, DBI_ERR_INVALID_STATEMENT);
+    }
+
+    lua_pushinteger(L, mysql_stmt_affected_rows(statement->stmt));
+
+    return 1;
+}
+
+/*
  * success = statement:close()
  */
 static int statement_close(lua_State *L) {
@@ -163,6 +178,10 @@
 
     metadata = mysql_stmt_result_metadata(statement->stmt);
 
+    if (metadata) {
+        mysql_stmt_store_result(statement->stmt);
+    }
+
 cleanup:
     /*
      * free the buffer with a resize to 0
@@ -315,9 +334,23 @@
 }
 
 /*
+ * num_rows = statement:rowcount()
+ */
+static int statement_rowcount(lua_State *L) {
+    statement_t *statement = (statement_t *)luaL_checkudata(L, 1, DBD_MYSQL_STATEMENT);
+
+    if (!statement->stmt) {
+        luaL_error(L, DBI_ERR_INVALID_STATEMENT);
+    }
+
+    lua_pushinteger(L, mysql_stmt_num_rows(statement->stmt));
+
+    return 1;
+}
+
+/*
  * iterfunc = statement:rows(named_indexes)
  */
-
 static int statement_rows(lua_State *L) {
     if (lua_gettop(L) == 1) {			
 	lua_pushvalue(L, 1);
@@ -373,9 +406,11 @@
 
 int dbd_mysql_statement(lua_State *L) {
     static const luaL_Reg statement_methods[] = {
+        {"affected", statement_affected},
 	{"close", statement_close},
 	{"execute", statement_execute},
 	{"fetch", statement_fetch},
+	{"rowcount", statement_rowcount},
 	{"rows", statement_rows},
 	{NULL, NULL}
     };

mercurial