1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-07-29 08:01:23 +03:00

Avoid a dangling pointer comparison when renaming a table that has a trigger

that itself contains a window function with an (illegal) column reference in a
FOLLOWING expression.

FossilOrigin-Name: d45bee36f2c1091a2d32c16ca8921bf4e7c9e40c46d0a36fbcb179ecfafcfbf0
This commit is contained in:
dan
2019-01-16 12:05:22 +00:00
parent 4ccb41fc99
commit fb8ac325d7
4 changed files with 64 additions and 8 deletions

View File

@ -178,4 +178,59 @@ do_execsql_test 4.3 {
END}
}
#-------------------------------------------------------------------------
do_execsql_test 5.0 {
CREATE TABLE t2(a);
CREATE TRIGGER r2 AFTER INSERT ON t2 WHEN new.a NOT NULL BEGIN
SELECT a, rank() OVER w1 FROM t2
WINDOW w1 AS (
PARTITION BY b ORDER BY d ROWS BETWEEN 2 PRECEDING AND a FOLLOWING
),
w2 AS (
PARTITION BY b
ORDER BY d ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
);
END;
} {}
do_catchsql_test 5.0.1 {
INSERT INTO t2 VALUES(1);
} {1 {no such column: b}}
do_execsql_test 5.1 {
ALTER TABLE t2 RENAME TO t2x;
SELECT sql FROM sqlite_master WHERE name = 'r2';
} {
{CREATE TRIGGER r2 AFTER INSERT ON "t2x" WHEN new.a NOT NULL BEGIN
SELECT a, rank() OVER w1 FROM "t2x"
WINDOW w1 AS (
PARTITION BY b ORDER BY d ROWS BETWEEN 2 PRECEDING AND a FOLLOWING
),
w2 AS (
PARTITION BY b
ORDER BY d ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
);
END}
}
do_execsql_test 5.2 {
ALTER TABLE t2x RENAME a TO aaaa;
SELECT sql FROM sqlite_master WHERE name = 'r2';
} {
{CREATE TRIGGER r2 AFTER INSERT ON "t2x" WHEN new.aaaa NOT NULL BEGIN
SELECT aaaa, rank() OVER w1 FROM "t2x"
WINDOW w1 AS (
PARTITION BY b ORDER BY d ROWS BETWEEN 2 PRECEDING AND a FOLLOWING
),
w2 AS (
PARTITION BY b
ORDER BY d ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
);
END}
}
do_catchsql_test 5.3 {
INSERT INTO t2x VALUES(1);
} {1 {no such column: b}}
finish_test