Files
ast-project/part1/results/2/bug_7ae0b646-0ba9-49f1-876d-3574fc83f07a_logic.md
2026-06-24 13:47:14 +02:00

894 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
.eqp full
CREATE TABLE T (
a TEXT,
b TEXT,
c REAL
);
INSERT INTO T VALUES ('a','b',CAST(1.5 AS BIGINT)), ('a','c',-2.25), ('b','b',4.75);
SELECT a,
SUM(CASE WHEN b='b' THEN c ELSE 0 END) AS d,
SUM(CASE WHEN b='c' THEN c ELSE 0 END) AS e
FROM T
GROUP BY a;
UPDATE T SET a = '' WHERE a BETWEEN 0 AND 100 RETURNING *;
REINDEX T;
INSERT OR REPLACE INTO T VALUES ('', 'x', 'x');
SELECT MAX(c) OVER (PARTITION BY c ORDER BY c RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE NO OTHERS) FROM T;
DROP TABLE IF EXISTS T;
ANALYZE;
```
## Actual output
```sql
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 TEXT,
c REAL
) 0 r[10]='CREATE TABLE T (
a TEXT,
b TEXT,
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 1 0
26 ParseSchema 0 0 0 tbl_name='T' 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
QUERY PLAN
`--SCAN 3 CONSTANT ROWS
addr opcode p1 p2 p3 p4 p5 comment
---- ------------- ---- ---- ---- ------------- -- -------------
0 Init 0 23 0 0 Start at 23
1 InitCoroutine 5 16 2 0
2 String8 0 2 0 a 0 r[2]='a'
3 String8 0 3 0 b 0 r[3]='b'
4 Real 0 4 0 1.5 0 r[4]=1.5
5 Cast 4 68 0 0 affinity(r[4])
6 Yield 5 0 0 0
7 String8 0 2 0 a 0 r[2]='a'
8 String8 0 3 0 c 0 r[3]='c'
9 Real 0 4 0 -2.25 0 r[4]=-2.25
10 Yield 5 0 0 0
11 String8 0 2 0 b 0 r[2]='b'
12 String8 0 3 0 b 0 r[3]='b'
13 Real 0 4 0 4.75 0 r[4]=4.75
14 Yield 5 0 0 0
15 EndCoroutine 5 0 0 0
16 OpenWrite 0 2 0 3 0 root=2 iDb=0; T
17 Yield 5 22 0 0
18 NewRowid 0 1 0 0 r[1]=rowid
19 MakeRecord 2 3 6 BBE 0 r[6]=mkrec(r[2..4])
20 Insert 0 6 1 T 57 intkey=r[1] data=r[6]
21 Goto 0 17 0 0
22 Halt 0 0 0 0
23 Transaction 0 1 1 0 1 usesStmtJournal=0
24 Goto 0 1 0 0
QUERY PLAN
|--SCAN T
`--USE TEMP B-TREE FOR GROUP BY
addr opcode p1 p2 p3 p4 p5 comment
---- ------------- ---- ---- ---- ------------- -- -------------
0 Init 0 57 0 0 Start at 57
1 SorterOpen 1 3 0 k(1,B) 0
2 Integer 0 7 0 0 r[7]=0; clear abort flag
3 Null 0 10 10 0 r[10..10]=NULL
4 Gosub 9 53 0 0
5 OpenRead 0 2 0 3 0 root=2 iDb=0; T
6 Rewind 0 14 0 0
7 Column 0 0 12 0 r[12]=T.a
8 Column 0 1 13 0 r[13]=T.b
9 Column 0 2 14 0 r[14]=T.c
10 RealAffinity 14 0 0 0
11 MakeRecord 12 3 15 0 r[15]=mkrec(r[12..14])
12 SorterInsert 1 15 0 0 key=r[15]
13 Next 0 7 0 1
14 OpenPseudo 2 15 3 0 3 columns in r[15]
15 SorterSort 1 56 0 0 GROUP BY sort
16 SorterData 1 15 2 0 r[15]=data
17 Column 2 0 11 0 r[11]=[P3]=PX cursor P1 column P2
18 Compare 10 11 1 k(1,B) 0 r[10] <-> r[11]
19 Jump 20 24 20 0
20 Move 11 10 1 0 r[10]=r[11]
21 Gosub 8 46 0 0 output one row
22 IfPos 7 56 0 0 if r[7]>0 then r[7]-=0, goto 56; check abort flag
23 Gosub 9 53 0 0 reset accumulator
24 Column 2 1 17 0 r[17]=T.b
25 Ne 18 29 17 BINARY-8 82 if r[17]!=r[18] goto 29
26 Column 2 2 16 0 r[16]=T.c
27 RealAffinity 16 0 0 0
28 Goto 0 30 0 0
29 Integer 0 16 0 0 r[16]=0
30 AggStep 0 16 2 sum(1) 1 accum=r[2] step(r[16])
31 Column 2 1 17 0 r[17]=T.b
32 Ne 19 36 17 BINARY-8 82 if r[17]!=r[19] goto 36
33 Column 2 2 16 0 r[16]=T.c
34 RealAffinity 16 0 0 0
35 Goto 0 37 0 0
36 Integer 0 16 0 0 r[16]=0
37 AggStep 0 16 3 sum(1) 1 accum=r[3] step(r[16])
38 If 6 40 0 0
39 Column 2 0 1 0 r[1]=T.a
40 Integer 1 6 0 0 r[6]=1; indicate data in accumulator
41 SorterNext 1 16 0 0
42 Gosub 8 46 0 0 output final row
43 Goto 0 56 0 0
44 Integer 1 7 0 0 r[7]=1; set abort flag
45 Return 8 0 0 0
46 IfPos 6 48 0 0 if r[6]>0 then r[6]-=0, goto 48; Groupby result generator entry point
47 Return 8 0 0 0
48 AggFinal 2 1 0 sum(1) 0 accum=r[2] N=1
49 AggFinal 3 1 0 sum(1) 0 accum=r[3] N=1
50 Copy 1 20 2 0 r[20..22]=r[1..3]
51 ResultRow 20 3 0 0 output=r[20..22]
52 Return 8 0 0 0 end groupby result generator
53 Null 0 1 5 0 r[1..5]=NULL
54 Integer 0 6 0 0 r[6]=0; indicate accumulator empty
55 Return 9 0 0 0
56 Halt 0 0 0 0
57 Transaction 0 0 1 0 1 usesStmtJournal=0
58 String8 0 18 0 b 0 r[18]='b'
59 String8 0 19 0 c 0 r[19]='c'
60 Goto 0 1 0 0
a|1.0|-2.25
b|4.75|0
QUERY PLAN
`--SCAN T
addr opcode p1 p2 p3 p4 p5 comment
---- ------------- ---- ---- ---- ------------- -- -------------
0 Init 0 41 0 0 Start at 41
1 Null 0 1 2 0 r[1..2]=NULL
2 OpenEphemeral 1 0 1 0 nColumn=0
3 OpenRead 0 2 0 1 0 root=2 iDb=0; T
4 Rewind 0 11 0 0
5 Column 0 0 10 0 r[10]=T.a
6 Lt 12 10 10 BINARY-8 82 if r[10]<r[12] goto 10
7 Gt 13 10 10 BINARY-8 82 if r[10]>r[13] goto 10
8 Rowid 0 2 0 0 r[2]=[P2]=PX rowid of P1
9 Insert 1 1 2 0 intkey=r[2] data=r[1]
10 Next 0 5 0 1
11 OpenWrite 0 2 0 3 0 root=2 iDb=0; T
12 Rewind 1 33 0 0
13 Rowid 1 2 0 0 r[2]=[P2]=PX rowid of P1
14 NotExists 0 32 2 0 intkey=r[2]
15 Column 0 0 3 0 r[3]=T.a
16 Column 0 1 4 0 r[4]=T.b
17 Column 0 2 5 0 r[5]=T.c
18 RealAffinity 5 0 0 0
19 Copy 2 6 0 0 r[6]=r[2]
20 String8 0 7 0 0 r[7]=''
21 Column 0 1 8 0 r[8]=T.b
22 Column 0 2 9 0 r[9]=T.c
23 RealAffinity 9 0 0 0
24 MakeRecord 7 3 14 BBE 0 r[14]=mkrec(r[7..9])
25 Insert 0 14 6 T 5 intkey=r[6] data=r[14]
26 SCopy 7 15 0 0 r[15]=r[7]
27 SCopy 8 16 0 0 r[16]=r[8]
28 SCopy 9 17 0 0 r[17]=r[9]
29 MakeRecord 15 3 18 0 r[18]=mkrec(r[15..17])
30 NewRowid 3 19 0 0 r[19]=rowid
31 Insert 3 18 19 0 intkey=r[19] data=r[18]
32 Next 1 13 0 0
33 FkCheck 0 0 0 0
34 Rewind 3 40 0 0
35 Column 3 0 15 0 r[15]=[P3]=PX cursor P1 column P2
36 Column 3 1 16 0 r[16]=[P3]=PX cursor P1 column P2
37 Column 3 2 17 0 r[17]=[P3]=PX cursor P1 column P2
38 ResultRow 15 3 0 0 output=r[15..17]
39 Next 3 35 0 0
40 Halt 0 0 0 0
41 Transaction 0 1 1 0 1 usesStmtJournal=0
42 Integer 0 12 0 0 r[12]=0
43 Integer 100 13 0 0 r[13]=100
44 OpenEphemeral 3 3 0 0 nColumn=3
45 Goto 0 1 0 0
addr opcode p1 p2 p3 p4 p5 comment
---- ------------- ---- ---- ---- ------------- -- -------------
0 Init 0 1 0 0 Start at 1
1 Halt 0 0 0 0
addr opcode p1 p2 p3 p4 p5 comment
---- ------------- ---- ---- ---- ------------- -- -------------
0 Init 0 9 0 0 Start at 9
1 OpenWrite 0 2 0 3 0 root=2 iDb=0; T
2 String8 0 2 0 0 r[2]=''
3 String8 0 3 0 x 0 r[3]='x'
4 String8 0 4 0 x 0 r[4]='x'
5 NewRowid 0 1 0 0 r[1]=rowid
6 MakeRecord 2 3 5 BBE 0 r[5]=mkrec(r[2..4])
7 Insert 0 5 1 T 57 intkey=r[1] data=r[5]
8 Halt 0 0 0 0
9 Transaction 0 1 1 0 1 usesStmtJournal=0
10 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 26 3 0 (subquery-2)
3 SorterOpen 6 6 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 2 6 0 r[6]=T.c
7 RealAffinity 6 0 0 0
8 Column 0 2 7 0 r[7]=T.c
9 RealAffinity 7 0 0 0
10 Column 0 2 4 0 r[4]=T.c
11 RealAffinity 4 0 0 0
12 Column 0 2 5 0 r[5]=T.c
13 RealAffinity 5 0 0 0
14 MakeRecord 4 4 9 0 r[9]=mkrec(r[4..7])
15 SorterInsert 6 9 4 4 0 key=r[9]
16 Next 0 6 0 1
17 OpenPseudo 7 10 6 0 6 columns in r[10]
18 SorterSort 6 25 0 0
19 SorterData 6 10 7 0 r[10]=data
20 Column 7 1 8 0 r[8]=[P3]=PX cursor P1 column P2
21 Column 7 3 7 0 r[7]=[P3]=PX cursor P1 column P2
22 Column 7 2 6 0 r[6]=[P3]=PX cursor P1 column P2
23 Yield 3 0 0 0
24 SorterNext 6 19 0 0
25 EndCoroutine 3 0 0 0
26 OpenEphemeral 1 3 0 0 nColumn=3
27 OpenDup 2 1 0 0
28 OpenDup 3 1 0 0
29 OpenDup 4 1 0 0
30 Null 0 11 11 0 r[11..11]=NULL
31 Integer 1 12 0 0 r[12]=1
32 Integer 1 13 0 0 r[13]=1
33 Integer 0 14 0 0 r[14]=0
34 OpenDup 8 1 0 0
35 InitCoroutine 3 0 3 0
36 Yield 3 68 0 0 next row of
37 Copy 6 16 0 0 r[16]=r[6]
38 Copy 7 17 0 0 r[17]=r[7]
39 Copy 8 18 0 0 r[18]=r[8]
40 MakeRecord 16 3 19 0 r[19]=mkrec(r[16..18])
41 Compare 16 11 1 k(1,B) 0 r[16] <-> r[11]
42 Jump 43 45 43 0
43 Gosub 25 69 0 0 call flush_partition
44 Copy 16 11 0 0 r[11]=r[16]
45 NewRowid 2 20 0 0 r[20]=rowid
46 Insert 2 19 20 0 intkey=r[20] data=r[19]
47 Ne 12 57 20 0 if r[20]!=r[12] goto 57
48 Null 0 1 0 0 r[1]=NULL
49 Rewind 3 1 0 0
50 Rewind 1 1 0 0
51 Rewind 4 1 0 0
52 Copy 17 21 0 0 r[21]=r[17]
53 Copy 21 22 0 0 r[22]=r[21]
54 Copy 21 23 0 0 r[23]=r[21]
55 Copy 21 24 0 0 r[24]=r[21]
56 Goto 0 67 0 0
57 Compare 21 17 1 k(1,B) 0 r[21] <-> r[17]
58 Jump 59 67 59 0
59 Copy 17 21 0 0 r[21]=r[17]
60 AddImm 14 1 0 0 r[14]=r[14]+1
61 Next 4 63 0 0
62 Goto 0 67 0 0
63 Column 4 1 27 0 r[27]=[P3]=PX cursor P1 column P2
64 Compare 24 27 1 k(1,B) 0 r[24] <-> r[27]
65 Jump 66 60 66 0
66 Copy 27 24 0 0 r[24]=r[27]
67 Goto 0 36 0 0
68 Integer 109 25 0 0 r[25]=109
69 Rewind 2 106 0 0
70 AddImm 14 1 0 0 r[14]=r[14]+1
71 Next 4 73 0 0
72 Goto 0 77 0 0
73 Column 4 1 27 0 r[27]=[P3]=PX cursor P1 column P2
74 Compare 24 27 1 k(1,B) 0 r[24] <-> r[27]
75 Jump 76 70 76 0
76 Copy 27 24 0 0 r[24]=r[27]
77 Rowid 1 27 0 0 r[27]=[P2]=PX rowid of P1
78 Column 1 1 29 0 r[29]=[P3]=PX cursor P1 column P2
79 Null 0 1 0 0 r[1]=NULL
80 SeekGE 8 87 13 0 key=r[13]
81 Rowid 8 28 0 0 r[28]=[P2]=PX rowid of P1
82 Gt 14 87 28 0 if r[28]>r[14] goto 87
83 Column 8 2 26 0 r[26]=[P3]=PX cursor P1 column P2
84 CollSeq 0 0 0 BINARY-8 0
85 AggStep 0 26 1 max(1) 1 accum=r[1] step(r[26])
86 Next 8 81 0 0
87 AggFinal 1 1 0 max(1) 0 accum=r[1] N=1
88 Copy 1 2 0 0 r[2]=r[1]
89 Null 0 1 0 0 r[1]=NULL
90 Gosub 15 111 0 0
91 Next 1 93 0 0
92 Goto 0 106 0 0
93 Column 1 1 29 0 r[29]=[P3]=PX cursor P1 column P2
94 Compare 23 29 1 k(1,B) 0 r[23] <-> r[29]
95 Jump 96 77 96 0
96 Copy 29 23 0 0 r[23]=r[29]
97 AddImm 13 1 0 0 r[13]=r[13]+1
98 Delete 3 0 0 2
99 Next 3 101 0 0
100 Goto 0 105 0 0
101 Column 3 1 29 0 r[29]=[P3]=PX cursor P1 column P2
102 Compare 22 29 1 k(1,B) 0 r[22] <-> r[29]
103 Jump 104 97 104 0
104 Copy 29 22 0 0 r[22]=r[29]
105 Goto 0 77 0 0
106 ResetSorter 1 0 0 0
107 Integer 1 13 0 0 r[13]=1
108 Integer 0 14 0 0 r[14]=0
109 Return 25 0 0 0
110 Goto 0 115 0 0
111 Noop 0 0 0 0 inner-loop subroutine
112 Copy 2 31 0 0 r[31]=r[2]
113 ResultRow 31 1 0 0 output=r[31]
114 Return 15 0 0 0 end inner-loop subroutine
115 Halt 0 0 0 0
116 Transaction 0 0 1 0 1 usesStmtJournal=0
117 Goto 0 1 0 0
-2.25
1.0
4.75
x
addr opcode p1 p2 p3 p4 p5 comment
---- ------------- ---- ---- ---- ------------- -- -------------
0 Init 0 37 0 0 Start at 37
1 Null 0 1 0 0 r[1]=NULL
2 OpenWrite 0 1 0 5 0 root=1 iDb=0; sqlite_master
3 Rewind 0 11 0 0
4 Column 0 2 2 0 r[2]=sqlite_master.tbl_name
5 Ne 3 10 2 BINARY-8 82 if r[2]!=r[3] goto 10
6 Column 0 0 2 0 r[2]=sqlite_master.type
7 Eq 4 10 2 BINARY-8 82 if r[2]==r[4] goto 10
8 Rowid 0 5 0 0 r[5]=sqlite_master.rowid
9 Delete 0 0 0 2
10 Next 0 4 0 1
11 Destroy 2 2 0 0
12 Null 0 6 7 0 r[6..7]=NULL
13 OpenEphemeral 2 0 6 0 nColumn=0
14 IfNot 2 22 1 0
15 OpenRead 1 1 0 4 0 root=1 iDb=0; sqlite_master
16 Rewind 1 22 0 0
17 Column 1 3 13 0 r[13]=sqlite_master.rootpage
18 Ne 2 21 13 BINARY-8 84 if r[13]!=r[2] goto 21
19 Rowid 1 7 0 0 r[7]=[P2]=PX rowid of P1
20 Insert 2 6 7 0 intkey=r[7] data=r[6]
21 Next 1 17 0 1
22 OpenWrite 1 1 0 5 0 root=1 iDb=0; sqlite_master
23 Rewind 2 34 0 0
24 Rowid 2 7 0 0 r[7]=[P2]=PX rowid of P1
25 NotExists 1 33 7 0 intkey=r[7]
26 Column 1 0 8 0 r[8]=sqlite_master.type
27 Column 1 1 9 0 r[9]=sqlite_master.name
28 Column 1 2 10 0 r[10]=sqlite_master.tbl_name
29 Integer 2 11 0 0 r[11]=2
30 Column 1 4 12 0 r[12]=sqlite_master.sql
31 MakeRecord 8 5 15 BBBDB 0 r[15]=mkrec(r[8..12])
32 Insert 1 15 7 0 intkey=r[7] data=r[15]
33 Next 2 24 0 0
34 DropTable 0 0 0 T 0
35 SetCookie 0 1 2 0
36 Halt 0 0 0 0
37 Transaction 0 1 1 0 1 usesStmtJournal=1
38 String8 0 3 0 T 0 r[3]='T'
39 String8 0 4 0 trigger 0 r[4]='trigger'
40 Goto 0 1 0 0
addr opcode p1 p2 p3 p4 p5 comment
---- ------------- ---- ---- ---- ------------- -- -------------
0 Init 0 31 0 0 Start at 31
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 4 0 4 0
14 OpenWrite 3 1 0 5 0 root=1 iDb=0; sqlite_master
15 SeekRowid 3 17 1 0 intkey=r[1]
16 Rowid 3 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 sqlite_stat1 0 r[7]='sqlite_stat1'
20 String8 0 8 0 sqlite_stat1 0 r[8]='sqlite_stat1'
21 SCopy 2 9 0 0 r[9]=r[2]
22 String8 0 10 0 CREATE TABLE sqlite_stat1(tbl,idx,stat) 0 r[10]='CREATE TABLE sqlite_stat1(tbl,idx,stat)'
23 MakeRecord 6 5 4 BBBDB 0 r[4]=mkrec(r[6..10])
24 Insert 3 4 5 0 intkey=r[5] data=r[4]
25 SetCookie 0 1 3 0
26 ParseSchema 0 0 0 tbl_name='sqlite_stat1' AND type!='trigger' 0
27 OpenWrite 0 2 0 3 16 root=2 iDb=0; sqlite_stat1
28 LoadAnalysis 0 0 0 0
29 Expire 0 0 0 0
30 Halt 0 0 0 0
31 Transaction 0 1 2 0 1 usesStmtJournal=1
32 Goto 0 1 0 0
```
## Expectation
```sql
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 TEXT,
c REAL
) 0 r[10]='CREATE TABLE T (
a TEXT,
b TEXT,
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 1 0
26 ParseSchema 0 0 0 tbl_name='T' 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
QUERY PLAN
`--COMPOUND QUERY
|--LEFT-MOST SUBQUERY
| `--SCAN CONSTANT ROW
`--UNION ALL
`--SCAN 2-ROW VALUES CLAUSE
addr opcode p1 p2 p3 p4 p5 comment
---- ------------- ---- ---- ---- ------------- -- -------------
0 Init 0 37 0 0 Start at 37
1 InitCoroutine 1 11 2 0
2 String8 0 4 0 a 0 r[4]='a'
3 String8 0 5 0 c 0 r[5]='c'
4 Real 0 6 0 -2.25 0 r[6]=-2.25
5 Yield 1 0 0 0
6 String8 0 4 0 b 0 r[4]='b'
7 String8 0 5 0 b 0 r[5]='b'
8 Real 0 6 0 4.75 0 r[6]=4.75
9 Yield 1 0 0 0
10 EndCoroutine 1 0 0 0
11 InitCoroutine 14 30 12 0
12 Explain 12 0 0 COMPOUND QUERY 0
13 Explain 13 12 0 LEFT-MOST SUBQUERY 0
14 Explain 14 13 0 SCAN CONSTANT ROW 0
15 String8 0 11 0 a 0 r[11]='a'
16 String8 0 12 0 b 0 r[12]='b'
17 Real 0 13 0 1.5 0 r[13]=1.5
18 Cast 13 68 0 0 affinity(r[13])
19 Yield 14 0 0 0
20 Explain 20 12 0 UNION ALL 0
21 Explain 21 20 216 SCAN 2-ROW VALUES CLAUSE 0
22 InitCoroutine 1 0 2 0
23 Yield 1 29 0 0 next row of 2-ROW VALUES CLAUSE
24 Copy 4 11 0 2 r[11]=r[4]
25 Copy 5 12 0 2 r[12]=r[5]
26 Copy 6 13 0 2 r[13]=r[6]
27 Yield 14 0 0 0
28 Goto 0 23 0 0
29 EndCoroutine 14 0 0 0
30 OpenWrite 1 2 0 3 0 root=2 iDb=0; T
31 Yield 14 36 0 0
32 NewRowid 1 10 0 0 r[10]=rowid
33 MakeRecord 11 3 15 BBE 0 r[15]=mkrec(r[11..13])
34 Insert 1 15 10 T 57 intkey=r[10] data=r[15]
35 Goto 0 31 0 0
36 Halt 0 0 0 0
37 Transaction 0 1 1 0 1 usesStmtJournal=0
38 Goto 0 1 0 0
QUERY PLAN
|--SCAN T
`--USE TEMP B-TREE FOR GROUP BY
addr opcode p1 p2 p3 p4 p5 comment
---- ------------- ---- ---- ---- ------------- -- -------------
0 Init 0 60 0 0 Start at 60
1 SorterOpen 1 3 0 k(1,B) 0
2 Integer 0 2 0 0 r[2]=0; clear abort flag
3 Null 0 5 5 0 r[5..5]=NULL
4 Gosub 4 56 0 0
5 OpenRead 0 2 0 3 0 root=2 iDb=0; T
6 Explain 6 0 216 SCAN T 0
7 Rewind 0 16 0 0
8 Explain 8 0 0 USE TEMP B-TREE FOR GROUP BY 0
9 Column 0 0 12 0 r[12]= cursor 0 column 0
10 Column 0 1 13 0 r[13]= cursor 0 column 1
11 Column 0 2 14 0 r[14]= cursor 0 column 2
12 RealAffinity 14 0 0 0
13 MakeRecord 12 3 15 0 r[15]=mkrec(r[12..14])
14 SorterInsert 1 15 0 0 key=r[15]
15 Next 0 8 0 1
16 OpenPseudo 2 15 3 0 3 columns in r[15]
17 SorterSort 1 59 0 0 GROUP BY sort
18 SorterData 1 15 2 0 r[15]=data
19 Column 2 0 6 0 r[6]= cursor 2 column 0
20 Compare 5 6 1 k(1,B) 0 r[5] <-> r[6]
21 Jump 22 26 22 0
22 Gosub 3 48 0 0 output one row of 1
23 Move 6 5 1 0 r[5]=r[6]
24 IfPos 2 59 0 0 if r[2]>0 then r[2]-=0, goto 59; check abort flag
25 Gosub 4 56 0 0 reset accumulator 1
26 Column 2 1 17 0 r[17]=T.b
27 Ne 18 31 17 BINARY-8 82 if r[17]!=r[18] goto 31
28 Column 2 2 16 0 r[16]=T.c
29 RealAffinity 16 0 0 0
30 Goto 0 32 0 0
31 Integer 0 16 0 0 r[16]=0
32 AggStep 0 16 10 sum(1) 1 accum=r[10] step(r[16])
33 Column 2 1 17 0 r[17]=T.b
34 Ne 19 38 17 BINARY-8 82 if r[17]!=r[19] goto 38
35 Column 2 2 16 0 r[16]=T.c
36 RealAffinity 16 0 0 0
37 Goto 0 39 0 0
38 Integer 0 16 0 0 r[16]=0
39 AggStep 0 16 11 sum(1) 1 accum=r[11] step(r[16])
40 If 1 42 0 0
41 Column 2 0 7 0 r[7]=T.a
42 Integer 1 1 0 0 r[1]=1; indicate data in accumulator 1
43 SorterNext 1 18 0 0
44 Gosub 3 48 0 0 output final row of 1
45 Goto 0 59 0 0
46 Integer 1 2 0 0 r[2]=1; set abort flag
47 Return 3 0 0 0
48 IfPos 1 50 0 0 if r[1]>0 then r[1]-=0, goto 50; Groupby result generator entry point 1
49 Return 3 0 0 0
50 AggFinal 10 1 0 sum(1) 0 accum=r[10] N=1
51 AggFinal 11 1 0 sum(1) 0 accum=r[11] N=1
52 Copy 7 20 0 0 r[20]=r[7]
53 Copy 10 21 1 0 r[21..22]=r[10..11]
54 ResultRow 20 3 0 0 output=r[20..22]
55 Return 3 0 0 0 end groupby result generator 1
56 Null 0 7 11 0 r[7..11]=NULL
57 Integer 0 1 0 0 r[1]=0; indicate accumulator 1 empty
58 Return 4 0 0 0
59 Halt 0 0 0 0
60 Transaction 0 0 1 0 1 usesStmtJournal=0
61 Null 0 5 5 0 r[5..5]=NULL
62 String8 0 18 0 b 0 r[18]='b'
63 String8 0 19 0 c 0 r[19]='c'
64 Goto 0 1 0 0
a|1.0|-2.25
b|4.75|0
QUERY PLAN
`--SCAN T
addr opcode p1 p2 p3 p4 p5 comment
---- ------------- ---- ---- ---- ------------- -- -------------
0 Init 0 43 0 0 Start at 43
1 Null 0 1 2 0 r[1..2]=NULL
2 OpenEphemeral 1 0 1 0 nColumn=0
3 OpenRead 0 2 0 1 0 root=2 iDb=0; T
4 Explain 4 0 216 SCAN T 0
5 Rewind 0 12 0 0
6 Column 0 0 10 0 r[10]= cursor 0 column 0
7 Lt 12 11 10 BINARY-8 82 if r[10]<r[12] goto 11
8 Gt 13 11 10 BINARY-8 82 if r[10]>r[13] goto 11
9 Rowid 0 2 0 0 r[2]= rowid of 0
10 Insert 1 1 2 0 intkey=r[2] data=r[1]
11 Next 0 6 0 1
12 OpenWrite 0 2 0 3 0 root=2 iDb=0; T
13 Rewind 1 35 0 0
14 Rowid 1 2 0 0 r[2]= rowid of 1
15 NotExists 0 34 2 0 intkey=r[2]
16 Column 0 0 3 0 r[3]= cursor 0 column 0
17 Column 0 1 4 0 r[4]= cursor 0 column 1
18 Column 0 2 5 0 r[5]= cursor 0 column 2
19 RealAffinity 5 0 0 0
20 Copy 2 6 0 0 r[6]=r[2]
21 String8 0 7 0 0 r[7]=''
22 Column 0 1 8 0 r[8]= cursor 0 column 1
23 Column 0 2 9 0 r[9]= cursor 0 column 2
24 RealAffinity 9 0 0 0
25 MakeRecord 7 3 14 BBE 0 r[14]=mkrec(r[7..9])
26 Insert 0 14 6 T 5 intkey=r[6] data=r[14]
27 Copy 7 15 0 0 r[15]=r[7]
28 Copy 8 16 0 0 r[16]=r[8]
29 Copy 9 17 0 0 r[17]=r[9]
30 RealAffinity 17 0 0 0
31 MakeRecord 15 3 18 0 r[18]=mkrec(r[15..17])
32 NewRowid 3 19 0 0 r[19]=rowid
33 Insert 3 18 19 0 intkey=r[19] data=r[18]
34 Next 1 14 0 0
35 FkCheck 0 0 0 0
36 Rewind 3 42 0 0
37 Column 3 0 15 0 r[15]= cursor 3 column 0
38 Column 3 1 16 0 r[16]= cursor 3 column 1
39 Column 3 2 17 0 r[17]= cursor 3 column 2
40 ResultRow 15 3 0 0 output=r[15..17]
41 Next 3 37 0 0
42 Halt 0 0 0 0
43 Transaction 0 1 1 0 1 usesStmtJournal=0
44 Integer 0 12 0 0 r[12]=0
45 Integer 100 13 0 0 r[13]=100
46 OpenEphemeral 3 3 0 0 nColumn=3
47 Goto 0 1 0 0
addr opcode p1 p2 p3 p4 p5 comment
---- ------------- ---- ---- ---- ------------- -- -------------
0 Init 0 2 0 0 Start at 2
1 Halt 0 0 0 0
2 Goto 0 1 0 0
addr opcode p1 p2 p3 p4 p5 comment
---- ------------- ---- ---- ---- ------------- -- -------------
0 Init 0 9 0 0 Start at 9
1 OpenWrite 0 2 0 3 0 root=2 iDb=0; T
2 String8 0 2 0 0 r[2]=''
3 String8 0 3 0 x 0 r[3]='x'
4 String8 0 4 0 x 0 r[4]='x'
5 NewRowid 0 1 0 0 r[1]=rowid
6 MakeRecord 2 3 5 BBE 0 r[5]=mkrec(r[2..4])
7 Insert 0 5 1 T 57 intkey=r[1] data=r[5]
8 Halt 0 0 0 0
9 Transaction 0 1 1 0 1 usesStmtJournal=0
10 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 120 0 0 Start at 120
1 Null 0 1 0 0 r[1]=NULL
2 InitCoroutine 3 29 3 0 (subquery-2)
3 Explain 3 0 0 CO-ROUTINE (subquery-2) 0
4 SorterOpen 6 6 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 2 6 0 r[6]= cursor 0 column 2
9 RealAffinity 6 0 0 0
10 Column 0 2 7 0 r[7]= cursor 0 column 2
11 RealAffinity 7 0 0 0
12 Column 0 2 4 0 r[4]= cursor 0 column 2
13 RealAffinity 4 0 0 0
14 Column 0 2 5 0 r[5]= cursor 0 column 2
15 RealAffinity 5 0 0 0
16 MakeRecord 4 4 9 0 r[9]=mkrec(r[4..7])
17 SorterInsert 6 9 4 4 0 key=r[9]
18 Next 0 8 0 1
19 Explain 19 3 0 USE TEMP B-TREE FOR ORDER BY 0
20 OpenPseudo 7 10 6 0 6 columns in r[10]
21 SorterSort 6 28 0 0
22 SorterData 6 10 7 0 r[10]=data
23 Column 7 1 8 0 r[8]= cursor 7 column 1;
24 Column 7 3 7 0 r[7]= cursor 7 column 3;
25 Column 7 2 6 0 r[6]= cursor 7 column 2;
26 Yield 3 0 0 0
27 SorterNext 6 22 0 0
28 EndCoroutine 3 0 0 0 end (subquery-2)
29 OpenEphemeral 1 3 0 0 nColumn=3
30 OpenDup 2 1 0 0
31 OpenDup 3 1 0 0
32 OpenDup 4 1 0 0
33 Null 0 11 11 0 r[11..11]=NULL
34 Integer 1 12 0 0 r[12]=1
35 Integer 1 13 0 0 r[13]=1
36 Integer 0 14 0 0 r[14]=0
37 OpenDup 8 1 0 0
38 Explain 38 0 216 SCAN (subquery-2) 0
39 InitCoroutine 3 0 3 0
40 Yield 3 72 0 0 next row of
41 Copy 6 16 0 2 r[16]=r[6]
42 Copy 7 17 0 2 r[17]=r[7]
43 Copy 8 18 0 2 r[18]=r[8]
44 MakeRecord 16 3 19 0 r[19]=mkrec(r[16..18])
45 Compare 16 11 1 k(1,B) 0 r[16] <-> r[11]
46 Jump 47 49 47 0
47 Gosub 25 73 0 0 call flush_partition
48 Copy 16 11 0 0 r[11]=r[16]
49 NewRowid 2 20 0 0 r[20]=rowid
50 Insert 2 19 20 0 intkey=r[20] data=r[19]
51 Ne 12 61 20 0 if r[20]!=r[12] goto 61
52 Null 0 1 0 0 r[1]=NULL
53 Rewind 3 0 0 0
54 Rewind 1 0 0 0
55 Rewind 4 0 0 0
56 Copy 17 21 0 0 r[21]=r[17]
57 Copy 21 22 0 0 r[22]=r[21]
58 Copy 21 23 0 0 r[23]=r[21]
59 Copy 21 24 0 0 r[24]=r[21]
60 Goto 0 71 0 0
61 Compare 21 17 1 k(1,B) 0 r[21] <-> r[17]
62 Jump 63 71 63 0
63 Copy 17 21 0 0 r[21]=r[17]
64 AddImm 14 1 0 0 r[14]=r[14]+1
65 Next 4 67 0 0
66 Goto 0 71 0 0
67 Column 4 1 27 0 r[27]= cursor 4 column 1
68 Compare 24 27 1 k(1,B) 0 r[24] <-> r[27]
69 Jump 70 64 70 0
70 Copy 27 24 0 0 r[24]=r[27]
71 Goto 0 40 0 0
72 Integer 113 25 0 0 r[25]=113
73 Rewind 2 110 0 0
74 AddImm 14 1 0 0 r[14]=r[14]+1
75 Next 4 77 0 0
76 Goto 0 81 0 0
77 Column 4 1 27 0 r[27]= cursor 4 column 1
78 Compare 24 27 1 k(1,B) 0 r[24] <-> r[27]
79 Jump 80 74 80 0
80 Copy 27 24 0 0 r[24]=r[27]
81 Rowid 1 27 0 0 r[27]= rowid of 1
82 Column 1 1 29 0 r[29]= cursor 1 column 1
83 Null 0 1 0 0 r[1]=NULL
84 SeekGE 8 91 13 0 key=r[13]
85 Rowid 8 28 0 0 r[28]= rowid of 8
86 Gt 14 91 28 0 if r[28]>r[14] goto 91
87 Column 8 2 26 0 r[26]= cursor 8 column 2
88 CollSeq 0 0 0 BINARY-8 0
89 AggStep 0 26 1 max(1) 1 accum=r[1] step(r[26])
90 Next 8 85 0 0
91 AggFinal 1 1 0 max(1) 0 accum=r[1] N=1
92 Copy 1 2 0 0 r[2]=r[1]
93 Null 0 1 0 0 r[1]=NULL
94 Gosub 15 115 0 0
95 Next 1 97 0 0
96 Goto 0 110 0 0
97 Column 1 1 29 0 r[29]= cursor 1 column 1
98 Compare 23 29 1 k(1,B) 0 r[23] <-> r[29]
99 Jump 100 81 100 0
100 Copy 29 23 0 0 r[23]=r[29]
101 AddImm 13 1 0 0 r[13]=r[13]+1
102 Delete 3 0 0 2
103 Next 3 105 0 0
104 Goto 0 109 0 0
105 Column 3 1 29 0 r[29]= cursor 3 column 1
106 Compare 22 29 1 k(1,B) 0 r[22] <-> r[29]
107 Jump 108 101 108 0
108 Copy 29 22 0 0 r[22]=r[29]
109 Goto 0 81 0 0
110 ResetSorter 1 0 0 0
111 Integer 1 13 0 0 r[13]=1
112 Integer 0 14 0 0 r[14]=0
113 Return 25 0 0 0
114 Goto 0 119 0 0
115 Noop 0 0 0 0 inner-loop subroutine
116 Copy 2 31 0 0 r[31]=r[2]
117 ResultRow 31 1 0 0 output=r[31]
118 Return 15 0 0 0 end inner-loop subroutine
119 Halt 0 0 0 0
120 Transaction 0 0 1 0 1 usesStmtJournal=0
121 Goto 0 1 0 0
-2.25
1.0
4.75
x
addr opcode p1 p2 p3 p4 p5 comment
---- ------------- ---- ---- ---- ------------- -- -------------
0 Init 0 37 0 0 Start at 37
1 Null 0 1 0 0 r[1]=NULL
2 OpenWrite 0 1 0 5 0 root=1 iDb=0; sqlite_master
3 Rewind 0 11 0 0
4 Column 0 2 2 0 r[2]= cursor 0 column 2
5 Ne 3 10 2 BINARY-8 82 if r[2]!=r[3] goto 10
6 Column 0 0 2 0 r[2]= cursor 0 column 0
7 Eq 4 10 2 BINARY-8 82 if r[2]==r[4] goto 10
8 Rowid 0 5 0 0 r[5]=sqlite_master.rowid
9 Delete 0 0 0 2
10 Next 0 4 0 1
11 Destroy 2 2 0 0
12 Null 0 6 7 0 r[6..7]=NULL
13 OpenEphemeral 2 0 6 0 nColumn=0
14 IfNot 2 22 1 0
15 OpenRead 1 1 0 4 0 root=1 iDb=0; sqlite_master
16 Rewind 1 22 0 0
17 Column 1 3 13 0 r[13]= cursor 1 column 3
18 Ne 2 21 13 BINARY-8 84 if r[13]!=r[2] goto 21
19 Rowid 1 7 0 0 r[7]= rowid of 1
20 Insert 2 6 7 0 intkey=r[7] data=r[6]
21 Next 1 17 0 1
22 OpenWrite 1 1 0 5 0 root=1 iDb=0; sqlite_master
23 Rewind 2 34 0 0
24 Rowid 2 7 0 0 r[7]= rowid of 2
25 NotExists 1 33 7 0 intkey=r[7]
26 Column 1 0 8 0 r[8]= cursor 1 column 0
27 Column 1 1 9 0 r[9]= cursor 1 column 1
28 Column 1 2 10 0 r[10]= cursor 1 column 2
29 Integer 2 11 0 0 r[11]=2
30 Column 1 4 12 0 r[12]= cursor 1 column 4
31 MakeRecord 8 5 15 BBBDB 0 r[15]=mkrec(r[8..12])
32 Insert 1 15 7 0 intkey=r[7] data=r[15]
33 Next 2 24 0 0
34 DropTable 0 0 0 T 0
35 SetCookie 0 1 2 0
36 Halt 0 0 0 0
37 Transaction 0 1 1 0 1 usesStmtJournal=1
38 String8 0 3 0 T 0 r[3]='T'
39 String8 0 4 0 trigger 0 r[4]='trigger'
40 Goto 0 1 0 0
addr opcode p1 p2 p3 p4 p5 comment
---- ------------- ---- ---- ---- ------------- -- -------------
0 Init 0 31 0 0 Start at 31
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 4 0 4 0
14 OpenWrite 3 1 0 5 0 root=1 iDb=0; sqlite_master
15 SeekRowid 3 17 1 0 intkey=r[1]
16 Rowid 3 5 0 0 r[5]= rowid of 3
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 sqlite_stat1 0 r[7]='sqlite_stat1'
20 String8 0 8 0 sqlite_stat1 0 r[8]='sqlite_stat1'
21 Copy 2 9 0 0 r[9]=r[2]
22 String8 0 10 0 CREATE TABLE sqlite_stat1(tbl,idx,stat) 0 r[10]='CREATE TABLE sqlite_stat1(tbl,idx,stat)'
23 MakeRecord 6 5 4 BBBDB 0 r[4]=mkrec(r[6..10])
24 Insert 3 4 5 0 intkey=r[5] data=r[4]
25 SetCookie 0 1 3 0
26 ParseSchema 0 0 0 tbl_name='sqlite_stat1' AND type!='trigger' 0
27 OpenWrite 0 2 0 3 16 root=2 iDb=0; sqlite_stat1
28 LoadAnalysis 0 0 0 0
29 Expire 0 0 0 0
30 Halt 0 0 0 0
31 Transaction 0 1 2 0 1 usesStmtJournal=1
32 Goto 0 1 0 0
```
## Flag
```
```