19 KiB
19 KiB
Summary
**No review yet**Minimized query
PRAGMA cache_spill = NO;
.eqp full
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
INSERT INTO t1 VALUES (if(-CAST(1 AS CLOB), 1, 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
INSERT INTO t1 DEFAULT VALUES;
SELECT COUNT(a) FROM t1;
SELECT COUNT(*) FILTER (WHERE b IS NOT NULL), SUM(rowid) FILTER (WHERE b > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(b) FILTER (WHERE b > 0
AND b < 100), COUNT(*) FILTER (WHERE typeof(b) = "text") FROM t1;
SELECT GROUP_CONCAT(a, '.') FILTER (WHERE a IS NOT NULL) OVER (ORDER BY a RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING) FROM t1;
SELECT COUNT(*) FILTER (WHERE a IS NOT NULL), SUM(rowid) FILTER (WHERE a > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(a) FILTER (WHERE a > 0 AND a < 100), COUNT(*) FILTER (WHERE typeof(a) = "text") FROM t1;
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
INSERT INTO t1 VALUES (if(-CAST(1 AS CLOB), 1, 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
INSERT INTO t1 DEFAULT VALUES;
SELECT COUNT(a) FROM t1;
SELECT COUNT(*) FILTER (WHERE b IS NOT NULL), SUM(rowid) FILTER (WHERE b > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(b) FILTER (WHERE b > 0 AND b < 100), COUNT(*) FILTER (WHERE typeof(b) = "text") FROM t1;
SELECT GROUP_CONCAT(a, '.') FILTER (WHERE a IS NOT NULL) OVER (ORDER BY a RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING) FROM t1;
SELECT COUNT(*) FILTER (WHERE a IS NOT NULL), SUM(rowid) FILTER (WHERE a > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(a) FILTER (WHERE a > 0 AND a < 100), COUNT(*) FILTER (WHERE typeof(a) = "text") FROM t1;
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
INSERT INTO t1 VALUES (if(-CAST(1 AS CLOB), 1, 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
INSERT INTO t1 DEFAULT VALUES;
SELECT COUNT(a) FROM t1;
SELECT COUNT(*) FILTER (WHERE b IS NOT NULL), SUM(rowid) FILTER (WHERE b > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(b) FILTER (WHERE b > 0 AND b < 100), COUNT(*) FILTER (WHERE typeof(b) = "text") FROM t1;
SELECT GROUP_CONCAT(a, '.') FILTER (WHERE a IS NOT NULL) OVER (ORDER BY a RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING) FROM t1;
SELECT COUNT(*) FILTER (WHERE a IS NOT NULL), SUM(rowid) FILTER (WHERE a > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(a) FILTER (WHERE a > 0 AND a < 100), COUNT(*) FILTER (WHERE typeof(a) = "text") FROM t1;
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
INSERT INTO t1 VALUES (if(-CAST(1 AS CLOB), 1, 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
INSERT INTO t1 DEFAULT VALUES;
SELECT COUNT(a) FROM t1;
SELECT COUNT(*) FILTER (WHERE b IS NOT NULL), SUM(rowid) FILTER (WHERE b > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(b) FILTER (WHERE b > 0 AND b < 100), COUNT(*) FILTER (WHERE typeof(b) = "text") FROM t1;
SELECT GROUP_CONCAT(a, '.') FILTER (WHERE a IS NOT NULL) OVER (ORDER BY a RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING) FROM t1;
SELECT COUNT(*) FILTER (WHERE a IS NOT NULL), SUM(rowid) FILTER (WHERE a > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(a) FILTER (WHERE a > 0 AND a < 100), COUNT(*) FILTER (WHERE typeof(a) = "text") FROM t1;
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
INSERT INTO t1 VALUES (if(-CAST(1 AS CLOB), 1, 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
INSERT INTO t1 DEFAULT VALUES;
SELECT COUNT(a) FROM t1;
SELECT COUNT(*) FILTER (WHERE b IS NOT NULL), SUM(rowid) FILTER (WHERE b > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(b) FILTER (WHERE b > 0 AND b < 100), COUNT(*) FILTER (WHERE typeof(b) = "text") FROM t1;
SELECT GROUP_CONCAT(a, '.') FILTER (WHERE a IS NOT NULL) OVER (ORDER BY a RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING) FROM t1;
SELECT COUNT(*) FILTER (WHERE a IS NOT NULL), SUM(rowid) FILTER (WHERE a > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(a) FILTER (WHERE a > 0 AND a < 100), COUNT(*) FILTER (WHERE typeof(a) = "text") FROM t1;
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
INSERT INTO t1 VALUES (if(-CAST(1 AS CLOB), 1, 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
INSERT INTO t1 DEFAULT VALUES;
SELECT COUNT(a) FROM t1;
SELECT COUNT(*) FILTER (WHERE b IS NOT NULL), SUM(rowid) FILTER (WHERE b > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(b) FILTER (WHERE b > 0 AND b < 100), COUNT(*) FILTER (WHERE typeof(b) = "text") FROM t1;
SELECT GROUP_CONCAT(a, '.') FILTER (WHERE a IS NOT NULL) OVER (ORDER BY a RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING) FROM t1;
SELECT COUNT(*) FILTER (WHERE a IS NOT NULL), SUM(rowid) FILTER (WHERE a > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(a) FILTER (WHERE a > 0 AND a < 100), COUNT(*) FILTER (WHERE typeof(a) = "text") FROM t1;
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
INSERT INTO t1 VALUES (if(-CAST(1 AS CLOB), 1, 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
INSERT INTO t1 DEFAULT VALUES;
SELECT COUNT(a) FROM t1;
SELECT COUNT(*) FILTER (WHERE b IS NOT NULL), SUM(rowid) FILTER (WHERE b > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(b) FILTER (WHERE b > 0 AND b < 100), COUNT(*) FILTER (WHERE typeof(b) = "text") FROM t1;
SELECT GROUP_CONCAT(a, '.') FILTER (WHERE a IS NOT NULL) OVER (ORDER BY a RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING) FROM t1;
SELECT COUNT(*) FILTER (WHERE a IS NOT NULL), SUM(rowid) FILTER (WHERE a > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(a) FILTER (WHERE a > 0 AND a < 100), COUNT(*) FILTER (WHERE typeof(a) = "text") FROM t1;
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
INSERT INTO t1 VALUES (if(-CAST(1 AS CLOB), 1, 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
INSERT INTO t1 DEFAULT VALUES;
SELECT COUNT(a) FROM t1;
SELECT COUNT(*) FILTER (WHERE b IS NOT NULL), SUM(rowid) FILTER (WHERE b > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(b) FILTER (WHERE b > 0 AND b < 100), COUNT(*) FILTER (WHERE typeof(b) = "text") FROM t1;
SELECT GROUP_CONCAT(a, '.') FILTER (WHERE a IS NOT NULL) OVER (ORDER BY a RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING) FROM t1;
SELECT COUNT(*) FILTER (WHERE a IS NOT NULL), SUM(rowid) FILTER (WHERE a > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(a) FILTER (WHERE a > 0 AND a < 100), COUNT(*) FILTER (WHERE typeof(a) = "text") FROM t1;
UPDATE t1 SET d = json_object('k', d) WHERE d IS NOT NULL RETURNING *;
ALTER TABLE t1 RENAME TO t1_r6356;
ANALYZE;
SELECT * FROM t1;
ANALYZE;
INSERT OR IGNORE INTO t1 VALUES ('x', 0, '', '');
SELECT LAG(d, 2) OVER (PARTITION BY d ORDER BY d GROUPS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t1;
ALTER TABLE t1 RENAME COLUMN b TO b_r6680;
REINDEX t1;
DELETE FROM t1 WHERE 0;
INSERT INTO t1 SELECT * FROM t1;
PRAGMA short_column_names = TRUE;
WITH RECURSIVE tree(id, parent, depth) AS (VALUES(1, NULL, 0) UNION ALL SELECT id+1, id, depth+1 FROM tree WHERE depth<62) SELECT * FROM tree;
CREATE TEMPORARY VIEW IF NOT EXISTS v_t1_8626 AS SELECT c FROM t1;
Actual output
addr opcode p1 p2 p3 p4 p5 comment
---- ------------- ---- ---- ---- ------------- -- -------------
0 Init 0 28 0 0 Start at 28
1 ReadCookie 0 3 2 0
2 If 3 5 0 0
3 SetCookie 0 2 4 0
4 SetCookie 0 5 1 0
5 CreateBtree 0 2 1 0 r[2]=root iDb=0 flags=1
6 OpenWrite 0 1 0 5 0 root=1 iDb=0
7 NewRowid 0 1 0 0 r[1]=rowid
8 Blob 6 3 0 0 r[3]= (len=6)
9 Insert 0 3 1 8 intkey=r[1] data=r[3]
10 Close 0 0 0 0
11 Close 0 0 0 0
12 Null 0 4 5 0 r[4..5]=NULL
13 Noop 2 0 4 0
14 OpenWrite 1 1 0 5 0 root=1 iDb=0; sqlite_master
15 SeekRowid 1 17 1 0 intkey=r[1]
16 Rowid 1 5 0 0 r[5]=[P2]=PX rowid of P1
17 IsNull 5 25 0 0 if r[5]==NULL goto 25
18 String8 0 6 0 table 0 r[6]='table'
19 String8 0 7 0 t1 0 r[7]='t1'
20 String8 0 8 0 t1 0 r[8]='t1'
21 SCopy 2 9 0 0 r[9]=r[2]
22 String8 0 10 0 CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT) 0 r[10]='CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT)'
23 MakeRecord 6 5 4 BBBDB 0 r[4]=mkrec(r[6..10])
24 Insert 1 4 5 0 intkey=r[5] data=r[4]
25 SetCookie 0 1 1 0
26 ParseSchema 0 0 0 tbl_name='t1' AND type!='trigger' 0
27 Halt 0 0 0 0
28 Transaction 0 1 0 0 1 usesStmtJournal=1
29 Goto 0 1 0 0
addr opcode p1 p2 p3 p4 p5 comment
---- ------------- ---- ---- ---- ------------- -- -------------
0 Init 0 16 0 0 Start at 16
1 OpenWrite 0 2 0 4 0 root=2 iDb=0; t1
2 SoftNull 2 0 0 0 r[2]=NULL
3 String8 0 3 0 von 0 r[3]='von'
4 Integer 20 4 0 0 r[4]=20
5 Integer 200 5 0 0 r[5]=200
6 Integer 2 1 0 0 r[1]=2
7 NotNull 1 9 0 0 if r[1]!=NULL goto 9
8 NewRowid 0 1 0 0 r[1]=rowid
9 MustBeInt 1 0 0 0
10 Noop 0 0 0 0 uniqueness check for ROWID
11 NotExists 0 13 1 0 intkey=r[1]
12 Halt 1555 2 0 t1.a 2
13 MakeRecord 2 4 6 DBDD 0 r[6]=mkrec(r[2..5])
14 Insert 0 6 1 t1 49 intkey=r[1] data=r[6]
15 Halt 0 0 0 0
16 Transaction 0 1 1 0 1 usesStmtJournal=0
17 Goto 0 1 0 0
addr opcode p1 p2 p3 p4 p5 comment
---- ------------- ---- ---- ---- ------------- -- -------------
0 Init 0 16 0 0 Start at 16
1 OpenWrite 0 2 0 4 0 root=2 iDb=0; t1
2 SoftNull 2 0 0 0 r[2]=NULL
3 String8 0 3 0 Braun 0 r[3]='Braun'
4 Integer 30 4 0 0 r[4]=30
5 Integer 300 5 0 0 r[5]=300
6 Integer 3 1 0 0 r[1]=3
7 NotNull 1 9 0 0 if r[1]!=NULL goto 9
8 NewRowid 0 1 0 0 r[1]=rowid
9 MustBeInt 1 0 0 0
10 Noop 0 0 0 0 uniqueness check for ROWID
11 NotExists 0 13 1 0 intkey=r[1]
12 Halt 1555 2 0 t1.a 2
13 MakeRecord 2 4 6 DBDD 0 r[6]=mkrec(r[2..5])
14 Insert 0 6 1 t1 49 intkey=r[1] data=r[6]
15 Halt 0 0 0 0
16 Transaction 0 1 1 0 1 usesStmtJournal=0
17 Goto 0 1 0 0
addr opcode p1 p2 p3 p4 p5 comment
---- ------------- ---- ---- ---- ------------- -- -------------
0 Init 0 34 0 0 Start at 34
1 Noop 0 33 0 0
2 CreateBtree 0 1 2 0 r[1]=root iDb=0 flags=2
3 OpenWrite 0 1 0 5 0 root=1 iDb=0; sqlite_master
4 String8 0 3 0 index 0 r[3]='index'
5 String8 0 4 0 t1bc 0 r[4]='t1bc'
6 String8 0 5 0 t1 0 r[5]='t1'
7 SCopy 1 6 0 0 r[6]=r[1]
8 String8 0 7 0 CREATE INDEX t1bc ON t1(b, c) 0 r[7]='CREATE INDEX t1bc ON t1(b, c)'
9 NewRowid 0 2 0 0 r[2]=rowid
10 MakeRecord 3 5 8 BBBDB 0 r[8]=mkrec(r[3..7])
11 Insert 0 8 2 24 intkey=r[2] data=r[8]
12 SorterOpen 3 0 2 k(3,,,) 0
13 OpenRead 1 2 0 4 0 root=2 iDb=0; t1
14 Rewind 1 21 0 0
15 Column 1 1 10 0 r[10]=t1.b
16 Column 1 2 11 0 r[11]=t1.c
17 Rowid 1 12 0 0 r[12]=t1.rowid
18 MakeRecord 10 3 9 0 r[9]=mkrec(r[10..12])
19 SorterInsert 3 9 0 0 key=r[9]
20 Next 1 15 0 0
21 OpenWrite 2 1 0 k(3,,,) 17 root=1 iDb=0
22 SorterSort 3 27 0 0
23 SorterData 3 9 2 0 r[9]=data
24 SeekEnd 2 0 0 0
25 IdxInsert 2 9 0 16 key=r[9]
26 SorterNext 3 23 0 0
27 Close 1 0 0 0
28 Close 2 0 0 0
29 Close 3 0 0 0
30 SetCookie 0 1 2 0
31 ParseSchema 0 0 0 name='t1bc' AND type='index' 0
32 Expire 0 1 0 0
33 Halt 0 0 0 0
34 Transaction 0 1 1 0 1 usesStmtJournal=1
35 Goto 0 1 0 0
addr opcode p1 p2 p3 p4 p5 comment
---- ------------- ---- ---- ---- ------------- -- -------------
0 Init 0 1 0 0 Start at 1
1 Expire 1 1 0 0
2 Expire 0 0 0 0
3 Halt 0 0 0 0
CREATE TABLE "t2"("b","c","_ROWID_",PRIMARY KEY("b","c","_ROWID_"))WITHOUT ROWID;
WARNING: writing to an imposter table will corrupt the "t1bc" index!
QUERY PLAN
`--SCAN t2
addr opcode p1 p2 p3 p4 p5 comment
---- ------------- ---- ---- ---- ------------- -- -------------
0 Init 0 9 0 0 Start at 9
1 OpenRead 1 3 0 k(3,,,) 0 root=3 iDb=0; sqlite_autoindex_t2_1
2 Rewind 1 8 1 0 0
3 Column 1 0 1 0 r[1]=t2.b
4 Column 1 1 2 0 r[2]=t2.c
5 Column 1 2 3 0 r[3]=t2._ROWID_
6 ResultRow 1 3 0 0 output=r[1..3]
7 Next 1 3 0 1
8 Halt 0 0 0 0
9 Transaction 0 0 2 0 1 usesStmtJournal=0
10 Goto 0 1 0 0
Braun 30 3
von 20 2
QUERY PLAN
`--SCAN t1 USING COVERING INDEX t1bc
addr opcode p1 p2 p3 p4 p5 comment
---- ------------- ---- ---- ---- ------------- -- -------------
0 Init 0 9 0 0 Start at 9
1 Noop 1 5 0 0
2 OpenRead 2 3 0 k(3,,,) 0 root=3 iDb=0; t1bc
3 Rewind 2 8 1 0 0
4 Column 2 0 1 0 r[1]=t1.b
5 Column 2 1 2 0 r[2]=t1.c
6 ResultRow 1 2 0 0 output=r[1..2]
7 Next 2 4 0 1
8 Halt 0 0 0 0
9 Transaction 0 0 2 0 1 usesStmtJournal=0
10 Goto 0 1 0 0
Braun 30
von 20
Expectation
Flag
-tabs