tests: blacklist sqlite3_str and sqlite3_win32 functions
[m6w6/ext-psi] / tests / sqlite / sqlite.psi
1 lib "sqlite3";
2
3 #define NDEBUG 1
4
5 typedef int (*my_sqlite3_callback)(void *data, int argc, char** argv, char** cols);
6 extern int sqlite3_exec(sqlite3 *db, const char *sql, my_sqlite3_callback cb, void *data, char **errmsg);
7
8 #include <sqlite3.h>
9
10 //extern const char *sqlite3_libversion(void);
11 function sqlite3\version() : string {
12 return to_string(sqlite3_libversion);
13 }
14
15 //extern const char *sqlite3_errstr(int err);
16 function sqlite3\errstr(int $errno) : string {
17 let err = intval($errno);
18 return sqlite3_errstr(err) as to_string(sqlite3_errstr);
19 }
20
21 /* obviously fake, we ever always need a pointer to it */
22 //struct sqlite3;
23 /*
24 typedef struct sqlite3 sqlite3;
25
26 typedef int64_t sqlite_int64;
27 typedef uint64_t sqlite_uint64;
28
29 typedef sqlite_int64 sqlite3_int64;
30 typedef sqlite_uint64 sqlite3_uint64;
31
32 extern void sqlite3_free(void *ptr);
33
34 extern int sqlite3_close(sqlite3 *db);
35 */
36
37 function sqlite3\close(object &$db) : int {
38 let db = objval($db);
39 return sqlite3_close(db) as to_int(sqlite3_close);
40 // unset($db) as safe-guard
41 set $db = void(db);
42 }
43
44 //extern int sqlite3_open(const char *filename, sqlite3 **db_ptr);
45 function sqlite3\open(string $uri, object &$db) : int {
46 let filename = pathval($uri);
47 let db_ptr = &NULL;
48 return sqlite3_open(filename, db_ptr) as to_int(sqlite3_open);
49 set $db = to_object(*db_ptr);
50 }
51
52
53 function sqlite3\exec(object $db, string $sql, callable $cb, mixed $cd, string &$error = null) : int {
54 let db = objval($db);
55 let sql = strval($sql);
56 let cb = callback(data, argc, argv, cols) as intval(
57 $cb(
58 zval(data),
59 to_int(argc),
60 to_array(*argv, argc, to_string(*argv)),
61 to_array(*cols, argc, to_string(*cols))
62 )
63 );
64 let data = zval($cd);
65 let errmsg = &NULL;
66 return sqlite3_exec(db, sql, cb, data, errmsg) as to_int(sqlite3_exec);
67 set $error = to_string(*errmsg);
68 free sqlite3_free(*errmsg);
69 }