Skip to content

Commit 58fafff

Browse files
committed
Add support for freeing and resetting prepared statements.
Now the library starts to be really useful.
1 parent 4a249da commit 58fafff

File tree

3 files changed

+18
-1
lines changed

3 files changed

+18
-1
lines changed

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ EMSCRIPTEN?=/usr/bin
44
EMCC=$(EMSCRIPTEN)/emcc -s RESERVED_FUNCTION_POINTERS=2 --closure 1 -O3 -s INLINING_LIMIT=10
55
CC=clang -O2
66
CFLAGS=-DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_DISABLE_LFS -DLONGDOUBLE_TYPE=double -DSQLITE_INT64_TYPE="long long int" -DSQLITE_THREADSAFE=0
7-
EXPORTED_FUNCTIONS="['_sqlite3_open', '_sqlite3_close', '_sqlite3_exec', '_sqlite3_free', '_sqlite3_data_count', '_sqlite3_column_type', '_sqlite3_column_text', '_sqlite3_column_double', '_sqlite3_prepare_v2', '_sqlite3_step', '_sqlite3_bind_text', '_sqlite3_bind_double']"
7+
EXPORTED_FUNCTIONS="['_sqlite3_open', '_sqlite3_close', '_sqlite3_exec', '_sqlite3_free', '_sqlite3_data_count', '_sqlite3_column_type', '_sqlite3_column_text', '_sqlite3_column_double', '_sqlite3_prepare_v2', '_sqlite3_step', '_sqlite3_bind_text', '_sqlite3_bind_double', '_sqlite3_reset', '_sqlite3_finalize']"
88

99

1010
all: js/sql.js test/benchmark.js test/benchmark

README.md

+11
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,17 @@ stmt.bind([1, 'world']);
2929

3030
// Fetch the results of the query
3131
while (stmt.step()) console.log(stmt.get()); // Will print [1, 'world']
32+
33+
// Resets the statement, so it can be used again with other values
34+
stmt.reset()
35+
// Bind other values
36+
stmt.bind([0, 'hello']);
37+
while (stmt.step()) console.log(stmt.get()); // Will print [0, 'hello']
38+
39+
// free the memory used by the statement
40+
stmt.free();
41+
// You can not use your statement anymore once it has been freed.
42+
// But not freeing your statements causes memory leaks. You don't want that.
3243
```
3344

3445
## Differences from the original sql.js

js/api.coffee

+6
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ class Statement
6060
bind : (values) ->
6161
@bindValue v,i+1 for v,i in values # Index of the leftmost parameter is 1
6262
null
63+
reset : -> sqlite3_reset @stmt
64+
free: -> sqlite3_finalize @stmt
6365

6466
class Database
6567
# Open a new database:
@@ -130,6 +132,10 @@ sqlite3_data_count = Module.cwrap 'sqlite3_data_count', 'number', ['number']
130132
sqlite3_column_double = Module.cwrap 'sqlite3_column_double', 'number', ['number', 'number']
131133
sqlite3_column_text = Module.cwrap 'sqlite3_column_text', 'string', ['number', 'number']
132134
sqlite3_column_type = Module.cwrap 'sqlite3_column_type', 'number', ['number', 'number']
135+
# int sqlite3_reset(sqlite3_stmt *pStmt);
136+
sqlite3_reset = Module.cwrap 'sqlite3_reset', 'number', ['number']
137+
# int sqlite3_finalize(sqlite3_stmt *pStmt);
138+
sqlite3_finalize = Module.cwrap 'sqlite3_finalize', 'number', ['number']
133139

134140
# Global constants
135141
NULL = 0 # Null pointer

0 commit comments

Comments
 (0)