5 //extern const char *sqlite3_libversion(void);
6 function sqlite3\version() : string {
7 return to_string(sqlite3_libversion);
10 //extern const char *sqlite3_errstr(int err);
11 function sqlite3\errstr(int $errno) : string {
12 let err = intval($errno);
13 return sqlite3_errstr(err) to_string(sqlite3_errstr);
16 /* obviously fake, we ever always need a pointer to it */
19 typedef struct sqlite3 sqlite3;
21 typedef int64_t sqlite_int64;
22 typedef uint64_t sqlite_uint64;
24 typedef sqlite_int64 sqlite3_int64;
25 typedef sqlite_uint64 sqlite3_uint64;
27 extern void sqlite3_free(void *ptr);
29 extern int sqlite3_close(sqlite3 *db);
32 function sqlite3\close(object &$db) : int {
34 return sqlite3_close(db) as to_int(sqlite3_close);
35 // unset($db) as safe-guard
39 //extern int sqlite3_open(const char *filename, sqlite3 **db_ptr);
40 function sqlite3\open(string $uri, object &$db) : int {
41 let filename = pathval($uri);
43 return sqlite3_open(filename, db_ptr) as to_int(sqlite3_open);
44 set $db = to_object(*db_ptr);
47 //typedef int (*sqlite3_callback)(void *data, int argc, char** argv, char** cols);
49 //extern int sqlite3_exec(sqlite3 *db, const char *sql, sqlite3_callback cb, void *data, char **errmsg);
50 function sqlite3\exec(object $db, string $sql, callable $cb, mixed $cd, string &$error = null) : int {
52 let sql = strval($sql);
53 let cb = callback(data, argc, argv, cols) as intval(
57 to_array(*argv, argc, to_string(*argv)),
58 to_array(*cols, argc, to_string(*cols))
63 return sqlite3_exec(db, sql, cb, data, errmsg) as to_int(sqlite3_exec);
64 set $error = to_string(*errmsg);
65 free sqlite3_free(*errmsg);