100 lines
3.2 KiB
Markdown
100 lines
3.2 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
|
|
.import employee.db main
|
|
.filectrl main TRUNCATE --(-(2147483647))
|
|
PRAGMA threads;
|
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
|
INSERT INTO t1 VALUES (1, 'Wernher', 10, 100);
|
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
|
|
|
CREATE INDEX t1bc ON t1(b, c);
|
|
|
|
PRAGMA writable_schema = ON;
|
|
|
|
.imposter t1bc t2
|
|
|
|
SELECT * FROM t2;
|
|
|
|
SELECT b, c FROM t1 ORDER BY b, c;
|
|
|
|
.quit
|
|
PRAGMA soft_heap_limit = 10000000 -> '$.a' -> '$.b';
|
|
PRAGMA vdbe_debug = YES;
|
|
.indexes
|
|
BEGIN;
|
|
create TABLE abc(a, b, c, PRIMARY KEY(a, b));
|
|
INSERT INTO abc VALUES(1, 1, 1);
|
|
INSERT INTO abc WITH _m AS MATERIALIZED (SELECT * FROM abc) SELECT a+(select max(a) FROM _m), b+(select max(a) FROM abc), c+(select max(a) FROM abc) FROM abc;
|
|
COMMIT;
|
|
SELECT count((SELECT a FROM abc WHERE a = NULL AND b >= upper.c)) FROM abc AS upper;
|
|
SELECT * FROM sqlite_master WHERE rowid=10;
|
|
PRAGMA cell_size_check = 1;
|
|
VACUUM;
|
|
REINDEX abc;
|
|
SELECT MAX(a) FROM abc;
|
|
SELECT * FROM abc AS a FULL OUTER JOIN abc AS b ON a.rowid = b.rowid;
|
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_abc_9152 ON abc(c COLLATE NOCASE) WHERE c > 0;
|
|
ALTER TABLE abc RENAME COLUMN a TO a_r8581;
|
|
WITH RECURSIVE self(x) AS (SELECT 1 UNION ALL SELECT x FROM self) SELECT * FROM self LIMIT 5;
|
|
DELETE FROM abc WHERE c > (SELECT AVG(c) FROM abc) RETURNING *;
|
|
VACUUM main;
|
|
SELECT MAX(b) FROM abc;
|
|
ANALYZE abc;
|
|
INSERT INTO abc DEFAULT VALUES;
|
|
WITH cte AS (SELECT 1 AS x) INSERT INTO abc(a) SELECT x FROM cte WHERE 1=0;
|
|
DROP INDEX IF EXISTS abc;
|
|
VACUUM;
|
|
INSERT INTO abc VALUES (1, NULL, 1) ON CONFLICT(a) DO UPDATE SET a = excluded.a, b = excluded.b, c = excluded.c;
|
|
WITH cte AS (SELECT c, LAG(c) OVER (ORDER BY c) AS prev FROM abc) SELECT * FROM cte;
|
|
UPDATE abc SET a = 82 WHERE rowid = 1;
|
|
WITH RECURSIVE cnt(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM cnt WHERE x<1) SELECT * FROM cnt;
|
|
PRAGMA read_uncommitted = TRUE;
|
|
INSERT INTO t1 SELECT * FROM t1;
|
|
SELECT COUNT(*) FILTER (WHERE c IS NOT NULL), SUM(rowid) FILTER (WHERE c > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(c) FILTER (WHERE c > 0 AND c < 100), COUNT(*) FILTER (WHERE typeof(c) = "text") FROM abc;
|
|
```
|
|
|
|
## Actual output
|
|
|
|
```sql
|
|
SQLite version 3.39.0 2022-05-10 23:28:12
|
|
Enter ".help" for usage hints.
|
|
sqlite> sqlite> sqlite> 0
|
|
sqlite> sqlite> sqlite> sqlite> sqlite> sqlite> sqlite> sqlite> sqlite> sqlite> CREATE TABLE "t2"("b","c","_ROWID_",PRIMARY KEY("b","c","_ROWID_"))WITHOUT ROWID;
|
|
WARNING: writing to an imposter table will corrupt the "t1bc" index!
|
|
sqlite> sqlite> Braun|30|3
|
|
Wernher|10|1
|
|
von|20|2
|
|
sqlite> sqlite> Braun|30
|
|
Wernher|10
|
|
von|20
|
|
sqlite> sqlite>
|
|
```
|
|
|
|
## Expectation
|
|
|
|
```sql
|
|
SQLite version 3.51.1 2025-11-28 17:28:25
|
|
Enter ".help" for usage hints.
|
|
sqlite> sqlite> sqlite> 0
|
|
sqlite> sqlite> sqlite> sqlite> sqlite> sqlite> sqlite> sqlite> sqlite> sqlite> CREATE TABLE "t2"("b","c","_ROWID_",PRIMARY KEY("b","c","_ROWID_"))WITHOUT ROWID;
|
|
sqlite> sqlite> Braun|30|3
|
|
Wernher|10|1
|
|
von|20|2
|
|
sqlite> sqlite> Braun|30
|
|
Wernher|10
|
|
von|20
|
|
sqlite> sqlite>
|
|
```
|
|
|
|
## Flag
|
|
|
|
```
|
|
-interactive
|
|
```
|
|
|