Hello SQLite development team, I am contributing to DB Browser for SQLite ( https://github.com/sqlitebrowser/sqlitebrowser). It is written in C++ and it relies on C API. We have a problem: when foreign_keys pragma is enabled, we cannot use sqlite3_prepare_v2.
Steps to reproduce: Create database $ sqlite3 issue901.db SQLite version 3.15.2 2016-11-28 19:13:37 Enter ".help" for usage hints. sqlite> CREATE TABLE `a`(`id` integer); sqlite> CREATE TABLE `b`(`aid` integer, FOREIGN KEY(`aid`) REFERENCES `a`(`id`)); sqlite> INSERT INTO `a` VALUES(1); sqlite> .quit Minimal C program (issue901.c) #include <sqlite3.h> #include <stdio.h> #define NOTWORKING int main() { sqlite3* db; if(sqlite3_open_v2("issue901.db", &db, SQLITE_OPEN_READWRITE, NULL) != SQLITE_OK) { printf("sqlite3_open_v2 failed!\n"); return 1; } #ifdef NOTWORKING if(sqlite3_exec(db, "PRAGMA foreign_keys=\"1\"", NULL, NULL, NULL) != SQLITE_OK) { printf("Enabling foreign keys failed!\n"); return 1; } #endif sqlite3_stmt* stmt; if(sqlite3_prepare_v2(db, "UPDATE `a` SET `id`=7 WHERE `id`=1;", -1, &stmt, 0) != SQLITE_OK) { printf("sqlite3_prepare_v2 failed!\n%s\n", sqlite3_errmsg(db)); return 1; } sqlite3_close(db); return 0; } Build and run $ gcc -lsqlite3 -o issue901 issue901.c $ ./issue901 sqlite3_prepare_v2 failed! foreign key mismatch - "b" referencing "a" More detailed description here https://github.com/sqlitebrowser/sqlitebrowser/issues/901 Regards, Oleg Prutz _______________________________________________ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users