dbd/sqlite3/statement.c

changeset 21
7956401a0c5e
parent 12
014ba3ab3903
child 30
8599f34c139b
--- a/dbd/sqlite3/statement.c	Fri Dec 12 03:46:34 2008 +0000
+++ b/dbd/sqlite3/statement.c	Fri Dec 19 09:17:16 2008 +0000
@@ -44,9 +44,24 @@
 }
 
 /*
+ * num_affected_rows = statement:affected()
+ */
+static int statement_affected(lua_State *L) {
+    statement_t *statement = (statement_t *)luaL_checkudata(L, 1, DBD_SQLITE_STATEMENT);
+
+    if (!statement->stmt) {
+        luaL_error(L, DBI_ERR_INVALID_STATEMENT);
+    }
+
+    lua_pushinteger(L, statement->affected);
+ 
+    return 1;   
+}
+
+/*
  * success = statement:close()
  */
-int statement_close(lua_State *L) {
+static int statement_close(lua_State *L) {
     statement_t *statement = (statement_t *)luaL_checkudata(L, 1, DBD_SQLITE_STATEMENT);
     int ok = 0;
 
@@ -65,7 +80,7 @@
 /*
  * success,err = statement:execute(...)
  */
-int statement_execute(lua_State *L) {
+static int statement_execute(lua_State *L) {
     int n = lua_gettop(L);
     statement_t *statement = (statement_t *)luaL_checkudata(L, 1, DBD_SQLITE_STATEMENT);
     int p;
@@ -150,6 +165,8 @@
 	return 2;
     }
 
+    statement->affected = sqlite3_changes(statement->sqlite);
+
     lua_pushboolean(L, 1);
     return 1;
 }
@@ -281,6 +298,15 @@
 }
 
 /*
+ * num_rows = statement:rowcount()
+ */
+static int statement_rowcount(lua_State *L) {
+    luaL_error(L, DBI_ERR_NOT_IMPLEMENTED, DBD_SQLITE_STATEMENT, "rowcount");
+
+    return 0;
+}
+
+/*
  * __gc
  */
 static int statement_gc(lua_State *L) {
@@ -297,6 +323,7 @@
     statement->sqlite = conn->sqlite;
     statement->stmt = NULL;
     statement->more_data = 0;
+    statement->affected = 0;
 
     if (sqlite3_prepare_v2(statement->sqlite, sql_query, strlen(sql_query), &statement->stmt, NULL) != SQLITE_OK) {
 	lua_pushnil(L);
@@ -311,10 +338,12 @@
 
 int dbd_sqlite3_statement(lua_State *L) {
     static const luaL_Reg statement_methods[] = {
+	{"affected", statement_affected},
 	{"close", statement_close},
 	{"execute", statement_execute},
 	{"fetch", statement_fetch},
 	{"rows", statement_rows},
+	{"rowcount", statement_rowcount},
 	{NULL, NULL}
     };
 

mercurial