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)