[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