From fe90d9f3efc09c114b7183bd359615f7e4d4a4c6 Mon Sep 17 00:00:00 2001
From: Bulat Niatshin <theairvideo@gmail.com>
Date: Fri, 7 Jul 2017 13:48:51 +0300
Subject: [PATCH] sql: check trigger removal after dropping table

- Check attached trigger removal when DROP TABLE statement is
executed for referred table
- Implement sql/gh2141-delete-trigger-drop-table.test.lua test
- Assure that #2141 is not a bug, everything works correctly

Closes #2141
---
 .../gh2141-delete-trigger-drop-table.result   | 59 +++++++++++++++++++
 .../gh2141-delete-trigger-drop-table.test.lua | 32 ++++++++++
 2 files changed, 91 insertions(+)
 create mode 100644 test/sql/gh2141-delete-trigger-drop-table.result
 create mode 100644 test/sql/gh2141-delete-trigger-drop-table.test.lua

diff --git a/test/sql/gh2141-delete-trigger-drop-table.result b/test/sql/gh2141-delete-trigger-drop-table.result
new file mode 100644
index 0000000000..9bf76bff3a
--- /dev/null
+++ b/test/sql/gh2141-delete-trigger-drop-table.result
@@ -0,0 +1,59 @@
+test_run = require('test_run').new()
+---
+...
+-- create space
+box.sql.execute("DROP TABLE IF EXISTS t")
+---
+...
+box.sql.execute("CREATE TABLE t(id PRIMARY KEY)")
+---
+...
+-- create before update trigger
+box.sql.execute("CREATE TRIGGER tt_bu BEFORE UPDATE ON t BEGIN SELECT 1; END")
+---
+...
+-- create after update trigger
+box.sql.execute("CREATE TRIGGER tt_au AFTER UPDATE ON t BEGIN SELECT 1; END")
+---
+...
+-- create before insert trigger
+box.sql.execute("CREATE TRIGGER tt_bi BEFORE INSERT ON t BEGIN SELECT 1; END")
+---
+...
+-- create after insert trigger
+box.sql.execute("CREATE TRIGGER tt_ai AFTER INSERT ON t BEGIN SELECT 1; END")
+---
+...
+-- create before delete trigger
+box.sql.execute("CREATE TRIGGER tt_bd BEFORE DELETE ON t BEGIN SELECT 1; END")
+---
+...
+-- create after delete trigger
+box.sql.execute("CREATE TRIGGER tt_ad AFTER DELETE ON t BEGIN SELECT 1; END")
+---
+...
+-- check that this triggers exist
+box.sql.execute("SELECT * FROM _trigger")
+---
+- - ['tt_ad', !!binary gaNzcWzZOkNSRUFURSBUUklHR0VSIHR0X2FkIEFGVEVSIERFTEVURSBPTiB0IEJFR0lOIFNFTEVDVCAxOyBFTkQ=]
+  - ['tt_ai', !!binary gaNzcWzZOkNSRUFURSBUUklHR0VSIHR0X2FpIEFGVEVSIElOU0VSVCBPTiB0IEJFR0lOIFNFTEVDVCAxOyBFTkQ=]
+  - ['tt_au', !!binary gaNzcWzZOkNSRUFURSBUUklHR0VSIHR0X2F1IEFGVEVSIFVQREFURSBPTiB0IEJFR0lOIFNFTEVDVCAxOyBFTkQ=]
+  - ['tt_bd', !!binary gaNzcWzZO0NSRUFURSBUUklHR0VSIHR0X2JkIEJFRk9SRSBERUxFVEUgT04gdCBCRUdJTiBTRUxFQ1QgMTsgRU5E]
+  - ['tt_bi', !!binary gaNzcWzZO0NSRUFURSBUUklHR0VSIHR0X2JpIEJFRk9SRSBJTlNFUlQgT04gdCBCRUdJTiBTRUxFQ1QgMTsgRU5E]
+  - ['tt_bu', !!binary gaNzcWzZO0NSRUFURSBUUklHR0VSIHR0X2J1IEJFRk9SRSBVUERBVEUgT04gdCBCRUdJTiBTRUxFQ1QgMTsgRU5E]
+...
+-- drop table
+box.sql.execute("DROP TABLE t IF EXISTS")
+---
+- error: 'near "IF": syntax error'
+...
+-- check that triggers were dropped with deleted table
+box.sql.execute("SELECT * FROM _trigger")
+---
+- - ['tt_ad', !!binary gaNzcWzZOkNSRUFURSBUUklHR0VSIHR0X2FkIEFGVEVSIERFTEVURSBPTiB0IEJFR0lOIFNFTEVDVCAxOyBFTkQ=]
+  - ['tt_ai', !!binary gaNzcWzZOkNSRUFURSBUUklHR0VSIHR0X2FpIEFGVEVSIElOU0VSVCBPTiB0IEJFR0lOIFNFTEVDVCAxOyBFTkQ=]
+  - ['tt_au', !!binary gaNzcWzZOkNSRUFURSBUUklHR0VSIHR0X2F1IEFGVEVSIFVQREFURSBPTiB0IEJFR0lOIFNFTEVDVCAxOyBFTkQ=]
+  - ['tt_bd', !!binary gaNzcWzZO0NSRUFURSBUUklHR0VSIHR0X2JkIEJFRk9SRSBERUxFVEUgT04gdCBCRUdJTiBTRUxFQ1QgMTsgRU5E]
+  - ['tt_bi', !!binary gaNzcWzZO0NSRUFURSBUUklHR0VSIHR0X2JpIEJFRk9SRSBJTlNFUlQgT04gdCBCRUdJTiBTRUxFQ1QgMTsgRU5E]
+  - ['tt_bu', !!binary gaNzcWzZO0NSRUFURSBUUklHR0VSIHR0X2J1IEJFRk9SRSBVUERBVEUgT04gdCBCRUdJTiBTRUxFQ1QgMTsgRU5E]
+...
diff --git a/test/sql/gh2141-delete-trigger-drop-table.test.lua b/test/sql/gh2141-delete-trigger-drop-table.test.lua
new file mode 100644
index 0000000000..6cb6273f17
--- /dev/null
+++ b/test/sql/gh2141-delete-trigger-drop-table.test.lua
@@ -0,0 +1,32 @@
+test_run = require('test_run').new()
+
+-- create space
+box.sql.execute("DROP TABLE IF EXISTS t")
+box.sql.execute("CREATE TABLE t(id PRIMARY KEY)")
+
+-- create before update trigger
+box.sql.execute("CREATE TRIGGER tt_bu BEFORE UPDATE ON t BEGIN SELECT 1; END")
+
+-- create after update trigger
+box.sql.execute("CREATE TRIGGER tt_au AFTER UPDATE ON t BEGIN SELECT 1; END")
+
+-- create before insert trigger
+box.sql.execute("CREATE TRIGGER tt_bi BEFORE INSERT ON t BEGIN SELECT 1; END")
+
+-- create after insert trigger
+box.sql.execute("CREATE TRIGGER tt_ai AFTER INSERT ON t BEGIN SELECT 1; END")
+
+-- create before delete trigger
+box.sql.execute("CREATE TRIGGER tt_bd BEFORE DELETE ON t BEGIN SELECT 1; END")
+
+-- create after delete trigger
+box.sql.execute("CREATE TRIGGER tt_ad AFTER DELETE ON t BEGIN SELECT 1; END")
+
+-- check that this triggers exist
+box.sql.execute("SELECT * FROM _trigger")
+
+-- drop table
+box.sql.execute("DROP TABLE t IF EXISTS")
+
+-- check that triggers were dropped with deleted table
+box.sql.execute("SELECT * FROM _trigger")
-- 
GitLab