Exercise 2.1 Joint and serial control insertions

This commit is contained in:
CrypthonicsException 2021-11-21 21:21:08 +03:00
parent d509f430bf
commit 0f0cde2772

69
project1/c.sql Normal file
View File

@ -0,0 +1,69 @@
DROP TABLE IF EXISTS addressRelations;
CREATE TABLE addressRelations (addr1 int, addr2 int);
CREATE TEMPORARY TABLE tempRelations (addr1 int, addr2 int);
-------------------------------------
-- Tx that has more than one input
CREATE OR REPLACE VIEW joint_control_transactions
AS SELECT tx_id
FROM inputs
GROUP BY tx_id
HAVING count(*)>1;
-------------------------------------
-- Tx that pass serial control check
CREATE OR REPLACE VIEW serial_control_transactions
AS SELECT tx_id
FROM inputs
JOIN outputs
USING (tx_id)
GROUP BY tx_id
HAVING count(*)=1;
-------------------------------------
--insert joint control results (contains symmetric and reflexive results)
INSERT INTO tempRelations
SELECT inputs.sig_id, joint_tx_with_addr.sig_id
FROM inputs
RIGHT OUTER JOIN (
SELECT tx_id, sig_id
FROM joint_control_transactions
JOIN inputs
USING (tx_id)
)
AS joint_tx_with_addr
USING (tx_id);
-------------------------------------
--insert serial control results
INSERT INTO tempRelations
SELECT sig_id, pk_id
FROM inputs
JOIN outputs
USING (tx_id)
WHERE tx_id IN (SELECT tx_id FROM serial_control_transactions);
-------------------------------------
-- clean up reflexivity
DELETE
FROM tempRelations
WHERE addr1 = addr2;
-------------------------------------
-- Temporary table for storing symmetrical rows
CREATE TEMPORARY TABLE temp_symmetry (addr1 int, addr2 int);
-- find symmetrical rows
INSERT INTO temp_symmetry
SELECT tmp1.addr1, tmp1.addr2
FROM tempRelations tmp1
INNER JOIN tempRelations tmp2
ON tmp1.addr1 = tmp2.addr2
AND tmp1.addr2 = tmp2.addr1
AND tmp1.addr1 > tmp1.addr2;
-- clean up symmetrical rows
DELETE
FROM tempRelations
WHERE EXISTS (SELECT * FROM temp_symmetry WHERE tempRelations.addr1 = temp_symmetry.addr1 AND tempRelations.addr2 = temp_symmetry.addr2);
INSERT INTO addressRelations
SELECT addr1, addr2
FROM tempRelations;
DROP TABLE IF EXISTS temp_symmetry;
DROP TABLE IF EXISTS tempRelations;