OpenCoverage

insert.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/sqlite/src/src/insert.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/*-
2** 2001 September 15-
3**-
4** The author disclaims copyright to this source code. In place of-
5** a legal notice, here is a blessing:-
6**-
7** May you do good and not evil.-
8** May you find forgiveness for yourself and forgive others.-
9** May you share freely, never taking more than you give.-
10**-
11*************************************************************************-
12** This file contains C code routines that are called by the parser-
13** to handle INSERT statements in SQLite.-
14*/-
15#include "sqliteInt.h"-
16-
17/*-
18** Generate code that will -
19**-
20** (1) acquire a lock for table pTab then-
21** (2) open pTab as cursor iCur.-
22**-
23** If pTab is a WITHOUT ROWID table, then it is the PRIMARY KEY index-
24** for that table that is actually opened.-
25*/-
26void sqlite3OpenTable(-
27 Parse *pParse, /* Generate code into this VDBE */-
28 int iCur, /* The cursor number of the table */-
29 int iDb, /* The database index in sqlite3.aDb[] */-
30 Table *pTab, /* The table to be opened */-
31 int opcode /* OP_OpenRead or OP_OpenWrite */-
32){-
33 Vdbe *v;-
34 assert( !IsVirtual(pTab) );-
35 v = sqlite3GetVdbe(pParse);-
36 assert( opcode==OP_OpenWrite || opcode==OP_OpenRead );-
37 sqlite3TableLock(pParse, iDb, pTab->tnum, -
38 (opcode==OP_OpenWrite)?1:0, pTab->zName);-
39 if( HasRowid(pTab) ){
(((pTab)->tabF... & 0x0020)==0)Description
TRUEevaluated 313296 times by 435 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
FALSEevaluated 171 times by 1 test
Evaluated by:
  • Self test (438)
171-313296
40 sqlite3VdbeAddOp4Int(v, opcode, iCur, pTab->tnum, iDb, pTab->nCol);-
41 VdbeComment((v, "%s", pTab->zName));-
42 }else{
executed 313296 times by 435 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
313296
43 Index *pPk = sqlite3PrimaryKeyIndex(pTab);-
44 assert( pPk!=0 );-
45 assert( pPk->tnum==pTab->tnum );-
46 sqlite3VdbeAddOp3(v, opcode, iCur, pPk->tnum, iDb);-
47 sqlite3VdbeSetP4KeyInfo(pParse, pPk);-
48 VdbeComment((v, "%s", pTab->zName));-
49 }
executed 171 times by 1 test: end of block
Executed by:
  • Self test (438)
171
50}-
51-
52/*-
53** Return a pointer to the column affinity string associated with index-
54** pIdx. A column affinity string has one character for each column in -
55** the table, according to the affinity of the column:-
56**-
57** Character Column affinity-
58** -------------------------------
59** 'A' BLOB-
60** 'B' TEXT-
61** 'C' NUMERIC-
62** 'D' INTEGER-
63** 'F' REAL-
64**-
65** An extra 'D' is appended to the end of the string to cover the-
66** rowid that appears as the last column in every index.-
67**-
68** Memory for the buffer containing the column index affinity string-
69** is managed along with the rest of the Index structure. It will be-
70** released when sqlite3DeleteIndex() is called.-
71*/-
72const char *sqlite3IndexAffinityStr(sqlite3 *db, Index *pIdx){-
73 if( !pIdx->zColAff ){
!pIdx->zColAffDescription
TRUEevaluated 5024 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (47)
FALSEevaluated 28090 times by 1 test
Evaluated by:
  • Self test (438)
5024-28090
74 /* The first time a column affinity string for a particular index is-
75 ** required, it is allocated and populated here. It is then stored as-
76 ** a member of the Index structure for subsequent use.-
77 **-
78 ** The column affinity string will eventually be deleted by-
79 ** sqliteDeleteIndex() when the Index structure itself is cleaned-
80 ** up.-
81 */-
82 int n;-
83 Table *pTab = pIdx->pTable;-
84 pIdx->zColAff = (char *)sqlite3DbMallocRaw(0, pIdx->nColumn+1);-
85 if( !pIdx->zColAff ){
!pIdx->zColAffDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 5022 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (47)
2-5022
86 sqlite3OomFault(db);-
87 return 0;
executed 2 times by 1 test: return 0;
Executed by:
  • Self test (438)
2
88 }-
89 for(n=0; n<pIdx->nColumn; n++){
n<pIdx->nColumnDescription
TRUEevaluated 12902 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (47)
FALSEevaluated 5022 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (47)
5022-12902
90 i16 x = pIdx->aiColumn[n];-
91 if( x>=0 ){
x>=0Description
TRUEevaluated 8100 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (47)
FALSEevaluated 4802 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (47)
4802-8100
92 pIdx->zColAff[n] = pTab->aCol[x].affinity;-
93 }else if( x==XN_ROWID ){
executed 8100 times by 2 tests: end of block
Executed by:
  • Self test (438)
  • Self test (47)
x==(-1)Description
TRUEevaluated 4770 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (47)
FALSEevaluated 32 times by 1 test
Evaluated by:
  • Self test (438)
32-8100
94 pIdx->zColAff[n] = SQLITE_AFF_INTEGER;-
95 }else{
executed 4770 times by 2 tests: end of block
Executed by:
  • Self test (438)
  • Self test (47)
4770
96 char aff;-
97 assert( x==XN_EXPR );-
98 assert( pIdx->aColExpr!=0 );-
99 aff = sqlite3ExprAffinity(pIdx->aColExpr->a[n].pExpr);-
100 if( aff==0 ) aff = SQLITE_AFF_BLOB;
executed 32 times by 1 test: aff = 'A';
Executed by:
  • Self test (438)
aff==0Description
TRUEevaluated 32 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-32
101 pIdx->zColAff[n] = aff;-
102 }
executed 32 times by 1 test: end of block
Executed by:
  • Self test (438)
32
103 }-
104 pIdx->zColAff[n] = 0;-
105 }
executed 5022 times by 2 tests: end of block
Executed by:
  • Self test (438)
  • Self test (47)
5022
106 -
107 return pIdx->zColAff;
executed 33112 times by 2 tests: return pIdx->zColAff;
Executed by:
  • Self test (438)
  • Self test (47)
33112
108}-
109-
110/*-
111** Compute the affinity string for table pTab, if it has not already been-
112** computed. As an optimization, omit trailing SQLITE_AFF_BLOB affinities.-
113**-
114** If the affinity exists (if it is no entirely SQLITE_AFF_BLOB values) and-
115** if iReg>0 then code an OP_Affinity opcode that will set the affinities-
116** for register iReg and following. Or if affinities exists and iReg==0,-
117** then just set the P4 operand of the previous opcode (which should be-
118** an OP_MakeRecord) to the affinity string.-
119**-
120** A column affinity string has one character per column:-
121**-
122** Character Column affinity-
123** -------------------------------
124** 'A' BLOB-
125** 'B' TEXT-
126** 'C' NUMERIC-
127** 'D' INTEGER-
128** 'E' REAL-
129*/-
130void sqlite3TableAffinity(Vdbe *v, Table *pTab, int iReg){-
131 int i;-
132 char *zColAff = pTab->zColAff;-
133 if( zColAff==0 ){
zColAff==0Description
TRUEevaluated 22084 times by 406 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
FALSEevaluated 85251 times by 31 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (14)
  • Self test (18)
  • Self test (22)
  • Self test (24)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (35)
  • Self test (438)
  • Self test (47)
  • Self test (50)
  • Self test (52)
  • Self test (54)
  • Self test (6)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • ...
22084-85251
134 sqlite3 *db = sqlite3VdbeDb(v);-
135 zColAff = (char *)sqlite3DbMallocRaw(0, pTab->nCol+1);-
136 if( !zColAff ){
!zColAffDescription
TRUEevaluated 50 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 22034 times by 406 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
50-22034
137 sqlite3OomFault(db);-
138 return;
executed 50 times by 1 test: return;
Executed by:
  • Self test (438)
50
139 }-
140-
141 for(i=0; i<pTab->nCol; i++){
i<pTab->nColDescription
TRUEevaluated 91046 times by 406 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
FALSEevaluated 22034 times by 406 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
22034-91046
142 zColAff[i] = pTab->aCol[i].affinity;-
143 }
executed 91046 times by 406 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
91046
144 do{-
145 zColAff[i--] = 0;-
146 }while( i>=0 && zColAff[i]==SQLITE_AFF_BLOB );
executed 39109 times by 406 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
i>=0Description
TRUEevaluated 33273 times by 406 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
FALSEevaluated 5836 times by 60 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (35)
  • Self test (38)
  • ...
zColAff[i]=='A'Description
TRUEevaluated 17075 times by 392 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • ...
FALSEevaluated 16198 times by 365 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
5836-39109
147 pTab->zColAff = zColAff;-
148 }
executed 22034 times by 406 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
22034
149 i = sqlite3Strlen30(zColAff);-
150 if( i ){
iDescription
TRUEevaluated 88191 times by 365 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
FALSEevaluated 19094 times by 60 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (35)
  • Self test (38)
  • ...
19094-88191
151 if( iReg ){
iRegDescription
TRUEevaluated 14525 times by 333 tests
Evaluated by:
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • Self test (129)
  • Self test (130)
  • ...
FALSEevaluated 73666 times by 33 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (30)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (39)
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (47)
  • Self test (48)
  • Self test (57)
  • Self test (58)
  • Self test (72)
  • Self test (73)
  • Self test (91)
  • ...
14525-73666
152 sqlite3VdbeAddOp4(v, OP_Affinity, iReg, i, 0, zColAff, i);-
153 }else{
executed 14525 times by 333 tests: end of block
Executed by:
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • Self test (129)
  • Self test (130)
  • ...
14525
154 sqlite3VdbeChangeP4(v, -1, zColAff, i);-
155 }
executed 73666 times by 33 tests: end of block
Executed by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (30)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (39)
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (47)
  • Self test (48)
  • Self test (57)
  • Self test (58)
  • Self test (72)
  • Self test (73)
  • Self test (91)
  • ...
73666
156 }-
157}
executed 107285 times by 406 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
107285
158-
159/*-
160** Return non-zero if the table pTab in database iDb or any of its indices-
161** have been opened at any point in the VDBE program. This is used to see if -
162** a statement of the form "INSERT INTO <iDb, pTab> SELECT ..." can -
163** run without using a temporary table for the results of the SELECT. -
164*/-
165static int readsTable(Parse *p, int iDb, Table *pTab){-
166 Vdbe *v = sqlite3GetVdbe(p);-
167 int i;-
168 int iEnd = sqlite3VdbeCurrentAddr(v);-
169#ifndef SQLITE_OMIT_VIRTUALTABLE-
170 VTable *pVTab = IsVirtual(pTab) ? sqlite3GetVTable(p->db, pTab) : 0;
((pTab)->nModuleArg)Description
TRUEevaluated 26 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3406 times by 6 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (64)
26-3406
171#endif-
172-
173 for(i=1; i<iEnd; i++){
i<iEndDescription
TRUEevaluated 234017 times by 6 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (64)
FALSEevaluated 2002 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
2002-234017
174 VdbeOp *pOp = sqlite3VdbeGetOp(v, i);-
175 assert( pOp!=0 );-
176 if( pOp->opcode==OP_OpenRead && pOp->p3==iDb ){
pOp->opcode==109Description
TRUEevaluated 2942 times by 6 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (64)
FALSEevaluated 231075 times by 6 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (64)
pOp->p3==iDbDescription
TRUEevaluated 2243 times by 5 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
FALSEevaluated 699 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
699-231075
177 Index *pIndex;-
178 int tnum = pOp->p2;-
179 if( tnum==pTab->tnum ){
tnum==pTab->tnumDescription
TRUEevaluated 1296 times by 5 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
FALSEevaluated 947 times by 1 test
Evaluated by:
  • Self test (438)
947-1296
180 return 1;
executed 1296 times by 5 tests: return 1;
Executed by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
1296
181 }-
182 for(pIndex=pTab->pIndex; pIndex; pIndex=pIndex->pNext){
pIndexDescription
TRUEevaluated 525 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 819 times by 1 test
Evaluated by:
  • Self test (438)
525-819
183 if( tnum==pIndex->tnum ){
tnum==pIndex->tnumDescription
TRUEevaluated 128 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 397 times by 1 test
Evaluated by:
  • Self test (438)
128-397
184 return 1;
executed 128 times by 1 test: return 1;
Executed by:
  • Self test (438)
128
185 }-
186 }
executed 397 times by 1 test: end of block
Executed by:
  • Self test (438)
397
187 }
executed 819 times by 1 test: end of block
Executed by:
  • Self test (438)
819
188#ifndef SQLITE_OMIT_VIRTUALTABLE-
189 if( pOp->opcode==OP_VOpen && pOp->p4.pVtab==pVTab ){
pOp->opcode==164Description
TRUEevaluated 25 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 232568 times by 6 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (64)
pOp->p4.pVtab==pVTabDescription
TRUEevaluated 6 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 19 times by 1 test
Evaluated by:
  • Self test (438)
6-232568
190 assert( pOp->p4.pVtab!=0 );-
191 assert( pOp->p4type==P4_VTAB );-
192 return 1;
executed 6 times by 1 test: return 1;
Executed by:
  • Self test (438)
6
193 }-
194#endif-
195 }
executed 232587 times by 6 tests: end of block
Executed by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (64)
232587
196 return 0;
executed 2002 times by 2 tests: return 0;
Executed by:
  • Self test (34)
  • Self test (438)
2002
197}-
198-
199#ifndef SQLITE_OMIT_AUTOINCREMENT-
200/*-
201** Locate or create an AutoincInfo structure associated with table pTab-
202** which is in database iDb. Return the register number for the register-
203** that holds the maximum rowid. Return zero if pTab is not an AUTOINCREMENT-
204** table. (Also return zero when doing a VACUUM since we do not want to-
205** update the AUTOINCREMENT counters during a VACUUM.)-
206**-
207** There is at most one AutoincInfo structure per table even if the-
208** same table is autoincremented multiple times due to inserts within-
209** triggers. A new AutoincInfo structure is created if this is the-
210** first use of table pTab. On 2nd and subsequent uses, the original-
211** AutoincInfo structure is used.-
212**-
213** Four consecutive registers are allocated:-
214**-
215** (1) The name of the pTab table.-
216** (2) The maximum ROWID of pTab.-
217** (3) The rowid in sqlite_sequence of pTab-
218** (4) The original value of the max ROWID in pTab, or NULL if none-
219**-
220** The 2nd register is the one that is returned. That is all the-
221** insert routine needs to know about.-
222*/-
223static int autoIncBegin(-
224 Parse *pParse, /* Parsing context */-
225 int iDb, /* Index of the database holding pTab */-
226 Table *pTab /* The table we are writing to */-
227){-
228 int memId = 0; /* Register holding maximum rowid */-
229 assert( pParse->db->aDb[iDb].pSchema!=0 );-
230 if( (pTab->tabFlags & TF_Autoincrement)!=0
(pTab->tabFlags & 0x0008)!=0Description
TRUEevaluated 104 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 76308 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
104-76308
231 && (pParse->db->mDbFlags & DBFLAG_Vacuum)==0
(pParse->db->m...s & 0x0004)==0Description
TRUEevaluated 100 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
4-100
232 ){-
233 Parse *pToplevel = sqlite3ParseToplevel(pParse);
(pParse)->pToplevelDescription
TRUEevaluated 14 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 86 times by 1 test
Evaluated by:
  • Self test (438)
14-86
234 AutoincInfo *pInfo;-
235 Table *pSeqTab = pParse->db->aDb[iDb].pSchema->pSeqTab;-
236-
237 /* Verify that the sqlite_sequence table exists and is an ordinary-
238 ** rowid table with exactly two columns.-
239 ** Ticket d8dc2b3a58cd5dc2918a1d4acb 2018-05-23 */-
240 if( pSeqTab==0
pSeqTab==0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 99 times by 1 test
Evaluated by:
  • Self test (438)
1-99
241 || !HasRowid(pSeqTab)
!(((pSeqTab)->... & 0x0020)==0)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 98 times by 1 test
Evaluated by:
  • Self test (438)
1-98
242 || IsVirtual(pSeqTab)
((pSeqTab)->nModuleArg)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 97 times by 1 test
Evaluated by:
  • Self test (438)
1-97
243 || pSeqTab->nCol!=2
pSeqTab->nCol!=2Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 96 times by 1 test
Evaluated by:
  • Self test (438)
1-96
244 ){-
245 pParse->nErr++;-
246 pParse->rc = SQLITE_CORRUPT_SEQUENCE;-
247 return 0;
executed 4 times by 1 test: return 0;
Executed by:
  • Self test (438)
4
248 }-
249-
250 pInfo = pToplevel->pAinc;-
251 while( pInfo && pInfo->pTab!=pTab ){ pInfo = pInfo->pNext; }
executed 2 times by 1 test: end of block
Executed by:
  • Self test (438)
pInfoDescription
TRUEevaluated 12 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 86 times by 1 test
Evaluated by:
  • Self test (438)
pInfo->pTab!=pTabDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 10 times by 1 test
Evaluated by:
  • Self test (438)
2-86
252 if( pInfo==0 ){
pInfo==0Description
TRUEevaluated 86 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 10 times by 1 test
Evaluated by:
  • Self test (438)
10-86
253 pInfo = sqlite3DbMallocRawNN(pParse->db, sizeof(*pInfo));-
254 if( pInfo==0 ) return 0;
never executed: return 0;
pInfo==0Description
TRUEnever evaluated
FALSEevaluated 86 times by 1 test
Evaluated by:
  • Self test (438)
0-86
255 pInfo->pNext = pToplevel->pAinc;-
256 pToplevel->pAinc = pInfo;-
257 pInfo->pTab = pTab;-
258 pInfo->iDb = iDb;-
259 pToplevel->nMem++; /* Register to hold name of table */-
260 pInfo->regCtr = ++pToplevel->nMem; /* Max rowid register */-
261 pToplevel->nMem +=2; /* Rowid in sqlite_sequence + orig max val */-
262 }
executed 86 times by 1 test: end of block
Executed by:
  • Self test (438)
86
263 memId = pInfo->regCtr;-
264 }
executed 96 times by 1 test: end of block
Executed by:
  • Self test (438)
96
265 return memId;
executed 76408 times by 61 tests: return memId;
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
76408
266}-
267-
268/*-
269** This routine generates code that will initialize all of the-
270** register used by the autoincrement tracker. -
271*/-
272void sqlite3AutoincrementBegin(Parse *pParse){-
273 AutoincInfo *p; /* Information about an AUTOINCREMENT */-
274 sqlite3 *db = pParse->db; /* The database connection */-
275 Db *pDb; /* Database only autoinc table */-
276 int memId; /* Register holding max rowid */-
277 Vdbe *v = pParse->pVdbe; /* VDBE under construction */-
278-
279 /* This routine is never called during trigger-generation. It is-
280 ** only called from the top-level */-
281 assert( pParse->pTriggerTab==0 );-
282 assert( sqlite3IsToplevel(pParse) );-
283-
284 assert( v ); /* We failed long ago if this is not so */-
285 for(p = pParse->pAinc; p; p = p->pNext){
pDescription
TRUEevaluated 86 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 299991 times by 435 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
86-299991
286 static const int iLn = VDBE_OFFSET_LINENO(2);-
287 static const VdbeOpList autoInc[] = {-
288 /* 0 */ {OP_Null, 0, 0, 0},-
289 /* 1 */ {OP_Rewind, 0, 10, 0},-
290 /* 2 */ {OP_Column, 0, 0, 0},-
291 /* 3 */ {OP_Ne, 0, 9, 0},-
292 /* 4 */ {OP_Rowid, 0, 0, 0},-
293 /* 5 */ {OP_Column, 0, 1, 0},-
294 /* 6 */ {OP_AddImm, 0, 0, 0},-
295 /* 7 */ {OP_Copy, 0, 0, 0},-
296 /* 8 */ {OP_Goto, 0, 11, 0},-
297 /* 9 */ {OP_Next, 0, 2, 0},-
298 /* 10 */ {OP_Integer, 0, 0, 0},-
299 /* 11 */ {OP_Close, 0, 0, 0} -
300 };-
301 VdbeOp *aOp;-
302 pDb = &db->aDb[p->iDb];-
303 memId = p->regCtr;-
304 assert( sqlite3SchemaMutexHeld(db, 0, pDb->pSchema) );-
305 sqlite3OpenTable(pParse, 0, p->iDb, pDb->pSchema->pSeqTab, OP_OpenRead);-
306 sqlite3VdbeLoadString(v, memId-1, p->pTab->zName);-
307 aOp = sqlite3VdbeAddOpList(v, ArraySize(autoInc), autoInc, iLn);-
308 if( aOp==0 ) break;
never executed: break;
aOp==0Description
TRUEnever evaluated
FALSEevaluated 86 times by 1 test
Evaluated by:
  • Self test (438)
0-86
309 aOp[0].p2 = memId;-
310 aOp[0].p3 = memId+2;-
311 aOp[2].p3 = memId;-
312 aOp[3].p1 = memId-1;-
313 aOp[3].p3 = memId;-
314 aOp[3].p5 = SQLITE_JUMPIFNULL;-
315 aOp[4].p2 = memId+1;-
316 aOp[5].p3 = memId;-
317 aOp[6].p1 = memId;-
318 aOp[7].p2 = memId+2;-
319 aOp[7].p1 = memId;-
320 aOp[10].p2 = memId;-
321 }
executed 86 times by 1 test: end of block
Executed by:
  • Self test (438)
86
322}
executed 299991 times by 435 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
299991
323-
324/*-
325** Update the maximum rowid for an autoincrement calculation.-
326**-
327** This routine should be called when the regRowid register holds a-
328** new rowid that is about to be inserted. If that new rowid is-
329** larger than the maximum rowid in the memId memory cell, then the-
330** memory cell is updated.-
331*/-
332static void autoIncStep(Parse *pParse, int memId, int regRowid){-
333 if( memId>0 ){
memId>0Description
TRUEevaluated 96 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 74811 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
96-74811
334 sqlite3VdbeAddOp2(pParse->pVdbe, OP_MemMax, memId, regRowid);-
335 }
executed 96 times by 1 test: end of block
Executed by:
  • Self test (438)
96
336}
executed 74907 times by 61 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
74907
337-
338/*-
339** This routine generates the code needed to write autoincrement-
340** maximum rowid values back into the sqlite_sequence register.-
341** Every statement that might do an INSERT into an autoincrement-
342** table (either directly or through triggers) needs to call this-
343** routine just before the "exit" code.-
344*/-
345static SQLITE_NOINLINE void autoIncrementEnd(Parse *pParse){-
346 AutoincInfo *p;-
347 Vdbe *v = pParse->pVdbe;-
348 sqlite3 *db = pParse->db;-
349-
350 assert( v );-
351 for(p = pParse->pAinc; p; p = p->pNext){
pDescription
TRUEevaluated 87 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 86 times by 1 test
Evaluated by:
  • Self test (438)
86-87
352 static const int iLn = VDBE_OFFSET_LINENO(2);-
353 static const VdbeOpList autoIncEnd[] = {-
354 /* 0 */ {OP_NotNull, 0, 2, 0},-
355 /* 1 */ {OP_NewRowid, 0, 0, 0},-
356 /* 2 */ {OP_MakeRecord, 0, 2, 0},-
357 /* 3 */ {OP_Insert, 0, 0, 0},-
358 /* 4 */ {OP_Close, 0, 0, 0}-
359 };-
360 VdbeOp *aOp;-
361 Db *pDb = &db->aDb[p->iDb];-
362 int iRec;-
363 int memId = p->regCtr;-
364-
365 iRec = sqlite3GetTempReg(pParse);-
366 assert( sqlite3SchemaMutexHeld(db, 0, pDb->pSchema) );-
367 sqlite3VdbeAddOp3(v, OP_Le, memId+2, sqlite3VdbeCurrentAddr(v)+7, memId);-
368 VdbeCoverage(v);-
369 sqlite3OpenTable(pParse, 0, p->iDb, pDb->pSchema->pSeqTab, OP_OpenWrite);-
370 aOp = sqlite3VdbeAddOpList(v, ArraySize(autoIncEnd), autoIncEnd, iLn);-
371 if( aOp==0 ) break;
never executed: break;
aOp==0Description
TRUEnever evaluated
FALSEevaluated 87 times by 1 test
Evaluated by:
  • Self test (438)
0-87
372 aOp[0].p1 = memId+1;-
373 aOp[1].p2 = memId+1;-
374 aOp[2].p1 = memId-1;-
375 aOp[2].p3 = iRec;-
376 aOp[3].p2 = iRec;-
377 aOp[3].p3 = memId+1;-
378 aOp[3].p5 = OPFLAG_APPEND;-
379 sqlite3ReleaseTempReg(pParse, iRec);-
380 }
executed 87 times by 1 test: end of block
Executed by:
  • Self test (438)
87
381}
executed 86 times by 1 test: end of block
Executed by:
  • Self test (438)
86
382void sqlite3AutoincrementEnd(Parse *pParse){-
383 if( pParse->pAinc ) autoIncrementEnd(pParse);
executed 86 times by 1 test: autoIncrementEnd(pParse);
Executed by:
  • Self test (438)
pParse->pAincDescription
TRUEevaluated 86 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 70196 times by 397 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
86-70196
384}
executed 70282 times by 397 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
70282
385#else-
386/*-
387** If SQLITE_OMIT_AUTOINCREMENT is defined, then the three routines-
388** above are all no-ops-
389*/-
390# define autoIncBegin(A,B,C) (0)-
391# define autoIncStep(A,B,C)-
392#endif /* SQLITE_OMIT_AUTOINCREMENT */-
393-
394-
395/* Forward declaration */-
396static int xferOptimization(-
397 Parse *pParse, /* Parser context */-
398 Table *pDest, /* The table we are inserting into */-
399 Select *pSelect, /* A SELECT statement to use as the data source */-
400 int onError, /* How to handle constraint errors */-
401 int iDbDest /* The database of pDest */-
402);-
403-
404/*-
405** This routine is called to handle SQL of the following forms:-
406**-
407** insert into TABLE (IDLIST) values(EXPRLIST),(EXPRLIST),...-
408** insert into TABLE (IDLIST) select-
409** insert into TABLE (IDLIST) default values-
410**-
411** The IDLIST following the table name is always optional. If omitted,-
412** then a list of all (non-hidden) columns for the table is substituted.-
413** The IDLIST appears in the pColumn parameter. pColumn is NULL if IDLIST-
414** is omitted.-
415**-
416** For the pSelect parameter holds the values to be inserted for the-
417** first two forms shown above. A VALUES clause is really just short-hand-
418** for a SELECT statement that omits the FROM clause and everything else-
419** that follows. If the pSelect parameter is NULL, that means that the-
420** DEFAULT VALUES form of the INSERT statement is intended.-
421**-
422** The code generated follows one of four templates. For a simple-
423** insert with data coming from a single-row VALUES clause, the code executes-
424** once straight down through. Pseudo-code follows (we call this-
425** the "1st template"):-
426**-
427** open write cursor to <table> and its indices-
428** put VALUES clause expressions into registers-
429** write the resulting record into <table>-
430** cleanup-
431**-
432** The three remaining templates assume the statement is of the form-
433**-
434** INSERT INTO <table> SELECT ...-
435**-
436** If the SELECT clause is of the restricted form "SELECT * FROM <table2>" --
437** in other words if the SELECT pulls all columns from a single table-
438** and there is no WHERE or LIMIT or GROUP BY or ORDER BY clauses, and-
439** if <table2> and <table1> are distinct tables but have identical-
440** schemas, including all the same indices, then a special optimization-
441** is invoked that copies raw records from <table2> over to <table1>.-
442** See the xferOptimization() function for the implementation of this-
443** template. This is the 2nd template.-
444**-
445** open a write cursor to <table>-
446** open read cursor on <table2>-
447** transfer all records in <table2> over to <table>-
448** close cursors-
449** foreach index on <table>-
450** open a write cursor on the <table> index-
451** open a read cursor on the corresponding <table2> index-
452** transfer all records from the read to the write cursors-
453** close cursors-
454** end foreach-
455**-
456** The 3rd template is for when the second template does not apply-
457** and the SELECT clause does not read from <table> at any time.-
458** The generated code follows this template:-
459**-
460** X <- A-
461** goto B-
462** A: setup for the SELECT-
463** loop over the rows in the SELECT-
464** load values into registers R..R+n-
465** yield X-
466** end loop-
467** cleanup after the SELECT-
468** end-coroutine X-
469** B: open write cursor to <table> and its indices-
470** C: yield X, at EOF goto D-
471** insert the select result into <table> from R..R+n-
472** goto C-
473** D: cleanup-
474**-
475** The 4th template is used if the insert statement takes its-
476** values from a SELECT but the data is being inserted into a table-
477** that is also read as part of the SELECT. In the third form,-
478** we have to use an intermediate table to store the results of-
479** the select. The template is like this:-
480**-
481** X <- A-
482** goto B-
483** A: setup for the SELECT-
484** loop over the tables in the SELECT-
485** load value into register R..R+n-
486** yield X-
487** end loop-
488** cleanup after the SELECT-
489** end co-routine R-
490** B: open temp table-
491** L: yield X, at EOF goto M-
492** insert row from R..R+n into temp table-
493** goto L-
494** M: open write cursor to <table> and its indices-
495** rewind temp table-
496** C: loop over rows of intermediate table-
497** transfer values form intermediate table into <table>-
498** end loop-
499** D: cleanup-
500*/-
501void sqlite3Insert(-
502 Parse *pParse, /* Parser context */-
503 SrcList *pTabList, /* Name of table into which we are inserting */-
504 Select *pSelect, /* A SELECT statement to use as the data source */-
505 IdList *pColumn, /* Column names corresponding to IDLIST. */-
506 int onError, /* How to handle constraint errors */-
507 Upsert *pUpsert /* ON CONFLICT clauses for upsert, or NULL */-
508){-
509 sqlite3 *db; /* The main database structure */-
510 Table *pTab; /* The table to insert into. aka TABLE */-
511 int i, j; /* Loop counters */-
512 Vdbe *v; /* Generate code into this virtual machine */-
513 Index *pIdx; /* For looping over indices of the table */-
514 int nColumn; /* Number of columns in the data */-
515 int nHidden = 0; /* Number of hidden columns if TABLE is virtual */-
516 int iDataCur = 0; /* VDBE cursor that is the main data repository */-
517 int iIdxCur = 0; /* First index cursor */-
518 int ipkColumn = -1; /* Column that is the INTEGER PRIMARY KEY */-
519 int endOfLoop; /* Label for the end of the insertion loop */-
520 int srcTab = 0; /* Data comes from this temporary cursor if >=0 */-
521 int addrInsTop = 0; /* Jump to label "D" */-
522 int addrCont = 0; /* Top of insert loop. Label "C" in templates 3 and 4 */-
523 SelectDest dest; /* Destination for SELECT on rhs of INSERT */-
524 int iDb; /* Index of database holding TABLE */-
525 u8 useTempTable = 0; /* Store SELECT results in intermediate table */-
526 u8 appendFlag = 0; /* True if the insert is likely to be an append */-
527 u8 withoutRowid; /* 0 for normal table. 1 for WITHOUT ROWID table */-
528 u8 bIdListInOrder; /* True if IDLIST is in table order */-
529 ExprList *pList = 0; /* List of VALUES() to be inserted */-
530-
531 /* Register allocations */-
532 int regFromSelect = 0;/* Base register for data coming from SELECT */-
533 int regAutoinc = 0; /* Register holding the AUTOINCREMENT counter */-
534 int regRowCount = 0; /* Memory cell used for the row counter */-
535 int regIns; /* Block of regs holding rowid+data being inserted */-
536 int regRowid; /* registers holding insert rowid */-
537 int regData; /* register holding first column to insert */-
538 int *aRegIdx = 0; /* One register allocated to each index */-
539-
540#ifndef SQLITE_OMIT_TRIGGER-
541 int isView; /* True if attempting to insert into a view */-
542 Trigger *pTrigger; /* List of triggers on pTab, if required */-
543 int tmask; /* Mask of trigger times */-
544#endif-
545-
546 db = pParse->db;-
547 if( pParse->nErr || db->mallocFailed ){
pParse->nErrDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 76515 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
db->mallocFailedDescription
TRUEevaluated 92 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 76423 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
2-76515
548 goto insert_cleanup;
executed 94 times by 1 test: goto insert_cleanup;
Executed by:
  • Self test (438)
94
549 }-
550 dest.iSDParm = 0; /* Suppress a harmless compiler warning */-
551-
552 /* If the Select object is really just a simple VALUES() list with a-
553 ** single row (the common case) then keep that one row of values-
554 ** and discard the other (unused) parts of the pSelect object-
555 */-
556 if( pSelect && (pSelect->selFlags & SF_Values)!=0 && pSelect->pPrior==0 ){
pSelectDescription
TRUEevaluated 76352 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
FALSEevaluated 71 times by 1 test
Evaluated by:
  • Self test (438)
(pSelect->selF... & 0x00200)!=0Description
TRUEevaluated 71868 times by 59 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
FALSEevaluated 4484 times by 6 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (64)
pSelect->pPrior==0Description
TRUEevaluated 71464 times by 59 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
FALSEevaluated 404 times by 1 test
Evaluated by:
  • Self test (438)
71-76352
557 pList = pSelect->pEList;-
558 pSelect->pEList = 0;-
559 sqlite3SelectDelete(db, pSelect);-
560 pSelect = 0;-
561 }
executed 71464 times by 59 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
71464
562-
563 /* Locate the table into which we will be inserting new information.-
564 */-
565 assert( pTabList->nSrc==1 );-
566 pTab = sqlite3SrcListLookup(pParse, pTabList);-
567 if( pTab==0 ){
pTab==0Description
TRUEevaluated 46 times by 6 tests
Evaluated by:
  • Self test (39)
  • Self test (438)
  • Self test (47)
  • Self test (79)
  • Self test (81)
  • Self test (83)
FALSEevaluated 76377 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
46-76377
568 goto insert_cleanup;
executed 46 times by 6 tests: goto insert_cleanup;
Executed by:
  • Self test (39)
  • Self test (438)
  • Self test (47)
  • Self test (79)
  • Self test (81)
  • Self test (83)
46
569 }-
570 iDb = sqlite3SchemaToIndex(db, pTab->pSchema);-
571 assert( iDb<db->nDb );-
572 if( sqlite3AuthCheck(pParse, SQLITE_INSERT, pTab->zName, 0,
sqlite3AuthChe...iDb].zDbSName)Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 76375 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
2-76375
573 db->aDb[iDb].zDbSName) ){
sqlite3AuthChe...iDb].zDbSName)Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 76375 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
2-76375
574 goto insert_cleanup;
executed 2 times by 1 test: goto insert_cleanup;
Executed by:
  • Self test (438)
2
575 }-
576 withoutRowid = !HasRowid(pTab);-
577-
578 /* Figure out if we have any triggers and if the table being-
579 ** inserted into is a view-
580 */-
581#ifndef SQLITE_OMIT_TRIGGER-
582 pTrigger = sqlite3TriggersExist(pParse, pTab, TK_INSERT, 0, &tmask);-
583 isView = pTab->pSelect!=0;-
584#else-
585# define pTrigger 0-
586# define tmask 0-
587# define isView 0-
588#endif-
589#ifdef SQLITE_OMIT_VIEW-
590# undef isView-
591# define isView 0-
592#endif-
593 assert( (pTrigger && tmask) || (pTrigger==0 && tmask==0) );-
594-
595 /* If pTab is really a view, make sure it has been initialized.-
596 ** ViewGetColumnNames() is a no-op if pTab is not a view.-
597 */-
598 if( sqlite3ViewGetColumnNames(pParse, pTab) ){
sqlite3ViewGet...(pParse, pTab)Description
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 76372 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
3-76372
599 goto insert_cleanup;
executed 3 times by 1 test: goto insert_cleanup;
Executed by:
  • Self test (438)
3
600 }-
601-
602 /* Cannot insert into a read-only table.-
603 */-
604 if( sqlite3IsReadOnly(pParse, pTab, tmask) ){
sqlite3IsReadO..., pTab, tmask)Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 76368 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
4-76368
605 goto insert_cleanup;
executed 4 times by 1 test: goto insert_cleanup;
Executed by:
  • Self test (438)
4
606 }-
607-
608 /* Allocate a VDBE-
609 */-
610 v = sqlite3GetVdbe(pParse);-
611 if( v==0 ) goto insert_cleanup;
never executed: goto insert_cleanup;
v==0Description
TRUEnever evaluated
FALSEevaluated 76368 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
0-76368
612 if( pParse->nested==0 ) sqlite3VdbeCountChanges(v);
executed 71110 times by 53 tests: sqlite3VdbeCountChanges(v);
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (41)
  • Self test (438)
  • ...
pParse->nested==0Description
TRUEevaluated 71110 times by 53 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (41)
  • Self test (438)
  • ...
FALSEevaluated 5258 times by 22 tests
Evaluated by:
  • Self test (100)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (32)
  • Self test (33)
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (47)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • Self test (99)
5258-71110
613 sqlite3BeginWriteOperation(pParse, pSelect || pTrigger, iDb);-
614-
615#ifndef SQLITE_OMIT_XFER_OPT-
616 /* If the statement is of the form-
617 **-
618 ** INSERT INTO <table1> SELECT * FROM <table2>;-
619 **-
620 ** Then special optimizations can be applied that make the transfer-
621 ** very fast and which reduce fragmentation of indices.-
622 **-
623 ** This is the 2nd template.-
624 */-
625 if( pColumn==0 && xferOptimization(pParse, pTab, pSelect, onError, iDb) ){
pColumn==0Description
TRUEevaluated 72382 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
FALSEevaluated 3986 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (47)
xferOptimizati... onError, iDb)Description
TRUEevaluated 1418 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
FALSEevaluated 70964 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
1418-72382
626 assert( !pTrigger );-
627 assert( pList==0 );-
628 goto insert_end;
executed 1418 times by 2 tests: goto insert_end;
Executed by:
  • Self test (34)
  • Self test (438)
1418
629 }-
630#endif /* SQLITE_OMIT_XFER_OPT */-
631-
632 /* If this is an AUTOINCREMENT table, look up the sequence number in the-
633 ** sqlite_sequence table and store it in memory cell regAutoinc.-
634 */-
635 regAutoinc = autoIncBegin(pParse, iDb, pTab);-
636-
637 /* Allocate registers for holding the rowid of the new row,-
638 ** the content of the new row, and the assembled row record.-
639 */-
640 regRowid = regIns = pParse->nMem+1;-
641 pParse->nMem += pTab->nCol + 1;-
642 if( IsVirtual(pTab) ){
((pTab)->nModuleArg)Description
TRUEevaluated 1001 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 73949 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
1001-73949
643 regRowid++;-
644 pParse->nMem++;-
645 }
executed 1001 times by 1 test: end of block
Executed by:
  • Self test (438)
1001
646 regData = regRowid+1;-
647-
648 /* If the INSERT statement included an IDLIST term, then make sure-
649 ** all elements of the IDLIST really are columns of the table and -
650 ** remember the column indices.-
651 **-
652 ** If the table has an INTEGER PRIMARY KEY column and that column-
653 ** is named in the IDLIST, then record in the ipkColumn variable-
654 ** the index into IDLIST of the primary key column. ipkColumn is-
655 ** the index of the primary key as it appears in IDLIST, not as-
656 ** is appears in the original table. (The index of the INTEGER-
657 ** PRIMARY KEY in the original table is pTab->iPKey.)-
658 */-
659 bIdListInOrder = (pTab->tabFlags & TF_OOOHidden)==0;-
660 if( pColumn ){
pColumnDescription
TRUEevaluated 3986 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (47)
FALSEevaluated 70964 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
3986-70964
661 for(i=0; i<pColumn->nId; i++){
i<pColumn->nIdDescription
TRUEevaluated 9720 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (47)
FALSEevaluated 3986 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (47)
3986-9720
662 pColumn->a[i].idx = -1;-
663 }
executed 9720 times by 2 tests: end of block
Executed by:
  • Self test (438)
  • Self test (47)
9720
664 for(i=0; i<pColumn->nId; i++){
i<pColumn->nIdDescription
TRUEevaluated 9720 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (47)
FALSEevaluated 3983 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (47)
3983-9720
665 for(j=0; j<pTab->nCol; j++){
j<pTab->nColDescription
TRUEevaluated 25157 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (47)
FALSEevaluated 399 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (47)
399-25157
666 if( sqlite3StrICmp(pColumn->a[i].zName, pTab->aCol[j].zName)==0 ){
sqlite3StrICmp...l[j].zName)==0Description
TRUEevaluated 9321 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (47)
FALSEevaluated 15836 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (47)
9321-15836
667 pColumn->a[i].idx = j;-
668 if( i!=j ) bIdListInOrder = 0;
executed 4310 times by 1 test: bIdListInOrder = 0;
Executed by:
  • Self test (438)
i!=jDescription
TRUEevaluated 4310 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 5011 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (47)
4310-5011
669 if( j==pTab->iPKey ){
j==pTab->iPKeyDescription
TRUEevaluated 254 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 9067 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (47)
254-9067
670 ipkColumn = i; assert( !withoutRowid );-
671 }
executed 254 times by 1 test: end of block
Executed by:
  • Self test (438)
254
672 break;
executed 9321 times by 2 tests: break;
Executed by:
  • Self test (438)
  • Self test (47)
9321
673 }-
674 }
executed 15836 times by 2 tests: end of block
Executed by:
  • Self test (438)
  • Self test (47)
15836
675 if( j>=pTab->nCol ){
j>=pTab->nColDescription
TRUEevaluated 399 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (47)
FALSEevaluated 9321 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (47)
399-9321
676 if( sqlite3IsRowid(pColumn->a[i].zName) && !withoutRowid ){
sqlite3IsRowid...n->a[i].zName)Description
TRUEevaluated 396 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (47)
!withoutRowidDescription
TRUEevaluated 396 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-396
677 ipkColumn = i;-
678 bIdListInOrder = 0;-
679 }else{
executed 396 times by 1 test: end of block
Executed by:
  • Self test (438)
396
680 sqlite3ErrorMsg(pParse, "table %S has no column named %s",-
681 pTabList, 0, pColumn->a[i].zName);-
682 pParse->checkSchema = 1;-
683 goto insert_cleanup;
executed 3 times by 2 tests: goto insert_cleanup;
Executed by:
  • Self test (438)
  • Self test (47)
3
684 }-
685 }-
686 }
executed 9717 times by 2 tests: end of block
Executed by:
  • Self test (438)
  • Self test (47)
9717
687 }
executed 3983 times by 2 tests: end of block
Executed by:
  • Self test (438)
  • Self test (47)
3983
688-
689 /* Figure out how many columns of data are supplied. If the data-
690 ** is coming from a SELECT statement, then generate a co-routine that-
691 ** produces a single row of the SELECT on each invocation. The-
692 ** co-routine is the common header to the 3rd and 4th templates.-
693 */-
694 if( pSelect ){
pSelectDescription
TRUEevaluated 3470 times by 6 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (64)
FALSEevaluated 71477 times by 59 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
3470-71477
695 /* Data is coming from a SELECT or from a multi-row VALUES clause.-
696 ** Generate a co-routine to run the SELECT. */-
697 int regYield; /* Register holding co-routine entry-point */-
698 int addrTop; /* Top of the co-routine */-
699 int rc; /* Result code */-
700-
701 regYield = ++pParse->nMem;-
702 addrTop = sqlite3VdbeCurrentAddr(v) + 1;-
703 sqlite3VdbeAddOp3(v, OP_InitCoroutine, regYield, 0, addrTop);-
704 sqlite3SelectDestInit(&dest, SRT_Coroutine, regYield);-
705 dest.iSdst = bIdListInOrder ? regData : 0;
bIdListInOrderDescription
TRUEevaluated 3387 times by 6 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (64)
FALSEevaluated 83 times by 1 test
Evaluated by:
  • Self test (438)
83-3387
706 dest.nSdst = pTab->nCol;-
707 rc = sqlite3Select(pParse, pSelect, &dest);-
708 regFromSelect = dest.iSdst;-
709 if( rc || db->mallocFailed || pParse->nErr ) goto insert_cleanup;
executed 8 times by 1 test: goto insert_cleanup;
Executed by:
  • Self test (438)
rcDescription
TRUEevaluated 7 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3463 times by 6 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (64)
db->mallocFailedDescription
TRUEnever evaluated
FALSEevaluated 3463 times by 6 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (64)
pParse->nErrDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3462 times by 6 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (64)
0-3463
710 sqlite3VdbeEndCoroutine(v, regYield);-
711 sqlite3VdbeJumpHere(v, addrTop - 1); /* label B: */-
712 assert( pSelect->pEList );-
713 nColumn = pSelect->pEList->nExpr;-
714-
715 /* Set useTempTable to TRUE if the result of the SELECT statement-
716 ** should be written into a temporary table (template 4). Set to-
717 ** FALSE if each output row of the SELECT can be written directly into-
718 ** the destination table (template 3).-
719 **-
720 ** A temp table must be used if the table being updated is also one-
721 ** of the tables being read by the SELECT statement. Also use a -
722 ** temp table in the case of row triggers.-
723 */-
724 if( pTrigger || readsTable(pParse, iDb, pTab) ){
pTriggerDescription
TRUEevaluated 30 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3432 times by 6 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (64)
readsTable(pParse, iDb, pTab)Description
TRUEevaluated 1430 times by 5 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
FALSEevaluated 2002 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
30-3432
725 useTempTable = 1;-
726 }
executed 1460 times by 5 tests: end of block
Executed by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
1460
727-
728 if( useTempTable ){
useTempTableDescription
TRUEevaluated 1460 times by 5 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
FALSEevaluated 2002 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
1460-2002
729 /* Invoke the coroutine to extract information from the SELECT-
730 ** and add it to a transient table srcTab. The code generated-
731 ** here is from the 4th template:-
732 **-
733 ** B: open temp table-
734 ** L: yield X, goto M at EOF-
735 ** insert row from R..R+n into temp table-
736 ** goto L-
737 ** M: ...-
738 */-
739 int regRec; /* Register to hold packed record */-
740 int regTempRowid; /* Register to hold temp table ROWID */-
741 int addrL; /* Label "L" */-
742-
743 srcTab = pParse->nTab++;-
744 regRec = sqlite3GetTempReg(pParse);-
745 regTempRowid = sqlite3GetTempReg(pParse);-
746 sqlite3VdbeAddOp2(v, OP_OpenEphemeral, srcTab, nColumn);-
747 addrL = sqlite3VdbeAddOp1(v, OP_Yield, dest.iSDParm); VdbeCoverage(v);-
748 sqlite3VdbeAddOp3(v, OP_MakeRecord, regFromSelect, nColumn, regRec);-
749 sqlite3VdbeAddOp2(v, OP_NewRowid, srcTab, regTempRowid);-
750 sqlite3VdbeAddOp3(v, OP_Insert, srcTab, regRec, regTempRowid);-
751 sqlite3VdbeGoto(v, addrL);-
752 sqlite3VdbeJumpHere(v, addrL);-
753 sqlite3ReleaseTempReg(pParse, regRec);-
754 sqlite3ReleaseTempReg(pParse, regTempRowid);-
755 }
executed 1460 times by 5 tests: end of block
Executed by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
1460
756 }else{
executed 3462 times by 6 tests: end of block
Executed by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (64)
3462
757 /* This is the case if the data for the INSERT is coming from a -
758 ** single-row VALUES clause-
759 */-
760 NameContext sNC;-
761 memset(&sNC, 0, sizeof(sNC));-
762 sNC.pParse = pParse;-
763 srcTab = -1;-
764 assert( useTempTable==0 );-
765 if( pList ){
pListDescription
TRUEevaluated 71408 times by 59 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
FALSEevaluated 69 times by 1 test
Evaluated by:
  • Self test (438)
69-71408
766 nColumn = pList->nExpr;-
767 if( sqlite3ResolveExprListNames(&sNC, pList) ){
sqlite3Resolve...s(&sNC, pList)Description
TRUEevaluated 7 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 71401 times by 59 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
7-71401
768 goto insert_cleanup;
executed 7 times by 1 test: goto insert_cleanup;
Executed by:
  • Self test (438)
7
769 }-
770 }else{
executed 71401 times by 59 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
71401
771 nColumn = 0;-
772 }
executed 69 times by 1 test: end of block
Executed by:
  • Self test (438)
69
773 }-
774-
775 /* If there is no IDLIST term but the table has an integer primary-
776 ** key, the set the ipkColumn variable to the integer primary key -
777 ** column index in the original table definition.-
778 */-
779 if( pColumn==0 && nColumn>0 ){
pColumn==0Description
TRUEevaluated 70957 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
FALSEevaluated 3975 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (47)
nColumn>0Description
TRUEevaluated 70888 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
FALSEevaluated 69 times by 1 test
Evaluated by:
  • Self test (438)
69-70957
780 ipkColumn = pTab->iPKey;-
781 }
executed 70888 times by 61 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
70888
782-
783 /* Make sure the number of columns in the source data matches the number-
784 ** of columns to be inserted into the table.-
785 */-
786 for(i=0; i<pTab->nCol; i++){
i<pTab->nColDescription
TRUEevaluated 307296 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
FALSEevaluated 74932 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
74932-307296
787 nHidden += (IsHiddenColumn(&pTab->aCol[i]) ? 1 : 0);
(((&pTab->aCol... & 0x0002)!=0)Description
TRUEevaluated 229 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 307067 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
229-307067
788 }
executed 307296 times by 61 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
307296
789 if( pColumn==0 && nColumn && nColumn!=(pTab->nCol-nHidden) ){
pColumn==0Description
TRUEevaluated 70957 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
FALSEevaluated 3975 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (47)
nColumnDescription
TRUEevaluated 70888 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
FALSEevaluated 69 times by 1 test
Evaluated by:
  • Self test (438)
nColumn!=(pTab->nCol-nHidden)Description
TRUEevaluated 12 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 70876 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
12-70957
790 sqlite3ErrorMsg(pParse, -
791 "table %S has %d columns but %d values were supplied",-
792 pTabList, 0, pTab->nCol-nHidden, nColumn);-
793 goto insert_cleanup;
executed 12 times by 1 test: goto insert_cleanup;
Executed by:
  • Self test (438)
12
794 }-
795 if( pColumn!=0 && nColumn!=pColumn->nId ){
pColumn!=0Description
TRUEevaluated 3975 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (47)
FALSEevaluated 70945 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
nColumn!=pColumn->nIdDescription
TRUEevaluated 20 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3955 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (47)
20-70945
796 sqlite3ErrorMsg(pParse, "%d values for %d columns", nColumn, pColumn->nId);-
797 goto insert_cleanup;
executed 20 times by 1 test: goto insert_cleanup;
Executed by:
  • Self test (438)
20
798 }-
799 -
800 /* Initialize the count of rows to be inserted-
801 */-
802 if( (db->flags & SQLITE_CountRows)!=0
(db->flags & 0x00000080)!=0Description
TRUEevaluated 532 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 74368 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
532-74368
803 && !pParse->nested
!pParse->nestedDescription
TRUEevaluated 521 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 11 times by 1 test
Evaluated by:
  • Self test (438)
11-521
804 && !pParse->pTriggerTab
!pParse->pTriggerTabDescription
TRUEevaluated 519 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
2-519
805 ){-
806 regRowCount = ++pParse->nMem;-
807 sqlite3VdbeAddOp2(v, OP_Integer, 0, regRowCount);-
808 }
executed 519 times by 1 test: end of block
Executed by:
  • Self test (438)
519
809-
810 /* If this is not a view, open the table and and all indices */-
811 if( !isView ){
!isViewDescription
TRUEevaluated 74871 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
FALSEevaluated 29 times by 1 test
Evaluated by:
  • Self test (438)
29-74871
812 int nIdx;-
813 nIdx = sqlite3OpenTableAndIndices(pParse, pTab, OP_OpenWrite, 0, -1, 0,-
814 &iDataCur, &iIdxCur);-
815 aRegIdx = sqlite3DbMallocRawNN(db, sizeof(int)*(nIdx+1));-
816 if( aRegIdx==0 ){
aRegIdx==0Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 74867 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
4-74867
817 goto insert_cleanup;
executed 4 times by 1 test: goto insert_cleanup;
Executed by:
  • Self test (438)
4
818 }-
819 for(i=0, pIdx=pTab->pIndex; i<nIdx; pIdx=pIdx->pNext, i++){
i<nIdxDescription
TRUEevaluated 19843 times by 29 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (6)
  • Self test (7)
  • Self test (86)
  • Self test (88)
  • Self test (9)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • ...
FALSEevaluated 74867 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
19843-74867
820 assert( pIdx );-
821 aRegIdx[i] = ++pParse->nMem;-
822 pParse->nMem += pIdx->nColumn;-
823 }
executed 19843 times by 29 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (6)
  • Self test (7)
  • Self test (86)
  • Self test (88)
  • Self test (9)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • ...
19843
824 }
executed 74867 times by 61 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
74867
825#ifndef SQLITE_OMIT_UPSERT-
826 if( pUpsert ){
pUpsertDescription
TRUEevaluated 154 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 74742 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
154-74742
827 pTabList->a[0].iCursor = iDataCur;-
828 pUpsert->pUpsertSrc = pTabList;-
829 pUpsert->regData = regData;-
830 pUpsert->iDataCur = iDataCur;-
831 pUpsert->iIdxCur = iIdxCur;-
832 if( pUpsert->pUpsertTarget ){
pUpsert->pUpsertTargetDescription
TRUEevaluated 136 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 18 times by 1 test
Evaluated by:
  • Self test (438)
18-136
833 sqlite3UpsertAnalyzeTarget(pParse, pTabList, pUpsert);-
834 }
executed 136 times by 1 test: end of block
Executed by:
  • Self test (438)
136
835 }
executed 154 times by 1 test: end of block
Executed by:
  • Self test (438)
154
836#endif-
837-
838-
839 /* This is the top of the main insertion loop */-
840 if( useTempTable ){
useTempTableDescription
TRUEevaluated 1457 times by 5 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
FALSEevaluated 73439 times by 60 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
1457-73439
841 /* This block codes the top of loop only. The complete loop is the-
842 ** following pseudocode (template 4):-
843 **-
844 ** rewind temp table, if empty goto D-
845 ** C: loop over rows of intermediate table-
846 ** transfer values form intermediate table into <table>-
847 ** end loop-
848 ** D: ...-
849 */-
850 addrInsTop = sqlite3VdbeAddOp1(v, OP_Rewind, srcTab); VdbeCoverage(v);-
851 addrCont = sqlite3VdbeCurrentAddr(v);-
852 }else if( pSelect ){
executed 1457 times by 5 tests: end of block
Executed by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
pSelectDescription
TRUEevaluated 1989 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
FALSEevaluated 71450 times by 59 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
1457-71450
853 /* This block codes the top of loop only. The complete loop is the-
854 ** following pseudocode (template 3):-
855 **-
856 ** C: yield X, at EOF goto D-
857 ** insert the select result into <table> from R..R+n-
858 ** goto C-
859 ** D: ...-
860 */-
861 addrInsTop = addrCont = sqlite3VdbeAddOp1(v, OP_Yield, dest.iSDParm);-
862 VdbeCoverage(v);-
863 }
executed 1989 times by 2 tests: end of block
Executed by:
  • Self test (34)
  • Self test (438)
1989
864-
865 /* Run the BEFORE and INSTEAD OF triggers, if there are any-
866 */-
867 endOfLoop = sqlite3VdbeMakeLabel(v);-
868 if( tmask & TRIGGER_BEFORE ){
tmask & 1Description
TRUEevaluated 185 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 74711 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
185-74711
869 int regCols = sqlite3GetTempRange(pParse, pTab->nCol+1);-
870-
871 /* build the NEW.* reference row. Note that if there is an INTEGER-
872 ** PRIMARY KEY into which a NULL is being inserted, that NULL will be-
873 ** translated into a unique ID for the row. But on a BEFORE trigger,-
874 ** we do not know what the unique ID will be (because the insert has-
875 ** not happened yet) so we substitute a rowid of -1-
876 */-
877 if( ipkColumn<0 ){
ipkColumn<0Description
TRUEevaluated 172 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 13 times by 1 test
Evaluated by:
  • Self test (438)
13-172
878 sqlite3VdbeAddOp2(v, OP_Integer, -1, regCols);-
879 }else{
executed 172 times by 1 test: end of block
Executed by:
  • Self test (438)
172
880 int addr1;-
881 assert( !withoutRowid );-
882 if( useTempTable ){
useTempTableDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 11 times by 1 test
Evaluated by:
  • Self test (438)
2-11
883 sqlite3VdbeAddOp3(v, OP_Column, srcTab, ipkColumn, regCols);-
884 }else{
executed 2 times by 1 test: end of block
Executed by:
  • Self test (438)
2
885 assert( pSelect==0 ); /* Otherwise useTempTable is true */-
886 sqlite3ExprCode(pParse, pList->a[ipkColumn].pExpr, regCols);-
887 }
executed 11 times by 1 test: end of block
Executed by:
  • Self test (438)
11
888 addr1 = sqlite3VdbeAddOp1(v, OP_NotNull, regCols); VdbeCoverage(v);-
889 sqlite3VdbeAddOp2(v, OP_Integer, -1, regCols);-
890 sqlite3VdbeJumpHere(v, addr1);-
891 sqlite3VdbeAddOp1(v, OP_MustBeInt, regCols); VdbeCoverage(v);-
892 }
executed 13 times by 1 test: end of block
Executed by:
  • Self test (438)
13
893-
894 /* Cannot have triggers on a virtual table. If it were possible,-
895 ** this block would have to account for hidden column.-
896 */-
897 assert( !IsVirtual(pTab) );-
898-
899 /* Create the new column data-
900 */-
901 for(i=j=0; i<pTab->nCol; i++){
i<pTab->nColDescription
TRUEevaluated 396 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 185 times by 1 test
Evaluated by:
  • Self test (438)
185-396
902 if( pColumn ){
pColumnDescription
TRUEevaluated 65 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 331 times by 1 test
Evaluated by:
  • Self test (438)
65-331
903 for(j=0; j<pColumn->nId; j++){
j<pColumn->nIdDescription
TRUEevaluated 99 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 26 times by 1 test
Evaluated by:
  • Self test (438)
26-99
904 if( pColumn->a[j].idx==i ) break;
executed 39 times by 1 test: break;
Executed by:
  • Self test (438)
pColumn->a[j].idx==iDescription
TRUEevaluated 39 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 60 times by 1 test
Evaluated by:
  • Self test (438)
39-60
905 }
executed 60 times by 1 test: end of block
Executed by:
  • Self test (438)
60
906 }
executed 65 times by 1 test: end of block
Executed by:
  • Self test (438)
65
907 if( (!useTempTable && !pList) || (pColumn && j>=pColumn->nId)
!useTempTableDescription
TRUEevaluated 368 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 28 times by 1 test
Evaluated by:
  • Self test (438)
!pListDescription
TRUEevaluated 14 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 354 times by 1 test
Evaluated by:
  • Self test (438)
pColumnDescription
TRUEevaluated 65 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 317 times by 1 test
Evaluated by:
  • Self test (438)
j>=pColumn->nIdDescription
TRUEevaluated 26 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 39 times by 1 test
Evaluated by:
  • Self test (438)
14-368
908 || (pColumn==0 && IsOrdinaryHiddenColumn(&pTab->aCol[i])) ){-
909 sqlite3ExprCode(pParse, pTab->aCol[i].pDflt, regCols+i+1);-
910 }else if( useTempTable ){
executed 40 times by 1 test: end of block
Executed by:
  • Self test (438)
useTempTableDescription
TRUEevaluated 22 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 334 times by 1 test
Evaluated by:
  • Self test (438)
22-334
911 sqlite3VdbeAddOp3(v, OP_Column, srcTab, j, regCols+i+1); -
912 }else{
executed 22 times by 1 test: end of block
Executed by:
  • Self test (438)
22
913 assert( pSelect==0 ); /* Otherwise useTempTable is true */-
914 sqlite3ExprCodeAndCache(pParse, pList->a[j].pExpr, regCols+i+1);-
915 }
executed 334 times by 1 test: end of block
Executed by:
  • Self test (438)
334
916 if( pColumn==0 && !IsOrdinaryHiddenColumn(&pTab->aCol[i]) ) j++;
executed 331 times by 1 test: j++;
Executed by:
  • Self test (438)
pColumn==0Description
TRUEevaluated 331 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 65 times by 1 test
Evaluated by:
  • Self test (438)
65-331
917 }
executed 396 times by 1 test: end of block
Executed by:
  • Self test (438)
396
918-
919 /* If this is an INSERT on a view with an INSTEAD OF INSERT trigger,-
920 ** do not attempt any conversions before assembling the record.-
921 ** If this is a real table, attempt conversions as required by the-
922 ** table column affinities.-
923 */-
924 if( !isView ){
!isViewDescription
TRUEevaluated 156 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 29 times by 1 test
Evaluated by:
  • Self test (438)
29-156
925 sqlite3TableAffinity(v, pTab, regCols+1);-
926 }
executed 156 times by 1 test: end of block
Executed by:
  • Self test (438)
156
927-
928 /* Fire BEFORE or INSTEAD OF triggers */-
929 sqlite3CodeRowTrigger(pParse, pTrigger, TK_INSERT, 0, TRIGGER_BEFORE, -
930 pTab, regCols-pTab->nCol-1, onError, endOfLoop);-
931-
932 sqlite3ReleaseTempRange(pParse, regCols, pTab->nCol+1);-
933 }
executed 185 times by 1 test: end of block
Executed by:
  • Self test (438)
185
934-
935 /* Compute the content of the next row to insert into a range of-
936 ** registers beginning at regIns.-
937 */-
938 if( !isView ){
!isViewDescription
TRUEevaluated 74867 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
FALSEevaluated 29 times by 1 test
Evaluated by:
  • Self test (438)
29-74867
939 if( IsVirtual(pTab) ){
((pTab)->nModuleArg)Description
TRUEevaluated 1001 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 73866 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
1001-73866
940 /* The row that the VUpdate opcode will delete: none */-
941 sqlite3VdbeAddOp2(v, OP_Null, 0, regIns);-
942 }
executed 1001 times by 1 test: end of block
Executed by:
  • Self test (438)
1001
943 if( ipkColumn>=0 ){
ipkColumn>=0Description
TRUEevaluated 2412 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 72455 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
2412-72455
944 if( useTempTable ){
useTempTableDescription
TRUEevaluated 144 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2268 times by 1 test
Evaluated by:
  • Self test (438)
144-2268
945 sqlite3VdbeAddOp3(v, OP_Column, srcTab, ipkColumn, regRowid);-
946 }else if( pSelect ){
executed 144 times by 1 test: end of block
Executed by:
  • Self test (438)
pSelectDescription
TRUEevaluated 253 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2015 times by 1 test
Evaluated by:
  • Self test (438)
144-2015
947 sqlite3VdbeAddOp2(v, OP_Copy, regFromSelect+ipkColumn, regRowid);-
948 }else{
executed 253 times by 1 test: end of block
Executed by:
  • Self test (438)
253
949 VdbeOp *pOp;-
950 sqlite3ExprCode(pParse, pList->a[ipkColumn].pExpr, regRowid);-
951 pOp = sqlite3VdbeGetOp(v, -1);-
952 assert( pOp!=0 );-
953 if( pOp->opcode==OP_Null && !IsVirtual(pTab) ){
pOp->opcode==73Description
TRUEevaluated 103 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1912 times by 1 test
Evaluated by:
  • Self test (438)
!((pTab)->nModuleArg)Description
TRUEevaluated 102 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
1-1912
954 appendFlag = 1;-
955 pOp->opcode = OP_NewRowid;-
956 pOp->p1 = iDataCur;-
957 pOp->p2 = regRowid;-
958 pOp->p3 = regAutoinc;-
959 }
executed 102 times by 1 test: end of block
Executed by:
  • Self test (438)
102
960 }
executed 2015 times by 1 test: end of block
Executed by:
  • Self test (438)
2015
961 /* If the PRIMARY KEY expression is NULL, then use OP_NewRowid-
962 ** to generate a unique primary key value.-
963 */-
964 if( !appendFlag ){
!appendFlagDescription
TRUEevaluated 2310 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 102 times by 1 test
Evaluated by:
  • Self test (438)
102-2310
965 int addr1;-
966 if( !IsVirtual(pTab) ){
!((pTab)->nModuleArg)Description
TRUEevaluated 2288 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 22 times by 1 test
Evaluated by:
  • Self test (438)
22-2288
967 addr1 = sqlite3VdbeAddOp1(v, OP_NotNull, regRowid); VdbeCoverage(v);-
968 sqlite3VdbeAddOp3(v, OP_NewRowid, iDataCur, regRowid, regAutoinc);-
969 sqlite3VdbeJumpHere(v, addr1);-
970 }else{
executed 2288 times by 1 test: end of block
Executed by:
  • Self test (438)
2288
971 addr1 = sqlite3VdbeCurrentAddr(v);-
972 sqlite3VdbeAddOp2(v, OP_IsNull, regRowid, addr1+2); VdbeCoverage(v);-
973 }
executed 22 times by 1 test: end of block
Executed by:
  • Self test (438)
22
974 sqlite3VdbeAddOp1(v, OP_MustBeInt, regRowid); VdbeCoverage(v);-
975 }
executed 2310 times by 1 test: end of block
Executed by:
  • Self test (438)
2310
976 }else if( IsVirtual(pTab) || withoutRowid ){
executed 2412 times by 1 test: end of block
Executed by:
  • Self test (438)
((pTab)->nModuleArg)Description
TRUEevaluated 979 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 71476 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
withoutRowidDescription
TRUEevaluated 777 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 70699 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
777-71476
977 sqlite3VdbeAddOp2(v, OP_Null, 0, regRowid);-
978 }else{
executed 1756 times by 1 test: end of block
Executed by:
  • Self test (438)
1756
979 sqlite3VdbeAddOp3(v, OP_NewRowid, iDataCur, regRowid, regAutoinc);-
980 appendFlag = 1;-
981 }
executed 70699 times by 61 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
70699
982 autoIncStep(pParse, regAutoinc, regRowid);-
983-
984 /* Compute data for all columns of the new entry, beginning-
985 ** with the first column.-
986 */-
987 nHidden = 0;-
988 for(i=0; i<pTab->nCol; i++){
i<pTab->nColDescription
TRUEevaluated 307134 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
FALSEevaluated 74867 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
74867-307134
989 int iRegStore = regRowid+1+i;-
990 if( i==pTab->iPKey ){
i==pTab->iPKeyDescription
TRUEevaluated 2730 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 304404 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
2730-304404
991 /* The value of the INTEGER PRIMARY KEY column is always a NULL.-
992 ** Whenever this column is read, the rowid will be substituted-
993 ** in its place. Hence, fill this column with a NULL to avoid-
994 ** taking up data space with information that will never be used.-
995 ** As there may be shallow copies of this value, make it a soft-NULL */-
996 sqlite3VdbeAddOp1(v, OP_SoftNull, iRegStore);-
997 continue;
executed 2730 times by 1 test: continue;
Executed by:
  • Self test (438)
2730
998 }-
999 if( pColumn==0 ){
pColumn==0Description
TRUEevaluated 293813 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
FALSEevaluated 10591 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (47)
10591-293813
1000 if( IsHiddenColumn(&pTab->aCol[i]) ){
(((&pTab->aCol... & 0x0002)!=0)Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 293809 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
4-293809
1001 j = -1;-
1002 nHidden++;-
1003 }else{
executed 4 times by 1 test: end of block
Executed by:
  • Self test (438)
4
1004 j = i - nHidden;-
1005 }
executed 293809 times by 61 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
293809
1006 }else{-
1007 for(j=0; j<pColumn->nId; j++){
j<pColumn->nIdDescription
TRUEevaluated 23168 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (47)
FALSEevaluated 1595 times by 1 test
Evaluated by:
  • Self test (438)
1595-23168
1008 if( pColumn->a[j].idx==i ) break;
executed 8996 times by 2 tests: break;
Executed by:
  • Self test (438)
  • Self test (47)
pColumn->a[j].idx==iDescription
TRUEevaluated 8996 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (47)
FALSEevaluated 14172 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (47)
8996-14172
1009 }
executed 14172 times by 2 tests: end of block
Executed by:
  • Self test (438)
  • Self test (47)
14172
1010 }
executed 10591 times by 2 tests: end of block
Executed by:
  • Self test (438)
  • Self test (47)
10591
1011 if( j<0 || nColumn==0 || (pColumn && j>=pColumn->nId) ){
j<0Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 304400 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
nColumn==0Description
TRUEevaluated 160 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 304240 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
pColumnDescription
TRUEevaluated 10591 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (47)
FALSEevaluated 293649 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
j>=pColumn->nIdDescription
TRUEevaluated 1595 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 8996 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (47)
4-304400
1012 sqlite3ExprCodeFactorable(pParse, pTab->aCol[i].pDflt, iRegStore);-
1013 }else if( useTempTable ){
executed 1759 times by 1 test: end of block
Executed by:
  • Self test (438)
useTempTableDescription
TRUEevaluated 2381 times by 5 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
FALSEevaluated 300264 times by 60 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
1759-300264
1014 sqlite3VdbeAddOp3(v, OP_Column, srcTab, j, iRegStore); -
1015 }else if( pSelect ){
executed 2381 times by 5 tests: end of block
Executed by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
pSelectDescription
TRUEevaluated 5016 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
FALSEevaluated 295248 times by 59 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
2381-295248
1016 if( regFromSelect!=regData ){
regFromSelect!=regDataDescription
TRUEevaluated 109 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4907 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
109-4907
1017 sqlite3VdbeAddOp2(v, OP_SCopy, regFromSelect+j, iRegStore);-
1018 }
executed 109 times by 1 test: end of block
Executed by:
  • Self test (438)
109
1019 }else{
executed 5016 times by 2 tests: end of block
Executed by:
  • Self test (34)
  • Self test (438)
5016
1020 sqlite3ExprCode(pParse, pList->a[j].pExpr, iRegStore);-
1021 }
executed 295248 times by 59 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
295248
1022 }-
1023-
1024 /* Generate code to check constraints and generate index keys and-
1025 ** do the insertion.-
1026 */-
1027#ifndef SQLITE_OMIT_VIRTUALTABLE-
1028 if( IsVirtual(pTab) ){
((pTab)->nModuleArg)Description
TRUEevaluated 1001 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 73866 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
1001-73866
1029 const char *pVTab = (const char *)sqlite3GetVTable(db, pTab);-
1030 sqlite3VtabMakeWritable(pParse, pTab);-
1031 sqlite3VdbeAddOp4(v, OP_VUpdate, 1, pTab->nCol+2, regIns, pVTab, P4_VTAB);-
1032 sqlite3VdbeChangeP5(v, onError==OE_Default ? OE_Abort : onError);-
1033 sqlite3MayAbort(pParse);-
1034 }else
executed 1001 times by 1 test: end of block
Executed by:
  • Self test (438)
1001
1035#endif-
1036 {-
1037 int isReplace; /* Set to true if constraints may cause a replace */-
1038 int bUseSeek; /* True to use OPFLAG_SEEKRESULT */-
1039 sqlite3GenerateConstraintChecks(pParse, pTab, aRegIdx, iDataCur, iIdxCur,-
1040 regIns, 0, ipkColumn>=0, onError, endOfLoop, &isReplace, 0, pUpsert-
1041 );-
1042 sqlite3FkCheck(pParse, pTab, 0, regIns, 0, 0);-
1043-
1044 /* Set the OPFLAG_USESEEKRESULT flag if either (a) there are no REPLACE-
1045 ** constraints or (b) there are no triggers and this table is not a-
1046 ** parent table in a foreign key constraint. It is safe to set the-
1047 ** flag in the second case as if any REPLACE constraint is hit, an-
1048 ** OP_Delete or OP_IdxDelete instruction will be executed on each -
1049 ** cursor that is disturbed. And these instructions both clear the-
1050 ** VdbeCursor.seekResult variable, disabling the OPFLAG_USESEEKRESULT-
1051 ** functionality. */-
1052 bUseSeek = (isReplace==0 || (pTrigger==0 &&
isReplace==0Description
TRUEevaluated 73688 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
FALSEevaluated 178 times by 1 test
Evaluated by:
  • Self test (438)
pTrigger==0Description
TRUEevaluated 174 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
4-73688
1053 ((db->flags & SQLITE_ForeignKeys)==0 || sqlite3FkReferences(pTab)==0)
(db->flags & 0x00004000)==0Description
TRUEevaluated 145 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 29 times by 1 test
Evaluated by:
  • Self test (438)
sqlite3FkReferences(pTab)==0Description
TRUEevaluated 11 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 18 times by 1 test
Evaluated by:
  • Self test (438)
11-145
1054 ));-
1055 sqlite3CompleteInsertion(pParse, pTab, iDataCur, iIdxCur,-
1056 regIns, aRegIdx, 0, appendFlag, bUseSeek-
1057 );-
1058 }
executed 73866 times by 61 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
73866
1059 }-
1060-
1061 /* Update the count of rows that are inserted-
1062 */-
1063 if( regRowCount ){
regRowCountDescription
TRUEevaluated 519 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 74377 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
519-74377
1064 sqlite3VdbeAddOp2(v, OP_AddImm, regRowCount, 1);-
1065 }
executed 519 times by 1 test: end of block
Executed by:
  • Self test (438)
519
1066-
1067 if( pTrigger ){
pTriggerDescription
TRUEevaluated 466 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 74430 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
466-74430
1068 /* Code AFTER triggers */-
1069 sqlite3CodeRowTrigger(pParse, pTrigger, TK_INSERT, 0, TRIGGER_AFTER, -
1070 pTab, regData-2-pTab->nCol, onError, endOfLoop);-
1071 }
executed 466 times by 1 test: end of block
Executed by:
  • Self test (438)
466
1072-
1073 /* The bottom of the main insertion loop, if the data source-
1074 ** is a SELECT statement.-
1075 */-
1076 sqlite3VdbeResolveLabel(v, endOfLoop);-
1077 if( useTempTable ){
useTempTableDescription
TRUEevaluated 1457 times by 5 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
FALSEevaluated 73439 times by 60 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
1457-73439
1078 sqlite3VdbeAddOp2(v, OP_Next, srcTab, addrCont); VdbeCoverage(v);-
1079 sqlite3VdbeJumpHere(v, addrInsTop);-
1080 sqlite3VdbeAddOp1(v, OP_Close, srcTab);-
1081 }else if( pSelect ){
executed 1457 times by 5 tests: end of block
Executed by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
pSelectDescription
TRUEevaluated 1989 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
FALSEevaluated 71450 times by 59 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
1457-71450
1082 sqlite3VdbeGoto(v, addrCont);-
1083 sqlite3VdbeJumpHere(v, addrInsTop);-
1084 }
executed 1989 times by 2 tests: end of block
Executed by:
  • Self test (34)
  • Self test (438)
1989
1085-
1086insert_end:
code before this statement executed 74896 times by 61 tests: insert_end:
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
74896
1087 /* Update the sqlite_sequence table by storing the content of the-
1088 ** maximum rowid counter values recorded while inserting into-
1089 ** autoincrement tables.-
1090 */-
1091 if( pParse->nested==0 && pParse->pTriggerTab==0 ){
pParse->nested==0Description
TRUEevaluated 71056 times by 53 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (41)
  • Self test (438)
  • ...
FALSEevaluated 5258 times by 22 tests
Evaluated by:
  • Self test (100)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (32)
  • Self test (33)
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (47)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • Self test (99)
pParse->pTriggerTab==0Description
TRUEevaluated 64750 times by 53 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (41)
  • Self test (438)
  • ...
FALSEevaluated 6306 times by 1 test
Evaluated by:
  • Self test (438)
5258-71056
1092 sqlite3AutoincrementEnd(pParse);-
1093 }
executed 64750 times by 53 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (41)
  • Self test (438)
  • ...
64750
1094-
1095 /*-
1096 ** Return the number of rows inserted. If this routine is -
1097 ** generating code because of a call to sqlite3NestedParse(), do not-
1098 ** invoke the callback function.-
1099 */-
1100 if( regRowCount ){
regRowCountDescription
TRUEevaluated 519 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 75795 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
519-75795
1101 sqlite3VdbeAddOp2(v, OP_ResultRow, regRowCount, 1);-
1102 sqlite3VdbeSetNumCols(v, 1);-
1103 sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "rows inserted", SQLITE_STATIC);-
1104 }
executed 519 times by 1 test: end of block
Executed by:
  • Self test (438)
519
1105-
1106insert_cleanup:
code before this statement executed 76314 times by 61 tests: insert_cleanup:
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
76314
1107 sqlite3SrcListDelete(db, pTabList);-
1108 sqlite3ExprListDelete(db, pList);-
1109 sqlite3UpsertDelete(db, pUpsert);-
1110 sqlite3SelectDelete(db, pSelect);-
1111 sqlite3IdListDelete(db, pColumn);-
1112 sqlite3DbFree(db, aRegIdx);-
1113}
executed 76517 times by 61 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
76517
1114-
1115/* Make sure "isView" and other macros defined above are undefined. Otherwise-
1116** they may interfere with compilation of other functions in this file-
1117** (or in another file, if this file becomes part of the amalgamation). */-
1118#ifdef isView-
1119 #undef isView-
1120#endif-
1121#ifdef pTrigger-
1122 #undef pTrigger-
1123#endif-
1124#ifdef tmask-
1125 #undef tmask-
1126#endif-
1127-
1128/*-
1129** Meanings of bits in of pWalker->eCode for -
1130** sqlite3ExprReferencesUpdatedColumn()-
1131*/-
1132#define CKCNSTRNT_COLUMN 0x01 /* CHECK constraint uses a changing column */-
1133#define CKCNSTRNT_ROWID 0x02 /* CHECK constraint references the ROWID */-
1134-
1135/* This is the Walker callback from sqlite3ExprReferencesUpdatedColumn().-
1136* Set bit 0x01 of pWalker->eCode if pWalker->eCode to 0 and if this-
1137** expression node references any of the-
1138** columns that are being modifed by an UPDATE statement.-
1139*/-
1140static int checkConstraintExprNode(Walker *pWalker, Expr *pExpr){-
1141 if( pExpr->op==TK_COLUMN ){
pExpr->op==158Description
TRUEevaluated 154 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 239 times by 1 test
Evaluated by:
  • Self test (438)
154-239
1142 assert( pExpr->iColumn>=0 || pExpr->iColumn==-1 );-
1143 if( pExpr->iColumn>=0 ){
pExpr->iColumn>=0Description
TRUEevaluated 149 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 5 times by 1 test
Evaluated by:
  • Self test (438)
5-149
1144 if( pWalker->u.aiCol[pExpr->iColumn]>=0 ){
pWalker->u.aiC...r->iColumn]>=0Description
TRUEevaluated 90 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 59 times by 1 test
Evaluated by:
  • Self test (438)
59-90
1145 pWalker->eCode |= CKCNSTRNT_COLUMN;-
1146 }
executed 90 times by 1 test: end of block
Executed by:
  • Self test (438)
90
1147 }else{
executed 149 times by 1 test: end of block
Executed by:
  • Self test (438)
149
1148 pWalker->eCode |= CKCNSTRNT_ROWID;-
1149 }
executed 5 times by 1 test: end of block
Executed by:
  • Self test (438)
5
1150 }-
1151 return WRC_Continue;
executed 393 times by 1 test: return 0;
Executed by:
  • Self test (438)
393
1152}-
1153-
1154/*-
1155** pExpr is a CHECK constraint on a row that is being UPDATE-ed. The-
1156** only columns that are modified by the UPDATE are those for which-
1157** aiChng[i]>=0, and also the ROWID is modified if chngRowid is true.-
1158**-
1159** Return true if CHECK constraint pExpr uses any of the-
1160** changing columns (or the rowid if it is changing). In other words,-
1161** return true if this CHECK constraint must be validated for-
1162** the new row in the UPDATE statement.-
1163**-
1164** 2018-09-15: pExpr might also be an expression for an index-on-expressions.-
1165** The operation of this routine is the same - return true if an only if-
1166** the expression uses one or more of columns identified by the second and-
1167** third arguments.-
1168*/-
1169int sqlite3ExprReferencesUpdatedColumn(-
1170 Expr *pExpr, /* The expression to be checked */-
1171 int *aiChng, /* aiChng[x]>=0 if column x changed by the UPDATE */-
1172 int chngRowid /* True if UPDATE changes the rowid */-
1173){-
1174 Walker w;-
1175 memset(&w, 0, sizeof(w));-
1176 w.eCode = 0;-
1177 w.xExprCallback = checkConstraintExprNode;-
1178 w.u.aiCol = aiChng;-
1179 sqlite3WalkExpr(&w, pExpr);-
1180 if( !chngRowid ){
!chngRowidDescription
TRUEevaluated 85 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-85
1181 testcase( (w.eCode & CKCNSTRNT_ROWID)!=0 );-
1182 w.eCode &= ~CKCNSTRNT_ROWID;-
1183 }
executed 85 times by 1 test: end of block
Executed by:
  • Self test (438)
85
1184 testcase( w.eCode==0 );-
1185 testcase( w.eCode==CKCNSTRNT_COLUMN );-
1186 testcase( w.eCode==CKCNSTRNT_ROWID );-
1187 testcase( w.eCode==(CKCNSTRNT_ROWID|CKCNSTRNT_COLUMN) );-
1188 return w.eCode!=0;
executed 85 times by 1 test: return w.eCode!=0;
Executed by:
  • Self test (438)
85
1189}-
1190-
1191/*-
1192** Generate code to do constraint checks prior to an INSERT or an UPDATE-
1193** on table pTab.-
1194**-
1195** The regNewData parameter is the first register in a range that contains-
1196** the data to be inserted or the data after the update. There will be-
1197** pTab->nCol+1 registers in this range. The first register (the one-
1198** that regNewData points to) will contain the new rowid, or NULL in the-
1199** case of a WITHOUT ROWID table. The second register in the range will-
1200** contain the content of the first table column. The third register will-
1201** contain the content of the second table column. And so forth.-
1202**-
1203** The regOldData parameter is similar to regNewData except that it contains-
1204** the data prior to an UPDATE rather than afterwards. regOldData is zero-
1205** for an INSERT. This routine can distinguish between UPDATE and INSERT by-
1206** checking regOldData for zero.-
1207**-
1208** For an UPDATE, the pkChng boolean is true if the true primary key (the-
1209** rowid for a normal table or the PRIMARY KEY for a WITHOUT ROWID table)-
1210** might be modified by the UPDATE. If pkChng is false, then the key of-
1211** the iDataCur content table is guaranteed to be unchanged by the UPDATE.-
1212**-
1213** For an INSERT, the pkChng boolean indicates whether or not the rowid-
1214** was explicitly specified as part of the INSERT statement. If pkChng-
1215** is zero, it means that the either rowid is computed automatically or-
1216** that the table is a WITHOUT ROWID table and has no rowid. On an INSERT,-
1217** pkChng will only be true if the INSERT statement provides an integer-
1218** value for either the rowid column or its INTEGER PRIMARY KEY alias.-
1219**-
1220** The code generated by this routine will store new index entries into-
1221** registers identified by aRegIdx[]. No index entry is created for-
1222** indices where aRegIdx[i]==0. The order of indices in aRegIdx[] is-
1223** the same as the order of indices on the linked list of indices-
1224** at pTab->pIndex.-
1225**-
1226** The caller must have already opened writeable cursors on the main-
1227** table and all applicable indices (that is to say, all indices for which-
1228** aRegIdx[] is not zero). iDataCur is the cursor for the main table when-
1229** inserting or updating a rowid table, or the cursor for the PRIMARY KEY-
1230** index when operating on a WITHOUT ROWID table. iIdxCur is the cursor-
1231** for the first index in the pTab->pIndex list. Cursors for other indices-
1232** are at iIdxCur+N for the N-th element of the pTab->pIndex list.-
1233**-
1234** This routine also generates code to check constraints. NOT NULL,-
1235** CHECK, and UNIQUE constraints are all checked. If a constraint fails,-
1236** then the appropriate action is performed. There are five possible-
1237** actions: ROLLBACK, ABORT, FAIL, REPLACE, and IGNORE.-
1238**-
1239** Constraint type Action What Happens-
1240** --------------- ---------- -----------------------------------------
1241** any ROLLBACK The current transaction is rolled back and-
1242** sqlite3_step() returns immediately with a-
1243** return code of SQLITE_CONSTRAINT.-
1244**-
1245** any ABORT Back out changes from the current command-
1246** only (do not do a complete rollback) then-
1247** cause sqlite3_step() to return immediately-
1248** with SQLITE_CONSTRAINT.-
1249**-
1250** any FAIL Sqlite3_step() returns immediately with a-
1251** return code of SQLITE_CONSTRAINT. The-
1252** transaction is not rolled back and any-
1253** changes to prior rows are retained.-
1254**-
1255** any IGNORE The attempt in insert or update the current-
1256** row is skipped, without throwing an error.-
1257** Processing continues with the next row.-
1258** (There is an immediate jump to ignoreDest.)-
1259**-
1260** NOT NULL REPLACE The NULL value is replace by the default-
1261** value for that column. If the default value-
1262** is NULL, the action is the same as ABORT.-
1263**-
1264** UNIQUE REPLACE The other row that conflicts with the row-
1265** being inserted is removed.-
1266**-
1267** CHECK REPLACE Illegal. The results in an exception.-
1268**-
1269** Which action to take is determined by the overrideError parameter.-
1270** Or if overrideError==OE_Default, then the pParse->onError parameter-
1271** is used. Or if pParse->onError==OE_Default then the onError value-
1272** for the constraint is used.-
1273*/-
1274void sqlite3GenerateConstraintChecks(-
1275 Parse *pParse, /* The parser context */-
1276 Table *pTab, /* The table being inserted or updated */-
1277 int *aRegIdx, /* Use register aRegIdx[i] for index i. 0 for unused */-
1278 int iDataCur, /* Canonical data cursor (main table or PK index) */-
1279 int iIdxCur, /* First index cursor */-
1280 int regNewData, /* First register in a range holding values to insert */-
1281 int regOldData, /* Previous content. 0 for INSERTs */-
1282 u8 pkChng, /* Non-zero if the rowid or PRIMARY KEY changed */-
1283 u8 overrideError, /* Override onError to this if not OE_Default */-
1284 int ignoreDest, /* Jump to this label on an OE_Ignore resolution */-
1285 int *pbMayReplace, /* OUT: Set to true if constraint may cause a replace */-
1286 int *aiChng, /* column i is unchanged if aiChng[i]<0 */-
1287 Upsert *pUpsert /* ON CONFLICT clauses, if any. NULL otherwise */-
1288){-
1289 Vdbe *v; /* VDBE under constrution */-
1290 Index *pIdx; /* Pointer to one of the indices */-
1291 Index *pPk = 0; /* The PRIMARY KEY index */-
1292 sqlite3 *db; /* Database connection */-
1293 int i; /* loop counter */-
1294 int ix; /* Index loop counter */-
1295 int nCol; /* Number of columns */-
1296 int onError; /* Conflict resolution strategy */-
1297 int addr1; /* Address of jump instruction */-
1298 int seenReplace = 0; /* True if REPLACE is used to resolve INT PK conflict */-
1299 int nPkField; /* Number of fields in PRIMARY KEY. 1 for ROWID tables */-
1300 Index *pUpIdx = 0; /* Index to which to apply the upsert */-
1301 u8 isUpdate; /* True if this is an UPDATE operation */-
1302 u8 bAffinityDone = 0; /* True if the OP_Affinity operation has been run */-
1303 int upsertBypass = 0; /* Address of Goto to bypass upsert subroutine */-
1304 int upsertJump = 0; /* Address of Goto that jumps into upsert subroutine */-
1305 int ipkTop = 0; /* Top of the IPK uniqueness check */-
1306 int ipkBottom = 0; /* OP_Goto at the end of the IPK uniqueness check */-
1307-
1308 isUpdate = regOldData!=0;-
1309 db = pParse->db;-
1310 v = sqlite3GetVdbe(pParse);-
1311 assert( v!=0 );-
1312 assert( pTab->pSelect==0 ); /* This table is not a VIEW */-
1313 nCol = pTab->nCol;-
1314 -
1315 /* pPk is the PRIMARY KEY index for WITHOUT ROWID tables and NULL for-
1316 ** normal rowid tables. nPkField is the number of key fields in the -
1317 ** pPk index or 1 for a rowid table. In other words, nPkField is the-
1318 ** number of fields in the true primary key of the table. */-
1319 if( HasRowid(pTab) ){
(((pTab)->tabF... & 0x0020)==0)Description
TRUEevaluated 105707 times by 406 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
FALSEevaluated 1058 times by 1 test
Evaluated by:
  • Self test (438)
1058-105707
1320 pPk = 0;-
1321 nPkField = 1;-
1322 }else{
executed 105707 times by 406 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
105707
1323 pPk = sqlite3PrimaryKeyIndex(pTab);-
1324 nPkField = pPk->nKeyCol;-
1325 }
executed 1058 times by 1 test: end of block
Executed by:
  • Self test (438)
1058
1326-
1327 /* Record that this module has started */-
1328 VdbeModuleComment((v, "BEGIN: GenCnstCks(%d,%d,%d,%d,%d)",-
1329 iDataCur, iIdxCur, regNewData, regOldData, pkChng));-
1330-
1331 /* Test all NOT NULL constraints.-
1332 */-
1333 for(i=0; i<nCol; i++){
i<nColDescription
TRUEevaluated 467904 times by 406 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
FALSEevaluated 106765 times by 406 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
106765-467904
1334 if( i==pTab->iPKey ){
i==pTab->iPKeyDescription
TRUEevaluated 3315 times by 333 tests
Evaluated by:
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • Self test (129)
  • Self test (130)
  • ...
FALSEevaluated 464589 times by 406 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
3315-464589
1335 continue; /* ROWID is never NULL */
executed 3315 times by 333 tests: continue;
Executed by:
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • Self test (129)
  • Self test (130)
  • ...
3315
1336 }-
1337 if( aiChng && aiChng[i]<0 ){
aiChngDescription
TRUEevaluated 161949 times by 377 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
FALSEevaluated 302640 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
aiChng[i]<0Description
TRUEevaluated 33889 times by 10 tests
Evaluated by:
  • Self test (2)
  • Self test (24)
  • Self test (28)
  • Self test (3)
  • Self test (35)
  • Self test (4)
  • Self test (438)
  • Self test (47)
  • Self test (5)
  • Self test (54)
FALSEevaluated 128060 times by 377 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
33889-302640
1338 /* Don't bother checking for NOT NULL on columns that do not change */-
1339 continue;
executed 33889 times by 10 tests: continue;
Executed by:
  • Self test (2)
  • Self test (24)
  • Self test (28)
  • Self test (3)
  • Self test (35)
  • Self test (4)
  • Self test (438)
  • Self test (47)
  • Self test (5)
  • Self test (54)
33889
1340 }-
1341 onError = pTab->aCol[i].notNull;-
1342 if( onError==OE_None ) continue; /* This column is allowed to be NULL */
executed 423878 times by 406 tests: continue;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
onError==0Description
TRUEevaluated 423878 times by 406 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
FALSEevaluated 6822 times by 1 test
Evaluated by:
  • Self test (438)
6822-423878
1343 if( overrideError!=OE_Default ){
overrideError!=11Description
TRUEevaluated 338 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 6484 times by 1 test
Evaluated by:
  • Self test (438)
338-6484
1344 onError = overrideError;-
1345 }else if( onError==OE_Default ){
executed 338 times by 1 test: end of block
Executed by:
  • Self test (438)
onError==11Description
TRUEevaluated 5462 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1022 times by 1 test
Evaluated by:
  • Self test (438)
338-5462
1346 onError = OE_Abort;-
1347 }
executed 5462 times by 1 test: end of block
Executed by:
  • Self test (438)
5462
1348 if( onError==OE_Replace && pTab->aCol[i].pDflt==0 ){
onError==5Description
TRUEevaluated 164 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 6658 times by 1 test
Evaluated by:
  • Self test (438)
pTab->aCol[i].pDflt==0Description
TRUEevaluated 87 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 77 times by 1 test
Evaluated by:
  • Self test (438)
77-6658
1349 onError = OE_Abort;-
1350 }
executed 87 times by 1 test: end of block
Executed by:
  • Self test (438)
87
1351 assert( onError==OE_Rollback || onError==OE_Abort || onError==OE_Fail-
1352 || onError==OE_Ignore || onError==OE_Replace );-
1353 switch( onError ){-
1354 case OE_Abort:
executed 6586 times by 1 test: case 2:
Executed by:
  • Self test (438)
6586
1355 sqlite3MayAbort(pParse);-
1356 /* Fall through */-
1357 case OE_Rollback:
code before this statement executed 6586 times by 1 test: case 1:
Executed by:
  • Self test (438)
executed 21 times by 1 test: case 1:
Executed by:
  • Self test (438)
21-6586
1358 case OE_Fail: {
executed 19 times by 1 test: case 3:
Executed by:
  • Self test (438)
19
1359 char *zMsg = sqlite3MPrintf(db, "%s.%s", pTab->zName,-
1360 pTab->aCol[i].zName);-
1361 sqlite3VdbeAddOp3(v, OP_HaltIfNull, SQLITE_CONSTRAINT_NOTNULL, onError,-
1362 regNewData+1+i);-
1363 sqlite3VdbeAppendP4(v, zMsg, P4_DYNAMIC);-
1364 sqlite3VdbeChangeP5(v, P5_ConstraintNotNull);-
1365 VdbeCoverage(v);-
1366 break;
executed 6626 times by 1 test: break;
Executed by:
  • Self test (438)
6626
1367 }-
1368 case OE_Ignore: {
executed 119 times by 1 test: case 4:
Executed by:
  • Self test (438)
119
1369 sqlite3VdbeAddOp2(v, OP_IsNull, regNewData+1+i, ignoreDest);-
1370 VdbeCoverage(v);-
1371 break;
executed 119 times by 1 test: break;
Executed by:
  • Self test (438)
119
1372 }-
1373 default: {
executed 77 times by 1 test: default:
Executed by:
  • Self test (438)
77
1374 assert( onError==OE_Replace );-
1375 addr1 = sqlite3VdbeAddOp1(v, OP_NotNull, regNewData+1+i);-
1376 VdbeCoverage(v);-
1377 sqlite3ExprCode(pParse, pTab->aCol[i].pDflt, regNewData+1+i);-
1378 sqlite3VdbeJumpHere(v, addr1);-
1379 break;
executed 77 times by 1 test: break;
Executed by:
  • Self test (438)
77
1380 }-
1381 }-
1382 }-
1383-
1384 /* Test all CHECK constraints-
1385 */-
1386#ifndef SQLITE_OMIT_CHECK-
1387 if( pTab->pCheck && (db->flags & SQLITE_IgnoreChecks)==0 ){
pTab->pCheckDescription
TRUEevaluated 189 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 106576 times by 406 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
(db->flags & 0x00000200)==0Description
TRUEevaluated 188 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
1-106576
1388 ExprList *pCheck = pTab->pCheck;-
1389 pParse->iSelfTab = -(regNewData+1);-
1390 onError = overrideError!=OE_Default ? overrideError : OE_Abort;
overrideError!=11Description
TRUEevaluated 17 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 171 times by 1 test
Evaluated by:
  • Self test (438)
17-171
1391 for(i=0; i<pCheck->nExpr; i++){
i<pCheck->nExprDescription
TRUEevaluated 243 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 188 times by 1 test
Evaluated by:
  • Self test (438)
188-243
1392 int allOk;-
1393 Expr *pExpr = pCheck->a[i].pExpr;-
1394 if( aiChng
aiChngDescription
TRUEevaluated 42 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 201 times by 1 test
Evaluated by:
  • Self test (438)
42-201
1395 && !sqlite3ExprReferencesUpdatedColumn(pExpr, aiChng, pkChng)
!sqlite3ExprRe...iChng, pkChng)Description
TRUEevaluated 7 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 35 times by 1 test
Evaluated by:
  • Self test (438)
7-35
1396 ){-
1397 /* The check constraints do not reference any of the columns being-
1398 ** updated so there is no point it verifying the check constraint */-
1399 continue;
executed 7 times by 1 test: continue;
Executed by:
  • Self test (438)
7
1400 }-
1401 allOk = sqlite3VdbeMakeLabel(v);-
1402 sqlite3VdbeVerifyAbortable(v, onError);-
1403 sqlite3ExprIfTrue(pParse, pExpr, allOk, SQLITE_JUMPIFNULL);-
1404 if( onError==OE_Ignore ){
onError==4Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 228 times by 1 test
Evaluated by:
  • Self test (438)
8-228
1405 sqlite3VdbeGoto(v, ignoreDest);-
1406 }else{
executed 8 times by 1 test: end of block
Executed by:
  • Self test (438)
8
1407 char *zName = pCheck->a[i].zName;-
1408 if( zName==0 ) zName = pTab->zName;
executed 203 times by 1 test: zName = pTab->zName;
Executed by:
  • Self test (438)
zName==0Description
TRUEevaluated 203 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 25 times by 1 test
Evaluated by:
  • Self test (438)
25-203
1409 if( onError==OE_Replace ) onError = OE_Abort; /* IMP: R-15569-63625 */
executed 7 times by 1 test: onError = 2;
Executed by:
  • Self test (438)
onError==5Description
TRUEevaluated 7 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 221 times by 1 test
Evaluated by:
  • Self test (438)
7-221
1410 sqlite3HaltConstraint(pParse, SQLITE_CONSTRAINT_CHECK,-
1411 onError, zName, P4_TRANSIENT,-
1412 P5_ConstraintCheck);-
1413 }
executed 228 times by 1 test: end of block
Executed by:
  • Self test (438)
228
1414 sqlite3VdbeResolveLabel(v, allOk);-
1415 }
executed 236 times by 1 test: end of block
Executed by:
  • Self test (438)
236
1416 pParse->iSelfTab = 0;-
1417 }
executed 188 times by 1 test: end of block
Executed by:
  • Self test (438)
188
1418#endif /* !defined(SQLITE_OMIT_CHECK) */-
1419-
1420 /* UNIQUE and PRIMARY KEY constraints should be handled in the following-
1421 ** order:-
1422 **-
1423 ** (1) OE_Update-
1424 ** (2) OE_Abort, OE_Fail, OE_Rollback, OE_Ignore-
1425 ** (3) OE_Replace-
1426 **-
1427 ** OE_Fail and OE_Ignore must happen before any changes are made.-
1428 ** OE_Update guarantees that only a single row will change, so it-
1429 ** must happen before OE_Replace. Technically, OE_Abort and OE_Rollback-
1430 ** could happen in any order, but they are grouped up front for-
1431 ** convenience.-
1432 **-
1433 ** 2018-08-14: Ticket https://www.sqlite.org/src/info/908f001483982c43-
1434 ** The order of constraints used to have OE_Update as (2) and OE_Abort-
1435 ** and so forth as (1). But apparently PostgreSQL checks the OE_Update-
1436 ** constraint before any others, so it had to be moved.-
1437 **-
1438 ** Constraint checking code is generated in this order:-
1439 ** (A) The rowid constraint-
1440 ** (B) Unique index constraints that do not have OE_Replace as their-
1441 ** default conflict resolution strategy-
1442 ** (C) Unique index that do use OE_Replace by default.-
1443 **-
1444 ** The ordering of (2) and (3) is accomplished by making sure the linked-
1445 ** list of indexes attached to a table puts all OE_Replace indexes last-
1446 ** in the list. See sqlite3CreateIndex() for where that happens.-
1447 */-
1448-
1449 if( pUpsert ){
pUpsertDescription
TRUEevaluated 154 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 106611 times by 406 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
154-106611
1450 if( pUpsert->pUpsertTarget==0 ){
pUpsert->pUpsertTarget==0Description
TRUEevaluated 18 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 136 times by 1 test
Evaluated by:
  • Self test (438)
18-136
1451 /* An ON CONFLICT DO NOTHING clause, without a constraint-target.-
1452 ** Make all unique constraint resolution be OE_Ignore */-
1453 assert( pUpsert->pUpsertSet==0 );-
1454 overrideError = OE_Ignore;-
1455 pUpsert = 0;-
1456 }else if( (pUpIdx = pUpsert->pUpsertIdx)!=0 ){
executed 18 times by 1 test: end of block
Executed by:
  • Self test (438)
(pUpIdx = pUps...pUpsertIdx)!=0Description
TRUEevaluated 90 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 46 times by 1 test
Evaluated by:
  • Self test (438)
18-90
1457 /* If the constraint-target uniqueness check must be run first.-
1458 ** Jump to that uniqueness check now */-
1459 upsertJump = sqlite3VdbeAddOp0(v, OP_Goto);-
1460 VdbeComment((v, "UPSERT constraint goes first"));-
1461 }
executed 90 times by 1 test: end of block
Executed by:
  • Self test (438)
90
1462 }
executed 154 times by 1 test: end of block
Executed by:
  • Self test (438)
154
1463-
1464 /* If rowid is changing, make sure the new rowid does not previously-
1465 ** exist in the table.-
1466 */-
1467 if( pkChng && pPk==0 ){
pkChngDescription
TRUEevaluated 2933 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 103832 times by 406 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
pPk==0Description
TRUEevaluated 2800 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 133 times by 1 test
Evaluated by:
  • Self test (438)
133-103832
1468 int addrRowidOk = sqlite3VdbeMakeLabel(v);-
1469-
1470 /* Figure out what action to take in case of a rowid collision */-
1471 onError = pTab->keyConf;-
1472 if( overrideError!=OE_Default ){
overrideError!=11Description
TRUEevaluated 122 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2678 times by 1 test
Evaluated by:
  • Self test (438)
122-2678
1473 onError = overrideError;-
1474 }else if( onError==OE_Default ){
executed 122 times by 1 test: end of block
Executed by:
  • Self test (438)
onError==11Description
TRUEevaluated 1971 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 707 times by 1 test
Evaluated by:
  • Self test (438)
122-1971
1475 onError = OE_Abort;-
1476 }
executed 1971 times by 1 test: end of block
Executed by:
  • Self test (438)
1971
1477-
1478 /* figure out whether or not upsert applies in this case */-
1479 if( pUpsert && pUpsert->pUpsertIdx==0 ){
pUpsertDescription
TRUEevaluated 57 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2743 times by 1 test
Evaluated by:
  • Self test (438)
pUpsert->pUpsertIdx==0Description
TRUEevaluated 31 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 26 times by 1 test
Evaluated by:
  • Self test (438)
26-2743
1480 if( pUpsert->pUpsertSet==0 ){
pUpsert->pUpsertSet==0Description
TRUEevaluated 18 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 13 times by 1 test
Evaluated by:
  • Self test (438)
13-18
1481 onError = OE_Ignore; /* DO NOTHING is the same as INSERT OR IGNORE */-
1482 }else{
executed 18 times by 1 test: end of block
Executed by:
  • Self test (438)
18
1483 onError = OE_Update; /* DO UPDATE */-
1484 }
executed 13 times by 1 test: end of block
Executed by:
  • Self test (438)
13
1485 }-
1486-
1487 /* If the response to a rowid conflict is REPLACE but the response-
1488 ** to some other UNIQUE constraint is FAIL or IGNORE, then we need-
1489 ** to defer the running of the rowid conflict checking until after-
1490 ** the UNIQUE constraints have run.-
1491 */-
1492 if( onError==OE_Replace /* IPK rule is REPLACE */
onError==5Description
TRUEevaluated 80 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2720 times by 1 test
Evaluated by:
  • Self test (438)
80-2720
1493 && onError!=overrideError /* Rules for other contraints are different */
onError!=overrideErrorDescription
TRUEevaluated 15 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 65 times by 1 test
Evaluated by:
  • Self test (438)
15-65
1494 && pTab->pIndex /* There exist other constraints */
pTab->pIndexDescription
TRUEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 7 times by 1 test
Evaluated by:
  • Self test (438)
7-8
1495 ){-
1496 ipkTop = sqlite3VdbeAddOp0(v, OP_Goto)+1;-
1497 VdbeComment((v, "defer IPK REPLACE until last"));-
1498 }
executed 8 times by 1 test: end of block
Executed by:
  • Self test (438)
8
1499-
1500 if( isUpdate ){
isUpdateDescription
TRUEevaluated 410 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2390 times by 1 test
Evaluated by:
  • Self test (438)
410-2390
1501 /* pkChng!=0 does not mean that the rowid has changed, only that-
1502 ** it might have changed. Skip the conflict logic below if the rowid-
1503 ** is unchanged. */-
1504 sqlite3VdbeAddOp3(v, OP_Eq, regNewData, addrRowidOk, regOldData);-
1505 sqlite3VdbeChangeP5(v, SQLITE_NOTNULL);-
1506 VdbeCoverage(v);-
1507 }
executed 410 times by 1 test: end of block
Executed by:
  • Self test (438)
410
1508-
1509 /* Check to see if the new rowid already exists in the table. Skip-
1510 ** the following conflict logic if it does not. */-
1511 VdbeNoopComment((v, "uniqueness check for ROWID"));-
1512 sqlite3VdbeVerifyAbortable(v, onError);-
1513 sqlite3VdbeAddOp3(v, OP_NotExists, iDataCur, addrRowidOk, regNewData);-
1514 VdbeCoverage(v);-
1515-
1516 switch( onError ){-
1517 default: {
executed 664 times by 1 test: default:
Executed by:
  • Self test (438)
664
1518 onError = OE_Abort;-
1519 /* Fall thru into the next case */-
1520 }-
1521 case OE_Rollback:
code before this statement executed 664 times by 1 test: case 1:
Executed by:
  • Self test (438)
executed 14 times by 1 test: case 1:
Executed by:
  • Self test (438)
14-664
1522 case OE_Abort:
executed 1969 times by 1 test: case 2:
Executed by:
  • Self test (438)
1969
1523 case OE_Fail: {
executed 11 times by 1 test: case 3:
Executed by:
  • Self test (438)
11
1524 testcase( onError==OE_Rollback );-
1525 testcase( onError==OE_Abort );-
1526 testcase( onError==OE_Fail );-
1527 sqlite3RowidConstraint(pParse, onError, pTab);-
1528 break;
executed 2658 times by 1 test: break;
Executed by:
  • Self test (438)
2658
1529 }-
1530 case OE_Replace: {
executed 80 times by 1 test: case 5:
Executed by:
  • Self test (438)
80
1531 /* If there are DELETE triggers on this table and the-
1532 ** recursive-triggers flag is set, call GenerateRowDelete() to-
1533 ** remove the conflicting row from the table. This will fire-
1534 ** the triggers and remove both the table and index b-tree entries.-
1535 **-
1536 ** Otherwise, if there are no triggers or the recursive-triggers-
1537 ** flag is not set, but the table has one or more indexes, call -
1538 ** GenerateRowIndexDelete(). This removes the index b-tree entries -
1539 ** only. The table b-tree entry will be replaced by the new entry -
1540 ** when it is inserted. -
1541 **-
1542 ** If either GenerateRowDelete() or GenerateRowIndexDelete() is called,-
1543 ** also invoke MultiWrite() to indicate that this VDBE may require-
1544 ** statement rollback (if the statement is aborted after the delete-
1545 ** takes place). Earlier versions called sqlite3MultiWrite() regardless,-
1546 ** but being more selective here allows statements like:-
1547 **-
1548 ** REPLACE INTO t(rowid) VALUES($newrowid)-
1549 **-
1550 ** to run without a statement journal if there are no indexes on the-
1551 ** table.-
1552 */-
1553 Trigger *pTrigger = 0;-
1554 if( db->flags&SQLITE_RecTriggers ){
db->flags&0x00002000Description
TRUEevaluated 14 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 66 times by 1 test
Evaluated by:
  • Self test (438)
14-66
1555 pTrigger = sqlite3TriggersExist(pParse, pTab, TK_DELETE, 0, 0);-
1556 }
executed 14 times by 1 test: end of block
Executed by:
  • Self test (438)
14
1557 if( pTrigger || sqlite3FkRequired(pParse, pTab, 0, 0) ){
pTriggerDescription
TRUEevaluated 10 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 70 times by 1 test
Evaluated by:
  • Self test (438)
sqlite3FkRequi...e, pTab, 0, 0)Description
TRUEevaluated 11 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 59 times by 1 test
Evaluated by:
  • Self test (438)
10-70
1558 sqlite3MultiWrite(pParse);-
1559 sqlite3GenerateRowDelete(pParse, pTab, pTrigger, iDataCur, iIdxCur,-
1560 regNewData, 1, 0, OE_Replace, 1, -1);-
1561 }else{
executed 21 times by 1 test: end of block
Executed by:
  • Self test (438)
21
1562#ifdef SQLITE_ENABLE_PREUPDATE_HOOK-
1563 assert( HasRowid(pTab) );-
1564 /* This OP_Delete opcode fires the pre-update-hook only. It does-
1565 ** not modify the b-tree. It is more efficient to let the coming-
1566 ** OP_Insert replace the existing entry than it is to delete the-
1567 ** existing entry and then insert a new one. */-
1568 sqlite3VdbeAddOp2(v, OP_Delete, iDataCur, OPFLAG_ISNOOP);-
1569 sqlite3VdbeAppendP4(v, pTab, P4_TABLE);-
1570#endif /* SQLITE_ENABLE_PREUPDATE_HOOK */-
1571 if( pTab->pIndex ){
pTab->pIndexDescription
TRUEevaluated 38 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 21 times by 1 test
Evaluated by:
  • Self test (438)
21-38
1572 sqlite3MultiWrite(pParse);-
1573 sqlite3GenerateRowIndexDelete(pParse, pTab, iDataCur, iIdxCur,0,-1);-
1574 }
executed 38 times by 1 test: end of block
Executed by:
  • Self test (438)
38
1575 }
executed 59 times by 1 test: end of block
Executed by:
  • Self test (438)
59
1576 seenReplace = 1;-
1577 break;
executed 80 times by 1 test: break;
Executed by:
  • Self test (438)
80
1578 }-
1579#ifndef SQLITE_OMIT_UPSERT-
1580 case OE_Update: {
executed 13 times by 1 test: case 6:
Executed by:
  • Self test (438)
13
1581 sqlite3UpsertDoUpdate(pParse, pUpsert, pTab, 0, iDataCur);-
1582 /* Fall through */-
1583 }-
1584#endif-
1585 case OE_Ignore: {
code before this statement executed 13 times by 1 test: case 4:
Executed by:
  • Self test (438)
executed 62 times by 1 test: case 4:
Executed by:
  • Self test (438)
13-62
1586 testcase( onError==OE_Ignore );-
1587 sqlite3VdbeGoto(v, ignoreDest);-
1588 break;
executed 62 times by 1 test: break;
Executed by:
  • Self test (438)
62
1589 }-
1590 }-
1591 sqlite3VdbeResolveLabel(v, addrRowidOk);-
1592 if( ipkTop ){
ipkTopDescription
TRUEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2792 times by 1 test
Evaluated by:
  • Self test (438)
8-2792
1593 ipkBottom = sqlite3VdbeAddOp0(v, OP_Goto);-
1594 sqlite3VdbeJumpHere(v, ipkTop-1);-
1595 }
executed 8 times by 1 test: end of block
Executed by:
  • Self test (438)
8
1596 }
executed 2800 times by 1 test: end of block
Executed by:
  • Self test (438)
2800
1597-
1598 /* Test all UNIQUE constraints by creating entries for each UNIQUE-
1599 ** index and making sure that duplicate entries do not already exist.-
1600 ** Compute the revised record entries for indices as we go.-
1601 **-
1602 ** This loop also handles the case of the PRIMARY KEY index for a-
1603 ** WITHOUT ROWID table.-
1604 */-
1605 for(ix=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, ix++){
pIdxDescription
TRUEevaluated 21511 times by 369 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
FALSEevaluated 106765 times by 406 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
21511-106765
1606 int regIdx; /* Range of registers hold conent for pIdx */-
1607 int regR; /* Range of registers holding conflicting PK */-
1608 int iThisCur; /* Cursor for this UNIQUE index */-
1609 int addrUniqueOk; /* Jump here if the UNIQUE constraint is satisfied */-
1610-
1611 if( aRegIdx[ix]==0 ) continue; /* Skip indices that do not change */
executed 425 times by 3 tests: continue;
Executed by:
  • Self test (35)
  • Self test (438)
  • Self test (54)
aRegIdx[ix]==0Description
TRUEevaluated 425 times by 3 tests
Evaluated by:
  • Self test (35)
  • Self test (438)
  • Self test (54)
FALSEevaluated 21086 times by 369 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
425-21086
1612 if( pUpIdx==pIdx ){
pUpIdx==pIdxDescription
TRUEevaluated 90 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 20996 times by 369 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
90-20996
1613 addrUniqueOk = upsertJump+1;-
1614 upsertBypass = sqlite3VdbeGoto(v, 0);-
1615 VdbeComment((v, "Skip upsert subroutine"));-
1616 sqlite3VdbeJumpHere(v, upsertJump);-
1617 }else{
executed 90 times by 1 test: end of block
Executed by:
  • Self test (438)
90
1618 addrUniqueOk = sqlite3VdbeMakeLabel(v);-
1619 }
executed 20996 times by 369 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
20996
1620 if( bAffinityDone==0 && (pUpIdx==0 || pUpIdx==pIdx) ){
bAffinityDone==0Description
TRUEevaluated 17755 times by 369 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
FALSEevaluated 3331 times by 1 test
Evaluated by:
  • Self test (438)
pUpIdx==0Description
TRUEevaluated 17622 times by 369 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
FALSEevaluated 133 times by 1 test
Evaluated by:
  • Self test (438)
pUpIdx==pIdxDescription
TRUEevaluated 90 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 43 times by 1 test
Evaluated by:
  • Self test (438)
43-17755
1621 sqlite3TableAffinity(v, pTab, regNewData+1);-
1622 bAffinityDone = 1;-
1623 }
executed 17712 times by 369 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
17712
1624 VdbeNoopComment((v, "uniqueness check for %s", pIdx->zName));-
1625 iThisCur = iIdxCur+ix;-
1626-
1627-
1628 /* Skip partial indices for which the WHERE clause is not true */-
1629 if( pIdx->pPartIdxWhere ){
pIdx->pPartIdxWhereDescription
TRUEevaluated 65 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 21021 times by 369 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
65-21021
1630 sqlite3VdbeAddOp2(v, OP_Null, 0, aRegIdx[ix]);-
1631 pParse->iSelfTab = -(regNewData+1);-
1632 sqlite3ExprIfFalseDup(pParse, pIdx->pPartIdxWhere, addrUniqueOk,-
1633 SQLITE_JUMPIFNULL);-
1634 pParse->iSelfTab = 0;-
1635 }
executed 65 times by 1 test: end of block
Executed by:
  • Self test (438)
65
1636-
1637 /* Create a record for this index entry as it should appear after-
1638 ** the insert or update. Store that record in the aRegIdx[ix] register-
1639 */-
1640 regIdx = aRegIdx[ix]+1;-
1641 for(i=0; i<pIdx->nColumn; i++){
i<pIdx->nColumnDescription
TRUEevaluated 45079 times by 369 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
FALSEevaluated 21086 times by 369 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
21086-45079
1642 int iField = pIdx->aiColumn[i];-
1643 int x;-
1644 if( iField==XN_EXPR ){
iField==(-2)Description
TRUEevaluated 61 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 45018 times by 369 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
61-45018
1645 pParse->iSelfTab = -(regNewData+1);-
1646 sqlite3ExprCodeCopy(pParse, pIdx->aColExpr->a[i].pExpr, regIdx+i);-
1647 pParse->iSelfTab = 0;-
1648 VdbeComment((v, "%s column %d", pIdx->zName, i));-
1649 }else{
executed 61 times by 1 test: end of block
Executed by:
  • Self test (438)
61
1650 if( iField==XN_ROWID || iField==pTab->iPKey ){
iField==(-1)Description
TRUEevaluated 19701 times by 369 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
FALSEevaluated 25317 times by 369 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
iField==pTab->iPKeyDescription
TRUEevaluated 59 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 25258 times by 369 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
59-25317
1651 x = regNewData;-
1652 }else{
executed 19760 times by 369 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
19760
1653 x = iField + regNewData + 1;-
1654 }
executed 25258 times by 369 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
25258
1655 sqlite3VdbeAddOp2(v, iField<0 ? OP_IntCopy : OP_SCopy, x, regIdx+i);-
1656 VdbeComment((v, "%s", iField<0 ? "rowid" : pTab->aCol[iField].zName));-
1657 }
executed 45018 times by 369 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
45018
1658 }-
1659 sqlite3VdbeAddOp3(v, OP_MakeRecord, regIdx, pIdx->nColumn, aRegIdx[ix]);-
1660 VdbeComment((v, "for %s", pIdx->zName));-
1661#ifdef SQLITE_ENABLE_NULL_TRIM-
1662 if( pIdx->idxType==2 ) sqlite3SetMakeRecordP5(v, pIdx->pTable);-
1663#endif-
1664-
1665 /* In an UPDATE operation, if this index is the PRIMARY KEY index -
1666 ** of a WITHOUT ROWID table and there has been no change the-
1667 ** primary key, then no collision is possible. The collision detection-
1668 ** logic below can all be skipped. */-
1669 if( isUpdate && pPk==pIdx && pkChng==0 ){
isUpdateDescription
TRUEevaluated 1243 times by 346 tests
Evaluated by:
  • Self test (10)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • ...
FALSEevaluated 19843 times by 29 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (6)
  • Self test (7)
  • Self test (86)
  • Self test (88)
  • Self test (9)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • ...
pPk==pIdxDescription
TRUEevaluated 281 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 962 times by 346 tests
Evaluated by:
  • Self test (10)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • ...
pkChng==0Description
TRUEevaluated 148 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 133 times by 1 test
Evaluated by:
  • Self test (438)
133-19843
1670 sqlite3VdbeResolveLabel(v, addrUniqueOk);-
1671 continue;
executed 148 times by 1 test: continue;
Executed by:
  • Self test (438)
148
1672 }-
1673-
1674 /* Find out what action to take in case there is a uniqueness conflict */-
1675 onError = pIdx->onError;-
1676 if( onError==OE_None ){
onError==0Description
TRUEevaluated 9921 times by 5 tests
Evaluated by:
  • Self test (2)
  • Self test (3)
  • Self test (438)
  • Self test (86)
  • Self test (88)
FALSEevaluated 11017 times by 365 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
9921-11017
1677 sqlite3VdbeResolveLabel(v, addrUniqueOk);-
1678 continue; /* pIdx is not a UNIQUE index */
executed 9921 times by 5 tests: continue;
Executed by:
  • Self test (2)
  • Self test (3)
  • Self test (438)
  • Self test (86)
  • Self test (88)
9921
1679 }-
1680 if( overrideError!=OE_Default ){
overrideError!=11Description
TRUEevaluated 422 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 10595 times by 365 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
422-10595
1681 onError = overrideError;-
1682 }else if( onError==OE_Default ){
executed 422 times by 1 test: end of block
Executed by:
  • Self test (438)
onError==11Description
TRUEevaluated 9968 times by 365 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
FALSEevaluated 627 times by 1 test
Evaluated by:
  • Self test (438)
422-9968
1683 onError = OE_Abort;-
1684 }
executed 9968 times by 365 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
9968
1685-
1686 /* Figure out if the upsert clause applies to this index */-
1687 if( pUpIdx==pIdx ){
pUpIdx==pIdxDescription
TRUEevaluated 90 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 10927 times by 365 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
90-10927
1688 if( pUpsert->pUpsertSet==0 ){
pUpsert->pUpsertSet==0Description
TRUEevaluated 42 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 48 times by 1 test
Evaluated by:
  • Self test (438)
42-48
1689 onError = OE_Ignore; /* DO NOTHING is the same as INSERT OR IGNORE */-
1690 }else{
executed 42 times by 1 test: end of block
Executed by:
  • Self test (438)
42
1691 onError = OE_Update; /* DO UPDATE */-
1692 }
executed 48 times by 1 test: end of block
Executed by:
  • Self test (438)
48
1693 }-
1694-
1695 /* Collision detection may be omitted if all of the following are true:-
1696 ** (1) The conflict resolution algorithm is REPLACE-
1697 ** (2) The table is a WITHOUT ROWID table-
1698 ** (3) There are no secondary indexes on the table-
1699 ** (4) No delete triggers need to be fired if there is a conflict-
1700 ** (5) No FK constraint counters need to be updated if a conflict occurs.-
1701 */ -
1702 if( (ix==0 && pIdx->pNext==0) /* Condition 3 */
ix==0Description
TRUEevaluated 10171 times by 364 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
FALSEevaluated 846 times by 3 tests
Evaluated by:
  • Self test (35)
  • Self test (438)
  • Self test (54)
pIdx->pNext==0Description
TRUEevaluated 9620 times by 363 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
FALSEevaluated 551 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (54)
551-10171
1703 && pPk==pIdx /* Condition 2 */
pPk==pIdxDescription
TRUEevaluated 690 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 8930 times by 363 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
690-8930
1704 && onError==OE_Replace /* Condition 1 */
onError==5Description
TRUEevaluated 38 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 652 times by 1 test
Evaluated by:
  • Self test (438)
38-652
1705 && ( 0==(db->flags&SQLITE_RecTriggers) || /* Condition 4 */
0==(db->flags&0x00002000)Description
TRUEevaluated 26 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 12 times by 1 test
Evaluated by:
  • Self test (438)
12-26
1706 0==sqlite3TriggersExist(pParse, pTab, TK_DELETE, 0, 0))
0==sqlite3Trig...ab, 117, 0, 0)Description
TRUEevaluated 6 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 6 times by 1 test
Evaluated by:
  • Self test (438)
6
1707 && ( 0==(db->flags&SQLITE_ForeignKeys) || /* Condition 5 */
0==(db->flags&0x00004000)Description
TRUEevaluated 25 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 7 times by 1 test
Evaluated by:
  • Self test (438)
7-25
1708 (0==pTab->pFKey && 0==sqlite3FkReferences(pTab)))
0==pTab->pFKeyDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
0==sqlite3FkReferences(pTab)Description
TRUEnever evaluated
FALSEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
0-4
1709 ){-
1710 sqlite3VdbeResolveLabel(v, addrUniqueOk);-
1711 continue;
executed 25 times by 1 test: continue;
Executed by:
  • Self test (438)
25
1712 }-
1713-
1714 /* Check to see if the new index entry will be unique */-
1715 sqlite3VdbeVerifyAbortable(v, onError);-
1716 sqlite3VdbeAddOp4Int(v, OP_NoConflict, iThisCur, addrUniqueOk,-
1717 regIdx, pIdx->nKeyCol); VdbeCoverage(v);-
1718-
1719 /* Generate code to handle collisions */-
1720 regR = (pIdx==pPk) ? regIdx : sqlite3GetTempRange(pParse, nPkField);
(pIdx==pPk)Description
TRUEevaluated 885 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 10107 times by 365 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
885-10107
1721 if( isUpdate || onError==OE_Replace ){
isUpdateDescription
TRUEevaluated 818 times by 344 tests
Evaluated by:
  • Self test (10)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • ...
FALSEevaluated 10174 times by 27 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (6)
  • Self test (7)
  • Self test (9)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • ...
onError==5Description
TRUEevaluated 163 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 10011 times by 27 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (6)
  • Self test (7)
  • Self test (9)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • ...
163-10174
1722 if( HasRowid(pTab) ){
(((pTab)->tabF... & 0x0020)==0)Description
TRUEevaluated 761 times by 344 tests
Evaluated by:
  • Self test (10)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • ...
FALSEevaluated 220 times by 1 test
Evaluated by:
  • Self test (438)
220-761
1723 sqlite3VdbeAddOp2(v, OP_IdxRowid, iThisCur, regR);-
1724 /* Conflict only if the rowid of the existing index entry-
1725 ** is different from old-rowid */-
1726 if( isUpdate ){
isUpdateDescription
TRUEevaluated 646 times by 344 tests
Evaluated by:
  • Self test (10)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • ...
FALSEevaluated 115 times by 1 test
Evaluated by:
  • Self test (438)
115-646
1727 sqlite3VdbeAddOp3(v, OP_Eq, regR, addrUniqueOk, regOldData);-
1728 sqlite3VdbeChangeP5(v, SQLITE_NOTNULL);-
1729 VdbeCoverage(v);-
1730 }
executed 646 times by 344 tests: end of block
Executed by:
  • Self test (10)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • ...
646
1731 }else{
executed 761 times by 344 tests: end of block
Executed by:
  • Self test (10)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • ...
761
1732 int x;-
1733 /* Extract the PRIMARY KEY from the end of the index entry and-
1734 ** store it in registers regR..regR+nPk-1 */-
1735 if( pIdx!=pPk ){
pIdx!=pPkDescription
TRUEevaluated 72 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 148 times by 1 test
Evaluated by:
  • Self test (438)
72-148
1736 for(i=0; i<pPk->nKeyCol; i++){
i<pPk->nKeyColDescription
TRUEevaluated 84 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 72 times by 1 test
Evaluated by:
  • Self test (438)
72-84
1737 assert( pPk->aiColumn[i]>=0 );-
1738 x = sqlite3ColumnOfIndex(pIdx, pPk->aiColumn[i]);-
1739 sqlite3VdbeAddOp3(v, OP_Column, iThisCur, x, regR+i);-
1740 VdbeComment((v, "%s.%s", pTab->zName,-
1741 pTab->aCol[pPk->aiColumn[i]].zName));-
1742 }
executed 84 times by 1 test: end of block
Executed by:
  • Self test (438)
84
1743 }
executed 72 times by 1 test: end of block
Executed by:
  • Self test (438)
72
1744 if( isUpdate ){
isUpdateDescription
TRUEevaluated 172 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 48 times by 1 test
Evaluated by:
  • Self test (438)
48-172
1745 /* If currently processing the PRIMARY KEY of a WITHOUT ROWID -
1746 ** table, only conflict if the new PRIMARY KEY values are actually-
1747 ** different from the old.-
1748 **-
1749 ** For a UNIQUE index, only conflict if the PRIMARY KEY values-
1750 ** of the matched index row are different from the original PRIMARY-
1751 ** KEY values of this row before the update. */-
1752 int addrJump = sqlite3VdbeCurrentAddr(v)+pPk->nKeyCol;-
1753 int op = OP_Ne;-
1754 int regCmp = (IsPrimaryKeyIndex(pIdx) ? regIdx : regR);
((pIdx)->idxType==2)Description
TRUEevaluated 124 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 48 times by 1 test
Evaluated by:
  • Self test (438)
48-124
1755 -
1756 for(i=0; i<pPk->nKeyCol; i++){
i<pPk->nKeyColDescription
TRUEevaluated 209 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 172 times by 1 test
Evaluated by:
  • Self test (438)
172-209
1757 char *p4 = (char*)sqlite3LocateCollSeq(pParse, pPk->azColl[i]);-
1758 x = pPk->aiColumn[i];-
1759 assert( x>=0 );-
1760 if( i==(pPk->nKeyCol-1) ){
i==(pPk->nKeyCol-1)Description
TRUEevaluated 172 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 37 times by 1 test
Evaluated by:
  • Self test (438)
37-172
1761 addrJump = addrUniqueOk;-
1762 op = OP_Eq;-
1763 }
executed 172 times by 1 test: end of block
Executed by:
  • Self test (438)
172
1764 sqlite3VdbeAddOp4(v, op, -
1765 regOldData+1+x, addrJump, regCmp+i, p4, P4_COLLSEQ-
1766 );-
1767 sqlite3VdbeChangeP5(v, SQLITE_NOTNULL);-
1768 VdbeCoverageIf(v, op==OP_Eq);-
1769 VdbeCoverageIf(v, op==OP_Ne);-
1770 }
executed 209 times by 1 test: end of block
Executed by:
  • Self test (438)
209
1771 }
executed 172 times by 1 test: end of block
Executed by:
  • Self test (438)
172
1772 }
executed 220 times by 1 test: end of block
Executed by:
  • Self test (438)
220
1773 }-
1774-
1775 /* Generate code that executes if the new index entry is not unique */-
1776 assert( onError==OE_Rollback || onError==OE_Abort || onError==OE_Fail-
1777 || onError==OE_Ignore || onError==OE_Replace || onError==OE_Update );-
1778 switch( onError ){-
1779 case OE_Rollback:
executed 89 times by 1 test: case 1:
Executed by:
  • Self test (438)
89
1780 case OE_Abort:
executed 10282 times by 365 tests: case 2:
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
10282
1781 case OE_Fail: {
executed 110 times by 1 test: case 3:
Executed by:
  • Self test (438)
110
1782 testcase( onError==OE_Rollback );-
1783 testcase( onError==OE_Abort );-
1784 testcase( onError==OE_Fail );-
1785 sqlite3UniqueConstraint(pParse, onError, pIdx);-
1786 break;
executed 10481 times by 365 tests: break;
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
10481
1787 }-
1788#ifndef SQLITE_OMIT_UPSERT-
1789 case OE_Update: {
executed 48 times by 1 test: case 6:
Executed by:
  • Self test (438)
48
1790 sqlite3UpsertDoUpdate(pParse, pUpsert, pTab, pIdx, iIdxCur+ix);-
1791 /* Fall through */-
1792 }-
1793#endif-
1794 case OE_Ignore: {
code before this statement executed 48 times by 1 test: case 4:
Executed by:
  • Self test (438)
executed 252 times by 1 test: case 4:
Executed by:
  • Self test (438)
48-252
1795 testcase( onError==OE_Ignore );-
1796 sqlite3VdbeGoto(v, ignoreDest);-
1797 break;
executed 300 times by 1 test: break;
Executed by:
  • Self test (438)
300
1798 }-
1799 default: {
executed 211 times by 1 test: default:
Executed by:
  • Self test (438)
211
1800 Trigger *pTrigger = 0;-
1801 assert( onError==OE_Replace );-
1802 if( db->flags&SQLITE_RecTriggers ){
db->flags&0x00002000Description
TRUEevaluated 45 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 166 times by 1 test
Evaluated by:
  • Self test (438)
45-166
1803 pTrigger = sqlite3TriggersExist(pParse, pTab, TK_DELETE, 0, 0);-
1804 }
executed 45 times by 1 test: end of block
Executed by:
  • Self test (438)
45
1805 if( pTrigger || sqlite3FkRequired(pParse, pTab, 0, 0) ){
pTriggerDescription
TRUEevaluated 18 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 193 times by 1 test
Evaluated by:
  • Self test (438)
sqlite3FkRequi...e, pTab, 0, 0)Description
TRUEevaluated 28 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 165 times by 1 test
Evaluated by:
  • Self test (438)
18-193
1806 sqlite3MultiWrite(pParse);-
1807 }
executed 46 times by 1 test: end of block
Executed by:
  • Self test (438)
46
1808 sqlite3GenerateRowDelete(pParse, pTab, pTrigger, iDataCur, iIdxCur,-
1809 regR, nPkField, 0, OE_Replace,-
1810 (pIdx==pPk ? ONEPASS_SINGLE : ONEPASS_OFF), iThisCur);-
1811 seenReplace = 1;-
1812 break;
executed 211 times by 1 test: break;
Executed by:
  • Self test (438)
211
1813 }-
1814 }-
1815 if( pUpIdx==pIdx ){
pUpIdx==pIdxDescription
TRUEevaluated 90 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 10902 times by 365 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
90-10902
1816 sqlite3VdbeGoto(v, upsertJump+1);-
1817 sqlite3VdbeJumpHere(v, upsertBypass);-
1818 }else{
executed 90 times by 1 test: end of block
Executed by:
  • Self test (438)
90
1819 sqlite3VdbeResolveLabel(v, addrUniqueOk);-
1820 }
executed 10902 times by 365 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
10902
1821 if( regR!=regIdx ) sqlite3ReleaseTempRange(pParse, regR, nPkField);
executed 10107 times by 365 tests: sqlite3ReleaseTempRange(pParse, regR, nPkField);
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
regR!=regIdxDescription
TRUEevaluated 10107 times by 365 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
FALSEevaluated 885 times by 1 test
Evaluated by:
  • Self test (438)
885-10107
1822 }
executed 10992 times by 365 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
10992
1823-
1824 /* If the IPK constraint is a REPLACE, run it last */-
1825 if( ipkTop ){
ipkTopDescription
TRUEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 106757 times by 406 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
8-106757
1826 sqlite3VdbeGoto(v, ipkTop+1);-
1827 VdbeComment((v, "Do IPK REPLACE"));-
1828 sqlite3VdbeJumpHere(v, ipkBottom);-
1829 }
executed 8 times by 1 test: end of block
Executed by:
  • Self test (438)
8
1830-
1831 *pbMayReplace = seenReplace;-
1832 VdbeModuleComment((v, "END: GenCnstCks(%d)", seenReplace));-
1833}
executed 106765 times by 406 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
106765
1834-
1835#ifdef SQLITE_ENABLE_NULL_TRIM-
1836/*-
1837** Change the P5 operand on the last opcode (which should be an OP_MakeRecord)-
1838** to be the number of columns in table pTab that must not be NULL-trimmed.-
1839**-
1840** Or if no columns of pTab may be NULL-trimmed, leave P5 at zero.-
1841*/-
1842void sqlite3SetMakeRecordP5(Vdbe *v, Table *pTab){-
1843 u16 i;-
1844-
1845 /* Records with omitted columns are only allowed for schema format-
1846 ** version 2 and later (SQLite version 3.1.4, 2005-02-20). */-
1847 if( pTab->pSchema->file_format<2 ) return;-
1848-
1849 for(i=pTab->nCol-1; i>0; i--){-
1850 if( pTab->aCol[i].pDflt!=0 ) break;-
1851 if( pTab->aCol[i].colFlags & COLFLAG_PRIMKEY ) break;-
1852 }-
1853 sqlite3VdbeChangeP5(v, i+1);-
1854}-
1855#endif-
1856-
1857/*-
1858** This routine generates code to finish the INSERT or UPDATE operation-
1859** that was started by a prior call to sqlite3GenerateConstraintChecks.-
1860** A consecutive range of registers starting at regNewData contains the-
1861** rowid and the content to be inserted.-
1862**-
1863** The arguments to this routine should be the same as the first six-
1864** arguments to sqlite3GenerateConstraintChecks.-
1865*/-
1866void sqlite3CompleteInsertion(-
1867 Parse *pParse, /* The parser context */-
1868 Table *pTab, /* the table into which we are inserting */-
1869 int iDataCur, /* Cursor of the canonical data source */-
1870 int iIdxCur, /* First index cursor */-
1871 int regNewData, /* Range of content */-
1872 int *aRegIdx, /* Register used by each index. 0 for unused indices */-
1873 int update_flags, /* True for UPDATE, False for INSERT */-
1874 int appendBias, /* True if this is likely to be an append */-
1875 int useSeekResult /* True to set the USESEEKRESULT flag on OP_[Idx]Insert */-
1876){-
1877 Vdbe *v; /* Prepared statements under construction */-
1878 Index *pIdx; /* An index being inserted or updated */-
1879 u8 pik_flags; /* flag values passed to the btree insert */-
1880 int regData; /* Content registers (after the rowid) */-
1881 int regRec; /* Register holding assembled record for the table */-
1882 int i; /* Loop counter */-
1883 u8 bAffinityDone = 0; /* True if OP_Affinity has been run already */-
1884-
1885 assert( update_flags==0-
1886 || update_flags==OPFLAG_ISUPDATE-
1887 || update_flags==(OPFLAG_ISUPDATE|OPFLAG_SAVEPOSITION)-
1888 );-
1889-
1890 v = sqlite3GetVdbe(pParse);-
1891 assert( v!=0 );-
1892 assert( pTab->pSelect==0 ); /* This table is not a VIEW */-
1893 for(i=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, i++){
pIdxDescription
TRUEevaluated 21511 times by 369 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
FALSEevaluated 106765 times by 406 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
21511-106765
1894 if( aRegIdx[i]==0 ) continue;
executed 425 times by 3 tests: continue;
Executed by:
  • Self test (35)
  • Self test (438)
  • Self test (54)
aRegIdx[i]==0Description
TRUEevaluated 425 times by 3 tests
Evaluated by:
  • Self test (35)
  • Self test (438)
  • Self test (54)
FALSEevaluated 21086 times by 369 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
425-21086
1895 bAffinityDone = 1;-
1896 if( pIdx->pPartIdxWhere ){
pIdx->pPartIdxWhereDescription
TRUEevaluated 65 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 21021 times by 369 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
65-21021
1897 sqlite3VdbeAddOp2(v, OP_IsNull, aRegIdx[i], sqlite3VdbeCurrentAddr(v)+2);-
1898 VdbeCoverage(v);-
1899 }
executed 65 times by 1 test: end of block
Executed by:
  • Self test (438)
65
1900 pik_flags = (useSeekResult ? OPFLAG_USESEEKRESULT : 0);
useSeekResultDescription
TRUEevaluated 19822 times by 29 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (6)
  • Self test (7)
  • Self test (86)
  • Self test (88)
  • Self test (9)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • ...
FALSEevaluated 1264 times by 346 tests
Evaluated by:
  • Self test (10)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • ...
1264-19822
1901 if( IsPrimaryKeyIndex(pIdx) && !HasRowid(pTab) ){
((pIdx)->idxType==2)Description
TRUEevaluated 2781 times by 20 tests
Evaluated by:
  • Self test (10)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (35)
  • Self test (438)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
FALSEevaluated 18305 times by 350 tests
Evaluated by:
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • Self test (129)
  • ...
!(((pTab)->tab... & 0x0020)==0)Description
TRUEevaluated 1058 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1723 times by 20 tests
Evaluated by:
  • Self test (10)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (35)
  • Self test (438)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
1058-18305
1902 assert( pParse->nested==0 );-
1903 pik_flags |= OPFLAG_NCHANGE;-
1904 pik_flags |= (update_flags & OPFLAG_SAVEPOSITION);-
1905#ifdef SQLITE_ENABLE_PREUPDATE_HOOK-
1906 if( update_flags==0 ){-
1907 sqlite3VdbeAddOp4(v, OP_InsertInt, -
1908 iIdxCur+i, aRegIdx[i], 0, (char*)pTab, P4_TABLE-
1909 );-
1910 sqlite3VdbeChangeP5(v, OPFLAG_ISNOOP);-
1911 }-
1912#endif-
1913 }
executed 1058 times by 1 test: end of block
Executed by:
  • Self test (438)
1058
1914 sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iIdxCur+i, aRegIdx[i],-
1915 aRegIdx[i]+1,-
1916 pIdx->uniqNotNull ? pIdx->nKeyCol: pIdx->nColumn);-
1917 sqlite3VdbeChangeP5(v, pik_flags);-
1918 }
executed 21086 times by 369 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
21086
1919 if( !HasRowid(pTab) ) return;
executed 1058 times by 1 test: return;
Executed by:
  • Self test (438)
!(((pTab)->tab... & 0x0020)==0)Description
TRUEevaluated 1058 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 105707 times by 406 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
1058-105707
1920 regData = regNewData + 1;-
1921 regRec = sqlite3GetTempReg(pParse);-
1922 sqlite3VdbeAddOp3(v, OP_MakeRecord, regData, pTab->nCol, regRec);-
1923 sqlite3SetMakeRecordP5(v, pTab);-
1924 if( !bAffinityDone ){
!bAffinityDoneDescription
TRUEevaluated 89053 times by 52 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (2)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (30)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (4)
  • Self test (41)
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • ...
FALSEevaluated 16654 times by 369 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
16654-89053
1925 sqlite3TableAffinity(v, pTab, 0);-
1926 }
executed 89053 times by 52 tests: end of block
Executed by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (2)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (30)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (4)
  • Self test (41)
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • ...
89053
1927 if( pParse->nested ){
pParse->nestedDescription
TRUEevaluated 35281 times by 33 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (30)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (39)
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (47)
  • Self test (48)
  • Self test (57)
  • Self test (58)
  • Self test (72)
  • Self test (73)
  • Self test (91)
  • ...
FALSEevaluated 70426 times by 393 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • ...
35281-70426
1928 pik_flags = 0;-
1929 }else{
executed 35281 times by 33 tests: end of block
Executed by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (30)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (39)
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (47)
  • Self test (48)
  • Self test (57)
  • Self test (58)
  • Self test (72)
  • Self test (73)
  • Self test (91)
  • ...
35281
1930 pik_flags = OPFLAG_NCHANGE;-
1931 pik_flags |= (update_flags?update_flags:OPFLAG_LASTROWID);
update_flagsDescription
TRUEevaluated 2595 times by 349 tests
Evaluated by:
  • Self test (10)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • ...
FALSEevaluated 67831 times by 53 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (41)
  • Self test (438)
  • ...
2595-67831
1932 }
executed 70426 times by 393 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • ...
70426
1933 if( appendBias ){
appendBiasDescription
TRUEevaluated 70801 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
FALSEevaluated 34906 times by 377 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
34906-70801
1934 pik_flags |= OPFLAG_APPEND;-
1935 }
executed 70801 times by 61 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
70801
1936 if( useSeekResult ){
useSeekResultDescription
TRUEevaluated 73071 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
FALSEevaluated 32636 times by 377 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
32636-73071
1937 pik_flags |= OPFLAG_USESEEKRESULT;-
1938 }
executed 73071 times by 61 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
73071
1939 sqlite3VdbeAddOp3(v, OP_Insert, iDataCur, regRec, regNewData);-
1940 if( !pParse->nested ){
!pParse->nestedDescription
TRUEevaluated 70426 times by 393 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • ...
FALSEevaluated 35281 times by 33 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (30)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (39)
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (47)
  • Self test (48)
  • Self test (57)
  • Self test (58)
  • Self test (72)
  • Self test (73)
  • Self test (91)
  • ...
35281-70426
1941 sqlite3VdbeAppendP4(v, pTab, P4_TABLE);-
1942 }
executed 70426 times by 393 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • ...
70426
1943 sqlite3VdbeChangeP5(v, pik_flags);-
1944}
executed 105707 times by 406 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
105707
1945-
1946/*-
1947** Allocate cursors for the pTab table and all its indices and generate-
1948** code to open and initialized those cursors.-
1949**-
1950** The cursor for the object that contains the complete data (normally-
1951** the table itself, but the PRIMARY KEY index in the case of a WITHOUT-
1952** ROWID table) is returned in *piDataCur. The first index cursor is-
1953** returned in *piIdxCur. The number of indices is returned.-
1954**-
1955** Use iBase as the first cursor (either the *piDataCur for rowid tables-
1956** or the first index for WITHOUT ROWID tables) if it is non-negative.-
1957** If iBase is negative, then allocate the next available cursor.-
1958**-
1959** For a rowid table, *piDataCur will be exactly one less than *piIdxCur.-
1960** For a WITHOUT ROWID table, *piDataCur will be somewhere in the range-
1961** of *piIdxCurs, depending on where the PRIMARY KEY index appears on the-
1962** pTab->pIndex list.-
1963**-
1964** If pTab is a virtual table, then this routine is a no-op and the-
1965** *piDataCur and *piIdxCur values are left uninitialized.-
1966*/-
1967int sqlite3OpenTableAndIndices(-
1968 Parse *pParse, /* Parsing context */-
1969 Table *pTab, /* Table to be opened */-
1970 int op, /* OP_OpenRead or OP_OpenWrite */-
1971 u8 p5, /* P5 value for OP_Open* opcodes (except on WITHOUT ROWID) */-
1972 int iBase, /* Use this for the table cursor, if there is one */-
1973 u8 *aToOpen, /* If not NULL: boolean for each table and index */-
1974 int *piDataCur, /* Write the database source cursor number here */-
1975 int *piIdxCur /* Write the first index cursor number here */-
1976){-
1977 int i;-
1978 int iDb;-
1979 int iDataCur;-
1980 Index *pIdx;-
1981 Vdbe *v;-
1982-
1983 assert( op==OP_OpenRead || op==OP_OpenWrite );-
1984 assert( op==OP_OpenWrite || p5==0 );-
1985 if( IsVirtual(pTab) ){
((pTab)->nModuleArg)Description
TRUEevaluated 1022 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 133313 times by 418 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
1022-133313
1986 /* This routine is a no-op for virtual tables. Leave the output-
1987 ** variables *piDataCur and *piIdxCur uninitialized so that valgrind-
1988 ** can detect if they are used by mistake in the caller. */-
1989 return 0;
executed 1022 times by 1 test: return 0;
Executed by:
  • Self test (438)
1022
1990 }-
1991 iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);-
1992 v = sqlite3GetVdbe(pParse);-
1993 assert( v!=0 );-
1994 if( iBase<0 ) iBase = pParse->nTab;
executed 73870 times by 61 tests: iBase = pParse->nTab;
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
iBase<0Description
TRUEevaluated 73870 times by 61 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
FALSEevaluated 59443 times by 389 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
59443-73870
1995 iDataCur = iBase++;-
1996 if( piDataCur ) *piDataCur = iDataCur;
executed 100474 times by 73 tests: *piDataCur = iDataCur;
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
piDataCurDescription
TRUEevaluated 100474 times by 73 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
FALSEevaluated 32839 times by 377 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
32839-100474
1997 if( HasRowid(pTab) && (aToOpen==0 || aToOpen[0]) ){
(((pTab)->tabF... & 0x0020)==0)Description
TRUEevaluated 132067 times by 418 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
FALSEevaluated 1246 times by 1 test
Evaluated by:
  • Self test (438)
aToOpen==0Description
TRUEevaluated 93074 times by 72 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
FALSEevaluated 38993 times by 378 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
aToOpen[0]Description
TRUEevaluated 6946 times by 4 tests
Evaluated by:
  • Self test (24)
  • Self test (28)
  • Self test (438)
  • Self test (47)
FALSEevaluated 32047 times by 378 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
1246-132067
1998 sqlite3OpenTable(pParse, iDataCur, iDb, pTab, op);-
1999 }else{
executed 100020 times by 72 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
100020
2000 sqlite3TableLock(pParse, iDb, pTab->tnum, op==OP_OpenWrite, pTab->zName);-
2001 }
executed 33293 times by 378 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
33293
2002 if( piIdxCur ) *piIdxCur = iBase;
executed 100474 times by 73 tests: *piIdxCur = iBase;
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
piIdxCurDescription
TRUEevaluated 100474 times by 73 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
FALSEevaluated 32839 times by 377 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
32839-100474
2003 for(i=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, i++){
pIdxDescription
TRUEevaluated 25725 times by 380 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
FALSEevaluated 133313 times by 418 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
25725-133313
2004 int iIdxCur = iBase++;-
2005 assert( pIdx->pSchema==pTab->pSchema );-
2006 if( IsPrimaryKeyIndex(pIdx) && !HasRowid(pTab) ){
((pIdx)->idxType==2)Description
TRUEevaluated 3771 times by 20 tests
Evaluated by:
  • Self test (10)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (35)
  • Self test (438)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
FALSEevaluated 21954 times by 362 tests
Evaluated by:
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • Self test (129)
  • ...
!(((pTab)->tab... & 0x0020)==0)Description
TRUEevaluated 1246 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2525 times by 20 tests
Evaluated by:
  • Self test (10)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (35)
  • Self test (438)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
1246-21954
2007 if( piDataCur ) *piDataCur = iIdxCur;
executed 985 times by 1 test: *piDataCur = iIdxCur;
Executed by:
  • Self test (438)
piDataCurDescription
TRUEevaluated 985 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 261 times by 1 test
Evaluated by:
  • Self test (438)
261-985
2008 p5 = 0;-
2009 }
executed 1246 times by 1 test: end of block
Executed by:
  • Self test (438)
1246
2010 if( aToOpen==0 || aToOpen[i+1] ){
aToOpen==0Description
TRUEevaluated 23588 times by 40 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (32)
  • Self test (33)
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (53)
  • Self test (6)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (7)
  • ...
FALSEevaluated 2137 times by 348 tests
Evaluated by:
  • Self test (10)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • ...
aToOpen[i+1]Description
TRUEevaluated 1362 times by 348 tests
Evaluated by:
  • Self test (10)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • ...
FALSEevaluated 775 times by 3 tests
Evaluated by:
  • Self test (35)
  • Self test (438)
  • Self test (54)
775-23588
2011 sqlite3VdbeAddOp3(v, op, iIdxCur, pIdx->tnum, iDb);-
2012 sqlite3VdbeSetP4KeyInfo(pParse, pIdx);-
2013 sqlite3VdbeChangeP5(v, p5);-
2014 VdbeComment((v, "%s", pIdx->zName));-
2015 }
executed 24950 times by 380 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
24950
2016 }
executed 25725 times by 380 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
25725
2017 if( iBase>pParse->nTab ) pParse->nTab = iBase;
executed 79780 times by 72 tests: pParse->nTab = iBase;
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
iBase>pParse->nTabDescription
TRUEevaluated 79780 times by 72 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
FALSEevaluated 53533 times by 389 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
53533-79780
2018 return i;
executed 133313 times by 418 tests: return i;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
133313
2019}-
2020-
2021-
2022#ifdef SQLITE_TEST-
2023/*-
2024** The following global variable is incremented whenever the-
2025** transfer optimization is used. This is used for testing-
2026** purposes only - to make sure the transfer optimization really-
2027** is happening when it is supposed to.-
2028*/-
2029int sqlite3_xferopt_count;-
2030#endif /* SQLITE_TEST */-
2031-
2032-
2033#ifndef SQLITE_OMIT_XFER_OPT-
2034/*-
2035** Check to see if index pSrc is compatible as a source of data-
2036** for index pDest in an insert transfer optimization. The rules-
2037** for a compatible index:-
2038**-
2039** * The index is over the same set of columns-
2040** * The same DESC and ASC markings occurs on all columns-
2041** * The same onError processing (OE_Abort, OE_Ignore, etc)-
2042** * The same collating sequence on each column-
2043** * The index has the exact same WHERE clause-
2044*/-
2045static int xferCompatibleIndex(Index *pDest, Index *pSrc){-
2046 int i;-
2047 assert( pDest && pSrc );-
2048 assert( pDest->pTable!=pSrc->pTable );-
2049 if( pDest->nKeyCol!=pSrc->nKeyCol ){
pDest->nKeyCol!=pSrc->nKeyColDescription
TRUEevaluated 10 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1990 times by 1 test
Evaluated by:
  • Self test (438)
10-1990
2050 return 0; /* Different number of columns */
executed 10 times by 1 test: return 0;
Executed by:
  • Self test (438)
10
2051 }-
2052 if( pDest->onError!=pSrc->onError ){
pDest->onError!=pSrc->onErrorDescription
TRUEevaluated 53 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1937 times by 1 test
Evaluated by:
  • Self test (438)
53-1937
2053 return 0; /* Different conflict resolution strategies */
executed 53 times by 1 test: return 0;
Executed by:
  • Self test (438)
53
2054 }-
2055 for(i=0; i<pSrc->nKeyCol; i++){
i<pSrc->nKeyColDescription
TRUEevaluated 2034 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1846 times by 1 test
Evaluated by:
  • Self test (438)
1846-2034
2056 if( pSrc->aiColumn[i]!=pDest->aiColumn[i] ){
pSrc->aiColumn...t->aiColumn[i]Description
TRUEevaluated 88 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1946 times by 1 test
Evaluated by:
  • Self test (438)
88-1946
2057 return 0; /* Different columns indexed */
executed 88 times by 1 test: return 0;
Executed by:
  • Self test (438)
88
2058 }-
2059 if( pSrc->aiColumn[i]==XN_EXPR ){
pSrc->aiColumn[i]==(-2)Description
TRUEnever evaluated
FALSEevaluated 1946 times by 1 test
Evaluated by:
  • Self test (438)
0-1946
2060 assert( pSrc->aColExpr!=0 && pDest->aColExpr!=0 );-
2061 if( sqlite3ExprCompare(0, pSrc->aColExpr->a[i].pExpr,
sqlite3ExprCom....pExpr, -1)!=0Description
TRUEnever evaluated
FALSEnever evaluated
0
2062 pDest->aColExpr->a[i].pExpr, -1)!=0 ){
sqlite3ExprCom....pExpr, -1)!=0Description
TRUEnever evaluated
FALSEnever evaluated
0
2063 return 0; /* Different expressions in the index */
never executed: return 0;
0
2064 }-
2065 }
never executed: end of block
0
2066 if( pSrc->aSortOrder[i]!=pDest->aSortOrder[i] ){
pSrc->aSortOrd...>aSortOrder[i]Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1944 times by 1 test
Evaluated by:
  • Self test (438)
2-1944
2067 return 0; /* Different sort orders */
executed 2 times by 1 test: return 0;
Executed by:
  • Self test (438)
2
2068 }-
2069 if( sqlite3_stricmp(pSrc->azColl[i],pDest->azColl[i])!=0 ){
sqlite3_stricm...>azColl[i])!=0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1943 times by 1 test
Evaluated by:
  • Self test (438)
1-1943
2070 return 0; /* Different collating sequences */
executed 1 time by 1 test: return 0;
Executed by:
  • Self test (438)
1
2071 }-
2072 }
executed 1943 times by 1 test: end of block
Executed by:
  • Self test (438)
1943
2073 if( sqlite3ExprCompare(0, pSrc->pPartIdxWhere, pDest->pPartIdxWhere, -1) ){
sqlite3ExprCom...tIdxWhere, -1)Description
TRUEnever evaluated
FALSEevaluated 1846 times by 1 test
Evaluated by:
  • Self test (438)
0-1846
2074 return 0; /* Different WHERE clauses */
never executed: return 0;
0
2075 }-
2076-
2077 /* If no test above fails then the indices must be compatible */-
2078 return 1;
executed 1846 times by 1 test: return 1;
Executed by:
  • Self test (438)
1846
2079}-
2080-
2081/*-
2082** Attempt the transfer optimization on INSERTs of the form-
2083**-
2084** INSERT INTO tab1 SELECT * FROM tab2;-
2085**-
2086** The xfer optimization transfers raw records from tab2 over to tab1. -
2087** Columns are not decoded and reassembled, which greatly improves-
2088** performance. Raw index records are transferred in the same way.-
2089**-
2090** The xfer optimization is only attempted if tab1 and tab2 are compatible.-
2091** There are lots of rules for determining compatibility - see comments-
2092** embedded in the code for details.-
2093**-
2094** This routine returns TRUE if the optimization is guaranteed to be used.-
2095** Sometimes the xfer optimization will only work if the destination table-
2096** is empty - a factor that can only be determined at run-time. In that-
2097** case, this routine generates code for the xfer optimization but also-
2098** does a test to see if the destination table is empty and jumps over the-
2099** xfer optimization code if the test fails. In that case, this routine-
2100** returns FALSE so that the caller will know to go ahead and generate-
2101** an unoptimized transfer. This routine also returns FALSE if there-
2102** is no chance that the xfer optimization can be applied.-
2103**-
2104** This optimization is particularly useful at making VACUUM run faster.-
2105*/-
2106static int xferOptimization(-
2107 Parse *pParse, /* Parser context */-
2108 Table *pDest, /* The table we are inserting into */-
2109 Select *pSelect, /* A SELECT statement to use as the data source */-
2110 int onError, /* How to handle constraint errors */-
2111 int iDbDest /* The database of pDest */-
2112){-
2113 sqlite3 *db = pParse->db;-
2114 ExprList *pEList; /* The result set of the SELECT */-
2115 Table *pSrc; /* The table in the FROM clause of SELECT */-
2116 Index *pSrcIdx, *pDestIdx; /* Source and destination indices */-
2117 struct SrcList_item *pItem; /* An element of pSelect->pSrc */-
2118 int i; /* Loop counter */-
2119 int iDbSrc; /* The database of pSrc */-
2120 int iSrc, iDest; /* Cursors from source and destination */-
2121 int addr1, addr2; /* Loop addresses */-
2122 int emptyDestTest = 0; /* Address of test for empty pDest */-
2123 int emptySrcTest = 0; /* Address of test for empty pSrc */-
2124 Vdbe *v; /* The VDBE we are building */-
2125 int regAutoinc; /* Memory register used by AUTOINC */-
2126 int destHasUniqueIdx = 0; /* True if pDest has a UNIQUE index */-
2127 int regData, regRowid; /* Registers holding data and rowid */-
2128-
2129 if( pSelect==0 ){
pSelect==0Description
TRUEevaluated 67842 times by 59 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
FALSEevaluated 4540 times by 6 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (64)
4540-67842
2130 return 0; /* Must be of the form INSERT INTO ... SELECT ... */
executed 67842 times by 59 tests: return 0;
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
67842
2131 }-
2132 if( pParse->pWith || pSelect->pWith ){
pParse->pWithDescription
TRUEevaluated 75 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4465 times by 6 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (64)
pSelect->pWithDescription
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4462 times by 6 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (64)
3-4465
2133 /* Do not attempt to process this query if there are an WITH clauses-
2134 ** attached to it. Proceeding may generate a false "no such table: xxx"-
2135 ** error if pSelect reads from a CTE named "xxx". */-
2136 return 0;
executed 78 times by 1 test: return 0;
Executed by:
  • Self test (438)
78
2137 }-
2138 if( sqlite3TriggerList(pParse, pDest) ){
sqlite3Trigger...pParse, pDest)Description
TRUEevaluated 31 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4431 times by 6 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (64)
31-4431
2139 return 0; /* tab1 must not have triggers */
executed 31 times by 1 test: return 0;
Executed by:
  • Self test (438)
31
2140 }-
2141#ifndef SQLITE_OMIT_VIRTUALTABLE-
2142 if( IsVirtual(pDest) ){
((pDest)->nModuleArg)Description
TRUEevaluated 16 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4415 times by 6 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (64)
16-4415
2143 return 0; /* tab1 must not be a virtual table */
executed 16 times by 1 test: return 0;
Executed by:
  • Self test (438)
16
2144 }-
2145#endif-
2146 if( onError==OE_Default ){
onError==11Description
TRUEevaluated 4369 times by 6 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (64)
FALSEevaluated 46 times by 1 test
Evaluated by:
  • Self test (438)
46-4369
2147 if( pDest->iPKey>=0 ) onError = pDest->keyConf;
executed 308 times by 1 test: onError = pDest->keyConf;
Executed by:
  • Self test (438)
pDest->iPKey>=0Description
TRUEevaluated 308 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4061 times by 6 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (64)
308-4061
2148 if( onError==OE_Default ) onError = OE_Abort;
executed 4357 times by 6 tests: onError = 2;
Executed by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (64)
onError==11Description
TRUEevaluated 4357 times by 6 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (64)
FALSEevaluated 12 times by 1 test
Evaluated by:
  • Self test (438)
12-4357
2149 }
executed 4369 times by 6 tests: end of block
Executed by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (64)
4369
2150 assert(pSelect->pSrc); /* allocated even if there is no FROM clause */-
2151 if( pSelect->pSrc->nSrc!=1 ){
pSelect->pSrc->nSrc!=1Description
TRUEevaluated 291 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4124 times by 6 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (64)
291-4124
2152 return 0; /* FROM clause must have exactly one term */
executed 291 times by 1 test: return 0;
Executed by:
  • Self test (438)
291
2153 }-
2154 if( pSelect->pSrc->a[0].pSelect ){
pSelect->pSrc->a[0].pSelectDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4123 times by 6 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (64)
1-4123
2155 return 0; /* FROM clause cannot contain a subquery */
executed 1 time by 1 test: return 0;
Executed by:
  • Self test (438)
1
2156 }-
2157 if( pSelect->pWhere ){
pSelect->pWhereDescription
TRUEevaluated 1023 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
FALSEevaluated 3100 times by 6 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (64)
1023-3100
2158 return 0; /* SELECT may not have a WHERE clause */
executed 1023 times by 2 tests: return 0;
Executed by:
  • Self test (34)
  • Self test (438)
1023
2159 }-
2160 if( pSelect->pOrderBy ){
pSelect->pOrderByDescription
TRUEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3092 times by 6 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (64)
8-3092
2161 return 0; /* SELECT may not have an ORDER BY clause */
executed 8 times by 1 test: return 0;
Executed by:
  • Self test (438)
8
2162 }-
2163 /* Do not need to test for a HAVING clause. If HAVING is present but-
2164 ** there is no ORDER BY, we will get an error. */-
2165 if( pSelect->pGroupBy ){
pSelect->pGroupByDescription
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3089 times by 6 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (64)
3-3089
2166 return 0; /* SELECT may not have a GROUP BY clause */
executed 3 times by 1 test: return 0;
Executed by:
  • Self test (438)
3
2167 }-
2168 if( pSelect->pLimit ){
pSelect->pLimitDescription
TRUEevaluated 5 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3084 times by 6 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (64)
5-3084
2169 return 0; /* SELECT may not have a LIMIT clause */
executed 5 times by 1 test: return 0;
Executed by:
  • Self test (438)
5
2170 }-
2171 if( pSelect->pPrior ){
pSelect->pPriorDescription
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3081 times by 6 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (64)
3-3081
2172 return 0; /* SELECT may not be a compound query */
executed 3 times by 1 test: return 0;
Executed by:
  • Self test (438)
3
2173 }-
2174 if( pSelect->selFlags & SF_Distinct ){
pSelect->selFlags & 0x00001Description
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3078 times by 6 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (64)
3-3078
2175 return 0; /* SELECT may not be DISTINCT */
executed 3 times by 1 test: return 0;
Executed by:
  • Self test (438)
3
2176 }-
2177 pEList = pSelect->pEList;-
2178 assert( pEList!=0 );-
2179 if( pEList->nExpr!=1 ){
pEList->nExpr!=1Description
TRUEevaluated 936 times by 4 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 2142 times by 3 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
  • Self test (64)
936-2142
2180 return 0; /* The result set must have exactly one column */
executed 936 times by 4 tests: return 0;
Executed by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
936
2181 }-
2182 assert( pEList->a[0].pExpr );-
2183 if( pEList->a[0].pExpr->op!=TK_ASTERISK ){
pEList->a[0].pExpr->op!=168Description
TRUEevaluated 408 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (64)
FALSEevaluated 1734 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
408-1734
2184 return 0; /* The result set must be the special operator "*" */
executed 408 times by 2 tests: return 0;
Executed by:
  • Self test (438)
  • Self test (64)
408
2185 }-
2186-
2187 /* At this point we have established that the statement is of the-
2188 ** correct syntactic form to participate in this optimization. Now-
2189 ** we have to check the semantics.-
2190 */-
2191 pItem = pSelect->pSrc->a;-
2192 pSrc = sqlite3LocateTableItem(pParse, 0, pItem);-
2193 if( pSrc==0 ){
pSrc==0Description
TRUEnever evaluated
FALSEevaluated 1734 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
0-1734
2194 return 0; /* FROM clause does not contain a real table */
never executed: return 0;
0
2195 }-
2196 if( pSrc==pDest ){
pSrc==pDestDescription
TRUEevaluated 144 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1590 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
144-1590
2197 return 0; /* tab1 and tab2 may not be the same table */
executed 144 times by 1 test: return 0;
Executed by:
  • Self test (438)
144
2198 }-
2199 if( HasRowid(pDest)!=HasRowid(pSrc) ){
(((pDest)->tab... & 0x0020)==0)Description
TRUEevaluated 30 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1560 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
30-1560
2200 return 0; /* source and destination must both be WITHOUT ROWID or not */
executed 30 times by 1 test: return 0;
Executed by:
  • Self test (438)
30
2201 }-
2202#ifndef SQLITE_OMIT_VIRTUALTABLE-
2203 if( IsVirtual(pSrc) ){
((pSrc)->nModuleArg)Description
TRUEnever evaluated
FALSEevaluated 1560 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
0-1560
2204 return 0; /* tab2 must not be a virtual table */
never executed: return 0;
0
2205 }-
2206#endif-
2207 if( pSrc->pSelect ){
pSrc->pSelectDescription
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1557 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
3-1557
2208 return 0; /* tab2 may not be a view */
executed 3 times by 1 test: return 0;
Executed by:
  • Self test (438)
3
2209 }-
2210 if( pDest->nCol!=pSrc->nCol ){
pDest->nCol!=pSrc->nColDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1555 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
2-1555
2211 return 0; /* Number of columns must be the same in tab1 and tab2 */
executed 2 times by 1 test: return 0;
Executed by:
  • Self test (438)
2
2212 }-
2213 if( pDest->iPKey!=pSrc->iPKey ){
pDest->iPKey!=pSrc->iPKeyDescription
TRUEevaluated 9 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1546 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
9-1546
2214 return 0; /* Both tables must have the same INTEGER PRIMARY KEY */
executed 9 times by 1 test: return 0;
Executed by:
  • Self test (438)
9
2215 }-
2216 for(i=0; i<pDest->nCol; i++){
i<pDest->nColDescription
TRUEevaluated 3455 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
FALSEevaluated 1525 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
1525-3455
2217 Column *pDestCol = &pDest->aCol[i];-
2218 Column *pSrcCol = &pSrc->aCol[i];-
2219#ifdef SQLITE_ENABLE_HIDDEN_COLUMNS-
2220 if( (db->mDbFlags & DBFLAG_Vacuum)==0 -
2221 && (pDestCol->colFlags | pSrcCol->colFlags) & COLFLAG_HIDDEN -
2222 ){-
2223 return 0; /* Neither table may have __hidden__ columns */-
2224 }-
2225#endif-
2226 if( pDestCol->affinity!=pSrcCol->affinity ){
pDestCol->affi...cCol->affinityDescription
TRUEevaluated 6 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3449 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
6-3449
2227 return 0; /* Affinity must be the same on all columns */
executed 6 times by 1 test: return 0;
Executed by:
  • Self test (438)
6
2228 }-
2229 if( sqlite3_stricmp(pDestCol->zColl, pSrcCol->zColl)!=0 ){
sqlite3_stricm...Col->zColl)!=0Description
TRUEevaluated 5 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3444 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
5-3444
2230 return 0; /* Collating sequence must be the same on all columns */
executed 5 times by 1 test: return 0;
Executed by:
  • Self test (438)
5
2231 }-
2232 if( pDestCol->notNull && !pSrcCol->notNull ){
pDestCol->notNullDescription
TRUEevaluated 44 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3400 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
!pSrcCol->notNullDescription
TRUEevaluated 6 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 38 times by 1 test
Evaluated by:
  • Self test (438)
6-3400
2233 return 0; /* tab2 must be NOT NULL if tab1 is */
executed 6 times by 1 test: return 0;
Executed by:
  • Self test (438)
6
2234 }-
2235 /* Default values for second and subsequent columns need to match. */-
2236 if( i>0 ){
i>0Description
TRUEevaluated 1902 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
FALSEevaluated 1536 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
1536-1902
2237 assert( pDestCol->pDflt==0 || pDestCol->pDflt->op==TK_SPAN );-
2238 assert( pSrcCol->pDflt==0 || pSrcCol->pDflt->op==TK_SPAN );-
2239 if( (pDestCol->pDflt==0)!=(pSrcCol->pDflt==0)
(pDestCol->pDf...Col->pDflt==0)Description
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1899 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
3-1899
2240 || (pDestCol->pDflt && strcmp(pDestCol->pDflt->u.zToken,
never executed: __result = (((const unsigned char *) (const char *) ( pDestCol->pDflt->u.zToken ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( pSrcCol->pDflt->u.zToken ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
pDestCol->pDfltDescription
TRUEevaluated 16 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1883 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
__extension__ ...n )))); }) !=0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 15 times by 1 test
Evaluated by:
  • Self test (438)
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-1883
2241 pSrcCol->pDflt->u.zToken)!=0)
__extension__ ...n )))); }) !=0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 15 times by 1 test
Evaluated by:
  • Self test (438)
1-15
2242 ){-
2243 return 0; /* Default values must be the same for all columns */
executed 4 times by 1 test: return 0;
Executed by:
  • Self test (438)
4
2244 }-
2245 }
executed 1898 times by 2 tests: end of block
Executed by:
  • Self test (34)
  • Self test (438)
1898
2246 }
executed 3434 times by 2 tests: end of block
Executed by:
  • Self test (34)
  • Self test (438)
3434
2247 for(pDestIdx=pDest->pIndex; pDestIdx; pDestIdx=pDestIdx->pNext){
pDestIdxDescription
TRUEevaluated 979 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1469 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
979-1469
2248 if( IsUniqueIndex(pDestIdx) ){
((pDestIdx)->onError!=0)Description
TRUEevaluated 195 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 784 times by 1 test
Evaluated by:
  • Self test (438)
195-784
2249 destHasUniqueIdx = 1;-
2250 }
executed 195 times by 1 test: end of block
Executed by:
  • Self test (438)
195
2251 for(pSrcIdx=pSrc->pIndex; pSrcIdx; pSrcIdx=pSrcIdx->pNext){
pSrcIdxDescription
TRUEevaluated 1007 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 56 times by 1 test
Evaluated by:
  • Self test (438)
56-1007
2252 if( xferCompatibleIndex(pDestIdx, pSrcIdx) ) break;
executed 923 times by 1 test: break;
Executed by:
  • Self test (438)
xferCompatible...tIdx, pSrcIdx)Description
TRUEevaluated 923 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 84 times by 1 test
Evaluated by:
  • Self test (438)
84-923
2253 }
executed 84 times by 1 test: end of block
Executed by:
  • Self test (438)
84
2254 if( pSrcIdx==0 ){
pSrcIdx==0Description
TRUEevaluated 56 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 923 times by 1 test
Evaluated by:
  • Self test (438)
56-923
2255 return 0; /* pDestIdx has no corresponding index in pSrc */
executed 56 times by 1 test: return 0;
Executed by:
  • Self test (438)
56
2256 }-
2257 }
executed 923 times by 1 test: end of block
Executed by:
  • Self test (438)
923
2258#ifndef SQLITE_OMIT_CHECK-
2259 if( pDest->pCheck && sqlite3ExprListCompare(pSrc->pCheck,pDest->pCheck,-1) ){
pDest->pCheckDescription
TRUEevaluated 15 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1454 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
sqlite3ExprLis...st->pCheck,-1)Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 11 times by 1 test
Evaluated by:
  • Self test (438)
4-1454
2260 return 0; /* Tables have different CHECK constraints. Ticket #2252 */
executed 4 times by 1 test: return 0;
Executed by:
  • Self test (438)
4
2261 }-
2262#endif-
2263#ifndef SQLITE_OMIT_FOREIGN_KEY-
2264 /* Disallow the transfer optimization if the destination table constains-
2265 ** any foreign key constraints. This is more restrictive than necessary.-
2266 ** But the main beneficiary of the transfer optimization is the VACUUM -
2267 ** command, and the VACUUM command disables foreign key constraints. So-
2268 ** the extra complication to make this rule less restrictive is probably-
2269 ** not worth the effort. Ticket [6284df89debdfa61db8073e062908af0c9b6118e]-
2270 */-
2271 if( (db->flags & SQLITE_ForeignKeys)!=0 && pDest->pFKey!=0 ){
(db->flags & 0x00004000)!=0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1463 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
pDest->pFKey!=0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-1463
2272 return 0;
executed 2 times by 1 test: return 0;
Executed by:
  • Self test (438)
2
2273 }-
2274#endif-
2275 if( (db->flags & SQLITE_CountRows)!=0 ){
(db->flags & 0x00000080)!=0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1462 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
1-1462
2276 return 0; /* xfer opt does not play well with PRAGMA count_changes */
executed 1 time by 1 test: return 0;
Executed by:
  • Self test (438)
1
2277 }-
2278-
2279 /* If we get this far, it means that the xfer optimization is at-
2280 ** least a possibility, though it might only work if the destination-
2281 ** table (tab1) is initially empty.-
2282 */-
2283#ifdef SQLITE_TEST-
2284 sqlite3_xferopt_count++;-
2285#endif-
2286 iDbSrc = sqlite3SchemaToIndex(db, pSrc->pSchema);-
2287 v = sqlite3GetVdbe(pParse);-
2288 sqlite3CodeVerifySchema(pParse, iDbSrc);-
2289 iSrc = pParse->nTab++;-
2290 iDest = pParse->nTab++;-
2291 regAutoinc = autoIncBegin(pParse, iDbDest, pDest);-
2292 regData = sqlite3GetTempReg(pParse);-
2293 regRowid = sqlite3GetTempReg(pParse);-
2294 sqlite3OpenTable(pParse, iDest, iDbDest, pDest, OP_OpenWrite);-
2295 assert( HasRowid(pDest) || destHasUniqueIdx );-
2296 if( (db->mDbFlags & DBFLAG_Vacuum)==0 && (
(db->mDbFlags & 0x0004)==0Description
TRUEevaluated 171 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1291 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
171-1291
2297 (pDest->iPKey<0 && pDest->pIndex!=0) /* (1) */
pDest->iPKey<0Description
TRUEevaluated 146 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 25 times by 1 test
Evaluated by:
  • Self test (438)
pDest->pIndex!=0Description
TRUEevaluated 35 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 111 times by 1 test
Evaluated by:
  • Self test (438)
25-146
2298 || destHasUniqueIdx /* (2) */
destHasUniqueIdxDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 135 times by 1 test
Evaluated by:
  • Self test (438)
1-135
2299 || (onError!=OE_Abort && onError!=OE_Rollback) /* (3) */
onError!=2Description
TRUEevaluated 10 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 125 times by 1 test
Evaluated by:
  • Self test (438)
onError!=1Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
2-125
2300 )){-
2301 /* In some circumstances, we are able to run the xfer optimization-
2302 ** only if the destination table is initially empty. Unless the-
2303 ** DBFLAG_Vacuum flag is set, this block generates code to make-
2304 ** that determination. If DBFLAG_Vacuum is set, then the destination-
2305 ** table is always empty.-
2306 **-
2307 ** Conditions under which the destination must be empty:-
2308 **-
2309 ** (1) There is no INTEGER PRIMARY KEY but there are indices.-
2310 ** (If the destination is not initially empty, the rowid fields-
2311 ** of index entries might need to change.)-
2312 **-
2313 ** (2) The destination has a unique index. (The xfer optimization -
2314 ** is unable to test uniqueness.)-
2315 **-
2316 ** (3) onError is something other than OE_Abort and OE_Rollback.-
2317 */-
2318 addr1 = sqlite3VdbeAddOp2(v, OP_Rewind, iDest, 0); VdbeCoverage(v);-
2319 emptyDestTest = sqlite3VdbeAddOp0(v, OP_Goto);-
2320 sqlite3VdbeJumpHere(v, addr1);-
2321 }
executed 44 times by 1 test: end of block
Executed by:
  • Self test (438)
44
2322 if( HasRowid(pSrc) ){
(((pSrc)->tabF... & 0x0020)==0)Description
TRUEevaluated 1439 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
FALSEevaluated 23 times by 1 test
Evaluated by:
  • Self test (438)
23-1439
2323 u8 insFlags;-
2324 sqlite3OpenTable(pParse, iSrc, iDbSrc, pSrc, OP_OpenRead);-
2325 emptySrcTest = sqlite3VdbeAddOp2(v, OP_Rewind, iSrc, 0); VdbeCoverage(v);-
2326 if( pDest->iPKey>=0 ){
pDest->iPKey>=0Description
TRUEevaluated 40 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1399 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
40-1399
2327 addr1 = sqlite3VdbeAddOp2(v, OP_Rowid, iSrc, regRowid);-
2328 sqlite3VdbeVerifyAbortable(v, onError);-
2329 addr2 = sqlite3VdbeAddOp3(v, OP_NotExists, iDest, 0, regRowid);-
2330 VdbeCoverage(v);-
2331 sqlite3RowidConstraint(pParse, onError, pDest);-
2332 sqlite3VdbeJumpHere(v, addr2);-
2333 autoIncStep(pParse, regAutoinc, regRowid);-
2334 }else if( pDest->pIndex==0 ){
executed 40 times by 1 test: end of block
Executed by:
  • Self test (438)
pDest->pIndex==0Description
TRUEevaluated 572 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
FALSEevaluated 827 times by 1 test
Evaluated by:
  • Self test (438)
40-827
2335 addr1 = sqlite3VdbeAddOp2(v, OP_NewRowid, iDest, regRowid);-
2336 }else{
executed 572 times by 2 tests: end of block
Executed by:
  • Self test (34)
  • Self test (438)
572
2337 addr1 = sqlite3VdbeAddOp2(v, OP_Rowid, iSrc, regRowid);-
2338 assert( (pDest->tabFlags & TF_Autoincrement)==0 );-
2339 }
executed 827 times by 1 test: end of block
Executed by:
  • Self test (438)
827
2340 sqlite3VdbeAddOp3(v, OP_RowData, iSrc, regData, 1);-
2341 if( db->mDbFlags & DBFLAG_Vacuum ){
db->mDbFlags & 0x0004Description
TRUEevaluated 1271 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
FALSEevaluated 168 times by 1 test
Evaluated by:
  • Self test (438)
168-1271
2342 sqlite3VdbeAddOp1(v, OP_SeekEnd, iDest);-
2343 insFlags = OPFLAG_NCHANGE|OPFLAG_LASTROWID|-
2344 OPFLAG_APPEND|OPFLAG_USESEEKRESULT;-
2345 }else{
executed 1271 times by 2 tests: end of block
Executed by:
  • Self test (34)
  • Self test (438)
1271
2346 insFlags = OPFLAG_NCHANGE|OPFLAG_LASTROWID|OPFLAG_APPEND;-
2347 }
executed 168 times by 1 test: end of block
Executed by:
  • Self test (438)
168
2348 sqlite3VdbeAddOp4(v, OP_Insert, iDest, regData, regRowid,-
2349 (char*)pDest, P4_TABLE);-
2350 sqlite3VdbeChangeP5(v, insFlags);-
2351 sqlite3VdbeAddOp2(v, OP_Next, iSrc, addr1); VdbeCoverage(v);-
2352 sqlite3VdbeAddOp2(v, OP_Close, iSrc, 0);-
2353 sqlite3VdbeAddOp2(v, OP_Close, iDest, 0);-
2354 }else{
executed 1439 times by 2 tests: end of block
Executed by:
  • Self test (34)
  • Self test (438)
1439
2355 sqlite3TableLock(pParse, iDbDest, pDest->tnum, 1, pDest->zName);-
2356 sqlite3TableLock(pParse, iDbSrc, pSrc->tnum, 0, pSrc->zName);-
2357 }
executed 23 times by 1 test: end of block
Executed by:
  • Self test (438)
23
2358 for(pDestIdx=pDest->pIndex; pDestIdx; pDestIdx=pDestIdx->pNext){
pDestIdxDescription
TRUEevaluated 923 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1462 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
923-1462
2359 u8 idxInsFlags = 0;-
2360 for(pSrcIdx=pSrc->pIndex; ALWAYS(pSrcIdx); pSrcIdx=pSrcIdx->pNext){
(pSrcIdx)Description
TRUEevaluated 993 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-993
2361 if( xferCompatibleIndex(pDestIdx, pSrcIdx) ) break;
executed 923 times by 1 test: break;
Executed by:
  • Self test (438)
xferCompatible...tIdx, pSrcIdx)Description
TRUEevaluated 923 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 70 times by 1 test
Evaluated by:
  • Self test (438)
70-923
2362 }
executed 70 times by 1 test: end of block
Executed by:
  • Self test (438)
70
2363 assert( pSrcIdx );-
2364 sqlite3VdbeAddOp3(v, OP_OpenRead, iSrc, pSrcIdx->tnum, iDbSrc);-
2365 sqlite3VdbeSetP4KeyInfo(pParse, pSrcIdx);-
2366 VdbeComment((v, "%s", pSrcIdx->zName));-
2367 sqlite3VdbeAddOp3(v, OP_OpenWrite, iDest, pDestIdx->tnum, iDbDest);-
2368 sqlite3VdbeSetP4KeyInfo(pParse, pDestIdx);-
2369 sqlite3VdbeChangeP5(v, OPFLAG_BULKCSR);-
2370 VdbeComment((v, "%s", pDestIdx->zName));-
2371 addr1 = sqlite3VdbeAddOp2(v, OP_Rewind, iSrc, 0); VdbeCoverage(v);-
2372 sqlite3VdbeAddOp3(v, OP_RowData, iSrc, regData, 1);-
2373 if( db->mDbFlags & DBFLAG_Vacuum ){
db->mDbFlags & 0x0004Description
TRUEevaluated 873 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 50 times by 1 test
Evaluated by:
  • Self test (438)
50-873
2374 /* This INSERT command is part of a VACUUM operation, which guarantees-
2375 ** that the destination table is empty. If all indexed columns use-
2376 ** collation sequence BINARY, then it can also be assumed that the-
2377 ** index will be populated by inserting keys in strictly sorted -
2378 ** order. In this case, instead of seeking within the b-tree as part-
2379 ** of every OP_IdxInsert opcode, an OP_SeekEnd is added before the-
2380 ** OP_IdxInsert to seek to the point within the b-tree where each key -
2381 ** should be inserted. This is faster.-
2382 **-
2383 ** If any of the indexed columns use a collation sequence other than-
2384 ** BINARY, this optimization is disabled. This is because the user -
2385 ** might change the definition of a collation sequence and then run-
2386 ** a VACUUM command. In that case keys may not be written in strictly-
2387 ** sorted order. */-
2388 for(i=0; i<pSrcIdx->nColumn; i++){
i<pSrcIdx->nColumnDescription
TRUEevaluated 1782 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 871 times by 1 test
Evaluated by:
  • Self test (438)
871-1782
2389 const char *zColl = pSrcIdx->azColl[i];-
2390 if( sqlite3_stricmp(sqlite3StrBINARY, zColl) ) break;
executed 2 times by 1 test: break;
Executed by:
  • Self test (438)
sqlite3_stricm...BINARY, zColl)Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1780 times by 1 test
Evaluated by:
  • Self test (438)
2-1780
2391 }
executed 1780 times by 1 test: end of block
Executed by:
  • Self test (438)
1780
2392 if( i==pSrcIdx->nColumn ){
i==pSrcIdx->nColumnDescription
TRUEevaluated 871 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
2-871
2393 idxInsFlags = OPFLAG_USESEEKRESULT;-
2394 sqlite3VdbeAddOp1(v, OP_SeekEnd, iDest);-
2395 }
executed 871 times by 1 test: end of block
Executed by:
  • Self test (438)
871
2396 }
executed 873 times by 1 test: end of block
Executed by:
  • Self test (438)
873
2397 if( !HasRowid(pSrc) && pDestIdx->idxType==2 ){
!(((pSrc)->tab... & 0x0020)==0)Description
TRUEevaluated 44 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 879 times by 1 test
Evaluated by:
  • Self test (438)
pDestIdx->idxType==2Description
TRUEevaluated 23 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 21 times by 1 test
Evaluated by:
  • Self test (438)
21-879
2398 idxInsFlags |= OPFLAG_NCHANGE;-
2399 }
executed 23 times by 1 test: end of block
Executed by:
  • Self test (438)
23
2400 sqlite3VdbeAddOp2(v, OP_IdxInsert, iDest, regData);-
2401 sqlite3VdbeChangeP5(v, idxInsFlags|OPFLAG_APPEND);-
2402 sqlite3VdbeAddOp2(v, OP_Next, iSrc, addr1+1); VdbeCoverage(v);-
2403 sqlite3VdbeJumpHere(v, addr1);-
2404 sqlite3VdbeAddOp2(v, OP_Close, iSrc, 0);-
2405 sqlite3VdbeAddOp2(v, OP_Close, iDest, 0);-
2406 }
executed 923 times by 1 test: end of block
Executed by:
  • Self test (438)
923
2407 if( emptySrcTest ) sqlite3VdbeJumpHere(v, emptySrcTest);
executed 1439 times by 2 tests: sqlite3VdbeJumpHere(v, emptySrcTest);
Executed by:
  • Self test (34)
  • Self test (438)
emptySrcTestDescription
TRUEevaluated 1439 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
FALSEevaluated 23 times by 1 test
Evaluated by:
  • Self test (438)
23-1439
2408 sqlite3ReleaseTempReg(pParse, regRowid);-
2409 sqlite3ReleaseTempReg(pParse, regData);-
2410 if( emptyDestTest ){
emptyDestTestDescription
TRUEevaluated 44 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1418 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
44-1418
2411 sqlite3AutoincrementEnd(pParse);-
2412 sqlite3VdbeAddOp2(v, OP_Halt, SQLITE_OK, 0);-
2413 sqlite3VdbeJumpHere(v, emptyDestTest);-
2414 sqlite3VdbeAddOp2(v, OP_Close, iDest, 0);-
2415 return 0;
executed 44 times by 1 test: return 0;
Executed by:
  • Self test (438)
44
2416 }else{-
2417 return 1;
executed 1418 times by 2 tests: return 1;
Executed by:
  • Self test (34)
  • Self test (438)
1418
2418 }-
2419}-
2420#endif /* SQLITE_OMIT_XFER_OPT */-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2