Hello ! Also there is no way to link the callback to specific statement, I think that an extra parameter with the whole sql statement would be needed and/or any other way to link several calls to a statement.
Maybe something like: int sqlite3_set_authorizer( sqlite3*, int (*xAuth)(void*,int,const char *sql_been_prepared, const char*,const char*,const char*,const char*), void *pUserData ); That way we can link successive calls to "sql_been_prepared" and know when a new one starts/ends. Otherwise it's not clear how to use this correctly. Bellow is an example to test the sqlite3_authorizer with it's output: ====== pseudo code (scripting using https://github.com/mingodad/squilu) local db_file_name = ":memory:"; local db = SQLite3(db_file_name); local function authorizer_hook(udata, action_code, param3, param4, param5, param6) { print(action_code, param3 || "null", param4 || "null", param5 || "null", param6 || "null"); return db.SQLITE_OK; } db.set_authorizer(authorizer_hook, "all"); db.exec_dml("DROP TABLE IF EXISTS test;"); db.exec_dml("DROP VIEW IF EXISTS test_view;"); db.exec_dml("CREATE TABLE test(id integer primary key, key varchar not null, value varchar not null check(length(value) > 2), unique(key));"); db.exec_dml("CREATE VIEW test_view AS SELECT * FROM test;"); db.exec_dml("BEGIN;"); local stmt = db.prepare("INSERT INTO test(key, value) VALUES(?,?);"); stmt.bind(1, "key_1"); stmt.bind(2, "value_1"); stmt.step(); stmt.reset(); stmt.finalize(); db.exec_dml("COMMIT;"); stmt = db.prepare("SELECT * FROM test_view WHERE id = ?;"); stmt.bind(1, 1); stmt.step(); stmt.reset(); stmt.finalize(); stmt = db.prepare("SELECT * FROM test WHERE key = ?;"); stmt.bind(1, "key_1"); stmt.step(); stmt.reset(); stmt.finalize(); stmt = db.prepare("SELECT * FROM test WHERE value = ? limit 1;"); stmt.bind(1, "value_1"); stmt.step(); stmt.reset(); stmt.finalize(); db.exec_dml("CREATE INDEX test_values_idx ON test(value);"); stmt = db.prepare("SELECT * FROM sqlite_master;"); stmt.finalize(); db.close(); ====== ======output of the above script 18 sqlite_master null main null 2 test null main null 18 sqlite_master null main null 1 sqlite_autoindex_test_1 test main null 18 sqlite_master null main null 31 null length null null 20 test value main null 23 sqlite_master type main null 23 sqlite_master name main null 23 sqlite_master tbl_name main null 23 sqlite_master rootpage main null 23 sqlite_master sql main null 20 sqlite_master ROWID main null 20 sqlite_master name main null 20 sqlite_master rootpage main null 20 sqlite_master sql main null 20 sqlite_master tbl_name main null 20 sqlite_master type main null 20 sqlite_master ROWID main null 20 test value main null 18 sqlite_master null main null 8 test_view null main null 23 sqlite_master type main null 23 sqlite_master name main null 23 sqlite_master tbl_name main null 23 sqlite_master rootpage main null 23 sqlite_master sql main null 20 sqlite_master ROWID main null 20 sqlite_master name main null 20 sqlite_master rootpage main null 20 sqlite_master sql main null 20 sqlite_master tbl_name main null 20 sqlite_master type main null 20 sqlite_master ROWID main null 22 BEGIN null null null 18 test null main null 22 COMMIT null null null 21 null null null null 20 test id main test_view 20 test key main test_view 20 test value main test_view 20 test_view id main null 20 test_view key main null 20 test_view value main null 20 test_view id main null 21 null null null test_view 21 null null null null 20 test id main null 20 test key main null 20 test value main null 20 test key main null 21 null null null null 20 test id main null 20 test key main null 20 test value main null 20 test value main null 18 sqlite_master null main null 1 test_values_idx test main null 18 sqlite_master null main null 27 test_values_idx null main null 20 sqlite_master name main null 20 sqlite_master rootpage main null 20 sqlite_master sql main null 20 sqlite_master name main null 20 sqlite_master type main null 20 sqlite_master ROWID main null 21 null null null null 20 sqlite_master type main null 20 sqlite_master name main null 20 sqlite_master tbl_name main null 20 sqlite_master rootpage main null 20 sqlite_master sql main null ====== ?