532 lines
14 KiB
Markdown
532 lines
14 KiB
Markdown
## Summary
|
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->**No review yet**
|
|
|
|
## Minimized query
|
|
|
|
```sql
|
|
.once log.txt
|
|
PRAGMA case_sensitive_like = ON;
|
|
-- PRAGMA wal_checkpoint('FULL');
|
|
|
|
PRAGMA locking_mode;
|
|
PRAGMA vdbe_listing = FALSE;
|
|
.auth ON
|
|
PRAGMA page_size=1.0;
|
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b BLOB);
|
|
WITH RECURSIVE c(i) AS (VALUES(1) UNION ALL SELECT i+1 FROM c WHERE i<30) INSERT INTO t1(a,b) SELECT i, zeroblob(6500) FROM c;
|
|
UPDATE t1 SET b=zeroblob(3000);
|
|
UPDATE t1 SET b=zeroblob(64000) WHERE a=2;
|
|
PRAGMA integrity_check;
|
|
SELECT * FROM t1;
|
|
|
|
UPDATE t1 SET b = -44 WHERE rowid = 1;
|
|
SELECT GROUP_CONCAT(b, b) OVER (ORDER BY b GROUPS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t1;
|
|
INSERT INTO t1 VALUES (NULL, 1) ON CONFLICT(a) DO UPDATE SET a = excluded.a, b = excluded.b;
|
|
SELECT * FROM (SELECT * FROM t1) AS sub;
|
|
ALTER TABLE t1 ADD COLUMN extra_726 CHARACTER(20) COLLATE NOCASE;
|
|
REINDEX;
|
|
SELECT * FROM t1 AS a RIGHT JOIN t1 AS b ON a.rowid = b.rowid;
|
|
VACUUM;
|
|
DELETE FROM t1 WHERE 0;
|
|
CREATE TRIGGER IF NOT EXISTS trg_t1_1506 AFTER INSERT ON t1 FOR EACH ROW BEGIN SELECT RAISE(FAIL, 'no'); END;
|
|
ANALYZE t1;
|
|
|
|
```
|
|
|
|
## Actual output
|
|
|
|
```sql
|
|
normal
|
|
authorizer: PRAGMA "page_size" "1.0" NULL NULL
|
|
authorizer: INSERT "sqlite_master" NULL "main" NULL
|
|
authorizer: CREATE_TABLE "t1" NULL "main" NULL
|
|
authorizer: UPDATE "sqlite_master" "type" "main" NULL
|
|
authorizer: UPDATE "sqlite_master" "name" "main" NULL
|
|
authorizer: UPDATE "sqlite_master" "tbl_name" "main" NULL
|
|
authorizer: UPDATE "sqlite_master" "rootpage" "main" NULL
|
|
authorizer: UPDATE "sqlite_master" "sql" "main" NULL
|
|
authorizer: READ "sqlite_master" "ROWID" "main" NULL
|
|
authorizer: INSERT "t1" NULL "main" NULL
|
|
authorizer: SELECT NULL NULL NULL NULL
|
|
authorizer: FUNCTION NULL "zeroblob" NULL NULL
|
|
authorizer: SELECT NULL NULL NULL "c"
|
|
authorizer: RECURSIVE NULL NULL NULL "c"
|
|
authorizer: SELECT NULL NULL NULL "c"
|
|
authorizer: SELECT NULL NULL NULL "c"
|
|
authorizer: FUNCTION NULL "zeroblob" NULL NULL
|
|
authorizer: UPDATE "t1" "b" "main" NULL
|
|
authorizer: FUNCTION NULL "zeroblob" NULL NULL
|
|
authorizer: UPDATE "t1" "b" "main" NULL
|
|
authorizer: READ "t1" "a" "main" NULL
|
|
authorizer: PRAGMA "integrity_check" NULL NULL NULL
|
|
ok
|
|
authorizer: SELECT NULL NULL NULL NULL
|
|
authorizer: READ "t1" "a" "main" NULL
|
|
authorizer: READ "t1" "b" "main" NULL
|
|
1|
|
|
2|
|
|
3|
|
|
4|
|
|
5|
|
|
6|
|
|
7|
|
|
8|
|
|
9|
|
|
10|
|
|
11|
|
|
12|
|
|
13|
|
|
14|
|
|
15|
|
|
16|
|
|
17|
|
|
18|
|
|
19|
|
|
20|
|
|
21|
|
|
22|
|
|
23|
|
|
24|
|
|
25|
|
|
26|
|
|
27|
|
|
28|
|
|
29|
|
|
30|
|
|
authorizer: UPDATE "t1" "b" "main" NULL
|
|
authorizer: READ "t1" "a" "main" NULL
|
|
authorizer: SELECT NULL NULL NULL NULL
|
|
authorizer: FUNCTION NULL "group_concat" NULL NULL
|
|
authorizer: READ "t1" "b" "main" NULL
|
|
authorizer: READ "t1" "b" "main" NULL
|
|
authorizer: READ "t1" "b" "main" NULL
|
|
authorizer: SELECT NULL NULL NULL NULL
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
authorizer: INSERT "t1" NULL "main" NULL
|
|
authorizer: READ "t1" "a" "main" NULL
|
|
authorizer: UPDATE "t1" "a" "main" NULL
|
|
authorizer: UPDATE "t1" "b" "main" NULL
|
|
authorizer: SELECT NULL NULL NULL NULL
|
|
authorizer: READ "t1" "a" "main" NULL
|
|
authorizer: READ "t1" "b" "main" NULL
|
|
authorizer: SELECT NULL NULL NULL NULL
|
|
1|-44
|
|
2|
|
|
3|
|
|
4|
|
|
5|
|
|
6|
|
|
7|
|
|
8|
|
|
9|
|
|
10|
|
|
11|
|
|
12|
|
|
13|
|
|
14|
|
|
15|
|
|
16|
|
|
17|
|
|
18|
|
|
19|
|
|
20|
|
|
21|
|
|
22|
|
|
23|
|
|
24|
|
|
25|
|
|
26|
|
|
27|
|
|
28|
|
|
29|
|
|
30|
|
|
31|1
|
|
authorizer: ALTER_TABLE "main" "t1" NULL NULL
|
|
authorizer: FUNCTION NULL "printf" NULL NULL
|
|
authorizer: READ "sqlite_master" "sql" "main" NULL
|
|
authorizer: FUNCTION NULL "substr" NULL NULL
|
|
authorizer: READ "sqlite_master" "sql" "main" NULL
|
|
authorizer: FUNCTION NULL "length" NULL NULL
|
|
authorizer: FUNCTION NULL "printf" NULL NULL
|
|
authorizer: READ "sqlite_master" "sql" "main" NULL
|
|
authorizer: UPDATE "sqlite_master" "sql" "main" NULL
|
|
authorizer: READ "sqlite_master" "type" "main" NULL
|
|
authorizer: READ "sqlite_master" "name" "main" NULL
|
|
authorizer: SELECT NULL NULL NULL NULL
|
|
authorizer: READ "t1" "a" "main" NULL
|
|
authorizer: READ "t1" "b" "main" NULL
|
|
authorizer: READ "t1" "extra_726" "main" NULL
|
|
authorizer: READ "t1" "a" "main" NULL
|
|
authorizer: READ "t1" "b" "main" NULL
|
|
authorizer: READ "t1" "extra_726" "main" NULL
|
|
authorizer: READ "t1" "a" "main" NULL
|
|
authorizer: READ "t1" "a" "main" NULL
|
|
1|-44||1|-44|
|
|
2|||2||
|
|
3|||3||
|
|
4|||4||
|
|
5|||5||
|
|
6|||6||
|
|
7|||7||
|
|
8|||8||
|
|
9|||9||
|
|
10|||10||
|
|
11|||11||
|
|
12|||12||
|
|
13|||13||
|
|
14|||14||
|
|
15|||15||
|
|
16|||16||
|
|
17|||17||
|
|
18|||18||
|
|
19|||19||
|
|
20|||20||
|
|
21|||21||
|
|
22|||22||
|
|
23|||23||
|
|
24|||24||
|
|
25|||25||
|
|
26|||26||
|
|
27|||27||
|
|
28|||28||
|
|
29|||29||
|
|
30|||30||
|
|
31|1||31|1|
|
|
authorizer: ATTACH "" NULL NULL NULL
|
|
authorizer: TRANSACTION "BEGIN" NULL NULL NULL
|
|
authorizer: SELECT NULL NULL NULL NULL
|
|
authorizer: READ "sqlite_master" "sql" "main" NULL
|
|
authorizer: READ "sqlite_master" "type" "main" NULL
|
|
authorizer: READ "sqlite_master" "name" "main" NULL
|
|
authorizer: FUNCTION NULL "coalesce" NULL NULL
|
|
authorizer: READ "sqlite_master" "rootpage" "main" NULL
|
|
authorizer: INSERT "sqlite_master" NULL "vacuum_db" NULL
|
|
authorizer: CREATE_TABLE "t1" NULL "vacuum_db" NULL
|
|
authorizer: UPDATE "sqlite_master" "type" "vacuum_db" NULL
|
|
authorizer: UPDATE "sqlite_master" "name" "vacuum_db" NULL
|
|
authorizer: UPDATE "sqlite_master" "tbl_name" "vacuum_db" NULL
|
|
authorizer: UPDATE "sqlite_master" "rootpage" "vacuum_db" NULL
|
|
authorizer: UPDATE "sqlite_master" "sql" "vacuum_db" NULL
|
|
authorizer: READ "sqlite_master" "ROWID" "vacuum_db" NULL
|
|
authorizer: SELECT NULL NULL NULL NULL
|
|
authorizer: READ "sqlite_master" "sql" "main" NULL
|
|
authorizer: READ "sqlite_master" "type" "main" NULL
|
|
authorizer: SELECT NULL NULL NULL NULL
|
|
authorizer: FUNCTION NULL "quote" NULL NULL
|
|
authorizer: READ "sqlite_master" "name" "vacuum_db" NULL
|
|
authorizer: FUNCTION NULL "quote" NULL NULL
|
|
authorizer: READ "sqlite_master" "name" "vacuum_db" NULL
|
|
authorizer: READ "sqlite_master" "type" "vacuum_db" NULL
|
|
authorizer: FUNCTION NULL "coalesce" NULL NULL
|
|
authorizer: READ "sqlite_master" "rootpage" "vacuum_db" NULL
|
|
authorizer: INSERT "t1" NULL "vacuum_db" NULL
|
|
authorizer: INSERT "sqlite_master" NULL "vacuum_db" NULL
|
|
authorizer: SELECT NULL NULL NULL NULL
|
|
authorizer: READ "sqlite_master" "type" "main" NULL
|
|
authorizer: READ "sqlite_master" "name" "main" NULL
|
|
authorizer: READ "sqlite_master" "tbl_name" "main" NULL
|
|
authorizer: READ "sqlite_master" "rootpage" "main" NULL
|
|
authorizer: READ "sqlite_master" "sql" "main" NULL
|
|
authorizer: READ "sqlite_master" "type" "main" NULL
|
|
authorizer: READ "sqlite_master" "type" "main" NULL
|
|
authorizer: READ "sqlite_master" "rootpage" "main" NULL
|
|
authorizer: DELETE "t1" NULL "main" NULL
|
|
authorizer: CREATE_TRIGGER "trg_t1_1506" "t1" "main" NULL
|
|
authorizer: INSERT "sqlite_master" NULL "main" NULL
|
|
authorizer: INSERT "sqlite_master" NULL "main" NULL
|
|
authorizer: INSERT "sqlite_master" NULL "main" NULL
|
|
authorizer: CREATE_TABLE "sqlite_stat1" NULL "main" NULL
|
|
authorizer: UPDATE "sqlite_master" "type" "main" NULL
|
|
authorizer: UPDATE "sqlite_master" "name" "main" NULL
|
|
authorizer: UPDATE "sqlite_master" "tbl_name" "main" NULL
|
|
authorizer: UPDATE "sqlite_master" "rootpage" "main" NULL
|
|
authorizer: UPDATE "sqlite_master" "sql" "main" NULL
|
|
authorizer: READ "sqlite_master" "ROWID" "main" NULL
|
|
authorizer: ANALYZE "t1" NULL "main" NULL
|
|
authorizer: SELECT NULL NULL NULL NULL
|
|
authorizer: READ "sqlite_stat1" "tbl" "main" NULL
|
|
authorizer: READ "sqlite_stat1" "idx" "main" NULL
|
|
authorizer: READ "sqlite_stat1" "stat" "main" NULL
|
|
```
|
|
|
|
## Expectation
|
|
|
|
```sql
|
|
normal
|
|
authorizer: PRAGMA "page_size" "1.0" NULL NULL
|
|
authorizer: INSERT "sqlite_master" NULL "main" NULL
|
|
authorizer: CREATE_TABLE "t1" NULL "main" NULL
|
|
authorizer: UPDATE "sqlite_master" "type" "main" NULL
|
|
authorizer: UPDATE "sqlite_master" "name" "main" NULL
|
|
authorizer: UPDATE "sqlite_master" "tbl_name" "main" NULL
|
|
authorizer: UPDATE "sqlite_master" "rootpage" "main" NULL
|
|
authorizer: UPDATE "sqlite_master" "sql" "main" NULL
|
|
authorizer: READ "sqlite_master" "ROWID" "main" NULL
|
|
authorizer: INSERT "t1" NULL "main" NULL
|
|
authorizer: SELECT NULL NULL NULL NULL
|
|
authorizer: FUNCTION NULL "zeroblob" NULL NULL
|
|
authorizer: SELECT NULL NULL NULL "c"
|
|
authorizer: RECURSIVE NULL NULL NULL "c"
|
|
authorizer: SELECT NULL NULL NULL "c"
|
|
authorizer: SELECT NULL NULL NULL "c"
|
|
authorizer: FUNCTION NULL "zeroblob" NULL NULL
|
|
authorizer: UPDATE "t1" "b" "main" NULL
|
|
authorizer: FUNCTION NULL "zeroblob" NULL NULL
|
|
authorizer: UPDATE "t1" "b" "main" NULL
|
|
authorizer: READ "t1" "a" "main" NULL
|
|
authorizer: PRAGMA "integrity_check" NULL NULL NULL
|
|
ok
|
|
authorizer: SELECT NULL NULL NULL NULL
|
|
authorizer: READ "t1" "a" "main" NULL
|
|
authorizer: READ "t1" "b" "main" NULL
|
|
1|
|
|
2|
|
|
3|
|
|
4|
|
|
5|
|
|
6|
|
|
7|
|
|
8|
|
|
9|
|
|
10|
|
|
11|
|
|
12|
|
|
13|
|
|
14|
|
|
15|
|
|
16|
|
|
17|
|
|
18|
|
|
19|
|
|
20|
|
|
21|
|
|
22|
|
|
23|
|
|
24|
|
|
25|
|
|
26|
|
|
27|
|
|
28|
|
|
29|
|
|
30|
|
|
authorizer: UPDATE "t1" "b" "main" NULL
|
|
authorizer: READ "t1" "a" "main" NULL
|
|
authorizer: SELECT NULL NULL NULL NULL
|
|
authorizer: FUNCTION NULL "group_concat" NULL NULL
|
|
authorizer: READ "t1" "b" "main" NULL
|
|
authorizer: READ "t1" "b" "main" NULL
|
|
authorizer: READ "t1" "b" "main" NULL
|
|
authorizer: SELECT NULL NULL NULL NULL
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
-44
|
|
authorizer: INSERT "t1" NULL "main" NULL
|
|
authorizer: READ "t1" "a" "main" NULL
|
|
authorizer: UPDATE "t1" "a" "main" NULL
|
|
authorizer: UPDATE "t1" "b" "main" NULL
|
|
authorizer: SELECT NULL NULL NULL NULL
|
|
authorizer: READ "t1" "a" "main" NULL
|
|
authorizer: READ "t1" "b" "main" NULL
|
|
authorizer: SELECT NULL NULL NULL NULL
|
|
1|-44
|
|
2|
|
|
3|
|
|
4|
|
|
5|
|
|
6|
|
|
7|
|
|
8|
|
|
9|
|
|
10|
|
|
11|
|
|
12|
|
|
13|
|
|
14|
|
|
15|
|
|
16|
|
|
17|
|
|
18|
|
|
19|
|
|
20|
|
|
21|
|
|
22|
|
|
23|
|
|
24|
|
|
25|
|
|
26|
|
|
27|
|
|
28|
|
|
29|
|
|
30|
|
|
31|1
|
|
authorizer: ALTER_TABLE "main" "t1" NULL NULL
|
|
authorizer: FUNCTION NULL "printf" NULL NULL
|
|
authorizer: READ "sqlite_master" "sql" "main" NULL
|
|
authorizer: FUNCTION NULL "substr" NULL NULL
|
|
authorizer: READ "sqlite_master" "sql" "main" NULL
|
|
authorizer: FUNCTION NULL "length" NULL NULL
|
|
authorizer: FUNCTION NULL "printf" NULL NULL
|
|
authorizer: READ "sqlite_master" "sql" "main" NULL
|
|
authorizer: UPDATE "sqlite_master" "sql" "main" NULL
|
|
authorizer: READ "sqlite_master" "type" "main" NULL
|
|
authorizer: READ "sqlite_master" "name" "main" NULL
|
|
authorizer: SELECT NULL NULL NULL NULL
|
|
authorizer: READ "t1" "a" "main" NULL
|
|
authorizer: READ "t1" "b" "main" NULL
|
|
authorizer: READ "t1" "extra_726" "main" NULL
|
|
authorizer: READ "t1" "a" "main" NULL
|
|
authorizer: READ "t1" "b" "main" NULL
|
|
authorizer: READ "t1" "extra_726" "main" NULL
|
|
authorizer: READ "t1" "a" "main" NULL
|
|
authorizer: READ "t1" "a" "main" NULL
|
|
1|-44||1|-44|
|
|
2|||2||
|
|
3|||3||
|
|
4|||4||
|
|
5|||5||
|
|
6|||6||
|
|
7|||7||
|
|
8|||8||
|
|
9|||9||
|
|
10|||10||
|
|
11|||11||
|
|
12|||12||
|
|
13|||13||
|
|
14|||14||
|
|
15|||15||
|
|
16|||16||
|
|
17|||17||
|
|
18|||18||
|
|
19|||19||
|
|
20|||20||
|
|
21|||21||
|
|
22|||22||
|
|
23|||23||
|
|
24|||24||
|
|
25|||25||
|
|
26|||26||
|
|
27|||27||
|
|
28|||28||
|
|
29|||29||
|
|
30|||30||
|
|
31|1||31|1|
|
|
authorizer: ATTACH "" NULL NULL NULL
|
|
authorizer: TRANSACTION "BEGIN" NULL NULL NULL
|
|
authorizer: SELECT NULL NULL NULL NULL
|
|
authorizer: READ "sqlite_master" "sql" "main" NULL
|
|
authorizer: READ "sqlite_master" "type" "main" NULL
|
|
authorizer: READ "sqlite_master" "name" "main" NULL
|
|
authorizer: FUNCTION NULL "coalesce" NULL NULL
|
|
authorizer: READ "sqlite_master" "rootpage" "main" NULL
|
|
authorizer: INSERT "sqlite_master" NULL "vacuum_a06fbc4403388215" NULL
|
|
authorizer: CREATE_TABLE "t1" NULL "vacuum_a06fbc4403388215" NULL
|
|
authorizer: UPDATE "sqlite_master" "type" "vacuum_a06fbc4403388215" NULL
|
|
authorizer: UPDATE "sqlite_master" "name" "vacuum_a06fbc4403388215" NULL
|
|
authorizer: UPDATE "sqlite_master" "tbl_name" "vacuum_a06fbc4403388215" NULL
|
|
authorizer: UPDATE "sqlite_master" "rootpage" "vacuum_a06fbc4403388215" NULL
|
|
authorizer: UPDATE "sqlite_master" "sql" "vacuum_a06fbc4403388215" NULL
|
|
authorizer: READ "sqlite_master" "ROWID" "vacuum_a06fbc4403388215" NULL
|
|
authorizer: SELECT NULL NULL NULL NULL
|
|
authorizer: READ "sqlite_master" "sql" "main" NULL
|
|
authorizer: READ "sqlite_master" "type" "main" NULL
|
|
authorizer: SELECT NULL NULL NULL NULL
|
|
authorizer: FUNCTION NULL "quote" NULL NULL
|
|
authorizer: READ "sqlite_master" "name" "vacuum_a06fbc4403388215" NULL
|
|
authorizer: FUNCTION NULL "quote" NULL NULL
|
|
authorizer: READ "sqlite_master" "name" "vacuum_a06fbc4403388215" NULL
|
|
authorizer: READ "sqlite_master" "type" "vacuum_a06fbc4403388215" NULL
|
|
authorizer: FUNCTION NULL "coalesce" NULL NULL
|
|
authorizer: READ "sqlite_master" "rootpage" "vacuum_a06fbc4403388215" NULL
|
|
authorizer: INSERT "t1" NULL "vacuum_a06fbc4403388215" NULL
|
|
authorizer: INSERT "sqlite_master" NULL "vacuum_a06fbc4403388215" NULL
|
|
authorizer: SELECT NULL NULL NULL NULL
|
|
authorizer: READ "sqlite_master" "type" "main" NULL
|
|
authorizer: READ "sqlite_master" "name" "main" NULL
|
|
authorizer: READ "sqlite_master" "tbl_name" "main" NULL
|
|
authorizer: READ "sqlite_master" "rootpage" "main" NULL
|
|
authorizer: READ "sqlite_master" "sql" "main" NULL
|
|
authorizer: READ "sqlite_master" "type" "main" NULL
|
|
authorizer: READ "sqlite_master" "type" "main" NULL
|
|
authorizer: READ "sqlite_master" "rootpage" "main" NULL
|
|
authorizer: DELETE "t1" NULL "main" NULL
|
|
authorizer: CREATE_TRIGGER "trg_t1_1506" "t1" "main" NULL
|
|
authorizer: INSERT "sqlite_master" NULL "main" NULL
|
|
authorizer: INSERT "sqlite_master" NULL "main" NULL
|
|
authorizer: INSERT "sqlite_master" NULL "main" NULL
|
|
authorizer: CREATE_TABLE "sqlite_stat1" NULL "main" NULL
|
|
authorizer: UPDATE "sqlite_master" "type" "main" NULL
|
|
authorizer: UPDATE "sqlite_master" "name" "main" NULL
|
|
authorizer: UPDATE "sqlite_master" "tbl_name" "main" NULL
|
|
authorizer: UPDATE "sqlite_master" "rootpage" "main" NULL
|
|
authorizer: UPDATE "sqlite_master" "sql" "main" NULL
|
|
authorizer: READ "sqlite_master" "ROWID" "main" NULL
|
|
authorizer: ANALYZE "t1" NULL "main" NULL
|
|
authorizer: SELECT NULL NULL NULL NULL
|
|
authorizer: READ "sqlite_stat1" "tbl" "main" NULL
|
|
authorizer: READ "sqlite_stat1" "idx" "main" NULL
|
|
authorizer: READ "sqlite_stat1" "stat" "main" NULL
|
|
```
|
|
|
|
## Flag
|
|
|
|
```
|
|
|
|
```
|
|
|