mirror of
https://github.com/aljazceru/turso.git
synced 2026-01-31 13:54:27 +01:00
add tests for rollback of views.
This commit is contained in:
@@ -385,3 +385,174 @@ do_execsql_test_on_specific_db {:memory:} matview-projections {
|
||||
SELECT * from v;
|
||||
} {4|3|7|22|3
|
||||
3|4|7|22|3}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} matview-rollback-insert {
|
||||
CREATE TABLE t(a INTEGER, b INTEGER);
|
||||
INSERT INTO t VALUES (1, 10), (2, 20), (3, 30);
|
||||
|
||||
CREATE MATERIALIZED VIEW v AS
|
||||
SELECT * FROM t WHERE b > 15;
|
||||
|
||||
SELECT * FROM v ORDER BY a;
|
||||
|
||||
BEGIN;
|
||||
INSERT INTO t VALUES (4, 40), (5, 50);
|
||||
SELECT * FROM v ORDER BY a;
|
||||
ROLLBACK;
|
||||
|
||||
SELECT * FROM v ORDER BY a;
|
||||
} {2|20
|
||||
3|30
|
||||
2|20
|
||||
3|30
|
||||
4|40
|
||||
5|50
|
||||
2|20
|
||||
3|30}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} matview-rollback-delete {
|
||||
CREATE TABLE t(a INTEGER, b INTEGER);
|
||||
INSERT INTO t VALUES (1, 10), (2, 20), (3, 30), (4, 40);
|
||||
|
||||
CREATE MATERIALIZED VIEW v AS
|
||||
SELECT * FROM t WHERE b > 15;
|
||||
|
||||
SELECT * FROM v ORDER BY a;
|
||||
|
||||
BEGIN;
|
||||
DELETE FROM t WHERE a IN (2, 3);
|
||||
SELECT * FROM v ORDER BY a;
|
||||
ROLLBACK;
|
||||
|
||||
SELECT * FROM v ORDER BY a;
|
||||
} {2|20
|
||||
3|30
|
||||
4|40
|
||||
4|40
|
||||
2|20
|
||||
3|30
|
||||
4|40}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} matview-rollback-update {
|
||||
CREATE TABLE t(a INTEGER, b INTEGER);
|
||||
INSERT INTO t VALUES (1, 10), (2, 20), (3, 30);
|
||||
|
||||
CREATE MATERIALIZED VIEW v AS
|
||||
SELECT * FROM t WHERE b > 15;
|
||||
|
||||
SELECT * FROM v ORDER BY a;
|
||||
|
||||
BEGIN;
|
||||
UPDATE t SET b = 5 WHERE a = 2;
|
||||
UPDATE t SET b = 35 WHERE a = 1;
|
||||
SELECT * FROM v ORDER BY a;
|
||||
ROLLBACK;
|
||||
|
||||
SELECT * FROM v ORDER BY a;
|
||||
} {2|20
|
||||
3|30
|
||||
1|35
|
||||
3|30
|
||||
2|20
|
||||
3|30}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} matview-rollback-aggregation {
|
||||
CREATE TABLE sales(product_id INTEGER, amount INTEGER);
|
||||
INSERT INTO sales VALUES (1, 100), (1, 200), (2, 150), (2, 250);
|
||||
|
||||
CREATE MATERIALIZED VIEW product_totals AS
|
||||
SELECT product_id, SUM(amount) as total, COUNT(*) as cnt
|
||||
FROM sales
|
||||
GROUP BY product_id;
|
||||
|
||||
SELECT * FROM product_totals ORDER BY product_id;
|
||||
|
||||
BEGIN;
|
||||
INSERT INTO sales VALUES (1, 50), (3, 300);
|
||||
SELECT * FROM product_totals ORDER BY product_id;
|
||||
ROLLBACK;
|
||||
|
||||
SELECT * FROM product_totals ORDER BY product_id;
|
||||
} {1|300|2
|
||||
2|400|2
|
||||
1|350|3
|
||||
2|400|2
|
||||
3|300|1
|
||||
1|300|2
|
||||
2|400|2}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} matview-rollback-mixed-operations {
|
||||
CREATE TABLE orders(id INTEGER PRIMARY KEY, customer INTEGER, amount INTEGER);
|
||||
INSERT INTO orders VALUES (1, 100, 50), (2, 200, 75), (3, 100, 25);
|
||||
|
||||
CREATE MATERIALIZED VIEW customer_totals AS
|
||||
SELECT customer, SUM(amount) as total, COUNT(*) as cnt
|
||||
FROM orders
|
||||
GROUP BY customer;
|
||||
|
||||
SELECT * FROM customer_totals ORDER BY customer;
|
||||
|
||||
BEGIN;
|
||||
INSERT INTO orders VALUES (4, 100, 100);
|
||||
UPDATE orders SET amount = 150 WHERE id = 2;
|
||||
DELETE FROM orders WHERE id = 3;
|
||||
SELECT * FROM customer_totals ORDER BY customer;
|
||||
ROLLBACK;
|
||||
|
||||
SELECT * FROM customer_totals ORDER BY customer;
|
||||
} {100|75|2
|
||||
200|75|1
|
||||
100|150|2
|
||||
200|150|1
|
||||
100|75|2
|
||||
200|75|1}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} matview-rollback-filtered-aggregation {
|
||||
CREATE TABLE transactions(id INTEGER, account INTEGER, amount INTEGER, type TEXT);
|
||||
INSERT INTO transactions VALUES
|
||||
(1, 100, 50, 'deposit'),
|
||||
(2, 100, 30, 'withdraw'),
|
||||
(3, 200, 100, 'deposit'),
|
||||
(4, 200, 40, 'withdraw');
|
||||
|
||||
CREATE MATERIALIZED VIEW deposits AS
|
||||
SELECT account, SUM(amount) as total_deposits, COUNT(*) as cnt
|
||||
FROM transactions
|
||||
WHERE type = 'deposit'
|
||||
GROUP BY account;
|
||||
|
||||
SELECT * FROM deposits ORDER BY account;
|
||||
|
||||
BEGIN;
|
||||
INSERT INTO transactions VALUES (5, 100, 75, 'deposit');
|
||||
UPDATE transactions SET amount = 60 WHERE id = 1;
|
||||
DELETE FROM transactions WHERE id = 3;
|
||||
SELECT * FROM deposits ORDER BY account;
|
||||
ROLLBACK;
|
||||
|
||||
SELECT * FROM deposits ORDER BY account;
|
||||
} {100|50|1
|
||||
200|100|1
|
||||
100|135|2
|
||||
100|50|1
|
||||
200|100|1}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} matview-rollback-empty-view {
|
||||
CREATE TABLE t(a INTEGER, b INTEGER);
|
||||
INSERT INTO t VALUES (1, 5), (2, 8);
|
||||
|
||||
CREATE MATERIALIZED VIEW v AS
|
||||
SELECT * FROM t WHERE b > 10;
|
||||
|
||||
SELECT COUNT(*) FROM v;
|
||||
|
||||
BEGIN;
|
||||
INSERT INTO t VALUES (3, 15), (4, 20);
|
||||
SELECT * FROM v ORDER BY a;
|
||||
ROLLBACK;
|
||||
|
||||
SELECT COUNT(*) FROM v;
|
||||
} {0
|
||||
3|15
|
||||
4|20
|
||||
0}
|
||||
|
||||
Reference in New Issue
Block a user