--- 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} };