924 lines
56 KiB
Markdown
924 lines
56 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
|
|
PRAGMA wal_checkpoint('NOOP');
|
|
BEGIN EXCLUSIVE;
|
|
.eqp full
|
|
.vfsinfo
|
|
creATE VIRTUAL TABLE t0 USING fts3("x", "y", "z");
|
|
DROP TABLE t0;
|
|
PRAGMA automatic_index = OFF;
|
|
CREATE TABLE T (
|
|
a TEXT,
|
|
b INTEGER,
|
|
c REAL
|
|
);
|
|
INSERT INTO T VALUES ('a',-(-(exp(1))),2.0), ('a',2,-3.0), ('b',1,4.5);
|
|
SELECT a,b,c,
|
|
SUM(c) OVER (
|
|
PARTITION BY a
|
|
ORDER BY b
|
|
) AS d
|
|
FROM T;
|
|
SELECT COUNT(*) OVER (PARTITION BY c ORDER BY c) FROM T;
|
|
SELECT * FROM (SELECT * FROM (SELECT * FROM T) AS inner1) AS inner2;
|
|
END;
|
|
SELECT * FROM T WHERE EXISTS (SELECT 1 FROM T WHERE +c > 0);
|
|
```
|
|
|
|
## Actual output
|
|
|
|
```sql
|
|
0|-1|-1
|
|
vfs.zName = "unix"
|
|
vfs.iVersion = 3
|
|
vfs.szOsFile = 120
|
|
vfs.mxPathname = 512
|
|
addr opcode p1 p2 p3 p4 p5 comment
|
|
---- ------------- ---- ---- ---- ------------- -- -------------
|
|
0 Init 0 31 0 0 Start at 31
|
|
1 VBegin 0 0 0 0
|
|
2 ReadCookie 0 3 2 0
|
|
3 If 3 6 0 0
|
|
4 SetCookie 0 2 4 0
|
|
5 SetCookie 0 5 1 0
|
|
6 Integer 0 2 0 0 r[2]=0
|
|
7 OpenWrite 0 1 0 5 0 root=1 iDb=0
|
|
8 NewRowid 0 1 0 0 r[1]=rowid
|
|
9 Blob 6 3 0 0 r[3]= (len=6)
|
|
10 Insert 0 3 1 8 intkey=r[1] data=r[3]
|
|
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 t0 0 r[7]='t0'
|
|
20 String8 0 8 0 t0 0 r[8]='t0'
|
|
21 Integer 0 9 0 0 r[9]=0
|
|
22 String8 0 10 0 CREATE VIRTUAL TABLE t0 USING fts3("x", "y", "z") 0 r[10]='CREATE VIRTUAL TABLE t0 USING fts3("x", "y", "z")'
|
|
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 Expire 0 0 0 0
|
|
27 ParseSchema 0 0 0 name='t0' AND sql='CREATE VIRTUAL TABLE t0 USING fts3("x", "y", "z")' 0
|
|
28 String8 0 12 0 t0 0 r[12]='t0'
|
|
29 VCreate 0 12 0 0
|
|
30 Halt 0 0 0 0
|
|
31 Transaction 0 1 0 0 1 usesStmtJournal=1
|
|
32 Goto 0 1 0 0
|
|
addr opcode p1 p2 p3 p4 p5 comment
|
|
---- ------------- ---- ---- ---- ------------- -- -------------
|
|
0 Init 0 16 0 0 Start at 16
|
|
1 VBegin 0 0 0 0
|
|
2 Null 0 1 0 0 r[1]=NULL
|
|
3 OpenWrite 0 1 0 5 0 root=1 iDb=0; sqlite_master
|
|
4 Rewind 0 12 0 0
|
|
5 Column 0 2 2 0 r[2]=sqlite_master.tbl_name
|
|
6 Ne 3 11 2 BINARY-8 82 if r[2]!=r[3] goto 11
|
|
7 Column 0 0 2 0 r[2]=sqlite_master.type
|
|
8 Eq 4 11 2 BINARY-8 82 if r[2]==r[4] goto 11
|
|
9 Rowid 0 5 0 0 r[5]=sqlite_master.rowid
|
|
10 Delete 0 0 0 2
|
|
11 Next 0 5 0 1
|
|
12 VDestroy 0 0 0 t0 0
|
|
13 DropTable 0 0 0 t0 0
|
|
14 SetCookie 0 1 5 0
|
|
15 Halt 0 0 0 0
|
|
16 Transaction 0 1 4 0 1 usesStmtJournal=1
|
|
17 String8 0 3 0 t0 0 r[3]='t0'
|
|
18 String8 0 4 0 trigger 0 r[4]='trigger'
|
|
19 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
|
|
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 T 0 r[7]='T'
|
|
20 String8 0 8 0 T 0 r[8]='T'
|
|
21 SCopy 2 9 0 0 r[9]=r[2]
|
|
22 String8 0 10 0 CREATE TABLE T (
|
|
a TEXT,
|
|
b INTEGER,
|
|
c REAL
|
|
) 0 r[10]='CREATE TABLE T (
|
|
a TEXT,
|
|
b INTEGER,
|
|
c REAL
|
|
)'
|
|
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 6 0
|
|
26 ParseSchema 0 0 0 tbl_name='T' AND type!='trigger' 0
|
|
27 Halt 0 0 0 0
|
|
28 Transaction 0 1 5 0 1 usesStmtJournal=1
|
|
29 Goto 0 1 0 0
|
|
QUERY PLAN
|
|
`--SCAN 3 CONSTANT ROWS
|
|
addr opcode p1 p2 p3 p4 p5 comment
|
|
---- ------------- ---- ---- ---- ------------- -- -------------
|
|
0 Init 0 27 0 0 Start at 27
|
|
1 InitCoroutine 5 20 2 0
|
|
2 String8 0 2 0 a 0 r[2]='a'
|
|
3 Once 0 8 0 0
|
|
4 Integer 0 8 0 0 r[8]=0
|
|
5 Integer 1 10 0 0 r[10]=1
|
|
6 Function 1 10 9 exp(1) 0 r[9]=func(r[10])
|
|
7 Subtract 9 8 7 0 r[7]=r[8]-r[9]
|
|
8 Subtract 7 6 3 0 r[3]=r[6]-r[7]
|
|
9 Real 0 4 0 2 0 r[4]=2
|
|
10 Yield 5 0 0 0
|
|
11 String8 0 2 0 a 0 r[2]='a'
|
|
12 Integer 2 3 0 0 r[3]=2
|
|
13 Real 0 4 0 -3 0 r[4]=-3
|
|
14 Yield 5 0 0 0
|
|
15 String8 0 2 0 b 0 r[2]='b'
|
|
16 Integer 1 3 0 0 r[3]=1
|
|
17 Real 0 4 0 4.5 0 r[4]=4.5
|
|
18 Yield 5 0 0 0
|
|
19 EndCoroutine 5 0 0 0
|
|
20 OpenWrite 0 2 0 3 0 root=2 iDb=0; T
|
|
21 Yield 5 26 0 0
|
|
22 NewRowid 0 1 0 0 r[1]=rowid
|
|
23 MakeRecord 2 3 11 BDE 0 r[11]=mkrec(r[2..4])
|
|
24 Insert 0 11 1 T 57 intkey=r[1] data=r[11]
|
|
25 Goto 0 21 0 0
|
|
26 Halt 0 0 0 0
|
|
27 Transaction 0 1 6 0 1 usesStmtJournal=0
|
|
28 Integer 0 6 0 0 r[6]=0
|
|
29 Goto 0 1 0 0
|
|
QUERY PLAN
|
|
|--CO-ROUTINE (subquery-2)
|
|
| |--SCAN T
|
|
| `--USE TEMP B-TREE FOR ORDER BY
|
|
`--SCAN (subquery-2)
|
|
addr opcode p1 p2 p3 p4 p5 comment
|
|
---- ------------- ---- ---- ---- ------------- -- -------------
|
|
0 Init 0 112 0 0 Start at 112
|
|
1 Null 0 1 0 0 r[1]=NULL
|
|
2 InitCoroutine 3 29 3 0 (subquery-2)
|
|
3 SorterOpen 6 9 0 k(2,B,B) 0
|
|
4 OpenRead 0 2 0 3 0 root=2 iDb=0; T
|
|
5 Rewind 0 17 0 0
|
|
6 Column 0 0 6 0 r[6]=T.a
|
|
7 Column 0 1 7 0 r[7]=T.b
|
|
8 Column 0 2 8 0 r[8]=T.c
|
|
9 RealAffinity 8 0 0 0
|
|
10 Column 0 2 9 0 r[9]=T.c
|
|
11 RealAffinity 9 0 0 0
|
|
12 Column 0 0 4 0 r[4]=T.a
|
|
13 Column 0 1 5 0 r[5]=T.b
|
|
14 MakeRecord 4 6 12 0 r[12]=mkrec(r[4..9])
|
|
15 SorterInsert 6 12 4 6 0 key=r[12]
|
|
16 Next 0 6 0 1
|
|
17 OpenPseudo 7 13 9 0 9 columns in r[13]
|
|
18 SorterSort 6 28 0 0
|
|
19 SorterData 6 13 7 0 r[13]=data
|
|
20 Column 7 5 11 0 r[11]=[P3]=PX cursor P1 column P2
|
|
21 Column 7 1 10 0 r[10]=[P3]=PX cursor P1 column P2
|
|
22 Column 7 0 9 0 r[9]=[P3]=PX cursor P1 column P2
|
|
23 Column 7 4 8 0 r[8]=[P3]=PX cursor P1 column P2
|
|
24 Column 7 3 7 0 r[7]=[P3]=PX cursor P1 column P2
|
|
25 Column 7 2 6 0 r[6]=[P3]=PX cursor P1 column P2
|
|
26 Yield 3 0 0 0
|
|
27 SorterNext 6 19 0 0
|
|
28 EndCoroutine 3 0 0 0
|
|
29 OpenEphemeral 1 6 0 0 nColumn=6
|
|
30 OpenDup 2 1 0 0
|
|
31 OpenDup 3 1 0 0
|
|
32 OpenDup 4 1 0 0
|
|
33 Null 0 14 14 0 r[14..14]=NULL
|
|
34 Integer 1 15 0 0 r[15]=1
|
|
35 InitCoroutine 3 0 3 0
|
|
36 Yield 3 80 0 0 next row of
|
|
37 Copy 6 17 0 0 r[17]=r[6]
|
|
38 Copy 7 18 0 0 r[18]=r[7]
|
|
39 Copy 8 19 0 0 r[19]=r[8]
|
|
40 Copy 9 20 0 0 r[20]=r[9]
|
|
41 Copy 10 21 0 0 r[21]=r[10]
|
|
42 Copy 11 22 0 0 r[22]=r[11]
|
|
43 MakeRecord 17 6 23 0 r[23]=mkrec(r[17..22])
|
|
44 Compare 20 14 1 k(1,B) 0 r[20] <-> r[14]
|
|
45 Jump 46 48 46 0
|
|
46 Gosub 29 81 0 0 call flush_partition
|
|
47 Copy 20 14 0 0 r[14]=r[20]
|
|
48 NewRowid 2 24 0 0 r[24]=rowid
|
|
49 Insert 2 23 24 0 intkey=r[24] data=r[23]
|
|
50 Ne 15 59 24 0 if r[24]!=r[15] goto 59
|
|
51 Null 0 1 0 0 r[1]=NULL
|
|
52 Rewind 1 1 0 0
|
|
53 Rewind 4 1 0 0
|
|
54 Copy 21 25 0 0 r[25]=r[21]
|
|
55 Copy 25 26 0 0 r[26]=r[25]
|
|
56 Copy 25 27 0 0 r[27]=r[25]
|
|
57 Copy 25 28 0 0 r[28]=r[25]
|
|
58 Goto 0 79 0 0
|
|
59 Compare 25 21 1 k(1,B) 0 r[25] <-> r[21]
|
|
60 Jump 61 79 61 0
|
|
61 Copy 21 25 0 0 r[25]=r[21]
|
|
62 Column 4 5 30 0 r[30]=[P3]=PX cursor P1 column P2
|
|
63 AggStep 0 30 1 sum(1) 1 accum=r[1] step(r[30])
|
|
64 Next 4 66 0 0
|
|
65 Goto 0 70 0 0
|
|
66 Column 4 4 31 0 r[31]=[P3]=PX cursor P1 column P2
|
|
67 Compare 28 31 1 k(1,B) 0 r[28] <-> r[31]
|
|
68 Jump 69 62 69 0
|
|
69 Copy 31 28 0 0 r[28]=r[31]
|
|
70 AggValue 1 1 2 sum(1) 0 r[2]=value N=1
|
|
71 Gosub 16 103 0 0
|
|
72 Delete 1 0 0 2
|
|
73 Next 1 75 0 0
|
|
74 Goto 0 79 0 0
|
|
75 Column 1 4 31 0 r[31]=[P3]=PX cursor P1 column P2
|
|
76 Compare 27 31 1 k(1,B) 0 r[27] <-> r[31]
|
|
77 Jump 78 71 78 0
|
|
78 Copy 31 27 0 0 r[27]=r[31]
|
|
79 Goto 0 36 0 0
|
|
80 Integer 101 29 0 0 r[29]=101
|
|
81 Rewind 2 100 0 0
|
|
82 Column 4 5 30 0 r[30]=[P3]=PX cursor P1 column P2
|
|
83 AggStep 0 30 1 sum(1) 1 accum=r[1] step(r[30])
|
|
84 Next 4 86 0 0
|
|
85 Goto 0 90 0 0
|
|
86 Column 4 4 31 0 r[31]=[P3]=PX cursor P1 column P2
|
|
87 Compare 28 31 1 k(1,B) 0 r[28] <-> r[31]
|
|
88 Jump 89 82 89 0
|
|
89 Copy 31 28 0 0 r[28]=r[31]
|
|
90 AggValue 1 1 2 sum(1) 0 r[2]=value N=1
|
|
91 Gosub 16 103 0 0
|
|
92 Delete 1 0 0 2
|
|
93 Next 1 95 0 0
|
|
94 Goto 0 100 0 0
|
|
95 Column 1 4 31 0 r[31]=[P3]=PX cursor P1 column P2
|
|
96 Compare 27 31 1 k(1,B) 0 r[27] <-> r[31]
|
|
97 Jump 98 91 98 0
|
|
98 Copy 31 27 0 0 r[27]=r[31]
|
|
99 Goto 0 90 0 0
|
|
100 ResetSorter 1 0 0 0
|
|
101 Return 29 0 0 0
|
|
102 Goto 0 111 0 0
|
|
103 Noop 0 0 0 0 inner-loop subroutine
|
|
104 Column 1 0 32 0 r[32]=.a
|
|
105 Column 1 1 33 0 r[33]=.b
|
|
106 Column 1 2 34 0 r[34]=.c
|
|
107 RealAffinity 34 0 0 0
|
|
108 Copy 2 35 0 0 r[35]=r[2]
|
|
109 ResultRow 32 4 0 0 output=r[32..35]
|
|
110 Return 16 0 0 0 end inner-loop subroutine
|
|
111 Halt 0 0 0 0
|
|
112 Transaction 0 0 6 0 1 usesStmtJournal=0
|
|
113 Goto 0 1 0 0
|
|
a|2|-3.0|-3.0
|
|
a|2.71828182845905|2.0|-1.0
|
|
b|1|4.5|4.5
|
|
QUERY PLAN
|
|
|--CO-ROUTINE (subquery-2)
|
|
| |--SCAN T
|
|
| `--USE TEMP B-TREE FOR ORDER BY
|
|
`--SCAN (subquery-2)
|
|
addr opcode p1 p2 p3 p4 p5 comment
|
|
---- ------------- ---- ---- ---- ------------- -- -------------
|
|
0 Init 0 96 0 0 Start at 96
|
|
1 Null 0 1 0 0 r[1]=NULL
|
|
2 InitCoroutine 3 23 3 0 (subquery-2)
|
|
3 SorterOpen 6 5 0 k(2,B,B) 0
|
|
4 OpenRead 0 2 0 3 0 root=2 iDb=0; T
|
|
5 Rewind 0 15 0 0
|
|
6 Column 0 2 6 0 r[6]=T.c
|
|
7 RealAffinity 6 0 0 0
|
|
8 Column 0 2 4 0 r[4]=T.c
|
|
9 RealAffinity 4 0 0 0
|
|
10 Column 0 2 5 0 r[5]=T.c
|
|
11 RealAffinity 5 0 0 0
|
|
12 MakeRecord 4 3 8 0 r[8]=mkrec(r[4..6])
|
|
13 SorterInsert 6 8 4 3 0 key=r[8]
|
|
14 Next 0 6 0 1
|
|
15 OpenPseudo 7 9 5 0 5 columns in r[9]
|
|
16 SorterSort 6 22 0 0
|
|
17 SorterData 6 9 7 0 r[9]=data
|
|
18 Column 7 1 7 0 r[7]=[P3]=PX cursor P1 column P2
|
|
19 Column 7 2 6 0 r[6]=[P3]=PX cursor P1 column P2
|
|
20 Yield 3 0 0 0
|
|
21 SorterNext 6 17 0 0
|
|
22 EndCoroutine 3 0 0 0
|
|
23 OpenEphemeral 1 2 0 0 nColumn=2
|
|
24 OpenDup 2 1 0 0
|
|
25 OpenDup 3 1 0 0
|
|
26 OpenDup 4 1 0 0
|
|
27 Null 0 10 10 0 r[10..10]=NULL
|
|
28 Integer 1 11 0 0 r[11]=1
|
|
29 InitCoroutine 3 0 3 0
|
|
30 Yield 3 69 0 0 next row of
|
|
31 Copy 6 13 0 0 r[13]=r[6]
|
|
32 Copy 7 14 0 0 r[14]=r[7]
|
|
33 MakeRecord 13 2 15 0 r[15]=mkrec(r[13..14])
|
|
34 Compare 13 10 1 k(1,B) 0 r[13] <-> r[10]
|
|
35 Jump 36 38 36 0
|
|
36 Gosub 21 70 0 0 call flush_partition
|
|
37 Copy 13 10 0 0 r[10]=r[13]
|
|
38 NewRowid 2 16 0 0 r[16]=rowid
|
|
39 Insert 2 15 16 0 intkey=r[16] data=r[15]
|
|
40 Ne 11 49 16 0 if r[16]!=r[11] goto 49
|
|
41 Null 0 1 0 0 r[1]=NULL
|
|
42 Rewind 1 1 0 0
|
|
43 Rewind 4 1 0 0
|
|
44 Copy 14 17 0 0 r[17]=r[14]
|
|
45 Copy 17 18 0 0 r[18]=r[17]
|
|
46 Copy 17 19 0 0 r[19]=r[17]
|
|
47 Copy 17 20 0 0 r[20]=r[17]
|
|
48 Goto 0 68 0 0
|
|
49 Compare 17 14 1 k(1,B) 0 r[17] <-> r[14]
|
|
50 Jump 51 68 51 0
|
|
51 Copy 14 17 0 0 r[17]=r[14]
|
|
52 AggStep 0 22 1 count(0) 0 accum=r[1] step(r[22])
|
|
53 Next 4 55 0 0
|
|
54 Goto 0 59 0 0
|
|
55 Column 4 1 22 0 r[22]=[P3]=PX cursor P1 column P2
|
|
56 Compare 20 22 1 k(1,B) 0 r[20] <-> r[22]
|
|
57 Jump 58 52 58 0
|
|
58 Copy 22 20 0 0 r[20]=r[22]
|
|
59 AggValue 1 0 2 count(0) 0 r[2]=value N=0
|
|
60 Gosub 12 91 0 0
|
|
61 Delete 1 0 0 2
|
|
62 Next 1 64 0 0
|
|
63 Goto 0 68 0 0
|
|
64 Column 1 1 22 0 r[22]=[P3]=PX cursor P1 column P2
|
|
65 Compare 19 22 1 k(1,B) 0 r[19] <-> r[22]
|
|
66 Jump 67 60 67 0
|
|
67 Copy 22 19 0 0 r[19]=r[22]
|
|
68 Goto 0 30 0 0
|
|
69 Integer 89 21 0 0 r[21]=89
|
|
70 Rewind 2 88 0 0
|
|
71 AggStep 0 22 1 count(0) 0 accum=r[1] step(r[22])
|
|
72 Next 4 74 0 0
|
|
73 Goto 0 78 0 0
|
|
74 Column 4 1 22 0 r[22]=[P3]=PX cursor P1 column P2
|
|
75 Compare 20 22 1 k(1,B) 0 r[20] <-> r[22]
|
|
76 Jump 77 71 77 0
|
|
77 Copy 22 20 0 0 r[20]=r[22]
|
|
78 AggValue 1 0 2 count(0) 0 r[2]=value N=0
|
|
79 Gosub 12 91 0 0
|
|
80 Delete 1 0 0 2
|
|
81 Next 1 83 0 0
|
|
82 Goto 0 88 0 0
|
|
83 Column 1 1 22 0 r[22]=[P3]=PX cursor P1 column P2
|
|
84 Compare 19 22 1 k(1,B) 0 r[19] <-> r[22]
|
|
85 Jump 86 79 86 0
|
|
86 Copy 22 19 0 0 r[19]=r[22]
|
|
87 Goto 0 78 0 0
|
|
88 ResetSorter 1 0 0 0
|
|
89 Return 21 0 0 0
|
|
90 Goto 0 95 0 0
|
|
91 Noop 0 0 0 0 inner-loop subroutine
|
|
92 Copy 2 23 0 0 r[23]=r[2]
|
|
93 ResultRow 23 1 0 0 output=r[23]
|
|
94 Return 12 0 0 0 end inner-loop subroutine
|
|
95 Halt 0 0 0 0
|
|
96 Transaction 0 0 6 0 1 usesStmtJournal=0
|
|
97 Goto 0 1 0 0
|
|
1
|
|
1
|
|
1
|
|
QUERY PLAN
|
|
`--SCAN T
|
|
addr opcode p1 p2 p3 p4 p5 comment
|
|
---- ------------- ---- ---- ---- ------------- -- -------------
|
|
0 Init 0 10 0 0 Start at 10
|
|
1 OpenRead 2 2 0 3 0 root=2 iDb=0; T
|
|
2 Rewind 2 9 0 0
|
|
3 Column 2 0 1 0 r[1]=T.a
|
|
4 Column 2 1 2 0 r[2]=T.b
|
|
5 Column 2 2 3 0 r[3]=T.c
|
|
6 RealAffinity 3 0 0 0
|
|
7 ResultRow 1 3 0 0 output=r[1..3]
|
|
8 Next 2 3 0 1
|
|
9 Halt 0 0 0 0
|
|
10 Transaction 0 0 6 0 1 usesStmtJournal=0
|
|
11 Goto 0 1 0 0
|
|
a|2.71828182845905|2.0
|
|
a|2|-3.0
|
|
b|1|4.5
|
|
addr opcode p1 p2 p3 p4 p5 comment
|
|
---- ------------- ---- ---- ---- ------------- -- -------------
|
|
0 Init 0 1 0 0 Start at 1
|
|
1 AutoCommit 1 0 0 0
|
|
2 Halt 0 0 0 0
|
|
QUERY PLAN
|
|
|--SCAN T
|
|
`--SCALAR SUBQUERY 1
|
|
`--SCAN T
|
|
addr opcode p1 p2 p3 p4 p5 comment
|
|
---- ------------- ---- ---- ---- ------------- -- -------------
|
|
0 Init 0 24 0 0 Start at 24
|
|
1 OpenRead 0 2 0 3 0 root=2 iDb=0; T
|
|
2 Rewind 0 23 0 0
|
|
3 BeginSubrtn 0 2 0 0 r[2]=NULL
|
|
4 Once 0 15 0 0
|
|
5 Integer 0 3 0 0 r[3]=0; Init EXISTS result
|
|
6 Integer 1 4 0 0 r[4]=1; LIMIT counter
|
|
7 OpenRead 1 2 0 3 0 root=2 iDb=0; T
|
|
8 Rewind 1 15 0 0
|
|
9 Column 1 2 5 0 r[5]=T.c
|
|
10 RealAffinity 5 0 0 0
|
|
11 Le 6 14 5 BINARY-8 80 if r[5]<=r[6] goto 14
|
|
12 Integer 1 3 0 0 r[3]=1
|
|
13 DecrJumpZero 4 15 0 0 if (--r[4])==0 goto 15
|
|
14 Next 1 9 0 1
|
|
15 Return 2 4 1 0
|
|
16 IfNot 3 22 1 0
|
|
17 Column 0 0 8 0 r[8]=T.a
|
|
18 Column 0 1 9 0 r[9]=T.b
|
|
19 Column 0 2 10 0 r[10]=T.c
|
|
20 RealAffinity 10 0 0 0
|
|
21 ResultRow 8 3 0 0 output=r[8..10]
|
|
22 Next 0 3 0 1
|
|
23 Halt 0 0 0 0
|
|
24 Transaction 0 0 6 0 1 usesStmtJournal=0
|
|
25 Integer 0 6 0 0 r[6]=0
|
|
26 Goto 0 1 0 0
|
|
a|2.71828182845905|2.0
|
|
a|2|-3.0
|
|
b|1|4.5
|
|
```
|
|
|
|
## Expectation
|
|
|
|
```sql
|
|
0|-1|-1
|
|
vfs.zName = "unix"
|
|
vfs.iVersion = 3
|
|
vfs.szOsFile = 120
|
|
vfs.mxPathname = 512
|
|
addr opcode p1 p2 p3 p4 p5 comment
|
|
---- ------------- ---- ---- ---- ------------- -- -------------
|
|
0 Init 0 31 0 0 Start at 31
|
|
1 VBegin 0 0 0 0
|
|
2 ReadCookie 0 3 2 0
|
|
3 If 3 6 0 0
|
|
4 SetCookie 0 2 4 0
|
|
5 SetCookie 0 5 1 0
|
|
6 Integer 0 2 0 0 r[2]=0
|
|
7 OpenWrite 0 1 0 5 0 root=1 iDb=0
|
|
8 NewRowid 0 1 0 0 r[1]=rowid
|
|
9 Blob 6 3 0 0 r[3]= (len=6)
|
|
10 Insert 0 3 1 8 intkey=r[1] data=r[3]
|
|
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]= rowid of 1
|
|
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 t0 0 r[7]='t0'
|
|
20 String8 0 8 0 t0 0 r[8]='t0'
|
|
21 Integer 0 9 0 0 r[9]=0
|
|
22 String8 0 10 0 CREATE VIRTUAL TABLE t0 USING fts3("x", "y", "z") 0 r[10]='CREATE VIRTUAL TABLE t0 USING fts3("x", "y", "z")'
|
|
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 Expire 0 0 0 0
|
|
27 ParseSchema 0 0 0 name='t0' AND sql='CREATE VIRTUAL TABLE t0 USING fts3("x", "y", "z")' 0
|
|
28 String8 0 12 0 t0 0 r[12]='t0'
|
|
29 VCreate 0 12 0 0
|
|
30 Halt 0 0 0 0
|
|
31 Transaction 0 1 0 0 1 usesStmtJournal=1
|
|
32 Goto 0 1 0 0
|
|
addr opcode p1 p2 p3 p4 p5 comment
|
|
---- ------------- ---- ---- ---- ------------- -- -------------
|
|
0 Init 0 16 0 0 Start at 16
|
|
1 VBegin 0 0 0 0
|
|
2 Null 0 1 0 0 r[1]=NULL
|
|
3 OpenWrite 0 1 0 5 0 root=1 iDb=0; sqlite_master
|
|
4 Rewind 0 12 0 0
|
|
5 Column 0 2 2 0 r[2]= cursor 0 column 2
|
|
6 Ne 3 11 2 BINARY-8 82 if r[2]!=r[3] goto 11
|
|
7 Column 0 0 2 0 r[2]= cursor 0 column 0
|
|
8 Eq 4 11 2 BINARY-8 82 if r[2]==r[4] goto 11
|
|
9 Rowid 0 5 0 0 r[5]=sqlite_master.rowid
|
|
10 Delete 0 0 0 2
|
|
11 Next 0 5 0 1
|
|
12 VDestroy 0 0 0 t0 0
|
|
13 DropTable 0 0 0 t0 0
|
|
14 SetCookie 0 1 5 0
|
|
15 Halt 0 0 0 0
|
|
16 Transaction 0 1 4 0 1 usesStmtJournal=1
|
|
17 String8 0 3 0 t0 0 r[3]='t0'
|
|
18 String8 0 4 0 trigger 0 r[4]='trigger'
|
|
19 Goto 0 1 0 0
|
|
addr opcode p1 p2 p3 p4 p5 comment
|
|
---- ------------- ---- ---- ---- ------------- -- -------------
|
|
0 Init 0 4 0 0 Start at 4
|
|
1 Expire 1 1 0 0
|
|
2 Expire 0 0 0 0
|
|
3 Halt 0 0 0 0
|
|
4 Goto 0 1 0 0
|
|
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]= rowid of 1
|
|
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 T 0 r[7]='T'
|
|
20 String8 0 8 0 T 0 r[8]='T'
|
|
21 Copy 2 9 0 0 r[9]=r[2]
|
|
22 String8 0 10 0 CREATE TABLE T (
|
|
a TEXT,
|
|
b INTEGER,
|
|
c REAL
|
|
) 0 r[10]='CREATE TABLE T (
|
|
a TEXT,
|
|
b INTEGER,
|
|
c REAL
|
|
)'
|
|
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 6 0
|
|
26 ParseSchema 0 0 0 tbl_name='T' AND type!='trigger' 0
|
|
27 Halt 0 0 0 0
|
|
28 Transaction 0 1 5 0 1 usesStmtJournal=1
|
|
29 Goto 0 1 0 0
|
|
QUERY PLAN
|
|
`--SCAN 3-ROW VALUES CLAUSE
|
|
addr opcode p1 p2 p3 p4 p5 comment
|
|
---- ------------- ---- ---- ---- ------------- -- -------------
|
|
0 Init 0 28 0 0 Start at 28
|
|
1 InitCoroutine 1 20 2 0
|
|
2 String8 0 4 0 a 0 r[4]='a'
|
|
3 Once 0 8 0 0
|
|
4 Integer 0 12 0 0 r[12]=0
|
|
5 Integer 1 14 0 0 r[14]=1
|
|
6 Function 1 14 13 exp(1) 0 r[13]=func(r[14])
|
|
7 Subtract 13 12 11 0 r[11]=r[12]-r[13]
|
|
8 Subtract 11 10 5 0 r[5]=r[10]-r[11]
|
|
9 Real 0 6 0 2 0 r[6]=2
|
|
10 Yield 1 0 0 0
|
|
11 String8 0 4 0 a 0 r[4]='a'
|
|
12 Integer 2 5 0 0 r[5]=2
|
|
13 Real 0 6 0 -3 0 r[6]=-3
|
|
14 Yield 1 0 0 0
|
|
15 String8 0 4 0 b 0 r[4]='b'
|
|
16 Integer 1 5 0 0 r[5]=1
|
|
17 Real 0 6 0 4.5 0 r[6]=4.5
|
|
18 Yield 1 0 0 0
|
|
19 EndCoroutine 1 0 0 0
|
|
20 Explain 20 0 0 SCAN 3-ROW VALUES CLAUSE 0
|
|
21 OpenWrite 0 2 0 3 0 root=2 iDb=0; T
|
|
22 Yield 1 27 0 0
|
|
23 NewRowid 0 3 0 0 r[3]=rowid
|
|
24 MakeRecord 4 3 19 BDE 0 r[19]=mkrec(r[4..6])
|
|
25 Insert 0 19 3 T 57 intkey=r[3] data=r[19]
|
|
26 Goto 0 22 0 0
|
|
27 Halt 0 0 0 0
|
|
28 Transaction 0 1 6 0 1 usesStmtJournal=1
|
|
29 Integer 0 10 0 0 r[10]=0
|
|
30 Goto 0 1 0 0
|
|
QUERY PLAN
|
|
|--CO-ROUTINE (subquery-2)
|
|
| |--SCAN T
|
|
| `--USE TEMP B-TREE FOR ORDER BY
|
|
`--SCAN (subquery-2)
|
|
addr opcode p1 p2 p3 p4 p5 comment
|
|
---- ------------- ---- ---- ---- ------------- -- -------------
|
|
0 Init 0 116 0 0 Start at 116
|
|
1 Null 0 1 0 0 r[1]=NULL
|
|
2 InitCoroutine 3 32 3 0 (subquery-2)
|
|
3 Explain 3 0 0 CO-ROUTINE (subquery-2) 0
|
|
4 SorterOpen 6 9 0 k(2,B,B) 0
|
|
5 OpenRead 0 2 0 3 0 root=2 iDb=0; T
|
|
6 Explain 6 3 216 SCAN T 0
|
|
7 Rewind 0 19 0 0
|
|
8 Column 0 0 6 0 r[6]= cursor 0 column 0
|
|
9 Column 0 1 7 0 r[7]= cursor 0 column 1
|
|
10 Column 0 2 8 0 r[8]= cursor 0 column 2
|
|
11 RealAffinity 8 0 0 0
|
|
12 Column 0 2 9 0 r[9]= cursor 0 column 2
|
|
13 RealAffinity 9 0 0 0
|
|
14 Column 0 0 4 0 r[4]= cursor 0 column 0
|
|
15 Column 0 1 5 0 r[5]= cursor 0 column 1
|
|
16 MakeRecord 4 6 12 0 r[12]=mkrec(r[4..9])
|
|
17 SorterInsert 6 12 4 6 0 key=r[12]
|
|
18 Next 0 8 0 1
|
|
19 Explain 19 3 0 USE TEMP B-TREE FOR ORDER BY 0
|
|
20 OpenPseudo 7 13 9 0 9 columns in r[13]
|
|
21 SorterSort 6 31 0 0
|
|
22 SorterData 6 13 7 0 r[13]=data
|
|
23 Column 7 5 11 0 r[11]= cursor 7 column 5;
|
|
24 Column 7 1 10 0 r[10]= cursor 7 column 1;
|
|
25 Column 7 0 9 0 r[9]= cursor 7 column 0;
|
|
26 Column 7 4 8 0 r[8]= cursor 7 column 4;
|
|
27 Column 7 3 7 0 r[7]= cursor 7 column 3;
|
|
28 Column 7 2 6 0 r[6]= cursor 7 column 2;
|
|
29 Yield 3 0 0 0
|
|
30 SorterNext 6 22 0 0
|
|
31 EndCoroutine 3 0 0 0 end (subquery-2)
|
|
32 OpenEphemeral 1 6 0 0 nColumn=6
|
|
33 OpenDup 2 1 0 0
|
|
34 OpenDup 3 1 0 0
|
|
35 OpenDup 4 1 0 0
|
|
36 Null 0 14 14 0 r[14..14]=NULL
|
|
37 Integer 1 15 0 0 r[15]=1
|
|
38 Explain 38 0 216 SCAN (subquery-2) 0
|
|
39 InitCoroutine 3 0 3 0
|
|
40 Yield 3 84 0 0 next row of
|
|
41 Copy 6 17 0 2 r[17]=r[6]
|
|
42 Copy 7 18 0 2 r[18]=r[7]
|
|
43 Copy 8 19 0 2 r[19]=r[8]
|
|
44 Copy 9 20 0 2 r[20]=r[9]
|
|
45 Copy 10 21 0 2 r[21]=r[10]
|
|
46 Copy 11 22 0 2 r[22]=r[11]
|
|
47 MakeRecord 17 6 23 0 r[23]=mkrec(r[17..22])
|
|
48 Compare 20 14 1 k(1,B) 0 r[20] <-> r[14]
|
|
49 Jump 50 52 50 0
|
|
50 Gosub 29 85 0 0 call flush_partition
|
|
51 Copy 20 14 0 0 r[14]=r[20]
|
|
52 NewRowid 2 24 0 0 r[24]=rowid
|
|
53 Insert 2 23 24 0 intkey=r[24] data=r[23]
|
|
54 Ne 15 63 24 0 if r[24]!=r[15] goto 63
|
|
55 Null 0 1 0 0 r[1]=NULL
|
|
56 Rewind 1 0 0 0
|
|
57 Rewind 4 0 0 0
|
|
58 Copy 21 25 0 0 r[25]=r[21]
|
|
59 Copy 25 26 0 0 r[26]=r[25]
|
|
60 Copy 25 27 0 0 r[27]=r[25]
|
|
61 Copy 25 28 0 0 r[28]=r[25]
|
|
62 Goto 0 83 0 0
|
|
63 Compare 25 21 1 k(1,B) 0 r[25] <-> r[21]
|
|
64 Jump 65 83 65 0
|
|
65 Copy 21 25 0 0 r[25]=r[21]
|
|
66 Column 4 5 30 0 r[30]= cursor 4 column 5
|
|
67 AggStep 0 30 1 sum(1) 1 accum=r[1] step(r[30])
|
|
68 Next 4 70 0 0
|
|
69 Goto 0 74 0 0
|
|
70 Column 4 4 31 0 r[31]= cursor 4 column 4
|
|
71 Compare 28 31 1 k(1,B) 0 r[28] <-> r[31]
|
|
72 Jump 73 66 73 0
|
|
73 Copy 31 28 0 0 r[28]=r[31]
|
|
74 AggValue 1 1 2 sum(1) 0 r[2]=value N=1
|
|
75 Gosub 16 107 0 0
|
|
76 Delete 1 0 0 2
|
|
77 Next 1 79 0 0
|
|
78 Goto 0 83 0 0
|
|
79 Column 1 4 31 0 r[31]= cursor 1 column 4
|
|
80 Compare 27 31 1 k(1,B) 0 r[27] <-> r[31]
|
|
81 Jump 82 75 82 0
|
|
82 Copy 31 27 0 0 r[27]=r[31]
|
|
83 Goto 0 40 0 0
|
|
84 Integer 105 29 0 0 r[29]=105
|
|
85 Rewind 2 104 0 0
|
|
86 Column 4 5 30 0 r[30]= cursor 4 column 5
|
|
87 AggStep 0 30 1 sum(1) 1 accum=r[1] step(r[30])
|
|
88 Next 4 90 0 0
|
|
89 Goto 0 94 0 0
|
|
90 Column 4 4 31 0 r[31]= cursor 4 column 4
|
|
91 Compare 28 31 1 k(1,B) 0 r[28] <-> r[31]
|
|
92 Jump 93 86 93 0
|
|
93 Copy 31 28 0 0 r[28]=r[31]
|
|
94 AggValue 1 1 2 sum(1) 0 r[2]=value N=1
|
|
95 Gosub 16 107 0 0
|
|
96 Delete 1 0 0 2
|
|
97 Next 1 99 0 0
|
|
98 Goto 0 104 0 0
|
|
99 Column 1 4 31 0 r[31]= cursor 1 column 4
|
|
100 Compare 27 31 1 k(1,B) 0 r[27] <-> r[31]
|
|
101 Jump 102 95 102 0
|
|
102 Copy 31 27 0 0 r[27]=r[31]
|
|
103 Goto 0 94 0 0
|
|
104 ResetSorter 1 0 0 0
|
|
105 Return 29 0 0 0
|
|
106 Goto 0 115 0 0
|
|
107 Noop 0 0 0 0 inner-loop subroutine
|
|
108 Column 1 0 32 0 r[32]= cursor 1 column 0
|
|
109 Column 1 1 33 0 r[33]= cursor 1 column 1
|
|
110 Column 1 2 34 0 r[34]= cursor 1 column 2
|
|
111 RealAffinity 34 0 0 0
|
|
112 Copy 2 35 0 0 r[35]=r[2]
|
|
113 ResultRow 32 4 0 0 output=r[32..35]
|
|
114 Return 16 0 0 0 end inner-loop subroutine
|
|
115 Halt 0 0 0 0
|
|
116 Transaction 0 0 6 0 1 usesStmtJournal=0
|
|
117 Goto 0 1 0 0
|
|
a|2|-3.0|-3.0
|
|
a|2.71828182845905|2.0|-1.0
|
|
b|1|4.5|4.5
|
|
QUERY PLAN
|
|
|--CO-ROUTINE (subquery-2)
|
|
| |--SCAN T
|
|
| `--USE TEMP B-TREE FOR ORDER BY
|
|
`--SCAN (subquery-2)
|
|
addr opcode p1 p2 p3 p4 p5 comment
|
|
---- ------------- ---- ---- ---- ------------- -- -------------
|
|
0 Init 0 100 0 0 Start at 100
|
|
1 Null 0 1 0 0 r[1]=NULL
|
|
2 InitCoroutine 3 26 3 0 (subquery-2)
|
|
3 Explain 3 0 0 CO-ROUTINE (subquery-2) 0
|
|
4 SorterOpen 6 5 0 k(2,B,B) 0
|
|
5 OpenRead 0 2 0 3 0 root=2 iDb=0; T
|
|
6 Explain 6 3 216 SCAN T 0
|
|
7 Rewind 0 17 0 0
|
|
8 Column 0 2 6 0 r[6]= cursor 0 column 2
|
|
9 RealAffinity 6 0 0 0
|
|
10 Column 0 2 4 0 r[4]= cursor 0 column 2
|
|
11 RealAffinity 4 0 0 0
|
|
12 Column 0 2 5 0 r[5]= cursor 0 column 2
|
|
13 RealAffinity 5 0 0 0
|
|
14 MakeRecord 4 3 8 0 r[8]=mkrec(r[4..6])
|
|
15 SorterInsert 6 8 4 3 0 key=r[8]
|
|
16 Next 0 8 0 1
|
|
17 Explain 17 3 0 USE TEMP B-TREE FOR ORDER BY 0
|
|
18 OpenPseudo 7 9 5 0 5 columns in r[9]
|
|
19 SorterSort 6 25 0 0
|
|
20 SorterData 6 9 7 0 r[9]=data
|
|
21 Column 7 1 7 0 r[7]= cursor 7 column 1;
|
|
22 Column 7 2 6 0 r[6]= cursor 7 column 2;
|
|
23 Yield 3 0 0 0
|
|
24 SorterNext 6 20 0 0
|
|
25 EndCoroutine 3 0 0 0 end (subquery-2)
|
|
26 OpenEphemeral 1 2 0 0 nColumn=2
|
|
27 OpenDup 2 1 0 0
|
|
28 OpenDup 3 1 0 0
|
|
29 OpenDup 4 1 0 0
|
|
30 Null 0 10 10 0 r[10..10]=NULL
|
|
31 Integer 1 11 0 0 r[11]=1
|
|
32 Explain 32 0 216 SCAN (subquery-2) 0
|
|
33 InitCoroutine 3 0 3 0
|
|
34 Yield 3 73 0 0 next row of
|
|
35 Copy 6 13 0 2 r[13]=r[6]
|
|
36 Copy 7 14 0 2 r[14]=r[7]
|
|
37 MakeRecord 13 2 15 0 r[15]=mkrec(r[13..14])
|
|
38 Compare 13 10 1 k(1,B) 0 r[13] <-> r[10]
|
|
39 Jump 40 42 40 0
|
|
40 Gosub 21 74 0 0 call flush_partition
|
|
41 Copy 13 10 0 0 r[10]=r[13]
|
|
42 NewRowid 2 16 0 0 r[16]=rowid
|
|
43 Insert 2 15 16 0 intkey=r[16] data=r[15]
|
|
44 Ne 11 53 16 0 if r[16]!=r[11] goto 53
|
|
45 Null 0 1 0 0 r[1]=NULL
|
|
46 Rewind 1 0 0 0
|
|
47 Rewind 4 0 0 0
|
|
48 Copy 14 17 0 0 r[17]=r[14]
|
|
49 Copy 17 18 0 0 r[18]=r[17]
|
|
50 Copy 17 19 0 0 r[19]=r[17]
|
|
51 Copy 17 20 0 0 r[20]=r[17]
|
|
52 Goto 0 72 0 0
|
|
53 Compare 17 14 1 k(1,B) 0 r[17] <-> r[14]
|
|
54 Jump 55 72 55 0
|
|
55 Copy 14 17 0 0 r[17]=r[14]
|
|
56 AggStep 0 22 1 count(0) 0 accum=r[1] step(r[22])
|
|
57 Next 4 59 0 0
|
|
58 Goto 0 63 0 0
|
|
59 Column 4 1 22 0 r[22]= cursor 4 column 1
|
|
60 Compare 20 22 1 k(1,B) 0 r[20] <-> r[22]
|
|
61 Jump 62 56 62 0
|
|
62 Copy 22 20 0 0 r[20]=r[22]
|
|
63 AggValue 1 0 2 count(0) 0 r[2]=value N=0
|
|
64 Gosub 12 95 0 0
|
|
65 Delete 1 0 0 2
|
|
66 Next 1 68 0 0
|
|
67 Goto 0 72 0 0
|
|
68 Column 1 1 22 0 r[22]= cursor 1 column 1
|
|
69 Compare 19 22 1 k(1,B) 0 r[19] <-> r[22]
|
|
70 Jump 71 64 71 0
|
|
71 Copy 22 19 0 0 r[19]=r[22]
|
|
72 Goto 0 34 0 0
|
|
73 Integer 93 21 0 0 r[21]=93
|
|
74 Rewind 2 92 0 0
|
|
75 AggStep 0 22 1 count(0) 0 accum=r[1] step(r[22])
|
|
76 Next 4 78 0 0
|
|
77 Goto 0 82 0 0
|
|
78 Column 4 1 22 0 r[22]= cursor 4 column 1
|
|
79 Compare 20 22 1 k(1,B) 0 r[20] <-> r[22]
|
|
80 Jump 81 75 81 0
|
|
81 Copy 22 20 0 0 r[20]=r[22]
|
|
82 AggValue 1 0 2 count(0) 0 r[2]=value N=0
|
|
83 Gosub 12 95 0 0
|
|
84 Delete 1 0 0 2
|
|
85 Next 1 87 0 0
|
|
86 Goto 0 92 0 0
|
|
87 Column 1 1 22 0 r[22]= cursor 1 column 1
|
|
88 Compare 19 22 1 k(1,B) 0 r[19] <-> r[22]
|
|
89 Jump 90 83 90 0
|
|
90 Copy 22 19 0 0 r[19]=r[22]
|
|
91 Goto 0 82 0 0
|
|
92 ResetSorter 1 0 0 0
|
|
93 Return 21 0 0 0
|
|
94 Goto 0 99 0 0
|
|
95 Noop 0 0 0 0 inner-loop subroutine
|
|
96 Copy 2 23 0 0 r[23]=r[2]
|
|
97 ResultRow 23 1 0 0 output=r[23]
|
|
98 Return 12 0 0 0 end inner-loop subroutine
|
|
99 Halt 0 0 0 0
|
|
100 Transaction 0 0 6 0 1 usesStmtJournal=0
|
|
101 Goto 0 1 0 0
|
|
1
|
|
1
|
|
1
|
|
QUERY PLAN
|
|
`--SCAN T
|
|
addr opcode p1 p2 p3 p4 p5 comment
|
|
---- ------------- ---- ---- ---- ------------- -- -------------
|
|
0 Init 0 11 0 0 Start at 11
|
|
1 OpenRead 2 2 0 3 0 root=2 iDb=0; T
|
|
2 Explain 2 0 216 SCAN T 0
|
|
3 Rewind 2 10 0 0
|
|
4 Column 2 0 1 0 r[1]= cursor 2 column 0
|
|
5 Column 2 1 2 0 r[2]= cursor 2 column 1
|
|
6 Column 2 2 3 0 r[3]= cursor 2 column 2
|
|
7 RealAffinity 3 0 0 0
|
|
8 ResultRow 1 3 0 0 output=r[1..3]
|
|
9 Next 2 4 0 1
|
|
10 Halt 0 0 0 0
|
|
11 Transaction 0 0 6 0 1 usesStmtJournal=0
|
|
12 Goto 0 1 0 0
|
|
a|2.71828182845905|2.0
|
|
a|2|-3.0
|
|
b|1|4.5
|
|
addr opcode p1 p2 p3 p4 p5 comment
|
|
---- ------------- ---- ---- ---- ------------- -- -------------
|
|
0 Init 0 3 0 0 Start at 3
|
|
1 AutoCommit 1 0 0 0
|
|
2 Halt 0 0 0 0
|
|
3 Goto 0 1 0 0
|
|
QUERY PLAN
|
|
|--SCAN T
|
|
`--SCAN T EXISTS
|
|
addr opcode p1 p2 p3 p4 p5 comment
|
|
---- ------------- ---- ---- ---- ------------- -- -------------
|
|
0 Init 0 20 0 0 Start at 20
|
|
1 IfNot 1 19 1 0
|
|
2 OpenRead 0 2 0 3 0 root=2 iDb=0; T
|
|
3 OpenRead 1 2 0 3 0 root=2 iDb=0; T
|
|
4 Explain 4 0 216 SCAN T 0
|
|
5 Rewind 0 19 0 0
|
|
6 Explain 6 0 216 SCAN T EXISTS 0
|
|
7 Rewind 1 19 0 0
|
|
8 Column 1 2 2 0 r[2]= cursor 1 column 2
|
|
9 RealAffinity 2 0 0 0
|
|
10 Le 3 17 2 BINARY-8 80 if r[2]<=r[3] goto 17
|
|
11 Column 0 0 4 0 r[4]= cursor 0 column 0
|
|
12 Column 0 1 5 0 r[5]= cursor 0 column 1
|
|
13 Column 0 2 6 0 r[6]= cursor 0 column 2
|
|
14 RealAffinity 6 0 0 0
|
|
15 ResultRow 4 3 0 0 output=r[4..6]
|
|
16 Goto 0 18 0 0 EXISTS break
|
|
17 Next 1 8 0 1
|
|
18 Next 0 6 0 1
|
|
19 Halt 0 0 0 0
|
|
20 Transaction 0 0 6 0 1 usesStmtJournal=0
|
|
21 Integer 1 1 0 0 r[1]=1
|
|
22 Integer 0 3 0 0 r[3]=0
|
|
23 Goto 0 1 0 0
|
|
a|2.71828182845905|2.0
|
|
a|2|-3.0
|
|
b|1|4.5
|
|
```
|
|
|
|
## Flag
|
|
|
|
```
|
|
|
|
```
|
|
|