[tarantool-patches] [PATCH 2/3] sql: delete foreign_keys pragma
AKhatskevich
avkhatskevich at tarantool.org
Tue Oct 2 13:48:35 MSK 2018
Part of #3696
---
src/box/sql.c | 3 +--
src/box/sql/CMakeLists.txt | 1 -
src/box/sql/fkey.c | 21 ++++-----------------
src/box/sql/insert.c | 3 +--
src/box/sql/pragma.h | 7 -------
src/box/sql/sqliteInt.h | 2 +-
test/sql-tap/tkt-b1d3a2e531.test.lua | 8 +-------
test/sql-tap/triggerC.test.lua | 5 +----
test/sql/transitive-transactions.result | 3 ---
test/sql/transitive-transactions.test.lua | 1 -
10 files changed, 9 insertions(+), 45 deletions(-)
diff --git a/src/box/sql.c b/src/box/sql.c
index ab4a587a5..a9077dd32 100644
--- a/src/box/sql.c
+++ b/src/box/sql.c
@@ -59,8 +59,7 @@ static const char nil_key[] = { 0x90 }; /* Empty MsgPack array. */
static const uint32_t default_sql_flags = SQLITE_ShortColNames
| SQLITE_EnableTrigger
| SQLITE_AutoIndex
- | SQLITE_RecTriggers
- | SQLITE_ForeignKeys;
+ | SQLITE_RecTriggers;
void
sql_init()
diff --git a/src/box/sql/CMakeLists.txt b/src/box/sql/CMakeLists.txt
index 1f852424a..aa57add59 100644
--- a/src/box/sql/CMakeLists.txt
+++ b/src/box/sql/CMakeLists.txt
@@ -16,7 +16,6 @@ include_directories(${SQL_SRC_DIR})
include_directories(${SQL_BIN_DIR})
add_definitions(-DSQLITE_MAX_WORKER_THREADS=0)
-add_definitions(-DSQLITE_DEFAULT_FOREIGN_KEYS=1)
add_definitions(-DSQLITE_OMIT_AUTOMATIC_INDEX)
set(TEST_DEFINITIONS
diff --git a/src/box/sql/fkey.c b/src/box/sql/fkey.c
index b2d2a19e7..091778fc8 100644
--- a/src/box/sql/fkey.c
+++ b/src/box/sql/fkey.c
@@ -527,12 +527,6 @@ fkey_emit_check(struct Parse *parser, struct Table *tab, int reg_old,
*/
assert((reg_old == 0) != (reg_new == 0));
- /*
- * If foreign-keys are disabled, this function is a no-op.
- */
- if ((user_session->sql_flags & SQLITE_ForeignKeys) == 0)
- return;
-
/*
* Loop through all the foreign key constraints for which
* tab is the child table.
@@ -674,9 +668,6 @@ fkey_emit_check(struct Parse *parser, struct Table *tab, int reg_old,
bool
fkey_is_required(uint32_t space_id, const int *changes)
{
- struct session *user_session = current_session();
- if ((user_session->sql_flags & SQLITE_ForeignKeys) == 0)
- return false;
struct space *space = space_by_id(space_id);
if (changes == NULL) {
/*
@@ -919,16 +910,12 @@ void
fkey_emit_actions(struct Parse *parser, struct Table *tab, int reg_old,
const int *changes)
{
- struct session *user_session = current_session();
/*
- * If foreign-key support is enabled, iterate through all
- * FKs that refer to table tab. If there is an action
- * associated with the FK for this operation (either
- * update or delete), invoke the associated trigger
- * sub-program.
+ * Iterate through all FKs that refer to table tab.
+ * If there is an action associated with the FK for
+ * this operation (either update or delete),
+ * invoke the associated trigger sub-program.
*/
- if ((user_session->sql_flags & SQLITE_ForeignKeys) == 0)
- return;
struct space *space = space_by_id(tab->def->id);
assert(space != NULL);
struct fkey *fk;
diff --git a/src/box/sql/insert.c b/src/box/sql/insert.c
index 03f4e1b14..c696f39f1 100644
--- a/src/box/sql/insert.c
+++ b/src/box/sql/insert.c
@@ -1278,8 +1278,7 @@ xferOptimization(Parse * pParse, /* Parser context */
* So the extra complication to make this rule less restrictive is probably
* not worth the effort. Ticket [6284df89debdfa61db8073e062908af0c9b6118e]
*/
- if ((user_session->sql_flags & SQLITE_ForeignKeys) != 0 &&
- !rlist_empty(&dest->child_fkey))
+ if (!rlist_empty(&dest->child_fkey))
return 0;
if ((user_session->sql_flags & SQLITE_CountRows) != 0) {
return 0; /* xfer opt does not play well with PRAGMA count_changes */
diff --git a/src/box/sql/pragma.h b/src/box/sql/pragma.h
index ecc9ee879..c135202d4 100644
--- a/src/box/sql/pragma.h
+++ b/src/box/sql/pragma.h
@@ -135,13 +135,6 @@ static const PragmaName aPragmaName[] = {
PragFlg_NeedSchema | PragFlg_Result1 | PragFlg_SchemaOpt,
/* ColNames: */ 29, 8,
/* iArg: */ 0},
-#if !defined(SQLITE_OMIT_FLAG_PRAGMAS)
- { /* zName: */ "foreign_keys",
- /* ePragTyp: */ PragTyp_FLAG,
- /* ePragFlg: */ PragFlg_Result0 | PragFlg_NoColumns1,
- /* ColNames: */ 0, 0,
- /* iArg: */ SQLITE_ForeignKeys},
-#endif
#if !defined(SQLITE_OMIT_FLAG_PRAGMAS)
{ /* zName: */ "full_column_names",
/* ePragTyp: */ PragTyp_FLAG,
diff --git a/src/box/sql/sqliteInt.h b/src/box/sql/sqliteInt.h
index e9c15dbb3..b2d527834 100644
--- a/src/box/sql/sqliteInt.h
+++ b/src/box/sql/sqliteInt.h
@@ -1562,7 +1562,7 @@ struct sqlite3 {
#define SQLITE_ReadUncommitted 0x0004000 /* For shared-cache mode */
#define SQLITE_ReverseOrder 0x00020000 /* Reverse unordered SELECTs */
#define SQLITE_RecTriggers 0x00040000 /* Enable recursive triggers */
-#define SQLITE_ForeignKeys 0x00080000 /* Enforce foreign key constraints */
+/* 0x00080000 Free bit */
#define SQLITE_AutoIndex 0x00100000 /* Enable automatic indexes */
#define SQLITE_PreferBuiltin 0x00200000 /* Preference to built-in funcs */
#define SQLITE_EnableTrigger 0x01000000 /* True to enable triggers */
diff --git a/test/sql-tap/tkt-b1d3a2e531.test.lua b/test/sql-tap/tkt-b1d3a2e531.test.lua
index 85b0f46d7..324ffa0c8 100755
--- a/test/sql-tap/tkt-b1d3a2e531.test.lua
+++ b/test/sql-tap/tkt-b1d3a2e531.test.lua
@@ -1,6 +1,6 @@
#!/usr/bin/env tarantool
test = require("sqltester")
-test:plan(12)
+test:plan(11)
--!./tcltestrunner.lua
-- 2011 August 22
@@ -24,12 +24,6 @@ test:plan(12)
testprefix = "tkt-b1d3a2e531"
-test:do_execsql_test(
- 1.0,
- [[
- PRAGMA foreign_keys = 'ON'
- ]])
-
test:do_execsql_test(
1.1,
[[
diff --git a/test/sql-tap/triggerC.test.lua b/test/sql-tap/triggerC.test.lua
index 06e6e5bd2..d5fdc1470 100755
--- a/test/sql-tap/triggerC.test.lua
+++ b/test/sql-tap/triggerC.test.lua
@@ -1146,12 +1146,10 @@ test:do_execsql_test(
test:do_execsql_test(
"triggerC-15.1.1",
[[
- -- test is not respects fk
- PRAGMA foreign_keys='false';
PRAGMA recursive_triggers = 1;
CREATE TABLE node(
id not null primary key,
- pid int not null default 0 references node,
+ pid int not null default 0,
key varchar not null,
path varchar default '',
unique(pid, key)
@@ -1170,7 +1168,6 @@ test:do_execsql_test(
INSERT INTO node(id, pid, key) VALUES(900, 90, 'test2');
DELETE FROM node WHERE id=9;
SELECT * FROM node;
- PRAGMA foreign_keys='true';
]])
-- Tarantool: such indentifiers are not working
diff --git a/test/sql/transitive-transactions.result b/test/sql/transitive-transactions.result
index a01b1d0b0..88685b4c1 100644
--- a/test/sql/transitive-transactions.result
+++ b/test/sql/transitive-transactions.result
@@ -27,9 +27,6 @@ box.sql.execute('START TRANSACTION;') box.commit();
box.sql.execute('START TRANSACTION;') box.rollback();
---
...
-box.sql.execute('pragma foreign_keys = 1;');
----
-...
box.sql.execute('CREATE TABLE parent(id INT PRIMARY KEY, y INT UNIQUE);');
---
...
diff --git a/test/sql/transitive-transactions.test.lua b/test/sql/transitive-transactions.test.lua
index 1ac2b8d64..5127202e3 100644
--- a/test/sql/transitive-transactions.test.lua
+++ b/test/sql/transitive-transactions.test.lua
@@ -13,7 +13,6 @@ box.begin() box.sql.execute('ROLLBACK');
box.sql.execute('START TRANSACTION;') box.commit();
box.sql.execute('START TRANSACTION;') box.rollback();
-box.sql.execute('pragma foreign_keys = 1;');
box.sql.execute('CREATE TABLE parent(id INT PRIMARY KEY, y INT UNIQUE);');
box.sql.execute('CREATE TABLE child(id INT PRIMARY KEY, x INT REFERENCES parent(y) DEFERRABLE INITIALLY DEFERRED);');
--
2.14.1
More information about the Tarantool-patches
mailing list