@@ -135,11 +135,11 @@
135 135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
136 136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [sqlite_version()] and [sqlite_source_id()].
137 137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
138 138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_VERSION "3.8.3"
139 139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_VERSION_NUMBER 3008003
140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define SQLITE_SOURCE_ID "2014-01-21 00:19:43 cc1cb3217800ff666a00bf4f544a5a477589bc1b"
140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_SOURCE_ID "2014-01-22 18:16:27 b6cea42006910d590373e8f9e296d7672edb114b"
141 141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
142 142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
143 143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Run-Time Library Version Numbers
144 144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** KEYWORDS: sqlite3_version, sqlite3_sourceid
145 145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -8200,11 +8200,10 @@
8200 8200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define TK_AGG_FUNCTION 155
8201 8201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define TK_AGG_COLUMN 156
8202 8202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define TK_UMINUS 157
8203 8203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define TK_UPLUS 158
8204 8204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define TK_REGISTER 159
8205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define TK_LEVEL 160
8206 8205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
8207 8206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** End of parse.h ***********************************************/
8208 8207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** Continuing where we left off in sqliteInt.h ******************/
8209 8208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include <stdio.h>
8210 8209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include <stdlib.h>
@@ -9129,41 +9128,41 @@
9129 9128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_VerifyCookie 49
9130 9129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_OpenRead 50 /* synopsis: root=P2 iDb=P3 */
9131 9130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_OpenWrite 51 /* synopsis: root=P2 iDb=P3 */
9132 9131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_OpenAutoindex 52 /* synopsis: nColumn=P2 */
9133 9132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_OpenEphemeral 53 /* synopsis: nColumn=P2 */
9134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_SwapCursors 54
9135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_SorterOpen 55
9136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_OpenPseudo 56 /* synopsis: content in r[P2@P3] */
9137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Close 57
9138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_SeekLt 58 /* synopsis: key=r[P3@P4] */
9139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_SeekLe 59 /* synopsis: key=r[P3@P4] */
9140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_SeekGe 60 /* synopsis: key=r[P3@P4] */
9141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_SeekGt 61 /* synopsis: key=r[P3@P4] */
9142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Seek 62 /* synopsis: intkey=r[P2] */
9143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_NoConflict 63 /* synopsis: key=r[P3@P4] */
9144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_NotFound 64 /* synopsis: key=r[P3@P4] */
9145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Found 65 /* synopsis: key=r[P3@P4] */
9146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_NotExists 66 /* synopsis: intkey=r[P3] */
9147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Sequence 67 /* synopsis: r[P2]=rowid */
9148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_NewRowid 68 /* synopsis: r[P2]=rowid */
9149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Insert 69 /* synopsis: intkey=r[P3] data=r[P2] */
9150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_InsertInt 70 /* synopsis: intkey=P3 data=r[P2] */
9133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_SorterOpen 54
9134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_OpenPseudo 55 /* synopsis: content in r[P2@P3] */
9135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Close 56
9136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_SeekLt 57 /* synopsis: key=r[P3@P4] */
9137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_SeekLe 58 /* synopsis: key=r[P3@P4] */
9138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_SeekGe 59 /* synopsis: key=r[P3@P4] */
9139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_SeekGt 60 /* synopsis: key=r[P3@P4] */
9140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Seek 61 /* synopsis: intkey=r[P2] */
9141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_NoConflict 62 /* synopsis: key=r[P3@P4] */
9142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_NotFound 63 /* synopsis: key=r[P3@P4] */
9143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Found 64 /* synopsis: key=r[P3@P4] */
9144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_NotExists 65 /* synopsis: intkey=r[P3] */
9145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Sequence 66 /* synopsis: r[P2]=rowid */
9146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_NewRowid 67 /* synopsis: r[P2]=rowid */
9147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Insert 68 /* synopsis: intkey=r[P3] data=r[P2] */
9148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_InsertInt 69 /* synopsis: intkey=P3 data=r[P2] */
9149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Delete 70
9151 9150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_Or 71 /* same as TK_OR, synopsis: r[P3]=(r[P1] || r[P2]) */
9152 9151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_And 72 /* same as TK_AND, synopsis: r[P3]=(r[P1] && r[P2]) */
9153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Delete 73
9154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_ResetCount 74
9155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_SorterCompare 75 /* synopsis: if key(P1)!=rtrim(r[P3],P4) goto P2 */
9152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_ResetCount 73
9153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_SorterCompare 74 /* synopsis: if key(P1)!=rtrim(r[P3],P4) goto P2 */
9154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_SorterData 75 /* synopsis: r[P2]=data */
9156 9155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_IsNull 76 /* same as TK_ISNULL, synopsis: if r[P1]==NULL goto P2 */
9157 9156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_NotNull 77 /* same as TK_NOTNULL, synopsis: if r[P1]!=NULL goto P2 */
9158 9157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_Ne 78 /* same as TK_NE, synopsis: if r[P1]!=r[P3] goto P2 */
9159 9158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_Eq 79 /* same as TK_EQ, synopsis: if r[P1]==r[P3] goto P2 */
9160 9159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_Gt 80 /* same as TK_GT, synopsis: if r[P1]>r[P3] goto P2 */
9161 9160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_Le 81 /* same as TK_LE, synopsis: if r[P1]<=r[P3] goto P2 */
9162 9161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_Lt 82 /* same as TK_LT, synopsis: if r[P1]<r[P3] goto P2 */
9163 9162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_Ge 83 /* same as TK_GE, synopsis: if r[P1]>=r[P3] goto P2 */
9164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_SorterData 84 /* synopsis: r[P2]=data */
9163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_RowKey 84 /* synopsis: r[P2]=key */
9165 9164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_BitAnd 85 /* same as TK_BITAND, synopsis: r[P3]=r[P1]&r[P2] */
9166 9165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_BitOr 86 /* same as TK_BITOR, synopsis: r[P3]=r[P1]|r[P2] */
9167 9166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_ShiftLeft 87 /* same as TK_LSHIFT, synopsis: r[P3]=r[P2]<<r[P1] */
9168 9167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_ShiftRight 88 /* same as TK_RSHIFT, synopsis: r[P3]=r[P2]>>r[P1] */
9169 9168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_Add 89 /* same as TK_PLUS, synopsis: r[P3]=r[P1]+r[P2] */
@@ -9170,69 +9169,68 @@
9170 9169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_Subtract 90 /* same as TK_MINUS, synopsis: r[P3]=r[P2]-r[P1] */
9171 9170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_Multiply 91 /* same as TK_STAR, synopsis: r[P3]=r[P1]*r[P2] */
9172 9171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_Divide 92 /* same as TK_SLASH, synopsis: r[P3]=r[P2]/r[P1] */
9173 9172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_Remainder 93 /* same as TK_REM, synopsis: r[P3]=r[P2]%r[P1] */
9174 9173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_Concat 94 /* same as TK_CONCAT, synopsis: r[P3]=r[P2]+r[P1] */
9175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_RowKey 95 /* synopsis: r[P2]=key */
9174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_RowData 95 /* synopsis: r[P2]=data */
9176 9175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_BitNot 96 /* same as TK_BITNOT, synopsis: r[P1]= ~r[P1] */
9177 9176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_String8 97 /* same as TK_STRING, synopsis: r[P2]='P4' */
9178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_RowData 98 /* synopsis: r[P2]=data */
9179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Rowid 99 /* synopsis: r[P2]=rowid */
9180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_NullRow 100
9181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Last 101
9182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_SorterSort 102
9183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Sort 103
9184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Rewind 104
9185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_SorterInsert 105
9186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_IdxInsert 106 /* synopsis: key=r[P2] */
9187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_IdxDelete 107 /* synopsis: key=r[P2@P3] */
9188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_IdxRowid 108 /* synopsis: r[P2]=rowid */
9189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_IdxLT 109 /* synopsis: key=r[P3@P4] */
9190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_IdxGE 110 /* synopsis: key=r[P3@P4] */
9191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Destroy 111
9192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Clear 112
9193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_CreateIndex 113 /* synopsis: r[P2]=root iDb=P1 */
9194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_CreateTable 114 /* synopsis: r[P2]=root iDb=P1 */
9195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_ParseSchema 115
9196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_LoadAnalysis 116
9197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_DropTable 117
9198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_DropIndex 118
9199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_DropTrigger 119
9200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_IntegrityCk 120
9201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_RowSetAdd 121 /* synopsis: rowset(P1)=r[P2] */
9202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_RowSetRead 122 /* synopsis: r[P3]=rowset(P1) */
9203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_RowSetTest 123 /* synopsis: if r[P3] in rowset(P1) goto P2 */
9204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Program 124
9205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Param 125
9206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_FkCounter 126 /* synopsis: fkctr[P1]+=P2 */
9207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_FkIfZero 127 /* synopsis: if fkctr[P1]==0 goto P2 */
9208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_MemMax 128 /* synopsis: r[P1]=max(r[P1],r[P2]) */
9209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_IfPos 129 /* synopsis: if r[P1]>0 goto P2 */
9210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_IfNeg 130 /* synopsis: if r[P1]<0 goto P2 */
9211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_IfZero 131 /* synopsis: r[P1]+=P3, if r[P1]==0 goto P2 */
9212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_AggFinal 132 /* synopsis: accum=r[P1] N=P2 */
9177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Rowid 98 /* synopsis: r[P2]=rowid */
9178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_NullRow 99
9179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Last 100
9180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_SorterSort 101
9181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Sort 102
9182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Rewind 103
9183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_SorterInsert 104
9184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_IdxInsert 105 /* synopsis: key=r[P2] */
9185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_IdxDelete 106 /* synopsis: key=r[P2@P3] */
9186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_IdxRowid 107 /* synopsis: r[P2]=rowid */
9187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_IdxLT 108 /* synopsis: key=r[P3@P4] */
9188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_IdxGE 109 /* synopsis: key=r[P3@P4] */
9189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Destroy 110
9190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Clear 111
9191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_CreateIndex 112 /* synopsis: r[P2]=root iDb=P1 */
9192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_CreateTable 113 /* synopsis: r[P2]=root iDb=P1 */
9193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_ParseSchema 114
9194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_LoadAnalysis 115
9195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_DropTable 116
9196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_DropIndex 117
9197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_DropTrigger 118
9198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_IntegrityCk 119
9199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_RowSetAdd 120 /* synopsis: rowset(P1)=r[P2] */
9200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_RowSetRead 121 /* synopsis: r[P3]=rowset(P1) */
9201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_RowSetTest 122 /* synopsis: if r[P3] in rowset(P1) goto P2 */
9202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Program 123
9203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Param 124
9204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_FkCounter 125 /* synopsis: fkctr[P1]+=P2 */
9205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_FkIfZero 126 /* synopsis: if fkctr[P1]==0 goto P2 */
9206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_MemMax 127 /* synopsis: r[P1]=max(r[P1],r[P2]) */
9207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_IfPos 128 /* synopsis: if r[P1]>0 goto P2 */
9208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_IfNeg 129 /* synopsis: if r[P1]<0 goto P2 */
9209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_IfZero 130 /* synopsis: r[P1]+=P3, if r[P1]==0 goto P2 */
9210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_AggFinal 131 /* synopsis: accum=r[P1] N=P2 */
9211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_IncrVacuum 132
9213 9212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_Real 133 /* same as TK_FLOAT, synopsis: r[P2]=P4 */
9214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_IncrVacuum 134
9215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Expire 135
9216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_TableLock 136 /* synopsis: iDb=P1 root=P2 write=P3 */
9217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_VBegin 137
9218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_VCreate 138
9219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_VDestroy 139
9220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_VOpen 140
9221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_VColumn 141 /* synopsis: r[P3]=vcolumn(P2) */
9222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_VNext 142
9213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Expire 134
9214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_TableLock 135 /* synopsis: iDb=P1 root=P2 write=P3 */
9215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_VBegin 136
9216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_VCreate 137
9217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_VDestroy 138
9218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_VOpen 139
9219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_VColumn 140 /* synopsis: r[P3]=vcolumn(P2) */
9220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_VNext 141
9221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_VRename 142
9223 9222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_ToText 143 /* same as TK_TO_TEXT */
9224 9223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_ToBlob 144 /* same as TK_TO_BLOB */
9225 9224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_ToNumeric 145 /* same as TK_TO_NUMERIC */
9226 9225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_ToInt 146 /* same as TK_TO_INT */
9227 9226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_ToReal 147 /* same as TK_TO_REAL */
9228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_VRename 148
9229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Pagecount 149
9230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_MaxPgcnt 150
9231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Trace 151
9232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Noop 152
9233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Explain 153
9227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Pagecount 148
9228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_MaxPgcnt 149
9229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Trace 150
9230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Noop 151
9231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Explain 152
9234 9232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
9235 9233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
9236 9234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Properties such as "out2" or "jump" that are specified in
9237 9235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** comments following the "case" for each opcode in the vdbe.c
9238 9236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** are encoded into bitvectors as follows:
@@ -9250,23 +9248,23 @@
9250 9248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 16 */ 0x01, 0x01, 0x04, 0x24, 0x04, 0x10, 0x00, 0x02,\
9251 9249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 24 */ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x20,\
9252 9250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 32 */ 0x00, 0x00, 0x04, 0x05, 0x04, 0x00, 0x00, 0x01,\
9253 9251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 40 */ 0x01, 0x05, 0x05, 0x00, 0x00, 0x00, 0x02, 0x02,\
9254 9252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 48 */ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\
9255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 56 */ 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x08, 0x11,\
9256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 64 */ 0x11, 0x11, 0x11, 0x02, 0x02, 0x00, 0x00, 0x4c,\
9253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 56 */ 0x00, 0x11, 0x11, 0x11, 0x11, 0x08, 0x11, 0x11,\
9254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 64 */ 0x11, 0x11, 0x02, 0x02, 0x00, 0x00, 0x00, 0x4c,\
9257 9255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 72 */ 0x4c, 0x00, 0x00, 0x00, 0x05, 0x05, 0x15, 0x15,\
9258 9256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 80 */ 0x15, 0x15, 0x15, 0x15, 0x00, 0x4c, 0x4c, 0x4c,\
9259 9257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 88 */ 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x00,\
9260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 96 */ 0x24, 0x02, 0x00, 0x02, 0x00, 0x01, 0x01, 0x01,\
9261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 104 */ 0x01, 0x08, 0x08, 0x00, 0x02, 0x01, 0x01, 0x02,\
9262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 112 */ 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,\
9263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 120 */ 0x00, 0x0c, 0x45, 0x15, 0x01, 0x02, 0x00, 0x01,\
9264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 128 */ 0x08, 0x05, 0x05, 0x05, 0x00, 0x02, 0x01, 0x00,\
9265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 136 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04,\
9266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 144 */ 0x04, 0x04, 0x04, 0x04, 0x00, 0x02, 0x02, 0x00,\
9267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 152 */ 0x00, 0x00,}
9258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 96 */ 0x24, 0x02, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01,\
9259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 104 */ 0x08, 0x08, 0x00, 0x02, 0x01, 0x01, 0x02, 0x00,\
9260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 112 */ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\
9261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 120 */ 0x0c, 0x45, 0x15, 0x01, 0x02, 0x00, 0x01, 0x08,\
9262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 128 */ 0x05, 0x05, 0x05, 0x00, 0x01, 0x02, 0x00, 0x00,\
9263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 136 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04,\
9264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 144 */ 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x00, 0x00,\
9265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 152 */ 0x00,}
9268 9266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
9269 9267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** End of opcodes.h *********************************************/
9270 9268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** Continuing where we left off in vdbe.h ***********************/
9271 9269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
9272 9270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -11430,12 +11428,10 @@
11430 11428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define NC_AllowAgg 0x01 /* Aggregate functions are allowed here */
11431 11429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define NC_HasAgg 0x02 /* One or more aggregate functions seen */
11432 11430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define NC_IsCheck 0x04 /* True if resolving names in a CHECK constraint */
11433 11431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define NC_InAggFunc 0x08 /* True if analyzing arguments to an agg func */
11434 11432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define NC_PartIdx 0x10 /* True if resolving a partial index WHERE */
11435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define NC_Recursive 0x20 /* Resolvingn a recursive CTE definition */
11436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define NC_UsesLevel 0x40 /* The LEVEL pseudo-column has been seen */
11437 11433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
11438 11434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
11439 11435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** An instance of the following structure contains all information
11440 11436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** needed to generate code for a single SELECT statement.
11441 11437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -11489,16 +11485,73 @@
11489 11485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SF_Values 0x0080 /* Synthesized from VALUES clause */
11490 11486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SF_Materialize 0x0100 /* Force materialization of views */
11491 11487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SF_NestedFrom 0x0200 /* Part of a parenthesized FROM clause */
11492 11488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SF_MaybeConvert 0x0400 /* Need convertCompoundSelectToSubquery() */
11493 11489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SF_Recursive 0x0800 /* The recursive part of a recursive CTE */
11494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define SF_UsesLevel 0x1000 /* Uses the LEVEL pseudo-column */
11495 11490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
11496 11491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
11497 11492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
11498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The results of a select can be distributed in several ways. The
11499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** "SRT" prefix means "SELECT Result Type".
11493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The results of a SELECT can be distributed in several ways, as defined
11494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** by one of the following macros. The "SRT" prefix means "SELECT Result
11495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Type".
11496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
11497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SRT_Union Store results as a key in a temporary index
11498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** identified by pDest->iSDParm.
11499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
11500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SRT_Except Remove results from the temporary index pDest->iSDParm.
11501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
11502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SRT_Exists Store a 1 in memory cell pDest->iSDParm if the result
11503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** set is not empty.
11504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
11505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SRT_Discard Throw the results away. This is used by SELECT
11506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** statements within triggers whose only purpose is
11507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the side-effects of functions.
11508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
11509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** All of the above are free to ignore their ORDER BY clause. Those that
11510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** follow must honor the ORDER BY clause.
11511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
11512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SRT_Output Generate a row of output (using the OP_ResultRow
11513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** opcode) for each row in the result set.
11514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
11515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SRT_Mem Only valid if the result is a single column.
11516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Store the first column of the first result row
11517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** in register pDest->iSDParm then abandon the rest
11518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of the query. This destination implies "LIMIT 1".
11519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
11520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SRT_Set The result must be a single column. Store each
11521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** row of result as the key in table pDest->iSDParm.
11522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Apply the affinity pDest->affSdst before storing
11523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** results. Used to implement "IN (SELECT ...)".
11524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
11525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SRT_EphemTab Create an temporary table pDest->iSDParm and store
11526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the result there. The cursor is left open after
11527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** returning. This is like SRT_Table except that
11528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** this destination uses OP_OpenEphemeral to create
11529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the table first.
11530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
11531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SRT_Coroutine Generate a co-routine that returns a new row of
11532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** results each time it is invoked. The entry point
11533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of the co-routine is stored in register pDest->iSDParm
11534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** and the result row is stored in pDest->nDest registers
11535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** starting with pDest->iSdst.
11536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
11537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SRT_Table Store results in temporary table pDest->iSDParm.
11538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This is like SRT_EphemTab except that the table
11539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is assumed to already be open.
11540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
11541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SRT_DistTable Store results in a temporary table pDest->iSDParm.
11542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** But also use temporary table pDest->iSDParm+1 as
11543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a record of all prior results and ignore any duplicate
11544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** rows. Name means: "Distinct Table".
11545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
11546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SRT_Queue Store results in priority queue pDest->iSDParm (really
11547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** an index). Append a sequence number so that all entries
11548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** are distinct.
11549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
11550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SRT_DistQueue Store results in priority queue pDest->iSDParm only if
11551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the same record has never been stored before. The
11552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** index at pDest->iSDParm+1 hold all prior stores.
11500 11553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
11501 11554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SRT_Union 1 /* Store result as keys in an index */
11502 11555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SRT_Except 2 /* Remove result from a UNION index */
11503 11556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SRT_Exists 3 /* Store 1 if the result is not empty */
11504 11557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SRT_Discard 4 /* Do not save the results anywhere */
@@ -11507,25 +11560,28 @@
11507 11560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define IgnorableOrderby(X) ((X->eDest)<=SRT_Discard)
11508 11561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
11509 11562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SRT_Output 5 /* Output each row of result */
11510 11563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SRT_Mem 6 /* Store result in a memory cell */
11511 11564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SRT_Set 7 /* Store results as keys in an index */
11512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define SRT_Table 8 /* Store result as data with an automatic rowid */
11513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define SRT_EphemTab 9 /* Create transient tab and store like SRT_Table */
11514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define SRT_Coroutine 10 /* Generate a single row of result */
11515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define SRT_DistTable 11 /* Like SRT_TABLE, but unique results only */
11565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SRT_EphemTab 8 /* Create transient tab and store like SRT_Table */
11566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SRT_Coroutine 9 /* Generate a single row of result */
11567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SRT_Table 10 /* Store result as data with an automatic rowid */
11568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SRT_DistTable 11 /* Like SRT_Table, but unique results only */
11569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SRT_Queue 12 /* Store result in an queue */
11570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SRT_DistQueue 13 /* Like SRT_Queue, but unique results only */
11516 11571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
11517 11572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
11518 11573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** An instance of this object describes where to put of the results of
11519 11574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a SELECT statement.
11520 11575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
11521 11576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct SelectDest {
11522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u8 eDest; /* How to dispose of the results. On of SRT_* above. */
11523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char affSdst; /* Affinity used when eDest==SRT_Set */
11524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iSDParm; /* A parameter used by the eDest disposal method */
11525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iSdst; /* Base register where results are written */
11526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nSdst; /* Number of registers allocated */
11577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 eDest; /* How to dispose of the results. On of SRT_* above. */
11578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char affSdst; /* Affinity used when eDest==SRT_Set */
11579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iSDParm; /* A parameter used by the eDest disposal method */
11580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iSdst; /* Base register where results are written */
11581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nSdst; /* Number of registers allocated */
11582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ExprList *pOrderBy; /* Key columns for SRT_Queue and SRT_DistQueue */
11527 11583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
11528 11584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
11529 11585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
11530 11586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** During code generation of statements that do inserts into AUTOINCREMENT
11531 11587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** tables, the following information is attached to the Table.u.autoInc.p
@@ -11696,11 +11752,10 @@
11696 11752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Table **apVtabLock; /* Pointer to virtual tables needing locking */
11697 11753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
11698 11754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Table *pZombieTab; /* List of Table objects to delete after code gen */
11699 11755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
TriggerPrg *pTriggerPrg; /* Linked list of coded triggers */
11700 11756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
With *pWith; /* Current WITH clause, or NULL */
11701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int regLevel; /* Register holding the LEVEL variable */
11702 11757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 bFreeWith; /* True if pWith should be freed with parser */
11703 11758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
11704 11759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
11705 11760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
11706 11761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return true if currently inside an sqlite3_declare_vtab() call.
@@ -23183,41 +23238,41 @@
23183 23238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 49 */ "VerifyCookie" OpHelp(""),
23184 23239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 50 */ "OpenRead" OpHelp("root=P2 iDb=P3"),
23185 23240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 51 */ "OpenWrite" OpHelp("root=P2 iDb=P3"),
23186 23241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 52 */ "OpenAutoindex" OpHelp("nColumn=P2"),
23187 23242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 53 */ "OpenEphemeral" OpHelp("nColumn=P2"),
23188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 54 */ "SwapCursors" OpHelp(""),
23189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 55 */ "SorterOpen" OpHelp(""),
23190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 56 */ "OpenPseudo" OpHelp("content in r[P2@P3]"),
23191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 57 */ "Close" OpHelp(""),
23192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 58 */ "SeekLt" OpHelp("key=r[P3@P4]"),
23193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 59 */ "SeekLe" OpHelp("key=r[P3@P4]"),
23194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 60 */ "SeekGe" OpHelp("key=r[P3@P4]"),
23195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 61 */ "SeekGt" OpHelp("key=r[P3@P4]"),
23196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 62 */ "Seek" OpHelp("intkey=r[P2]"),
23197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 63 */ "NoConflict" OpHelp("key=r[P3@P4]"),
23198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 64 */ "NotFound" OpHelp("key=r[P3@P4]"),
23199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 65 */ "Found" OpHelp("key=r[P3@P4]"),
23200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 66 */ "NotExists" OpHelp("intkey=r[P3]"),
23201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 67 */ "Sequence" OpHelp("r[P2]=rowid"),
23202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 68 */ "NewRowid" OpHelp("r[P2]=rowid"),
23203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 69 */ "Insert" OpHelp("intkey=r[P3] data=r[P2]"),
23204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 70 */ "InsertInt" OpHelp("intkey=P3 data=r[P2]"),
23243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 54 */ "SorterOpen" OpHelp(""),
23244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 55 */ "OpenPseudo" OpHelp("content in r[P2@P3]"),
23245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 56 */ "Close" OpHelp(""),
23246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 57 */ "SeekLt" OpHelp("key=r[P3@P4]"),
23247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 58 */ "SeekLe" OpHelp("key=r[P3@P4]"),
23248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 59 */ "SeekGe" OpHelp("key=r[P3@P4]"),
23249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 60 */ "SeekGt" OpHelp("key=r[P3@P4]"),
23250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 61 */ "Seek" OpHelp("intkey=r[P2]"),
23251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 62 */ "NoConflict" OpHelp("key=r[P3@P4]"),
23252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 63 */ "NotFound" OpHelp("key=r[P3@P4]"),
23253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 64 */ "Found" OpHelp("key=r[P3@P4]"),
23254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 65 */ "NotExists" OpHelp("intkey=r[P3]"),
23255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 66 */ "Sequence" OpHelp("r[P2]=rowid"),
23256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 67 */ "NewRowid" OpHelp("r[P2]=rowid"),
23257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 68 */ "Insert" OpHelp("intkey=r[P3] data=r[P2]"),
23258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 69 */ "InsertInt" OpHelp("intkey=P3 data=r[P2]"),
23259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 70 */ "Delete" OpHelp(""),
23205 23260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 71 */ "Or" OpHelp("r[P3]=(r[P1] || r[P2])"),
23206 23261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 72 */ "And" OpHelp("r[P3]=(r[P1] && r[P2])"),
23207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 73 */ "Delete" OpHelp(""),
23208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 74 */ "ResetCount" OpHelp(""),
23209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 75 */ "SorterCompare" OpHelp("if key(P1)!=rtrim(r[P3],P4) goto P2"),
23262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 73 */ "ResetCount" OpHelp(""),
23263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 74 */ "SorterCompare" OpHelp("if key(P1)!=rtrim(r[P3],P4) goto P2"),
23264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 75 */ "SorterData" OpHelp("r[P2]=data"),
23210 23265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 76 */ "IsNull" OpHelp("if r[P1]==NULL goto P2"),
23211 23266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 77 */ "NotNull" OpHelp("if r[P1]!=NULL goto P2"),
23212 23267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 78 */ "Ne" OpHelp("if r[P1]!=r[P3] goto P2"),
23213 23268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 79 */ "Eq" OpHelp("if r[P1]==r[P3] goto P2"),
23214 23269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 80 */ "Gt" OpHelp("if r[P1]>r[P3] goto P2"),
23215 23270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 81 */ "Le" OpHelp("if r[P1]<=r[P3] goto P2"),
23216 23271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 82 */ "Lt" OpHelp("if r[P1]<r[P3] goto P2"),
23217 23272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 83 */ "Ge" OpHelp("if r[P1]>=r[P3] goto P2"),
23218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 84 */ "SorterData" OpHelp("r[P2]=data"),
23273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 84 */ "RowKey" OpHelp("r[P2]=key"),
23219 23274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 85 */ "BitAnd" OpHelp("r[P3]=r[P1]&r[P2]"),
23220 23275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 86 */ "BitOr" OpHelp("r[P3]=r[P1]|r[P2]"),
23221 23276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 87 */ "ShiftLeft" OpHelp("r[P3]=r[P2]<<r[P1]"),
23222 23277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 88 */ "ShiftRight" OpHelp("r[P3]=r[P2]>>r[P1]"),
23223 23278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 89 */ "Add" OpHelp("r[P3]=r[P1]+r[P2]"),
@@ -23224,69 +23279,68 @@
23224 23279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 90 */ "Subtract" OpHelp("r[P3]=r[P2]-r[P1]"),
23225 23280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 91 */ "Multiply" OpHelp("r[P3]=r[P1]*r[P2]"),
23226 23281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 92 */ "Divide" OpHelp("r[P3]=r[P2]/r[P1]"),
23227 23282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 93 */ "Remainder" OpHelp("r[P3]=r[P2]%r[P1]"),
23228 23283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 94 */ "Concat" OpHelp("r[P3]=r[P2]+r[P1]"),
23229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 95 */ "RowKey" OpHelp("r[P2]=key"),
23284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 95 */ "RowData" OpHelp("r[P2]=data"),
23230 23285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 96 */ "BitNot" OpHelp("r[P1]= ~r[P1]"),
23231 23286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 97 */ "String8" OpHelp("r[P2]='P4'"),
23232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 98 */ "RowData" OpHelp("r[P2]=data"),
23233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 99 */ "Rowid" OpHelp("r[P2]=rowid"),
23234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 100 */ "NullRow" OpHelp(""),
23235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 101 */ "Last" OpHelp(""),
23236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 102 */ "SorterSort" OpHelp(""),
23237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 103 */ "Sort" OpHelp(""),
23238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 104 */ "Rewind" OpHelp(""),
23239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 105 */ "SorterInsert" OpHelp(""),
23240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 106 */ "IdxInsert" OpHelp("key=r[P2]"),
23241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 107 */ "IdxDelete" OpHelp("key=r[P2@P3]"),
23242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 108 */ "IdxRowid" OpHelp("r[P2]=rowid"),
23243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 109 */ "IdxLT" OpHelp("key=r[P3@P4]"),
23244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 110 */ "IdxGE" OpHelp("key=r[P3@P4]"),
23245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 111 */ "Destroy" OpHelp(""),
23246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 112 */ "Clear" OpHelp(""),
23247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 113 */ "CreateIndex" OpHelp("r[P2]=root iDb=P1"),
23248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 114 */ "CreateTable" OpHelp("r[P2]=root iDb=P1"),
23249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 115 */ "ParseSchema" OpHelp(""),
23250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 116 */ "LoadAnalysis" OpHelp(""),
23251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 117 */ "DropTable" OpHelp(""),
23252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 118 */ "DropIndex" OpHelp(""),
23253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 119 */ "DropTrigger" OpHelp(""),
23254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 120 */ "IntegrityCk" OpHelp(""),
23255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 121 */ "RowSetAdd" OpHelp("rowset(P1)=r[P2]"),
23256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 122 */ "RowSetRead" OpHelp("r[P3]=rowset(P1)"),
23257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 123 */ "RowSetTest" OpHelp("if r[P3] in rowset(P1) goto P2"),
23258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 124 */ "Program" OpHelp(""),
23259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 125 */ "Param" OpHelp(""),
23260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 126 */ "FkCounter" OpHelp("fkctr[P1]+=P2"),
23261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 127 */ "FkIfZero" OpHelp("if fkctr[P1]==0 goto P2"),
23262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 128 */ "MemMax" OpHelp("r[P1]=max(r[P1],r[P2])"),
23263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 129 */ "IfPos" OpHelp("if r[P1]>0 goto P2"),
23264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 130 */ "IfNeg" OpHelp("if r[P1]<0 goto P2"),
23265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 131 */ "IfZero" OpHelp("r[P1]+=P3, if r[P1]==0 goto P2"),
23266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 132 */ "AggFinal" OpHelp("accum=r[P1] N=P2"),
23287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 98 */ "Rowid" OpHelp("r[P2]=rowid"),
23288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 99 */ "NullRow" OpHelp(""),
23289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 100 */ "Last" OpHelp(""),
23290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 101 */ "SorterSort" OpHelp(""),
23291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 102 */ "Sort" OpHelp(""),
23292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 103 */ "Rewind" OpHelp(""),
23293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 104 */ "SorterInsert" OpHelp(""),
23294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 105 */ "IdxInsert" OpHelp("key=r[P2]"),
23295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 106 */ "IdxDelete" OpHelp("key=r[P2@P3]"),
23296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 107 */ "IdxRowid" OpHelp("r[P2]=rowid"),
23297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 108 */ "IdxLT" OpHelp("key=r[P3@P4]"),
23298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 109 */ "IdxGE" OpHelp("key=r[P3@P4]"),
23299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 110 */ "Destroy" OpHelp(""),
23300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 111 */ "Clear" OpHelp(""),
23301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 112 */ "CreateIndex" OpHelp("r[P2]=root iDb=P1"),
23302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 113 */ "CreateTable" OpHelp("r[P2]=root iDb=P1"),
23303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 114 */ "ParseSchema" OpHelp(""),
23304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 115 */ "LoadAnalysis" OpHelp(""),
23305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 116 */ "DropTable" OpHelp(""),
23306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 117 */ "DropIndex" OpHelp(""),
23307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 118 */ "DropTrigger" OpHelp(""),
23308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 119 */ "IntegrityCk" OpHelp(""),
23309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 120 */ "RowSetAdd" OpHelp("rowset(P1)=r[P2]"),
23310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 121 */ "RowSetRead" OpHelp("r[P3]=rowset(P1)"),
23311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 122 */ "RowSetTest" OpHelp("if r[P3] in rowset(P1) goto P2"),
23312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 123 */ "Program" OpHelp(""),
23313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 124 */ "Param" OpHelp(""),
23314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 125 */ "FkCounter" OpHelp("fkctr[P1]+=P2"),
23315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 126 */ "FkIfZero" OpHelp("if fkctr[P1]==0 goto P2"),
23316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 127 */ "MemMax" OpHelp("r[P1]=max(r[P1],r[P2])"),
23317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 128 */ "IfPos" OpHelp("if r[P1]>0 goto P2"),
23318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 129 */ "IfNeg" OpHelp("if r[P1]<0 goto P2"),
23319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 130 */ "IfZero" OpHelp("r[P1]+=P3, if r[P1]==0 goto P2"),
23320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 131 */ "AggFinal" OpHelp("accum=r[P1] N=P2"),
23321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 132 */ "IncrVacuum" OpHelp(""),
23267 23322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 133 */ "Real" OpHelp("r[P2]=P4"),
23268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 134 */ "IncrVacuum" OpHelp(""),
23269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 135 */ "Expire" OpHelp(""),
23270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 136 */ "TableLock" OpHelp("iDb=P1 root=P2 write=P3"),
23271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 137 */ "VBegin" OpHelp(""),
23272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 138 */ "VCreate" OpHelp(""),
23273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 139 */ "VDestroy" OpHelp(""),
23274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 140 */ "VOpen" OpHelp(""),
23275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 141 */ "VColumn" OpHelp("r[P3]=vcolumn(P2)"),
23276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 142 */ "VNext" OpHelp(""),
23323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 134 */ "Expire" OpHelp(""),
23324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 135 */ "TableLock" OpHelp("iDb=P1 root=P2 write=P3"),
23325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 136 */ "VBegin" OpHelp(""),
23326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 137 */ "VCreate" OpHelp(""),
23327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 138 */ "VDestroy" OpHelp(""),
23328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 139 */ "VOpen" OpHelp(""),
23329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 140 */ "VColumn" OpHelp("r[P3]=vcolumn(P2)"),
23330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 141 */ "VNext" OpHelp(""),
23331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 142 */ "VRename" OpHelp(""),
23277 23332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 143 */ "ToText" OpHelp(""),
23278 23333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 144 */ "ToBlob" OpHelp(""),
23279 23334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 145 */ "ToNumeric" OpHelp(""),
23280 23335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 146 */ "ToInt" OpHelp(""),
23281 23336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 147 */ "ToReal" OpHelp(""),
23282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 148 */ "VRename" OpHelp(""),
23283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 149 */ "Pagecount" OpHelp(""),
23284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 150 */ "MaxPgcnt" OpHelp(""),
23285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 151 */ "Trace" OpHelp(""),
23286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 152 */ "Noop" OpHelp(""),
23287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 153 */ "Explain" OpHelp(""),
23337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 148 */ "Pagecount" OpHelp(""),
23338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 149 */ "MaxPgcnt" OpHelp(""),
23339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 150 */ "Trace" OpHelp(""),
23340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 151 */ "Noop" OpHelp(""),
23341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 152 */ "Explain" OpHelp(""),
23288 23342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
23289 23343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return azName[i];
23290 23344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
23291 23345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
23292 23346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -69741,37 +69795,10 @@
69741 69795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
69742 69796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCx->isOrdered = (pOp->p5!=BTREE_UNORDERED);
69743 69797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
69744 69798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
69745 69799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
69746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifndef SQLITE_OMIT_CTE
69747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Opcode: SwapCursors P1 P2 * * *
69748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
69749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Parameters P1 and P2 are both cursors opened by the OpenEphemeral
69750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** opcode. This opcode deletes the contents of epheremal table P1,
69751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** then renames P2 to P1 and P1 to P2. In other words, following this
69752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** opcode cursor P2 is open on an empty table and P1 is open on the
69753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** table that was initially accessed by P2.
69754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
69755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_SwapCursors: {
69756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Mem tmp;
69757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- VdbeCursor *pTmp;
69758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
69759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tmp = p->aMem[p->nMem - pOp->p1];
69760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->aMem[p->nMem - pOp->p1] = p->aMem[p->nMem - pOp->p2];
69761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->aMem[p->nMem - pOp->p2] = tmp;
69762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
69763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTmp = p->apCsr[pOp->p1];
69764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->apCsr[pOp->p1] = p->apCsr[pOp->p2];
69765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->apCsr[pOp->p2] = pTmp;
69766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
69767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pTmp->isTable );
69768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3BtreeClearTable(pTmp->pBt, MASTER_ROOT, 0);
69769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- break;
69770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
69771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif /* ifndef SQLITE_OMIT_CTE */
69772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
69773 69800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: SorterOpen P1 * * P4 *
69774 69801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
69775 69802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This opcode works like OP_OpenEphemeral except that it opens
69776 69803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a transient index that is specifically designed to sort large
69777 69804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** tables using an external merge-sort algorithm.
@@ -70765,11 +70792,10 @@
70765 70792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pC = p->apCsr[pOp->p1];
70766 70793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pC!=0 );
70767 70794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pC->nullRow = 1;
70768 70795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pC->rowidIsValid = 0;
70769 70796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pC->cacheStatus = CACHE_STALE;
70770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pC->pCursor || pC->pVtabCursor );
70771 70797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pC->pCursor ){
70772 70798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3BtreeClearCursor(pC->pCursor);
70773 70799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
70774 70800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
70775 70801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -75130,11 +75156,11 @@
75130 75156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *db = pParse->db; /* The database connection */
75131 75157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct SrcList_item *pItem; /* Use for looping over pSrcList items */
75132 75158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct SrcList_item *pMatch = 0; /* The matching pSrcList item */
75133 75159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
NameContext *pTopNC = pNC; /* First namecontext in the list */
75134 75160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Schema *pSchema = 0; /* Schema of the expression */
75135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u8 newOp = TK_COLUMN; /* pExpr->op after resolving name */
75161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int isTrigger = 0; /* True if resolved to a trigger column */
75136 75162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Table *pTab = 0; /* Table hold the row */
75137 75163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Column *pCol; /* A column of pTab */
75138 75164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
75139 75165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pNC ); /* the name context cannot be NULL. */
75140 75166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( zCol ); /* The Z in X.Y.Z cannot be NULL */
@@ -75171,26 +75197,10 @@
75171 75197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Start at the inner-most context and move outward until a match is found */
75172 75198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( pNC && cnt==0 ){
75173 75199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprList *pEList;
75174 75200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcList *pSrcList = pNC->pSrcList;
75175 75201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
75176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifndef SQLITE_OMIT_CTE
75177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* The identifier "LEVEL", with a table or database qualifier and within a
75178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** recursive common table expression, resolves to the special LEVEL pseudo-column.
75179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** To access table names called "level", add a table qualifier.
75180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
75181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (pNC->ncFlags&NC_Recursive)!=0 && zTab==0 && sqlite3_stricmp(zCol,"level")==0 ){
75182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( cnt==0 );
75183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- cnt = 1;
75184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- newOp = TK_LEVEL;
75185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pExpr->iColumn = -1;
75186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pExpr->affinity = SQLITE_AFF_INTEGER;
75187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNC->ncFlags |= NC_UsesLevel;
75188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- break;
75189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
75190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
75191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
75192 75202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSrcList ){
75193 75203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0, pItem=pSrcList->a; i<pSrcList->nSrc; i++, pItem++){
75194 75204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab = pItem->pTab;
75195 75205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pTab!=0 && pTab->zName!=0 );
75196 75206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pTab->nCol>0 );
@@ -75291,11 +75301,11 @@
75291 75301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( iCol==32 );
75292 75302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->newmask |= (iCol>=32 ? 0xffffffff : (((u32)1)<<iCol));
75293 75303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
75294 75304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pExpr->iColumn = (i16)iCol;
75295 75305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pExpr->pTab = pTab;
75296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- newOp = TK_TRIGGER;
75306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ isTrigger = 1;
75297 75307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
75298 75308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
75299 75309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
75300 75310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* !defined(SQLITE_OMIT_TRIGGER) */
75301 75311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -75415,15 +75425,15 @@
75415 75425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
75416 75426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprDelete(db, pExpr->pLeft);
75417 75427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pExpr->pLeft = 0;
75418 75428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprDelete(db, pExpr->pRight);
75419 75429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pExpr->pRight = 0;
75420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pExpr->op = newOp;
75430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pExpr->op = (isTrigger ? TK_TRIGGER : TK_COLUMN);
75421 75431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
lookupname_end:
75422 75432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( cnt==1 ){
75423 75433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pNC!=0 );
75424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pExpr->op!=TK_AS && pExpr->op!=TK_LEVEL ){
75434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pExpr->op!=TK_AS ){
75425 75435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3AuthRead(pParse, pExpr, pSchema, pNC->pSrcList);
75426 75436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
75427 75437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Increment the nRef value on all name contexts from TopNC up to
75428 75438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the point where the name matched. */
75429 75439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(;;){
@@ -76116,11 +76126,10 @@
76116 76126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76117 76127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Set up the local name-context to pass to sqlite3ResolveExprNames() to
76118 76128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** resolve the result-set expression list.
76119 76129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
76120 76130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sNC.ncFlags = NC_AllowAgg;
76121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->selFlags & SF_Recursive ) sNC.ncFlags |= NC_Recursive;
76122 76131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sNC.pSrcList = p->pSrc;
76123 76132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sNC.pNext = pOuterNC;
76124 76133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76125 76134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Resolve names in the result set. */
76126 76135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pEList = p->pEList;
@@ -76195,14 +76204,10 @@
76195 76204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"the GROUP BY clause");
76196 76205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return WRC_Abort;
76197 76206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76198 76207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76199 76208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sNC.ncFlags & NC_UsesLevel ){
76201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->selFlags |= SF_UsesLevel;
76202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
76203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sNC.ncFlags &= ~(NC_Recursive|NC_UsesLevel);
76204 76209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76205 76210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Advance to the next term of the compound
76206 76211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
76207 76212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = p->pPrior;
76208 76213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nCompound++;
@@ -78835,16 +78840,10 @@
78835 78840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
inReg = sqlite3ExprCodeGetColumn(pParse, pExpr->pTab,
78836 78841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pExpr->iColumn, iTab, target,
78837 78842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pExpr->op2);
78838 78843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
78839 78844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
78840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifndef SQLITE_OMIT_CTE
78841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case TK_LEVEL: {
78842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- inReg = pParse->regLevel;
78843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- break;
78844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
78845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
78846 78845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case TK_INTEGER: {
78847 78846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
codeInteger(pParse, pExpr, 0, target);
78848 78847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
78849 78848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
78850 78849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_FLOATING_POINT
@@ -79464,11 +79463,10 @@
79464 79463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3ExprCodeTemp(Parse *pParse, Expr *pExpr, int *pReg){
79465 79464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int r2;
79466 79465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pExpr = sqlite3ExprSkipCollate(pExpr);
79467 79466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ConstFactorOk(pParse)
79468 79467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& pExpr->op!=TK_REGISTER
79469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && pExpr->op!=TK_LEVEL
79470 79468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& sqlite3ExprIsConstantNotJoin(pExpr)
79471 79469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
79472 79470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprList *p = pParse->pConstExpr;
79473 79471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
79474 79472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pReg = 0;
@@ -99909,17 +99907,17 @@
99909 99907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
99910 99908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Add code to implement the OFFSET
99911 99909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
99912 99910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void codeOffset(
99913 99911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Vdbe *v, /* Generate code into this VM */
99914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Select *p, /* The SELECT statement being coded */
99912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iOffset, /* Register holding the offset counter */
99915 99913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iContinue /* Jump here to skip the current record */
99916 99914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
99917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->iOffset && iContinue!=0 ){
99915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( iOffset>0 && iContinue!=0 ){
99918 99916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int addr;
99919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_AddImm, p->iOffset, -1);
99920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- addr = sqlite3VdbeAddOp1(v, OP_IfNeg, p->iOffset);
99917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_AddImm, iOffset, -1);
99918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ addr = sqlite3VdbeAddOp1(v, OP_IfNeg, iOffset);
99921 99919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Goto, 0, iContinue);
99922 99920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeComment((v, "skip OFFSET records"));
99923 99921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeJumpHere(v, addr);
99924 99922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
99925 99923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -99990,21 +99988,20 @@
99990 99988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
99991 99989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
99992 99990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine generates the code for the inside of the inner loop
99993 99991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of a SELECT.
99994 99992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
99995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If srcTab and nColumn are both zero, then the pEList expressions
99996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** are evaluated in order to get the data for this row. If nColumn>0
99997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** then data is pulled from srcTab and pEList is used only to get the
99998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** datatypes for each column.
99993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If srcTab is negative, then the pEList expressions
99994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** are evaluated in order to get the data for this row. If srcTab is
99995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** zero or more, then data is pulled from srcTab and pEList is used only
99996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to get number columns and the datatype for each column.
99999 99997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
100000 99998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void selectInnerLoop(
100001 99999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Parse *pParse, /* The parser context */
100002 100000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Select *p, /* The complete select statement being coded */
100003 100001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprList *pEList, /* List of values being extracted */
100004 100002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int srcTab, /* Pull data from this table */
100005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nColumn, /* Number of columns in the source table */
100006 100003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprList *pOrderBy, /* If not NULL, sort results using this key */
100007 100004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DistinctCtx *pDistinct, /* If not NULL, info on how to process DISTINCT */
100008 100005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SelectDest *pDest, /* How to dispose of the results */
100009 100006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iContinue, /* Jump here to continue with next row */
100010 100007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iBreak /* Jump here to break out of the inner loop */
@@ -100016,61 +100013,54 @@
100016 100013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int eDest = pDest->eDest; /* How to dispose of results */
100017 100014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iParm = pDest->iSDParm; /* First argument to disposal method */
100018 100015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nResultCol; /* Number of result columns */
100019 100016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
100020 100017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( v );
100021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( NEVER(v==0) ) return;
100022 100018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pEList!=0 );
100023 100019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
hasDistinct = pDistinct ? pDistinct->eTnctType : WHERE_DISTINCT_NOOP;
100024 100020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOrderBy==0 && !hasDistinct ){
100025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- codeOffset(v, p, iContinue);
100021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ codeOffset(v, p->iOffset, iContinue);
100026 100022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
100027 100023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
100028 100024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Pull the requested columns.
100029 100025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
100030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( nColumn>0 ){
100031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nResultCol = nColumn;
100032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
100033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nResultCol = pEList->nExpr;
100034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
100026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nResultCol = pEList->nExpr;
100035 100027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pDest->iSdst==0 ){
100036 100028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pDest->iSdst = pParse->nMem+1;
100037 100029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pDest->nSdst = nResultCol;
100038 100030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->nMem += nResultCol;
100039 100031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
100040 100032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pDest->nSdst==nResultCol );
100041 100033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
100042 100034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
regResult = pDest->iSdst;
100043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( nColumn>0 ){
100044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i<nColumn; i++){
100035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( srcTab>=0 ){
100036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<nResultCol; i++){
100045 100037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_Column, srcTab, i, regResult+i);
100038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeComment((v, "%s", pEList->a[i].zName));
100046 100039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
100047 100040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( eDest!=SRT_Exists ){
100048 100041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the destination is an EXISTS(...) expression, the actual
100049 100042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** values returned by the SELECT are not required.
100050 100043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
100051 100044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprCodeExprList(pParse, pEList, regResult,
100052 100045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(eDest==SRT_Output)?SQLITE_ECEL_DUP:0);
100053 100046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
100054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nColumn = nResultCol;
100055 100047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
100056 100048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the DISTINCT keyword was present on the SELECT statement
100057 100049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** and this row has been seen before, then do not make this row
100058 100050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** part of the result.
100059 100051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
100060 100052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( hasDistinct ){
100061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pEList!=0 );
100062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pEList->nExpr==nColumn );
100063 100053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( pDistinct->eTnctType ){
100064 100054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case WHERE_DISTINCT_ORDERED: {
100065 100055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeOp *pOp; /* No longer required OpenEphemeral instr. */
100066 100056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iJump; /* Jump destination */
100067 100057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int regPrev; /* Previous row content */
100068 100058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
100069 100059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Allocate space for the previous row */
100070 100060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
regPrev = pParse->nMem+1;
100071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pParse->nMem += nColumn;
100061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pParse->nMem += nResultCol;
100072 100062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
100073 100063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Change the OP_OpenEphemeral coded earlier to an OP_Null
100074 100064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sets the MEM_Cleared bit on the first register of the
100075 100065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** previous value. This will cause the OP_Ne below to always
100076 100066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** fail on the first iteration of the loop even if the first
@@ -100080,23 +100070,23 @@
100080 100070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOp = sqlite3VdbeGetOp(v, pDistinct->addrTnct);
100081 100071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOp->opcode = OP_Null;
100082 100072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOp->p1 = 1;
100083 100073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOp->p2 = regPrev;
100084 100074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
100085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iJump = sqlite3VdbeCurrentAddr(v) + nColumn;
100086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i<nColumn; i++){
100075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iJump = sqlite3VdbeCurrentAddr(v) + nResultCol;
100076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<nResultCol; i++){
100087 100077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
CollSeq *pColl = sqlite3ExprCollSeq(pParse, pEList->a[i].pExpr);
100088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( i<nColumn-1 ){
100078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i<nResultCol-1 ){
100089 100079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_Ne, regResult+i, iJump, regPrev+i);
100090 100080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
100091 100081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_Eq, regResult+i, iContinue, regPrev+i);
100092 100082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
100093 100083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeChangeP4(v, -1, (const char *)pColl, P4_COLLSEQ);
100094 100084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeChangeP5(v, SQLITE_NULLEQ);
100095 100085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
100096 100086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3VdbeCurrentAddr(v)==iJump );
100097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp3(v, OP_Copy, regResult, regPrev, nColumn-1);
100087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_Copy, regResult, regPrev, nResultCol-1);
100098 100088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
100099 100089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
100100 100090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
100101 100091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case WHERE_DISTINCT_UNIQUE: {
100102 100092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeChangeToNoop(v, pDistinct->addrTnct);
@@ -100103,16 +100093,16 @@
100103 100093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
100104 100094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
100105 100095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
100106 100096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
default: {
100107 100097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pDistinct->eTnctType==WHERE_DISTINCT_UNORDERED );
100108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- codeDistinct(pParse, pDistinct->tabTnct, iContinue, nColumn, regResult);
100098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ codeDistinct(pParse, pDistinct->tabTnct, iContinue, nResultCol, regResult);
100109 100099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
100110 100100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
100111 100101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
100112 100102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOrderBy==0 ){
100113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- codeOffset(v, p, iContinue);
100103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ codeOffset(v, p->iOffset, iContinue);
100114 100104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
100115 100105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
100116 100106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
100117 100107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( eDest ){
100118 100108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* In this mode, write each query result to the key of the temporary
@@ -100120,11 +100110,11 @@
100120 100110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
100121 100111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_COMPOUND_SELECT
100122 100112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SRT_Union: {
100123 100113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int r1;
100124 100114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
r1 = sqlite3GetTempReg(pParse);
100125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nColumn, r1);
100115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nResultCol, r1);
100126 100116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_IdxInsert, iParm, r1);
100127 100117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ReleaseTempReg(pParse, r1);
100128 100118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
100129 100119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
100130 100120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -100131,24 +100121,24 @@
100131 100121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Construct a record from the query result, but instead of
100132 100122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** saving that record, use it as a key to delete elements from
100133 100123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the temporary table iParm.
100134 100124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
100135 100125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SRT_Except: {
100136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp3(v, OP_IdxDelete, iParm, regResult, nColumn);
100126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_IdxDelete, iParm, regResult, nResultCol);
100137 100127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
100138 100128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
100139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
100129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* SQLITE_OMIT_COMPOUND_SELECT */
100140 100130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
100141 100131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Store the result as data using a unique key.
100142 100132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
100143 100133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SRT_DistTable:
100144 100134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SRT_Table:
100145 100135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SRT_EphemTab: {
100146 100136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int r1 = sqlite3GetTempReg(pParse);
100147 100137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( eDest==SRT_Table );
100148 100138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( eDest==SRT_EphemTab );
100149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nColumn, r1);
100139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nResultCol, r1);
100150 100140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_CTE
100151 100141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( eDest==SRT_DistTable ){
100152 100142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the destination is DistTable, then cursor (iParm+1) is open
100153 100143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** on an ephemeral index. If the current row is already present
100154 100144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in the index, do not write it to the output. If not, add the
@@ -100177,11 +100167,11 @@
100177 100167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If we are creating a set for an "expr IN (SELECT ...)" construct,
100178 100168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** then there should be a single item on the stack. Write this
100179 100169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** item into the set table with bogus data.
100180 100170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
100181 100171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SRT_Set: {
100182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( nColumn==1 );
100172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( nResultCol==1 );
100183 100173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pDest->affSdst =
100184 100174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3CompareAffinity(pEList->a[0].pExpr, pDest->affSdst);
100185 100175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOrderBy ){
100186 100176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* At first glance you would think we could optimize out the
100187 100177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ORDER BY in this case since the order of entries in the set
@@ -100209,11 +100199,11 @@
100209 100199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If this is a scalar select that is part of an expression, then
100210 100200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** store the results in the appropriate memory cell and break out
100211 100201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of the scan loop.
100212 100202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
100213 100203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SRT_Mem: {
100214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( nColumn==1 );
100204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( nResultCol==1 );
100215 100205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOrderBy ){
100216 100206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pushOntoSorter(pParse, pOrderBy, p, regResult);
100217 100207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
100218 100208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprCodeMove(pParse, regResult, iParm, 1);
100219 100209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The LIMIT clause will jump out of the loop for us */
@@ -100230,21 +100220,66 @@
100230 100220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SRT_Output: {
100231 100221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( eDest==SRT_Coroutine );
100232 100222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( eDest==SRT_Output );
100233 100223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOrderBy ){
100234 100224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int r1 = sqlite3GetTempReg(pParse);
100235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nColumn, r1);
100225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nResultCol, r1);
100236 100226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pushOntoSorter(pParse, pOrderBy, p, r1);
100237 100227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ReleaseTempReg(pParse, r1);
100238 100228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( eDest==SRT_Coroutine ){
100239 100229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp1(v, OP_Yield, pDest->iSDParm);
100240 100230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
100241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_ResultRow, regResult, nColumn);
100242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3ExprCacheAffinityChange(pParse, regResult, nColumn);
100231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_ResultRow, regResult, nResultCol);
100232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3ExprCacheAffinityChange(pParse, regResult, nResultCol);
100243 100233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
100244 100234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
100245 100235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
100236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
100237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_OMIT_CTE
100238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Write the results into a priority queue that is order according to
100239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pDest->pOrderBy (in pSO). pDest->iSDParm (in iParm) is the cursor for an
100240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** index with pSO->nExpr+2 columns. Build a key using pSO for the first
100241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pSO->nExpr columns, then make sure all keys are unique by adding a
100242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** final OP_Sequence column. The last column is the record as a blob.
100243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
100244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case SRT_DistQueue:
100245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case SRT_Queue: {
100246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nKey;
100247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int r1, r2, r3;
100248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int addrTest = 0;
100249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ExprList *pSO;
100250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSO = pDest->pOrderBy;
100251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSO );
100252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nKey = pSO->nExpr;
100253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ r1 = sqlite3GetTempReg(pParse);
100254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ r2 = sqlite3GetTempRange(pParse, nKey+2);
100255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ r3 = r2+nKey+1;
100256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nResultCol, r3);
100257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( eDest==SRT_DistQueue ){
100258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If the destination is DistQueue, then cursor (iParm+1) is open
100259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** on a second ephemeral index that holds all values every previously
100260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** added to the queue. Only add this new value if it has never before
100261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** been added */
100262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ addrTest = sqlite3VdbeAddOp4Int(v, OP_Found, iParm+1, 0, r3, 0);
100263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_IdxInsert, iParm+1, r3);
100264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
100265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<nKey; i++){
100266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_SCopy,
100267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ regResult + pSO->a[i].u.x.iOrderByCol - 1,
100268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ r2+i);
100269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
100270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Sequence, iParm, r2+nKey);
100271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_MakeRecord, r2, nKey+2, r1);
100272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_IdxInsert, iParm, r1);
100273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( addrTest ) sqlite3VdbeJumpHere(v, addrTest);
100274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3ReleaseTempReg(pParse, r1);
100275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3ReleaseTempRange(pParse, r2, nKey+2);
100276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
100277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
100278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* SQLITE_OMIT_CTE */
100279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
100280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
100246 100281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
100247 100282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if !defined(SQLITE_OMIT_TRIGGER)
100248 100283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Discard the results. This is used for SELECT statements inside
100249 100284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the body of a TRIGGER. The purpose of such selects is to call
100250 100285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** user-defined functions that have side effects. We do not care
@@ -100330,19 +100365,19 @@
100330 100365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
100331 100366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Space to hold the KeyInfo structure is obtain from malloc. The calling
100332 100367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** function is responsible for seeing that this structure is eventually
100333 100368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** freed.
100334 100369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
100335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static KeyInfo *keyInfoFromExprList(Parse *pParse, ExprList *pList){
100370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static KeyInfo *keyInfoFromExprList(Parse *pParse, ExprList *pList, int nExtra){
100336 100371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nExpr;
100337 100372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
KeyInfo *pInfo;
100338 100373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct ExprList_item *pItem;
100339 100374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *db = pParse->db;
100340 100375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
100341 100376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
100342 100377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nExpr = pList->nExpr;
100343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pInfo = sqlite3KeyInfoAlloc(db, nExpr, 1);
100378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pInfo = sqlite3KeyInfoAlloc(db, nExpr+nExtra, 1);
100344 100379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pInfo ){
100345 100380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3KeyInfoIsWriteable(pInfo) );
100346 100381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0, pItem=pList->a; i<nExpr; i++, pItem++){
100347 100382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
CollSeq *pColl;
100348 100383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pColl = sqlite3ExprCollSeq(pParse, pItem->pExpr);
@@ -100479,17 +100514,17 @@
100479 100514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->selFlags & SF_UseSorter ){
100480 100515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int regSortOut = ++pParse->nMem;
100481 100516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int ptab2 = pParse->nTab++;
100482 100517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_OpenPseudo, ptab2, regSortOut, pOrderBy->nExpr+2);
100483 100518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
addr = 1 + sqlite3VdbeAddOp2(v, OP_SorterSort, iTab, addrBreak);
100484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- codeOffset(v, p, addrContinue);
100519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ codeOffset(v, p->iOffset, addrContinue);
100485 100520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_SorterData, iTab, regSortOut);
100486 100521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_Column, ptab2, pOrderBy->nExpr+1, regRow);
100487 100522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeChangeP5(v, OPFLAG_CLEARCACHE);
100488 100523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
100489 100524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
addr = 1 + sqlite3VdbeAddOp2(v, OP_Sort, iTab, addrBreak);
100490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- codeOffset(v, p, addrContinue);
100525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ codeOffset(v, p->iOffset, addrContinue);
100491 100526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_Column, iTab, pOrderBy->nExpr+1, regRow);
100492 100527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
100493 100528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( eDest ){
100494 100529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SRT_Table:
100495 100530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SRT_EphemTab: {
@@ -101049,12 +101084,17 @@
101049 101084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the limit and offset. If there is no limit and/or offset, then
101050 101085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** iLimit and iOffset are negative.
101051 101086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
101052 101087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine changes the values of iLimit and iOffset only if
101053 101088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a limit or offset is defined by pLimit and pOffset. iLimit and
101054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** iOffset should have been preset to appropriate default values
101055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** (usually but not always -1) prior to calling this routine.
101089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** iOffset should have been preset to appropriate default values (zero)
101090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** prior to calling this routine.
101091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
101092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The iOffset register (if it exists) is initialized to the value
101093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of the OFFSET. The iLimit register is initialized to LIMIT. Register
101094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** iOffset+1 is initialized to LIMIT+OFFSET.
101095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
101056 101096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Only if pLimit!=0 or pOffset!=0 do the limit registers get
101057 101097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** redefined. The UNION ALL operator uses this property to force
101058 101098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the reuse of the same limit and offset registers across multiple
101059 101099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SELECT statements.
101060 101100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -101074,11 +101114,11 @@
101074 101114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprCacheClear(pParse);
101075 101115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->pOffset==0 || p->pLimit!=0 );
101076 101116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->pLimit ){
101077 101117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->iLimit = iLimit = ++pParse->nMem;
101078 101118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
v = sqlite3GetVdbe(pParse);
101079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( NEVER(v==0) ) return; /* VDBE should have already been allocated */
101119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( v!=0 );
101080 101120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3ExprIsInteger(p->pLimit, &n) ){
101081 101121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Integer, n, iLimit);
101082 101122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeComment((v, "LIMIT counter"));
101083 101123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( n==0 ){
101084 101124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Goto, 0, iBreak);
@@ -101131,11 +101171,169 @@
101131 101171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
101132 101172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return pRet;
101133 101173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
101134 101174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_OMIT_COMPOUND_SELECT */
101135 101175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
101136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Forward reference */
101176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_OMIT_CTE
101177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
101178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This routine generates VDBE code to compute the content of a WITH RECURSIVE
101179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** query of the form:
101180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
101181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <recursive-table> AS (<setup-query> UNION [ALL] <recursive-query>)
101182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** \___________/ \_______________/
101183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** p->pPrior p
101184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
101185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
101186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** There is exactly one reference to the recursive-table in the FROM clause
101187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of recursive-query, marked with the SrcList->a[].isRecursive flag.
101188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
101189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The setup-query runs once to generate an initial set of rows that go
101190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** into a Queue table. Rows are extracted from the Queue table one by
101191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** one. Each row extracted from Queue is output to pDest. Then the single
101192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** extracted row (now in the iCurrent table) becomes the content of the
101193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** recursive-table for a recursive-query run. The output of the recursive-query
101194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is added back into the Queue table. Then another row is extracted from Queue
101195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** and the iteration continues until the Queue table is empty.
101196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
101197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the compound query operator is UNION then no duplicate rows are ever
101198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** inserted into the Queue table. The iDistinct table keeps a copy of all rows
101199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** that have ever been inserted into Queue and causes duplicates to be
101200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** discarded. If the operator is UNION ALL, then duplicates are allowed.
101201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
101202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the query has an ORDER BY, then entries in the Queue table are kept in
101203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ORDER BY order and the first entry is extracted for each cycle. Without
101204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** an ORDER BY, the Queue table is just a FIFO.
101205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
101206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If a LIMIT clause is provided, then the iteration stops after LIMIT rows
101207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** have been output to pDest. A LIMIT of zero means to output no rows and a
101208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** negative LIMIT means to output all rows. If there is also an OFFSET clause
101209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** with a positive value, then the first OFFSET outputs are discarded rather
101210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** than being sent to pDest. The LIMIT count does not begin until after OFFSET
101211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** rows have been skipped.
101212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
101213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void generateWithRecursiveQuery(
101214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Parse *pParse, /* Parsing context */
101215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Select *p, /* The recursive SELECT to be coded */
101216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SelectDest *pDest /* What to do with query results */
101217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
101218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SrcList *pSrc = p->pSrc; /* The FROM clause of the recursive query */
101219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nCol = p->pEList->nExpr; /* Number of columns in the recursive table */
101220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Vdbe *v = pParse->pVdbe; /* The prepared statement under construction */
101221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Select *pSetup = p->pPrior; /* The setup query */
101222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int addrTop; /* Top of the loop */
101223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int addrCont, addrBreak; /* CONTINUE and BREAK addresses */
101224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iCurrent; /* The Current table */
101225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int regCurrent; /* Register holding Current table */
101226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iQueue; /* The Queue table */
101227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iDistinct = 0; /* To ensure unique results if UNION */
101228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int eDest = SRT_Table; /* How to write to Queue */
101229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SelectDest destQueue; /* SelectDest targetting the Queue table */
101230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i; /* Loop counter */
101231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc; /* Result code */
101232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ExprList *pOrderBy; /* The ORDER BY clause */
101233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Expr *pLimit, *pOffset; /* Saved LIMIT and OFFSET */
101234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int regLimit, regOffset; /* Registers used by LIMIT and OFFSET */
101235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
101236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Obtain authorization to do a recursive query */
101237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3AuthCheck(pParse, SQLITE_RECURSIVE, 0, 0, 0) ) return;
101238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
101239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Process the LIMIT and OFFSET clauses, if they exist */
101240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ addrBreak = sqlite3VdbeMakeLabel(v);
101241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ computeLimitRegisters(pParse, p, addrBreak);
101242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pLimit = p->pLimit;
101243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pOffset = p->pOffset;
101244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ regLimit = p->iLimit;
101245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ regOffset = p->iOffset;
101246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pLimit = p->pOffset = 0;
101247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->iLimit = p->iOffset = 0;
101248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
101249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Locate the cursor number of the Current table */
101250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; ALWAYS(i<pSrc->nSrc); i++){
101251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pSrc->a[i].isRecursive ){
101252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iCurrent = pSrc->a[i].iCursor;
101253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
101254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
101257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Detach the ORDER BY clause from the compound SELECT */
101258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pOrderBy = p->pOrderBy;
101259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pOrderBy = 0;
101260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
101261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Allocate cursors numbers for Queue and Distinct. The cursor number for
101262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the Distinct table must be exactly one greater than Queue in order
101263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** for the SRT_DistTable and SRT_DistQueue destinations to work. */
101264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iQueue = pParse->nTab++;
101265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->op==TK_UNION ){
101266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ eDest = pOrderBy ? SRT_DistQueue : SRT_DistTable;
101267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iDistinct = pParse->nTab++;
101268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
101269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ eDest = pOrderBy ? SRT_Queue : SRT_Table;
101270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3SelectDestInit(&destQueue, eDest, iQueue);
101272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
101273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Allocate cursors for Current, Queue, and Distinct. */
101274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ regCurrent = ++pParse->nMem;
101275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_OpenPseudo, iCurrent, regCurrent, nCol);
101276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pOrderBy ){
101277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ KeyInfo *pKeyInfo = keyInfoFromExprList(pParse, pOrderBy, 1);
101278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp4(v, OP_OpenEphemeral, iQueue, pOrderBy->nExpr+2, 0,
101279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (char*)pKeyInfo, P4_KEYINFO);
101280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ destQueue.pOrderBy = pOrderBy;
101281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
101282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_OpenEphemeral, iQueue, nCol);
101283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeComment((v, "Queue table"));
101285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( iDistinct ){
101286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->addrOpenEphm[0] = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, iDistinct, 0);
101287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->selFlags |= SF_UsesEphemeral;
101288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
101290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Store the results of the setup-query in Queue. */
101291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3Select(pParse, pSetup, &destQueue);
101292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc ) goto end_of_recursive_query;
101293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
101294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Find the next row in the Queue and output that row */
101295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ addrTop = sqlite3VdbeAddOp2(v, OP_Rewind, iQueue, addrBreak);
101296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
101297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Transfer the next row in Queue over to Current */
101298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp1(v, OP_NullRow, iCurrent); /* To reset column cache */
101299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pOrderBy ){
101300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_Column, iQueue, pOrderBy->nExpr+1, regCurrent);
101301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
101302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_RowData, iQueue, regCurrent);
101303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp1(v, OP_Delete, iQueue);
101305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
101306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Output the single row in Current */
101307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ addrCont = sqlite3VdbeMakeLabel(v);
101308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ codeOffset(v, regOffset, addrCont);
101309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ selectInnerLoop(pParse, p, p->pEList, iCurrent,
101310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, 0, pDest, addrCont, addrBreak);
101311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( regLimit ) sqlite3VdbeAddOp3(v, OP_IfZero, regLimit, addrBreak, -1);
101312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeResolveLabel(v, addrCont);
101313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
101314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Execute the recursive SELECT taking the single row in Current as
101315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the value for the recursive-table. Store the results in the Queue.
101316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
101317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pPrior = 0;
101318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3Select(pParse, p, &destQueue);
101319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p->pPrior==0 );
101320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pPrior = pSetup;
101321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
101322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Keep running the loop until the Queue is empty */
101323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Goto, 0, addrTop);
101324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeResolveLabel(v, addrBreak);
101325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
101326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ end_of_recursive_query:
101327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pOrderBy = pOrderBy;
101328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pLimit = pLimit;
101329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pOffset = pOffset;
101330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return;
101331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
101333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
101334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Forward references */
101137 101335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int multiSelectOrderBy(
101138 101336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Parse *pParse, /* Parsing context */
101139 101337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Select *p, /* The right-most of SELECTs to be coded */
101140 101338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SelectDest *pDest /* What to do with query results */
101141 101339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
@@ -101239,100 +101437,11 @@
101239 101437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto multi_select_end;
101240 101438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
101241 101439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
101242 101440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_CTE
101243 101441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->selFlags & SF_Recursive ){
101244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SrcList *pSrc = p->pSrc; /* The FROM clause of the right-most SELECT */
101245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nCol = p->pEList->nExpr; /* Number of columns in the result set */
101246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int addrNext;
101247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int addrSwap;
101248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iCont, iBreak;
101249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int tmp1; /* Intermediate table */
101250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int tmp2; /* Next intermediate table */
101251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int tmp3 = 0; /* To ensure unique results if UNION */
101252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int eDest = SRT_Table;
101253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SelectDest tmp2dest;
101254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int i;
101255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int regLevel = 0; /* Register for LEVEL value */
101256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int savedRegLevel; /* Saved value of pParse->regLevel */
101257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
101258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Check that there is no ORDER BY or LIMIT clause. Neither of these
101259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** are supported on recursive queries. */
101260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( p->pOffset==0 || p->pLimit );
101261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->pOrderBy || p->pLimit ){
101262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3ErrorMsg(pParse, "%s in a recursive query",
101263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->pOrderBy ? "ORDER BY" : "LIMIT"
101264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- );
101265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- goto multi_select_end;
101266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
101267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
101268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3AuthCheck(pParse, SQLITE_RECURSIVE, 0, 0, 0) ){
101269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- goto multi_select_end;
101270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
101271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iBreak = sqlite3VdbeMakeLabel(v);
101272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iCont = sqlite3VdbeMakeLabel(v);
101273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
101274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; ALWAYS(i<pSrc->nSrc); i++){
101275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pSrc->a[i].isRecursive ){
101276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tmp1 = pSrc->a[i].iCursor;
101277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- break;
101278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
101279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
101280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
101281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tmp2 = pParse->nTab++;
101282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->op==TK_UNION ){
101283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- eDest = SRT_DistTable;
101284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tmp3 = pParse->nTab++;
101285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
101286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3SelectDestInit(&tmp2dest, eDest, tmp2);
101287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
101288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_OpenEphemeral, tmp1, nCol);
101289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_OpenEphemeral, tmp2, nCol);
101290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( tmp3 ){
101291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->addrOpenEphm[0] = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, tmp3, 0);
101292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->selFlags |= SF_UsesEphemeral;
101293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
101294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
101295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Store the results of the initial SELECT in tmp2. */
101296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3Select(pParse, pPrior, &tmp2dest);
101297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc ) goto multi_select_end;
101298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
101299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Allocate and initialize a register to hold the LEVEL pseudo-column */
101300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- savedRegLevel = pParse->regLevel;
101301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->selFlags & SF_UsesLevel ){
101302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- regLevel = pParse->regLevel = ++pParse->nMem;
101303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Integer, 0, regLevel);
101304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- VdbeComment((v, "level=0"));
101305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
101306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
101307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Clear tmp1. Then switch the contents of tmp1 and tmp2. Then return
101308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the contents of tmp1 to the caller. Or, if tmp1 is empty at this
101309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** point, the recursive query has finished - jump to address iBreak. */
101310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- addrSwap = sqlite3VdbeAddOp2(v, OP_SwapCursors, tmp1, tmp2);
101311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Rewind, tmp1, iBreak);
101312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- addrNext = sqlite3VdbeCurrentAddr(v);
101313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- selectInnerLoop(pParse, p, p->pEList, tmp1, p->pEList->nExpr,
101314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 0, 0, &dest, iCont, iBreak);
101315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeResolveLabel(v, iCont);
101316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Next, tmp1, addrNext);
101317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( regLevel ){
101318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_AddImm, regLevel, 1);
101319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- VdbeComment((v, "level++"));
101320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
101321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
101322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Execute the recursive SELECT. Store the results in tmp2. While this
101323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** SELECT is running, the contents of tmp1 are read by recursive
101324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** references to the current CTE. */
101325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->pPrior = 0;
101326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3Select(pParse, p, &tmp2dest);
101327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( p->pPrior==0 );
101328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->pPrior = pPrior;
101329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc ) goto multi_select_end;
101330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
101331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Goto, 0, addrSwap);
101332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeResolveLabel(v, iBreak);
101333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pParse->regLevel = savedRegLevel;
101442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ generateWithRecursiveQuery(pParse, p, &dest);
101334 101443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else
101335 101444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
101336 101445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
101337 101446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Compound SELECTs that have an ORDER BY clause are handled separately.
101338 101447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -101471,11 +101580,11 @@
101471 101580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iBreak = sqlite3VdbeMakeLabel(v);
101472 101581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iCont = sqlite3VdbeMakeLabel(v);
101473 101582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
computeLimitRegisters(pParse, p, iBreak);
101474 101583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Rewind, unionTab, iBreak);
101475 101584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iStart = sqlite3VdbeCurrentAddr(v);
101476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- selectInnerLoop(pParse, p, p->pEList, unionTab, p->pEList->nExpr,
101585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ selectInnerLoop(pParse, p, p->pEList, unionTab,
101477 101586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
0, 0, &dest, iCont, iBreak);
101478 101587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeResolveLabel(v, iCont);
101479 101588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Next, unionTab, iStart);
101480 101589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeResolveLabel(v, iBreak);
101481 101590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Close, unionTab, 0);
@@ -101549,11 +101658,11 @@
101549 101658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Rewind, tab1, iBreak);
101550 101659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
r1 = sqlite3GetTempReg(pParse);
101551 101660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iStart = sqlite3VdbeAddOp2(v, OP_RowKey, tab1, r1);
101552 101661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4Int(v, OP_NotFound, tab2, iCont, r1, 0);
101553 101662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ReleaseTempReg(pParse, r1);
101554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- selectInnerLoop(pParse, p, p->pEList, tab1, p->pEList->nExpr,
101663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ selectInnerLoop(pParse, p, p->pEList, tab1,
101555 101664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
0, 0, &dest, iCont, iBreak);
101556 101665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeResolveLabel(v, iCont);
101557 101666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Next, tab1, iStart);
101558 101667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeResolveLabel(v, iBreak);
101559 101668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Close, tab2, 0);
@@ -101671,11 +101780,11 @@
101671 101780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
101672 101781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pParse->db->mallocFailed ) return 0;
101673 101782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
101674 101783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Suppress the first OFFSET entries if there is an OFFSET clause
101675 101784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
101676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- codeOffset(v, p, iContinue);
101785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ codeOffset(v, p->iOffset, iContinue);
101677 101786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
101678 101787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( pDest->eDest ){
101679 101788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Store the result as data using a unique key.
101680 101789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
101681 101790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SRT_Table:
@@ -103617,11 +103726,11 @@
103617 103726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pE->x.pList==0 || pE->x.pList->nExpr!=1 ){
103618 103727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ErrorMsg(pParse, "DISTINCT aggregates must have exactly one "
103619 103728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"argument");
103620 103729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFunc->iDistinct = -1;
103621 103730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
103622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- KeyInfo *pKeyInfo = keyInfoFromExprList(pParse, pE->x.pList);
103731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ KeyInfo *pKeyInfo = keyInfoFromExprList(pParse, pE->x.pList, 0);
103623 103732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4(v, OP_OpenEphemeral, pFunc->iDistinct, 0, 0,
103624 103733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(char*)pKeyInfo, P4_KEYINFO);
103625 103734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
103626 103735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
103627 103736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -103750,54 +103859,12 @@
103750 103859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
103751 103860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
103752 103861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
103753 103862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Generate code for the SELECT statement given in the p argument.
103754 103863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
103755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The results are distributed in various ways depending on the
103756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** contents of the SelectDest structure pointed to by argument pDest
103757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** as follows:
103758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
103759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** pDest->eDest Result
103760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ------------ -------------------------------------------
103761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** SRT_Output Generate a row of output (using the OP_ResultRow
103762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** opcode) for each row in the result set.
103763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
103764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** SRT_Mem Only valid if the result is a single column.
103765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Store the first column of the first result row
103766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** in register pDest->iSDParm then abandon the rest
103767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** of the query. This destination implies "LIMIT 1".
103768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
103769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** SRT_Set The result must be a single column. Store each
103770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** row of result as the key in table pDest->iSDParm.
103771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Apply the affinity pDest->affSdst before storing
103772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** results. Used to implement "IN (SELECT ...)".
103773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
103774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** SRT_Union Store results as a key in a temporary table
103775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** identified by pDest->iSDParm.
103776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
103777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** SRT_Except Remove results from the temporary table pDest->iSDParm.
103778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
103779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** SRT_Table Store results in temporary table pDest->iSDParm.
103780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This is like SRT_EphemTab except that the table
103781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** is assumed to already be open.
103782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
103783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** SRT_EphemTab Create an temporary table pDest->iSDParm and store
103784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the result there. The cursor is left open after
103785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** returning. This is like SRT_Table except that
103786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** this destination uses OP_OpenEphemeral to create
103787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the table first.
103788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
103789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** SRT_Coroutine Generate a co-routine that returns a new row of
103790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** results each time it is invoked. The entry point
103791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** of the co-routine is stored in register pDest->iSDParm.
103792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
103793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** SRT_Exists Store a 1 in memory cell pDest->iSDParm if the result
103794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** set is not empty.
103795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
103796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** SRT_Discard Throw the results away. This is used by SELECT
103797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** statements within triggers whose only purpose is
103798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the side-effects of functions.
103864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The results are returned according to the SelectDest structure.
103865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** See comments in sqliteInt.h for further information.
103799 103866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
103800 103867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine returns the number of errors. If any errors are
103801 103868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** encountered, then an appropriate error message is left in
103802 103869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** pParse->zErrMsg.
103803 103870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -104068,11 +104135,11 @@
104068 104135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** we figure out that the sorting index is not needed. The addrSortIndex
104069 104136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** variable is used to facilitate that change.
104070 104137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
104071 104138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOrderBy ){
104072 104139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
KeyInfo *pKeyInfo;
104073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pKeyInfo = keyInfoFromExprList(pParse, pOrderBy);
104140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pKeyInfo = keyInfoFromExprList(pParse, pOrderBy, 0);
104074 104141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOrderBy->iECursor = pParse->nTab++;
104075 104142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->addrOpenEphm[2] = addrSortIndex =
104076 104143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4(v, OP_OpenEphemeral,
104077 104144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOrderBy->iECursor, pOrderBy->nExpr+2, 0,
104078 104145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(char*)pKeyInfo, P4_KEYINFO);
@@ -104100,11 +104167,11 @@
104100 104167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
104101 104168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->selFlags & SF_Distinct ){
104102 104169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sDistinct.tabTnct = pParse->nTab++;
104103 104170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sDistinct.addrTnct = sqlite3VdbeAddOp4(v, OP_OpenEphemeral,
104104 104171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sDistinct.tabTnct, 0, 0,
104105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- (char*)keyInfoFromExprList(pParse, p->pEList),
104172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (char*)keyInfoFromExprList(pParse, p->pEList, 0),
104106 104173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
P4_KEYINFO);
104107 104174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeChangeP5(v, BTREE_UNORDERED);
104108 104175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sDistinct.eTnctType = WHERE_DISTINCT_UNORDERED;
104109 104176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
104110 104177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sDistinct.eTnctType = WHERE_DISTINCT_NOOP;
@@ -104134,11 +104201,11 @@
104134 104201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeChangeToNoop(v, addrSortIndex);
104135 104202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->addrOpenEphm[2] = -1;
104136 104203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
104137 104204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
104138 104205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Use the standard inner loop. */
104139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- selectInnerLoop(pParse, p, pEList, 0, 0, pOrderBy, &sDistinct, pDest,
104206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ selectInnerLoop(pParse, p, pEList, -1, pOrderBy, &sDistinct, pDest,
104140 104207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3WhereContinueLabel(pWInfo),
104141 104208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3WhereBreakLabel(pWInfo));
104142 104209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
104143 104210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* End the database scan loop.
104144 104211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -104224,11 +104291,11 @@
104224 104291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** implement it. Allocate that sorting index now. If it turns out
104225 104292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** that we do not need it after all, the OP_SorterOpen instruction
104226 104293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** will be converted into a Noop.
104227 104294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
104228 104295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sAggInfo.sortingIdx = pParse->nTab++;
104229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pKeyInfo = keyInfoFromExprList(pParse, pGroupBy);
104296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pKeyInfo = keyInfoFromExprList(pParse, pGroupBy, 0);
104230 104297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
addrSortingIdx = sqlite3VdbeAddOp4(v, OP_SorterOpen,
104231 104298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sAggInfo.sortingIdx, sAggInfo.nSortingColumn,
104232 104299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
0, (char*)pKeyInfo, P4_KEYINFO);
104233 104300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
104234 104301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Initialize memory locations used by GROUP BY aggregate processing
@@ -104406,11 +104473,11 @@
104406 104473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_IfPos, iUseFlag, addrOutputRow+2);
104407 104474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeComment((v, "Groupby result generator entry point"));
104408 104475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp1(v, OP_Return, regOutputRow);
104409 104476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
finalizeAggFunctions(pParse, &sAggInfo);
104410 104477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprIfFalse(pParse, pHaving, addrOutputRow+1, SQLITE_JUMPIFNULL);
104411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- selectInnerLoop(pParse, p, p->pEList, 0, 0, pOrderBy,
104478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ selectInnerLoop(pParse, p, p->pEList, -1, pOrderBy,
104412 104479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&sDistinct, pDest,
104413 104480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
addrOutputRow+1, addrSetAbort);
104414 104481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp1(v, OP_Return, regOutputRow);
104415 104482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeComment((v, "end groupby result generator"));
104416 104483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -104549,11 +104616,11 @@
104549 104616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
finalizeAggFunctions(pParse, &sAggInfo);
104550 104617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
104551 104618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
104552 104619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOrderBy = 0;
104553 104620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprIfFalse(pParse, pHaving, addrEnd, SQLITE_JUMPIFNULL);
104554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- selectInnerLoop(pParse, p, p->pEList, 0, 0, 0, 0,
104621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ selectInnerLoop(pParse, p, p->pEList, -1, 0, 0,
104555 104622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pDest, addrEnd, addrEnd);
104556 104623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprListDelete(db, pDel);
104557 104624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
104558 104625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeResolveLabel(v, addrEnd);
104559 104626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -112138,14 +112205,20 @@
112138 112205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** scan of the entire table.
112139 112206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
112140 112207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static const u8 aStep[] = { OP_Next, OP_Prev };
112141 112208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static const u8 aStart[] = { OP_Rewind, OP_Last };
112142 112209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( bRev==0 || bRev==1 );
112143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pLevel->op = aStep[bRev];
112144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pLevel->p1 = iCur;
112145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pLevel->p2 = 1 + sqlite3VdbeAddOp2(v, aStart[bRev], iCur, addrBrk);
112146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pLevel->p5 = SQLITE_STMTSTATUS_FULLSCAN_STEP;
112210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTabItem->isRecursive ){
112211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Tables marked isRecursive have only a single row that is stored in
112212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a pseudo-cursor. No need to Rewind or Next such cursors. */
112213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pLevel->op = OP_Noop;
112214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
112215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pLevel->op = aStep[bRev];
112216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pLevel->p1 = iCur;
112217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pLevel->p2 = 1 + sqlite3VdbeAddOp2(v, aStart[bRev], iCur, addrBrk);
112218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pLevel->p5 = SQLITE_STMTSTATUS_FULLSCAN_STEP;
112219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
112147 112220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
112148 112221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
112149 112222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Insert code to test every subexpression that can be completely
112150 112223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** computed using the current set of tables.
112151 112224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -119434,17 +119507,10 @@
119434 119507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** must be complete. So isInit must not be set until the very end
119435 119508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of this routine.
119436 119509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
119437 119510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3GlobalConfig.isInit ) return SQLITE_OK;
119438 119511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
119439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_ENABLE_SQLLOG
119440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- {
119441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- extern void sqlite3_init_sqllog(void);
119442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_init_sqllog();
119443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
119444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
119445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
119446 119512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Make sure the mutex subsystem is initialized. If unable to
119447 119513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** initialize the mutex subsystem, return early with the error.
119448 119514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If the system is so sick that we are unable to allocate a mutex,
119449 119515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** there is not much SQLite is going to be able to do.
119450 119516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
119451 119517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!