OLD | NEW |
1 /* | 1 /* |
2 ** 2001 September 15 | 2 ** 2001 September 15 |
3 ** | 3 ** |
4 ** The author disclaims copyright to this source code. In place of | 4 ** The author disclaims copyright to this source code. In place of |
5 ** a legal notice, here is a blessing: | 5 ** a legal notice, here is a blessing: |
6 ** | 6 ** |
7 ** May you do good and not evil. | 7 ** May you do good and not evil. |
8 ** May you find forgiveness for yourself and forgive others. | 8 ** May you find forgiveness for yourself and forgive others. |
9 ** May you share freely, never taking more than you give. | 9 ** May you share freely, never taking more than you give. |
10 ** | 10 ** |
(...skipping 14 matching lines...) Expand all Loading... |
25 ** code in all source files. | 25 ** code in all source files. |
26 ** | 26 ** |
27 ** Large file support can be disabled using the -DSQLITE_DISABLE_LFS switch | 27 ** Large file support can be disabled using the -DSQLITE_DISABLE_LFS switch |
28 ** on the compiler command line. This is necessary if you are compiling | 28 ** on the compiler command line. This is necessary if you are compiling |
29 ** on a recent machine (ex: Red Hat 7.2) but you want your code to work | 29 ** on a recent machine (ex: Red Hat 7.2) but you want your code to work |
30 ** on an older machine (ex: Red Hat 6.0). If you compile on Red Hat 7.2 | 30 ** on an older machine (ex: Red Hat 6.0). If you compile on Red Hat 7.2 |
31 ** without this option, LFS is enable. But LFS does not exist in the kernel | 31 ** without this option, LFS is enable. But LFS does not exist in the kernel |
32 ** in Red Hat 6.0, so the code won't work. Hence, for maximum binary | 32 ** in Red Hat 6.0, so the code won't work. Hence, for maximum binary |
33 ** portability you should omit LFS. | 33 ** portability you should omit LFS. |
34 ** | 34 ** |
| 35 ** The previous paragraph was written in 2005. (This paragraph is written |
| 36 ** on 2008-11-28.) These days, all Linux kernels support large files, so |
| 37 ** you should probably leave LFS enabled. But some embedded platforms might |
| 38 ** lack LFS in which case the SQLITE_DISABLE_LFS macro might still be useful. |
| 39 ** |
35 ** Similar is true for Mac OS X. LFS is only supported on Mac OS X 9 and later. | 40 ** Similar is true for Mac OS X. LFS is only supported on Mac OS X 9 and later. |
36 */ | 41 */ |
37 #ifndef SQLITE_DISABLE_LFS | 42 #ifndef SQLITE_DISABLE_LFS |
38 # define _LARGE_FILE 1 | 43 # define _LARGE_FILE 1 |
39 # ifndef _FILE_OFFSET_BITS | 44 # ifndef _FILE_OFFSET_BITS |
40 # define _FILE_OFFSET_BITS 64 | 45 # define _FILE_OFFSET_BITS 64 |
41 # endif | 46 # endif |
42 # define _LARGEFILE_SOURCE 1 | 47 # define _LARGEFILE_SOURCE 1 |
43 #endif | 48 #endif |
44 | 49 |
| 50 /* Needed for various definitions... */ |
| 51 #if defined(__GNUC__) && !defined(_GNU_SOURCE) |
| 52 # define _GNU_SOURCE |
| 53 #endif |
| 54 |
| 55 #if defined(__OpenBSD__) && !defined(_BSD_SOURCE) |
| 56 # define _BSD_SOURCE |
| 57 #endif |
| 58 |
| 59 /* |
| 60 ** For MinGW, check to see if we can include the header file containing its |
| 61 ** version information, among other things. Normally, this internal MinGW |
| 62 ** header file would [only] be included automatically by other MinGW header |
| 63 ** files; however, the contained version information is now required by this |
| 64 ** header file to work around binary compatibility issues (see below) and |
| 65 ** this is the only known way to reliably obtain it. This entire #if block |
| 66 ** would be completely unnecessary if there was any other way of detecting |
| 67 ** MinGW via their preprocessor (e.g. if they customized their GCC to define |
| 68 ** some MinGW-specific macros). When compiling for MinGW, either the |
| 69 ** _HAVE_MINGW_H or _HAVE__MINGW_H (note the extra underscore) macro must be |
| 70 ** defined; otherwise, detection of conditions specific to MinGW will be |
| 71 ** disabled. |
| 72 */ |
| 73 #if defined(_HAVE_MINGW_H) |
| 74 # include "mingw.h" |
| 75 #elif defined(_HAVE__MINGW_H) |
| 76 # include "_mingw.h" |
| 77 #endif |
| 78 |
| 79 /* |
| 80 ** For MinGW version 4.x (and higher), check to see if the _USE_32BIT_TIME_T |
| 81 ** define is required to maintain binary compatibility with the MSVC runtime |
| 82 ** library in use (e.g. for Windows XP). |
| 83 */ |
| 84 #if !defined(_USE_32BIT_TIME_T) && !defined(_USE_64BIT_TIME_T) && \ |
| 85 defined(_WIN32) && !defined(_WIN64) && \ |
| 86 defined(__MINGW_MAJOR_VERSION) && __MINGW_MAJOR_VERSION >= 4 && \ |
| 87 defined(__MSVCRT__) |
| 88 # define _USE_32BIT_TIME_T |
| 89 #endif |
| 90 |
| 91 /* The public SQLite interface. The _FILE_OFFSET_BITS macro must appear |
| 92 ** first in QNX. Also, the _USE_32BIT_TIME_T macro must appear first for |
| 93 ** MinGW. |
| 94 */ |
| 95 #include "sqlite3.h" |
| 96 |
45 /* | 97 /* |
46 ** Include the configuration header output by 'configure' if we're using the | 98 ** Include the configuration header output by 'configure' if we're using the |
47 ** autoconf-based build | 99 ** autoconf-based build |
48 */ | 100 */ |
49 #ifdef _HAVE_SQLITE_CONFIG_H | 101 #ifdef _HAVE_SQLITE_CONFIG_H |
50 #include "config.h" | 102 #include "config.h" |
51 #endif | 103 #endif |
52 | 104 |
53 #include "sqliteLimit.h" | 105 #include "sqliteLimit.h" |
54 | 106 |
55 /* Disable nuisance warnings on Borland compilers */ | 107 /* Disable nuisance warnings on Borland compilers */ |
56 #if defined(__BORLANDC__) | 108 #if defined(__BORLANDC__) |
57 #pragma warn -rch /* unreachable code */ | 109 #pragma warn -rch /* unreachable code */ |
58 #pragma warn -ccc /* Condition is always true or false */ | 110 #pragma warn -ccc /* Condition is always true or false */ |
59 #pragma warn -aus /* Assigned value is never used */ | 111 #pragma warn -aus /* Assigned value is never used */ |
60 #pragma warn -csu /* Comparing signed and unsigned */ | 112 #pragma warn -csu /* Comparing signed and unsigned */ |
61 #pragma warn -spa /* Suspicious pointer arithmetic */ | 113 #pragma warn -spa /* Suspicious pointer arithmetic */ |
62 #endif | 114 #endif |
63 | 115 |
64 /* Needed for various definitions... */ | |
65 #ifndef _GNU_SOURCE | |
66 # define _GNU_SOURCE | |
67 #endif | |
68 | |
69 /* | 116 /* |
70 ** Include standard header files as necessary | 117 ** Include standard header files as necessary |
71 */ | 118 */ |
72 #ifdef HAVE_STDINT_H | 119 #ifdef HAVE_STDINT_H |
73 #include <stdint.h> | 120 #include <stdint.h> |
74 #endif | 121 #endif |
75 #ifdef HAVE_INTTYPES_H | 122 #ifdef HAVE_INTTYPES_H |
76 #include <inttypes.h> | 123 #include <inttypes.h> |
77 #endif | 124 #endif |
78 | 125 |
79 /* | 126 /* |
80 ** The number of samples of an index that SQLite takes in order to | |
81 ** construct a histogram of the table content when running ANALYZE | |
82 ** and with SQLITE_ENABLE_STAT2 | |
83 */ | |
84 #define SQLITE_INDEX_SAMPLES 10 | |
85 | |
86 /* | |
87 ** The following macros are used to cast pointers to integers and | 127 ** The following macros are used to cast pointers to integers and |
88 ** integers to pointers. The way you do this varies from one compiler | 128 ** integers to pointers. The way you do this varies from one compiler |
89 ** to the next, so we have developed the following set of #if statements | 129 ** to the next, so we have developed the following set of #if statements |
90 ** to generate appropriate macros for a wide range of compilers. | 130 ** to generate appropriate macros for a wide range of compilers. |
91 ** | 131 ** |
92 ** The correct "ANSI" way to do this is to use the intptr_t type. | 132 ** The correct "ANSI" way to do this is to use the intptr_t type. |
93 ** Unfortunately, that typedef is not available on all compilers, or | 133 ** Unfortunately, that typedef is not available on all compilers, or |
94 ** if it is available, it requires an #include of specific headers | 134 ** if it is available, it requires an #include of specific headers |
95 ** that vary from one machine to the next. | 135 ** that vary from one machine to the next. |
96 ** | 136 ** |
(...skipping 10 matching lines...) Expand all Loading... |
107 # define SQLITE_PTR_TO_INT(X) ((int)(((char*)X)-(char*)0)) | 147 # define SQLITE_PTR_TO_INT(X) ((int)(((char*)X)-(char*)0)) |
108 #elif defined(HAVE_STDINT_H) /* Use this case if we have ANSI headers */ | 148 #elif defined(HAVE_STDINT_H) /* Use this case if we have ANSI headers */ |
109 # define SQLITE_INT_TO_PTR(X) ((void*)(intptr_t)(X)) | 149 # define SQLITE_INT_TO_PTR(X) ((void*)(intptr_t)(X)) |
110 # define SQLITE_PTR_TO_INT(X) ((int)(intptr_t)(X)) | 150 # define SQLITE_PTR_TO_INT(X) ((int)(intptr_t)(X)) |
111 #else /* Generates a warning - but it always works */ | 151 #else /* Generates a warning - but it always works */ |
112 # define SQLITE_INT_TO_PTR(X) ((void*)(X)) | 152 # define SQLITE_INT_TO_PTR(X) ((void*)(X)) |
113 # define SQLITE_PTR_TO_INT(X) ((int)(X)) | 153 # define SQLITE_PTR_TO_INT(X) ((int)(X)) |
114 #endif | 154 #endif |
115 | 155 |
116 /* | 156 /* |
| 157 ** A macro to hint to the compiler that a function should not be |
| 158 ** inlined. |
| 159 */ |
| 160 #if defined(__GNUC__) |
| 161 # define SQLITE_NOINLINE __attribute__((noinline)) |
| 162 #elif defined(_MSC_VER) && _MSC_VER>=1310 |
| 163 # define SQLITE_NOINLINE __declspec(noinline) |
| 164 #else |
| 165 # define SQLITE_NOINLINE |
| 166 #endif |
| 167 |
| 168 /* |
117 ** The SQLITE_THREADSAFE macro must be defined as 0, 1, or 2. | 169 ** The SQLITE_THREADSAFE macro must be defined as 0, 1, or 2. |
118 ** 0 means mutexes are permanently disable and the library is never | 170 ** 0 means mutexes are permanently disable and the library is never |
119 ** threadsafe. 1 means the library is serialized which is the highest | 171 ** threadsafe. 1 means the library is serialized which is the highest |
120 ** level of threadsafety. 2 means the libary is multithreaded - multiple | 172 ** level of threadsafety. 2 means the library is multithreaded - multiple |
121 ** threads can use SQLite as long as no two threads try to use the same | 173 ** threads can use SQLite as long as no two threads try to use the same |
122 ** database connection at the same time. | 174 ** database connection at the same time. |
123 ** | 175 ** |
124 ** Older versions of SQLite used an optional THREADSAFE macro. | 176 ** Older versions of SQLite used an optional THREADSAFE macro. |
125 ** We support that for legacy. | 177 ** We support that for legacy. |
126 */ | 178 */ |
127 #if !defined(SQLITE_THREADSAFE) | 179 #if !defined(SQLITE_THREADSAFE) |
128 #if defined(THREADSAFE) | 180 # if defined(THREADSAFE) |
129 # define SQLITE_THREADSAFE THREADSAFE | 181 # define SQLITE_THREADSAFE THREADSAFE |
130 #else | 182 # else |
131 # define SQLITE_THREADSAFE 1 /* IMP: R-07272-22309 */ | 183 # define SQLITE_THREADSAFE 1 /* IMP: R-07272-22309 */ |
132 #endif | 184 # endif |
133 #endif | 185 #endif |
134 | 186 |
135 /* | 187 /* |
| 188 ** Powersafe overwrite is on by default. But can be turned off using |
| 189 ** the -DSQLITE_POWERSAFE_OVERWRITE=0 command-line option. |
| 190 */ |
| 191 #ifndef SQLITE_POWERSAFE_OVERWRITE |
| 192 # define SQLITE_POWERSAFE_OVERWRITE 1 |
| 193 #endif |
| 194 |
| 195 /* |
136 ** The SQLITE_DEFAULT_MEMSTATUS macro must be defined as either 0 or 1. | 196 ** The SQLITE_DEFAULT_MEMSTATUS macro must be defined as either 0 or 1. |
137 ** It determines whether or not the features related to | 197 ** It determines whether or not the features related to |
138 ** SQLITE_CONFIG_MEMSTATUS are available by default or not. This value can | 198 ** SQLITE_CONFIG_MEMSTATUS are available by default or not. This value can |
139 ** be overridden at runtime using the sqlite3_config() API. | 199 ** be overridden at runtime using the sqlite3_config() API. |
140 */ | 200 */ |
141 #if !defined(SQLITE_DEFAULT_MEMSTATUS) | 201 #if !defined(SQLITE_DEFAULT_MEMSTATUS) |
142 # define SQLITE_DEFAULT_MEMSTATUS 1 | 202 # define SQLITE_DEFAULT_MEMSTATUS 1 |
143 #endif | 203 #endif |
144 | 204 |
145 /* | 205 /* |
146 ** Exactly one of the following macros must be defined in order to | 206 ** Exactly one of the following macros must be defined in order to |
147 ** specify which memory allocation subsystem to use. | 207 ** specify which memory allocation subsystem to use. |
148 ** | 208 ** |
149 ** SQLITE_SYSTEM_MALLOC // Use normal system malloc() | 209 ** SQLITE_SYSTEM_MALLOC // Use normal system malloc() |
| 210 ** SQLITE_WIN32_MALLOC // Use Win32 native heap API |
| 211 ** SQLITE_ZERO_MALLOC // Use a stub allocator that always fails |
150 ** SQLITE_MEMDEBUG // Debugging version of system malloc() | 212 ** SQLITE_MEMDEBUG // Debugging version of system malloc() |
151 ** | 213 ** |
152 ** (Historical note: There used to be several other options, but we've | 214 ** On Windows, if the SQLITE_WIN32_MALLOC_VALIDATE macro is defined and the |
153 ** pared it down to just these two.) | 215 ** assert() macro is enabled, each call into the Win32 native heap subsystem |
| 216 ** will cause HeapValidate to be called. If heap validation should fail, an |
| 217 ** assertion will be triggered. |
154 ** | 218 ** |
155 ** If none of the above are defined, then set SQLITE_SYSTEM_MALLOC as | 219 ** If none of the above are defined, then set SQLITE_SYSTEM_MALLOC as |
156 ** the default. | 220 ** the default. |
157 */ | 221 */ |
158 #if defined(SQLITE_SYSTEM_MALLOC)+defined(SQLITE_MEMDEBUG)>1 | 222 #if defined(SQLITE_SYSTEM_MALLOC) \ |
159 # error "At most one of the following compile-time configuration options\ | 223 + defined(SQLITE_WIN32_MALLOC) \ |
160 is allows: SQLITE_SYSTEM_MALLOC, SQLITE_MEMDEBUG" | 224 + defined(SQLITE_ZERO_MALLOC) \ |
| 225 + defined(SQLITE_MEMDEBUG)>1 |
| 226 # error "Two or more of the following compile-time configuration options\ |
| 227 are defined but at most one is allowed:\ |
| 228 SQLITE_SYSTEM_MALLOC, SQLITE_WIN32_MALLOC, SQLITE_MEMDEBUG,\ |
| 229 SQLITE_ZERO_MALLOC" |
161 #endif | 230 #endif |
162 #if defined(SQLITE_SYSTEM_MALLOC)+defined(SQLITE_MEMDEBUG)==0 | 231 #if defined(SQLITE_SYSTEM_MALLOC) \ |
| 232 + defined(SQLITE_WIN32_MALLOC) \ |
| 233 + defined(SQLITE_ZERO_MALLOC) \ |
| 234 + defined(SQLITE_MEMDEBUG)==0 |
163 # define SQLITE_SYSTEM_MALLOC 1 | 235 # define SQLITE_SYSTEM_MALLOC 1 |
164 #endif | 236 #endif |
165 | 237 |
166 /* | 238 /* |
167 ** If SQLITE_MALLOC_SOFT_LIMIT is not zero, then try to keep the | 239 ** If SQLITE_MALLOC_SOFT_LIMIT is not zero, then try to keep the |
168 ** sizes of memory allocations below this value where possible. | 240 ** sizes of memory allocations below this value where possible. |
169 */ | 241 */ |
170 #if !defined(SQLITE_MALLOC_SOFT_LIMIT) | 242 #if !defined(SQLITE_MALLOC_SOFT_LIMIT) |
171 # define SQLITE_MALLOC_SOFT_LIMIT 1024 | 243 # define SQLITE_MALLOC_SOFT_LIMIT 1024 |
172 #endif | 244 #endif |
173 | 245 |
174 /* | 246 /* |
175 ** We need to define _XOPEN_SOURCE as follows in order to enable | 247 ** We need to define _XOPEN_SOURCE as follows in order to enable |
176 ** recursive mutexes on most Unix systems. But Mac OS X is different. | 248 ** recursive mutexes on most Unix systems and fchmod() on OpenBSD. |
177 ** The _XOPEN_SOURCE define causes problems for Mac OS X we are told, | 249 ** But _XOPEN_SOURCE define causes problems for Mac OS X, so omit |
178 ** so it is omitted there. See ticket #2673. | 250 ** it. |
179 ** | |
180 ** Later we learn that _XOPEN_SOURCE is poorly or incorrectly | |
181 ** implemented on some systems. So we avoid defining it at all | |
182 ** if it is already defined or if it is unneeded because we are | |
183 ** not doing a threadsafe build. Ticket #2681. | |
184 ** | |
185 ** See also ticket #2741. | |
186 */ | 251 */ |
187 #if !defined(_XOPEN_SOURCE) && !defined(__DARWIN__) && !defined(__APPLE__) && SQ
LITE_THREADSAFE | 252 #if !defined(_XOPEN_SOURCE) && !defined(__DARWIN__) && !defined(__APPLE__) |
188 # define _XOPEN_SOURCE 500 /* Needed to enable pthread recursive mutexes */ | 253 # define _XOPEN_SOURCE 600 |
189 #endif | 254 #endif |
190 | 255 |
191 /* | 256 /* |
192 ** The TCL headers are only needed when compiling the TCL bindings. | 257 ** NDEBUG and SQLITE_DEBUG are opposites. It should always be true that |
193 */ | 258 ** defined(NDEBUG)==!defined(SQLITE_DEBUG). If this is not currently true, |
194 #if defined(SQLITE_TCL) || defined(TCLSH) | 259 ** make it true by defining or undefining NDEBUG. |
195 # include <tcl.h> | 260 ** |
196 #endif | 261 ** Setting NDEBUG makes the code smaller and faster by disabling the |
197 | 262 ** assert() statements in the code. So we want the default action |
198 /* | 263 ** to be for NDEBUG to be set and NDEBUG to be undefined only if SQLITE_DEBUG |
199 ** Many people are failing to set -DNDEBUG=1 when compiling SQLite. | 264 ** is set. Thus NDEBUG becomes an opt-in rather than an opt-out |
200 ** Setting NDEBUG makes the code smaller and run faster. So the following | |
201 ** lines are added to automatically set NDEBUG unless the -DSQLITE_DEBUG=1 | |
202 ** option is set. Thus NDEBUG becomes an opt-in rather than an opt-out | |
203 ** feature. | 265 ** feature. |
204 */ | 266 */ |
205 #if !defined(NDEBUG) && !defined(SQLITE_DEBUG) | 267 #if !defined(NDEBUG) && !defined(SQLITE_DEBUG) |
206 # define NDEBUG 1 | 268 # define NDEBUG 1 |
207 #endif | 269 #endif |
| 270 #if defined(NDEBUG) && defined(SQLITE_DEBUG) |
| 271 # undef NDEBUG |
| 272 #endif |
208 | 273 |
209 /* | 274 /* |
| 275 ** Enable SQLITE_ENABLE_EXPLAIN_COMMENTS if SQLITE_DEBUG is turned on. |
| 276 */ |
| 277 #if !defined(SQLITE_ENABLE_EXPLAIN_COMMENTS) && defined(SQLITE_DEBUG) |
| 278 # define SQLITE_ENABLE_EXPLAIN_COMMENTS 1 |
| 279 #endif |
| 280 |
| 281 /* |
210 ** The testcase() macro is used to aid in coverage testing. When | 282 ** The testcase() macro is used to aid in coverage testing. When |
211 ** doing coverage testing, the condition inside the argument to | 283 ** doing coverage testing, the condition inside the argument to |
212 ** testcase() must be evaluated both true and false in order to | 284 ** testcase() must be evaluated both true and false in order to |
213 ** get full branch coverage. The testcase() macro is inserted | 285 ** get full branch coverage. The testcase() macro is inserted |
214 ** to help ensure adequate test coverage in places where simple | 286 ** to help ensure adequate test coverage in places where simple |
215 ** condition/decision coverage is inadequate. For example, testcase() | 287 ** condition/decision coverage is inadequate. For example, testcase() |
216 ** can be used to make sure boundary values are tested. For | 288 ** can be used to make sure boundary values are tested. For |
217 ** bitmask tests, testcase() can be used to make sure each bit | 289 ** bitmask tests, testcase() can be used to make sure each bit |
218 ** is significant and used at least once. On switch statements | 290 ** is significant and used at least once. On switch statements |
219 ** where multiple cases go to the same block of code, testcase() | 291 ** where multiple cases go to the same block of code, testcase() |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
257 ** are intended to always be true or false, respectively. Such | 329 ** are intended to always be true or false, respectively. Such |
258 ** expressions could be omitted from the code completely. But they | 330 ** expressions could be omitted from the code completely. But they |
259 ** are included in a few cases in order to enhance the resilience | 331 ** are included in a few cases in order to enhance the resilience |
260 ** of SQLite to unexpected behavior - to make the code "self-healing" | 332 ** of SQLite to unexpected behavior - to make the code "self-healing" |
261 ** or "ductile" rather than being "brittle" and crashing at the first | 333 ** or "ductile" rather than being "brittle" and crashing at the first |
262 ** hint of unplanned behavior. | 334 ** hint of unplanned behavior. |
263 ** | 335 ** |
264 ** In other words, ALWAYS and NEVER are added for defensive code. | 336 ** In other words, ALWAYS and NEVER are added for defensive code. |
265 ** | 337 ** |
266 ** When doing coverage testing ALWAYS and NEVER are hard-coded to | 338 ** When doing coverage testing ALWAYS and NEVER are hard-coded to |
267 ** be true and false so that the unreachable code then specify will | 339 ** be true and false so that the unreachable code they specify will |
268 ** not be counted as untested code. | 340 ** not be counted as untested code. |
269 */ | 341 */ |
270 #if defined(SQLITE_COVERAGE_TEST) | 342 #if defined(SQLITE_COVERAGE_TEST) |
271 # define ALWAYS(X) (1) | 343 # define ALWAYS(X) (1) |
272 # define NEVER(X) (0) | 344 # define NEVER(X) (0) |
273 #elif !defined(NDEBUG) | 345 #elif !defined(NDEBUG) |
274 # define ALWAYS(X) ((X)?1:(assert(0),0)) | 346 # define ALWAYS(X) ((X)?1:(assert(0),0)) |
275 # define NEVER(X) ((X)?(assert(0),1):0) | 347 # define NEVER(X) ((X)?(assert(0),1):0) |
276 #else | 348 #else |
277 # define ALWAYS(X) (X) | 349 # define ALWAYS(X) (X) |
278 # define NEVER(X) (X) | 350 # define NEVER(X) (X) |
279 #endif | 351 #endif |
280 | 352 |
281 /* | 353 /* |
282 ** Return true (non-zero) if the input is a integer that is too large | 354 ** Return true (non-zero) if the input is an integer that is too large |
283 ** to fit in 32-bits. This macro is used inside of various testcase() | 355 ** to fit in 32-bits. This macro is used inside of various testcase() |
284 ** macros to verify that we have tested SQLite for large-file support. | 356 ** macros to verify that we have tested SQLite for large-file support. |
285 */ | 357 */ |
286 #define IS_BIG_INT(X) (((X)&~(i64)0xffffffff)!=0) | 358 #define IS_BIG_INT(X) (((X)&~(i64)0xffffffff)!=0) |
287 | 359 |
288 /* | 360 /* |
289 ** The macro unlikely() is a hint that surrounds a boolean | 361 ** The macro unlikely() is a hint that surrounds a boolean |
290 ** expression that is usually false. Macro likely() surrounds | 362 ** expression that is usually false. Macro likely() surrounds |
291 ** a boolean expression that is usually true. GCC is able to | 363 ** a boolean expression that is usually true. These hints could, |
292 ** use these hints to generate better code, sometimes. | 364 ** in theory, be used by the compiler to generate better code, but |
| 365 ** currently they are just comments for human readers. |
293 */ | 366 */ |
294 #if defined(__GNUC__) && 0 | 367 #define likely(X) (X) |
295 # define likely(X) __builtin_expect((X),1) | 368 #define unlikely(X) (X) |
296 # define unlikely(X) __builtin_expect((X),0) | |
297 #else | |
298 # define likely(X) !!(X) | |
299 # define unlikely(X) !!(X) | |
300 #endif | |
301 | 369 |
302 #include "sqlite3.h" | |
303 #include "hash.h" | 370 #include "hash.h" |
304 #include "parse.h" | 371 #include "parse.h" |
305 #include <stdio.h> | 372 #include <stdio.h> |
306 #include <stdlib.h> | 373 #include <stdlib.h> |
307 #include <string.h> | 374 #include <string.h> |
308 #include <assert.h> | 375 #include <assert.h> |
309 #include <stddef.h> | 376 #include <stddef.h> |
310 | 377 |
311 /* | 378 /* |
312 ** If compiling for a processor that lacks floating point support, | 379 ** If compiling for a processor that lacks floating point support, |
(...skipping 27 matching lines...) Expand all Loading... |
340 #endif | 407 #endif |
341 | 408 |
342 /* | 409 /* |
343 ** The "file format" number is an integer that is incremented whenever | 410 ** The "file format" number is an integer that is incremented whenever |
344 ** the VDBE-level file format changes. The following macros define the | 411 ** the VDBE-level file format changes. The following macros define the |
345 ** the default file format for new databases and the maximum file format | 412 ** the default file format for new databases and the maximum file format |
346 ** that the library can read. | 413 ** that the library can read. |
347 */ | 414 */ |
348 #define SQLITE_MAX_FILE_FORMAT 4 | 415 #define SQLITE_MAX_FILE_FORMAT 4 |
349 #ifndef SQLITE_DEFAULT_FILE_FORMAT | 416 #ifndef SQLITE_DEFAULT_FILE_FORMAT |
350 # define SQLITE_DEFAULT_FILE_FORMAT 1 | 417 # define SQLITE_DEFAULT_FILE_FORMAT 4 |
351 #endif | 418 #endif |
352 | 419 |
353 /* | 420 /* |
354 ** Determine whether triggers are recursive by default. This can be | 421 ** Determine whether triggers are recursive by default. This can be |
355 ** changed at run-time using a pragma. | 422 ** changed at run-time using a pragma. |
356 */ | 423 */ |
357 #ifndef SQLITE_DEFAULT_RECURSIVE_TRIGGERS | 424 #ifndef SQLITE_DEFAULT_RECURSIVE_TRIGGERS |
358 # define SQLITE_DEFAULT_RECURSIVE_TRIGGERS 0 | 425 # define SQLITE_DEFAULT_RECURSIVE_TRIGGERS 0 |
359 #endif | 426 #endif |
360 | 427 |
361 /* | 428 /* |
362 ** Provide a default value for SQLITE_TEMP_STORE in case it is not specified | 429 ** Provide a default value for SQLITE_TEMP_STORE in case it is not specified |
363 ** on the command-line | 430 ** on the command-line |
364 */ | 431 */ |
365 #ifndef SQLITE_TEMP_STORE | 432 #ifndef SQLITE_TEMP_STORE |
366 # define SQLITE_TEMP_STORE 1 | 433 # define SQLITE_TEMP_STORE 1 |
| 434 # define SQLITE_TEMP_STORE_xc 1 /* Exclude from ctime.c */ |
367 #endif | 435 #endif |
368 | 436 |
369 /* | 437 /* |
| 438 ** If no value has been provided for SQLITE_MAX_WORKER_THREADS, or if |
| 439 ** SQLITE_TEMP_STORE is set to 3 (never use temporary files), set it |
| 440 ** to zero. |
| 441 */ |
| 442 #if SQLITE_TEMP_STORE==3 || SQLITE_THREADSAFE==0 |
| 443 # undef SQLITE_MAX_WORKER_THREADS |
| 444 # define SQLITE_MAX_WORKER_THREADS 0 |
| 445 #endif |
| 446 #ifndef SQLITE_MAX_WORKER_THREADS |
| 447 # define SQLITE_MAX_WORKER_THREADS 8 |
| 448 #endif |
| 449 #ifndef SQLITE_DEFAULT_WORKER_THREADS |
| 450 # define SQLITE_DEFAULT_WORKER_THREADS 0 |
| 451 #endif |
| 452 #if SQLITE_DEFAULT_WORKER_THREADS>SQLITE_MAX_WORKER_THREADS |
| 453 # undef SQLITE_MAX_WORKER_THREADS |
| 454 # define SQLITE_MAX_WORKER_THREADS SQLITE_DEFAULT_WORKER_THREADS |
| 455 #endif |
| 456 |
| 457 |
| 458 /* |
370 ** GCC does not define the offsetof() macro so we'll have to do it | 459 ** GCC does not define the offsetof() macro so we'll have to do it |
371 ** ourselves. | 460 ** ourselves. |
372 */ | 461 */ |
373 #ifndef offsetof | 462 #ifndef offsetof |
374 #define offsetof(STRUCTURE,FIELD) ((int)((char*)&((STRUCTURE*)0)->FIELD)) | 463 #define offsetof(STRUCTURE,FIELD) ((int)((char*)&((STRUCTURE*)0)->FIELD)) |
375 #endif | 464 #endif |
376 | 465 |
377 /* | 466 /* |
| 467 ** Macros to compute minimum and maximum of two numbers. |
| 468 */ |
| 469 #define MIN(A,B) ((A)<(B)?(A):(B)) |
| 470 #define MAX(A,B) ((A)>(B)?(A):(B)) |
| 471 |
| 472 /* |
| 473 ** Swap two objects of type TYPE. |
| 474 */ |
| 475 #define SWAP(TYPE,A,B) {TYPE t=A; A=B; B=t;} |
| 476 |
| 477 /* |
378 ** Check to see if this machine uses EBCDIC. (Yes, believe it or | 478 ** Check to see if this machine uses EBCDIC. (Yes, believe it or |
379 ** not, there are still machines out there that use EBCDIC.) | 479 ** not, there are still machines out there that use EBCDIC.) |
380 */ | 480 */ |
381 #if 'A' == '\301' | 481 #if 'A' == '\301' |
382 # define SQLITE_EBCDIC 1 | 482 # define SQLITE_EBCDIC 1 |
383 #else | 483 #else |
384 # define SQLITE_ASCII 1 | 484 # define SQLITE_ASCII 1 |
385 #endif | 485 #endif |
386 | 486 |
387 /* | 487 /* |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
439 | 539 |
440 /* | 540 /* |
441 ** SQLITE_MAX_U32 is a u64 constant that is the maximum u64 value | 541 ** SQLITE_MAX_U32 is a u64 constant that is the maximum u64 value |
442 ** that can be stored in a u32 without loss of data. The value | 542 ** that can be stored in a u32 without loss of data. The value |
443 ** is 0x00000000ffffffff. But because of quirks of some compilers, we | 543 ** is 0x00000000ffffffff. But because of quirks of some compilers, we |
444 ** have to specify the value in the less intuitive manner shown: | 544 ** have to specify the value in the less intuitive manner shown: |
445 */ | 545 */ |
446 #define SQLITE_MAX_U32 ((((u64)1)<<32)-1) | 546 #define SQLITE_MAX_U32 ((((u64)1)<<32)-1) |
447 | 547 |
448 /* | 548 /* |
| 549 ** The datatype used to store estimates of the number of rows in a |
| 550 ** table or index. This is an unsigned integer type. For 99.9% of |
| 551 ** the world, a 32-bit integer is sufficient. But a 64-bit integer |
| 552 ** can be used at compile-time if desired. |
| 553 */ |
| 554 #ifdef SQLITE_64BIT_STATS |
| 555 typedef u64 tRowcnt; /* 64-bit only if requested at compile-time */ |
| 556 #else |
| 557 typedef u32 tRowcnt; /* 32-bit is the default */ |
| 558 #endif |
| 559 |
| 560 /* |
| 561 ** Estimated quantities used for query planning are stored as 16-bit |
| 562 ** logarithms. For quantity X, the value stored is 10*log2(X). This |
| 563 ** gives a possible range of values of approximately 1.0e986 to 1e-986. |
| 564 ** But the allowed values are "grainy". Not every value is representable. |
| 565 ** For example, quantities 16 and 17 are both represented by a LogEst |
| 566 ** of 40. However, since LogEst quantaties are suppose to be estimates, |
| 567 ** not exact values, this imprecision is not a problem. |
| 568 ** |
| 569 ** "LogEst" is short for "Logarithmic Estimate". |
| 570 ** |
| 571 ** Examples: |
| 572 ** 1 -> 0 20 -> 43 10000 -> 132 |
| 573 ** 2 -> 10 25 -> 46 25000 -> 146 |
| 574 ** 3 -> 16 100 -> 66 1000000 -> 199 |
| 575 ** 4 -> 20 1000 -> 99 1048576 -> 200 |
| 576 ** 10 -> 33 1024 -> 100 4294967296 -> 320 |
| 577 ** |
| 578 ** The LogEst can be negative to indicate fractional values. |
| 579 ** Examples: |
| 580 ** |
| 581 ** 0.5 -> -10 0.1 -> -33 0.0625 -> -40 |
| 582 */ |
| 583 typedef INT16_TYPE LogEst; |
| 584 |
| 585 /* |
449 ** Macros to determine whether the machine is big or little endian, | 586 ** Macros to determine whether the machine is big or little endian, |
450 ** evaluated at runtime. | 587 ** and whether or not that determination is run-time or compile-time. |
| 588 ** |
| 589 ** For best performance, an attempt is made to guess at the byte-order |
| 590 ** using C-preprocessor macros. If that is unsuccessful, or if |
| 591 ** -DSQLITE_RUNTIME_BYTEORDER=1 is set, then byte-order is determined |
| 592 ** at run-time. |
451 */ | 593 */ |
452 #ifdef SQLITE_AMALGAMATION | 594 #ifdef SQLITE_AMALGAMATION |
453 const int sqlite3one = 1; | 595 const int sqlite3one = 1; |
454 #else | 596 #else |
455 extern const int sqlite3one; | 597 extern const int sqlite3one; |
456 #endif | 598 #endif |
457 #if defined(i386) || defined(__i386__) || defined(_M_IX86)\ | 599 #if (defined(i386) || defined(__i386__) || defined(_M_IX86) || \ |
458 || defined(__x86_64) || defined(__x86_64__) | 600 defined(__x86_64) || defined(__x86_64__) || defined(_M_X64) || \ |
| 601 defined(_M_AMD64) || defined(_M_ARM) || defined(__x86) || \ |
| 602 defined(__arm__)) && !defined(SQLITE_RUNTIME_BYTEORDER) |
| 603 # define SQLITE_BYTEORDER 1234 |
459 # define SQLITE_BIGENDIAN 0 | 604 # define SQLITE_BIGENDIAN 0 |
460 # define SQLITE_LITTLEENDIAN 1 | 605 # define SQLITE_LITTLEENDIAN 1 |
461 # define SQLITE_UTF16NATIVE SQLITE_UTF16LE | 606 # define SQLITE_UTF16NATIVE SQLITE_UTF16LE |
462 #else | 607 #endif |
| 608 #if (defined(sparc) || defined(__ppc__)) \ |
| 609 && !defined(SQLITE_RUNTIME_BYTEORDER) |
| 610 # define SQLITE_BYTEORDER 4321 |
| 611 # define SQLITE_BIGENDIAN 1 |
| 612 # define SQLITE_LITTLEENDIAN 0 |
| 613 # define SQLITE_UTF16NATIVE SQLITE_UTF16BE |
| 614 #endif |
| 615 #if !defined(SQLITE_BYTEORDER) |
| 616 # define SQLITE_BYTEORDER 0 /* 0 means "unknown at compile-time" */ |
463 # define SQLITE_BIGENDIAN (*(char *)(&sqlite3one)==0) | 617 # define SQLITE_BIGENDIAN (*(char *)(&sqlite3one)==0) |
464 # define SQLITE_LITTLEENDIAN (*(char *)(&sqlite3one)==1) | 618 # define SQLITE_LITTLEENDIAN (*(char *)(&sqlite3one)==1) |
465 # define SQLITE_UTF16NATIVE (SQLITE_BIGENDIAN?SQLITE_UTF16BE:SQLITE_UTF16LE) | 619 # define SQLITE_UTF16NATIVE (SQLITE_BIGENDIAN?SQLITE_UTF16BE:SQLITE_UTF16LE) |
466 #endif | 620 #endif |
467 | 621 |
468 /* | 622 /* |
469 ** Constants for the largest and smallest possible 64-bit signed integers. | 623 ** Constants for the largest and smallest possible 64-bit signed integers. |
470 ** These macros are designed to work correctly on both 32-bit and 64-bit | 624 ** These macros are designed to work correctly on both 32-bit and 64-bit |
471 ** compilers. | 625 ** compilers. |
472 */ | 626 */ |
473 #define LARGEST_INT64 (0xffffffff|(((i64)0x7fffffff)<<32)) | 627 #define LARGEST_INT64 (0xffffffff|(((i64)0x7fffffff)<<32)) |
474 #define SMALLEST_INT64 (((i64)-1) - LARGEST_INT64) | 628 #define SMALLEST_INT64 (((i64)-1) - LARGEST_INT64) |
475 | 629 |
476 /* | 630 /* |
477 ** Round up a number to the next larger multiple of 8. This is used | 631 ** Round up a number to the next larger multiple of 8. This is used |
478 ** to force 8-byte alignment on 64-bit architectures. | 632 ** to force 8-byte alignment on 64-bit architectures. |
479 */ | 633 */ |
480 #define ROUND8(x) (((x)+7)&~7) | 634 #define ROUND8(x) (((x)+7)&~7) |
481 | 635 |
482 /* | 636 /* |
483 ** Round down to the nearest multiple of 8 | 637 ** Round down to the nearest multiple of 8 |
484 */ | 638 */ |
485 #define ROUNDDOWN8(x) ((x)&~7) | 639 #define ROUNDDOWN8(x) ((x)&~7) |
486 | 640 |
487 /* | 641 /* |
488 ** Assert that the pointer X is aligned to an 8-byte boundary. This | 642 ** Assert that the pointer X is aligned to an 8-byte boundary. This |
489 ** macro is used only within assert() to verify that the code gets | 643 ** macro is used only within assert() to verify that the code gets |
490 ** all alignment restrictions correct. | 644 ** all alignment restrictions correct. |
491 ** | 645 ** |
492 ** Except, if SQLITE_4_BYTE_ALIGNED_MALLOC is defined, then the | 646 ** Except, if SQLITE_4_BYTE_ALIGNED_MALLOC is defined, then the |
493 ** underlying malloc() implemention might return us 4-byte aligned | 647 ** underlying malloc() implementation might return us 4-byte aligned |
494 ** pointers. In that case, only verify 4-byte alignment. | 648 ** pointers. In that case, only verify 4-byte alignment. |
495 */ | 649 */ |
496 #ifdef SQLITE_4_BYTE_ALIGNED_MALLOC | 650 #ifdef SQLITE_4_BYTE_ALIGNED_MALLOC |
497 # define EIGHT_BYTE_ALIGNMENT(X) ((((char*)(X) - (char*)0)&3)==0) | 651 # define EIGHT_BYTE_ALIGNMENT(X) ((((char*)(X) - (char*)0)&3)==0) |
498 #else | 652 #else |
499 # define EIGHT_BYTE_ALIGNMENT(X) ((((char*)(X) - (char*)0)&7)==0) | 653 # define EIGHT_BYTE_ALIGNMENT(X) ((((char*)(X) - (char*)0)&7)==0) |
500 #endif | 654 #endif |
501 | 655 |
| 656 /* |
| 657 ** Disable MMAP on platforms where it is known to not work |
| 658 */ |
| 659 #if defined(__OpenBSD__) || defined(__QNXNTO__) |
| 660 # undef SQLITE_MAX_MMAP_SIZE |
| 661 # define SQLITE_MAX_MMAP_SIZE 0 |
| 662 #endif |
| 663 |
| 664 /* |
| 665 ** Default maximum size of memory used by memory-mapped I/O in the VFS |
| 666 */ |
| 667 #ifdef __APPLE__ |
| 668 # include <TargetConditionals.h> |
| 669 # if TARGET_OS_IPHONE |
| 670 # undef SQLITE_MAX_MMAP_SIZE |
| 671 # define SQLITE_MAX_MMAP_SIZE 0 |
| 672 # endif |
| 673 #endif |
| 674 #ifndef SQLITE_MAX_MMAP_SIZE |
| 675 # if defined(__linux__) \ |
| 676 || defined(_WIN32) \ |
| 677 || (defined(__APPLE__) && defined(__MACH__)) \ |
| 678 || defined(__sun) |
| 679 # define SQLITE_MAX_MMAP_SIZE 0x7fff0000 /* 2147418112 */ |
| 680 # else |
| 681 # define SQLITE_MAX_MMAP_SIZE 0 |
| 682 # endif |
| 683 # define SQLITE_MAX_MMAP_SIZE_xc 1 /* exclude from ctime.c */ |
| 684 #endif |
| 685 |
| 686 /* |
| 687 ** The default MMAP_SIZE is zero on all platforms. Or, even if a larger |
| 688 ** default MMAP_SIZE is specified at compile-time, make sure that it does |
| 689 ** not exceed the maximum mmap size. |
| 690 */ |
| 691 #ifndef SQLITE_DEFAULT_MMAP_SIZE |
| 692 # define SQLITE_DEFAULT_MMAP_SIZE 0 |
| 693 # define SQLITE_DEFAULT_MMAP_SIZE_xc 1 /* Exclude from ctime.c */ |
| 694 #endif |
| 695 #if SQLITE_DEFAULT_MMAP_SIZE>SQLITE_MAX_MMAP_SIZE |
| 696 # undef SQLITE_DEFAULT_MMAP_SIZE |
| 697 # define SQLITE_DEFAULT_MMAP_SIZE SQLITE_MAX_MMAP_SIZE |
| 698 #endif |
| 699 |
| 700 /* |
| 701 ** Only one of SQLITE_ENABLE_STAT3 or SQLITE_ENABLE_STAT4 can be defined. |
| 702 ** Priority is given to SQLITE_ENABLE_STAT4. If either are defined, also |
| 703 ** define SQLITE_ENABLE_STAT3_OR_STAT4 |
| 704 */ |
| 705 #ifdef SQLITE_ENABLE_STAT4 |
| 706 # undef SQLITE_ENABLE_STAT3 |
| 707 # define SQLITE_ENABLE_STAT3_OR_STAT4 1 |
| 708 #elif SQLITE_ENABLE_STAT3 |
| 709 # define SQLITE_ENABLE_STAT3_OR_STAT4 1 |
| 710 #elif SQLITE_ENABLE_STAT3_OR_STAT4 |
| 711 # undef SQLITE_ENABLE_STAT3_OR_STAT4 |
| 712 #endif |
| 713 |
| 714 /* |
| 715 ** SELECTTRACE_ENABLED will be either 1 or 0 depending on whether or not |
| 716 ** the Select query generator tracing logic is turned on. |
| 717 */ |
| 718 #if defined(SQLITE_DEBUG) || defined(SQLITE_ENABLE_SELECTTRACE) |
| 719 # define SELECTTRACE_ENABLED 1 |
| 720 #else |
| 721 # define SELECTTRACE_ENABLED 0 |
| 722 #endif |
502 | 723 |
503 /* | 724 /* |
504 ** An instance of the following structure is used to store the busy-handler | 725 ** An instance of the following structure is used to store the busy-handler |
505 ** callback for a given sqlite handle. | 726 ** callback for a given sqlite handle. |
506 ** | 727 ** |
507 ** The sqlite.busyHandler member of the sqlite struct contains the busy | 728 ** The sqlite.busyHandler member of the sqlite struct contains the busy |
508 ** callback for the database handle. Each pager opened via the sqlite | 729 ** callback for the database handle. Each pager opened via the sqlite |
509 ** handle is passed a pointer to sqlite.busyHandler. The busy-handler | 730 ** handle is passed a pointer to sqlite.busyHandler. The busy-handler |
510 ** callback is currently invoked only from within pager.c. | 731 ** callback is currently invoked only from within pager.c. |
511 */ | 732 */ |
(...skipping 22 matching lines...) Expand all Loading... |
534 */ | 755 */ |
535 #define SCHEMA_TABLE(x) ((!OMIT_TEMPDB)&&(x==1)?TEMP_MASTER_NAME:MASTER_NAME) | 756 #define SCHEMA_TABLE(x) ((!OMIT_TEMPDB)&&(x==1)?TEMP_MASTER_NAME:MASTER_NAME) |
536 | 757 |
537 /* | 758 /* |
538 ** A convenience macro that returns the number of elements in | 759 ** A convenience macro that returns the number of elements in |
539 ** an array. | 760 ** an array. |
540 */ | 761 */ |
541 #define ArraySize(X) ((int)(sizeof(X)/sizeof(X[0]))) | 762 #define ArraySize(X) ((int)(sizeof(X)/sizeof(X[0]))) |
542 | 763 |
543 /* | 764 /* |
| 765 ** Determine if the argument is a power of two |
| 766 */ |
| 767 #define IsPowerOfTwo(X) (((X)&((X)-1))==0) |
| 768 |
| 769 /* |
544 ** The following value as a destructor means to use sqlite3DbFree(). | 770 ** The following value as a destructor means to use sqlite3DbFree(). |
545 ** This is an internal extension to SQLITE_STATIC and SQLITE_TRANSIENT. | 771 ** The sqlite3DbFree() routine requires two parameters instead of the |
| 772 ** one parameter that destructors normally want. So we have to introduce |
| 773 ** this magic value that the code knows to handle differently. Any |
| 774 ** pointer will work here as long as it is distinct from SQLITE_STATIC |
| 775 ** and SQLITE_TRANSIENT. |
546 */ | 776 */ |
547 #define SQLITE_DYNAMIC ((sqlite3_destructor_type)sqlite3DbFree) | 777 #define SQLITE_DYNAMIC ((sqlite3_destructor_type)sqlite3MallocSize) |
548 | 778 |
549 /* | 779 /* |
550 ** When SQLITE_OMIT_WSD is defined, it means that the target platform does | 780 ** When SQLITE_OMIT_WSD is defined, it means that the target platform does |
551 ** not support Writable Static Data (WSD) such as global and static variables. | 781 ** not support Writable Static Data (WSD) such as global and static variables. |
552 ** All variables must either be on the stack or dynamically allocated from | 782 ** All variables must either be on the stack or dynamically allocated from |
553 ** the heap. When WSD is unsupported, the variable declarations scattered | 783 ** the heap. When WSD is unsupported, the variable declarations scattered |
554 ** throughout the SQLite code must become constants instead. The SQLITE_WSD | 784 ** throughout the SQLite code must become constants instead. The SQLITE_WSD |
555 ** macro is used for this purpose. And instead of referencing the variable | 785 ** macro is used for this purpose. And instead of referencing the variable |
556 ** directly, we use its constant as a key to lookup the run-time allocated | 786 ** directly, we use its constant as a key to lookup the run-time allocated |
557 ** buffer that holds real variable. The constant is also the initializer | 787 ** buffer that holds real variable. The constant is also the initializer |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
612 typedef struct IdList IdList; | 842 typedef struct IdList IdList; |
613 typedef struct Index Index; | 843 typedef struct Index Index; |
614 typedef struct IndexSample IndexSample; | 844 typedef struct IndexSample IndexSample; |
615 typedef struct KeyClass KeyClass; | 845 typedef struct KeyClass KeyClass; |
616 typedef struct KeyInfo KeyInfo; | 846 typedef struct KeyInfo KeyInfo; |
617 typedef struct Lookaside Lookaside; | 847 typedef struct Lookaside Lookaside; |
618 typedef struct LookasideSlot LookasideSlot; | 848 typedef struct LookasideSlot LookasideSlot; |
619 typedef struct Module Module; | 849 typedef struct Module Module; |
620 typedef struct NameContext NameContext; | 850 typedef struct NameContext NameContext; |
621 typedef struct Parse Parse; | 851 typedef struct Parse Parse; |
| 852 typedef struct PrintfArguments PrintfArguments; |
622 typedef struct RowSet RowSet; | 853 typedef struct RowSet RowSet; |
623 typedef struct Savepoint Savepoint; | 854 typedef struct Savepoint Savepoint; |
624 typedef struct Select Select; | 855 typedef struct Select Select; |
| 856 typedef struct SQLiteThread SQLiteThread; |
| 857 typedef struct SelectDest SelectDest; |
625 typedef struct SrcList SrcList; | 858 typedef struct SrcList SrcList; |
626 typedef struct StrAccum StrAccum; | 859 typedef struct StrAccum StrAccum; |
627 typedef struct Table Table; | 860 typedef struct Table Table; |
628 typedef struct TableLock TableLock; | 861 typedef struct TableLock TableLock; |
629 typedef struct Token Token; | 862 typedef struct Token Token; |
| 863 typedef struct TreeView TreeView; |
630 typedef struct Trigger Trigger; | 864 typedef struct Trigger Trigger; |
631 typedef struct TriggerPrg TriggerPrg; | 865 typedef struct TriggerPrg TriggerPrg; |
632 typedef struct TriggerStep TriggerStep; | 866 typedef struct TriggerStep TriggerStep; |
633 typedef struct UnpackedRecord UnpackedRecord; | 867 typedef struct UnpackedRecord UnpackedRecord; |
634 typedef struct VTable VTable; | 868 typedef struct VTable VTable; |
| 869 typedef struct VtabCtx VtabCtx; |
635 typedef struct Walker Walker; | 870 typedef struct Walker Walker; |
636 typedef struct WherePlan WherePlan; | |
637 typedef struct WhereInfo WhereInfo; | 871 typedef struct WhereInfo WhereInfo; |
638 typedef struct WhereLevel WhereLevel; | 872 typedef struct With With; |
639 | 873 |
640 /* | 874 /* |
641 ** Defer sourcing vdbe.h and btree.h until after the "u8" and | 875 ** Defer sourcing vdbe.h and btree.h until after the "u8" and |
642 ** "BusyHandler" typedefs. vdbe.h also requires a few of the opaque | 876 ** "BusyHandler" typedefs. vdbe.h also requires a few of the opaque |
643 ** pointer types (i.e. FuncDef) defined above. | 877 ** pointer types (i.e. FuncDef) defined above. |
644 */ | 878 */ |
645 #include "btree.h" | 879 #include "btree.h" |
646 #include "vdbe.h" | 880 #include "vdbe.h" |
647 #include "pager.h" | 881 #include "pager.h" |
648 #include "pcache.h" | 882 #include "pcache.h" |
649 | 883 |
650 #include "os.h" | 884 #include "os.h" |
651 #include "mutex.h" | 885 #include "mutex.h" |
652 | 886 |
653 | 887 |
654 /* | 888 /* |
655 ** Each database file to be accessed by the system is an instance | 889 ** Each database file to be accessed by the system is an instance |
656 ** of the following structure. There are normally two of these structures | 890 ** of the following structure. There are normally two of these structures |
657 ** in the sqlite.aDb[] array. aDb[0] is the main database file and | 891 ** in the sqlite.aDb[] array. aDb[0] is the main database file and |
658 ** aDb[1] is the database file used to hold temporary tables. Additional | 892 ** aDb[1] is the database file used to hold temporary tables. Additional |
659 ** databases may be attached. | 893 ** databases may be attached. |
660 */ | 894 */ |
661 struct Db { | 895 struct Db { |
662 char *zName; /* Name of this database */ | 896 char *zName; /* Name of this database */ |
663 Btree *pBt; /* The B*Tree structure for this database file */ | 897 Btree *pBt; /* The B*Tree structure for this database file */ |
664 u8 inTrans; /* 0: not writable. 1: Transaction. 2: Checkpoint */ | |
665 u8 safety_level; /* How aggressive at syncing data to disk */ | 898 u8 safety_level; /* How aggressive at syncing data to disk */ |
666 Schema *pSchema; /* Pointer to database schema (possibly shared) */ | 899 Schema *pSchema; /* Pointer to database schema (possibly shared) */ |
667 }; | 900 }; |
668 | 901 |
669 /* | 902 /* |
670 ** An instance of the following structure stores a database schema. | 903 ** An instance of the following structure stores a database schema. |
671 ** | 904 ** |
672 ** Most Schema objects are associated with a Btree. The exception is | 905 ** Most Schema objects are associated with a Btree. The exception is |
673 ** the Schema for the TEMP databaes (sqlite3.aDb[1]) which is free-standing. | 906 ** the Schema for the TEMP databaes (sqlite3.aDb[1]) which is free-standing. |
674 ** In shared cache mode, a single Schema object can be shared by multiple | 907 ** In shared cache mode, a single Schema object can be shared by multiple |
675 ** Btrees that refer to the same underlying BtShared object. | 908 ** Btrees that refer to the same underlying BtShared object. |
676 ** | 909 ** |
677 ** Schema objects are automatically deallocated when the last Btree that | 910 ** Schema objects are automatically deallocated when the last Btree that |
678 ** references them is destroyed. The TEMP Schema is manually freed by | 911 ** references them is destroyed. The TEMP Schema is manually freed by |
679 ** sqlite3_close(). | 912 ** sqlite3_close(). |
680 * | 913 * |
681 ** A thread must be holding a mutex on the corresponding Btree in order | 914 ** A thread must be holding a mutex on the corresponding Btree in order |
682 ** to access Schema content. This implies that the thread must also be | 915 ** to access Schema content. This implies that the thread must also be |
683 ** holding a mutex on the sqlite3 connection pointer that owns the Btree. | 916 ** holding a mutex on the sqlite3 connection pointer that owns the Btree. |
684 ** For a TEMP Schema, on the connection mutex is required. | 917 ** For a TEMP Schema, only the connection mutex is required. |
685 */ | 918 */ |
686 struct Schema { | 919 struct Schema { |
687 int schema_cookie; /* Database schema version number for this file */ | 920 int schema_cookie; /* Database schema version number for this file */ |
688 int iGeneration; /* Generation counter. Incremented with each change */ | 921 int iGeneration; /* Generation counter. Incremented with each change */ |
689 Hash tblHash; /* All tables indexed by name */ | 922 Hash tblHash; /* All tables indexed by name */ |
690 Hash idxHash; /* All (named) indices indexed by name */ | 923 Hash idxHash; /* All (named) indices indexed by name */ |
691 Hash trigHash; /* All triggers indexed by name */ | 924 Hash trigHash; /* All triggers indexed by name */ |
692 Hash fkeyHash; /* All foreign keys by referenced table name */ | 925 Hash fkeyHash; /* All foreign keys by referenced table name */ |
693 Table *pSeqTab; /* The sqlite_sequence table used by AUTOINCREMENT */ | 926 Table *pSeqTab; /* The sqlite_sequence table used by AUTOINCREMENT */ |
694 u8 file_format; /* Schema format version for this file */ | 927 u8 file_format; /* Schema format version for this file */ |
695 u8 enc; /* Text encoding used by this database */ | 928 u8 enc; /* Text encoding used by this database */ |
696 u16 flags; /* Flags associated with this schema */ | 929 u16 schemaFlags; /* Flags associated with this schema */ |
697 int cache_size; /* Number of pages to use in the cache */ | 930 int cache_size; /* Number of pages to use in the cache */ |
698 }; | 931 }; |
699 | 932 |
700 /* | 933 /* |
701 ** These macros can be used to test, set, or clear bits in the | 934 ** These macros can be used to test, set, or clear bits in the |
702 ** Db.pSchema->flags field. | 935 ** Db.pSchema->flags field. |
703 */ | 936 */ |
704 #define DbHasProperty(D,I,P) (((D)->aDb[I].pSchema->flags&(P))==(P)) | 937 #define DbHasProperty(D,I,P) (((D)->aDb[I].pSchema->schemaFlags&(P))==(P)) |
705 #define DbHasAnyProperty(D,I,P) (((D)->aDb[I].pSchema->flags&(P))!=0) | 938 #define DbHasAnyProperty(D,I,P) (((D)->aDb[I].pSchema->schemaFlags&(P))!=0) |
706 #define DbSetProperty(D,I,P) (D)->aDb[I].pSchema->flags|=(P) | 939 #define DbSetProperty(D,I,P) (D)->aDb[I].pSchema->schemaFlags|=(P) |
707 #define DbClearProperty(D,I,P) (D)->aDb[I].pSchema->flags&=~(P) | 940 #define DbClearProperty(D,I,P) (D)->aDb[I].pSchema->schemaFlags&=~(P) |
708 | 941 |
709 /* | 942 /* |
710 ** Allowed values for the DB.pSchema->flags field. | 943 ** Allowed values for the DB.pSchema->flags field. |
711 ** | 944 ** |
712 ** The DB_SchemaLoaded flag is set after the database schema has been | 945 ** The DB_SchemaLoaded flag is set after the database schema has been |
713 ** read into internal hash tables. | 946 ** read into internal hash tables. |
714 ** | 947 ** |
715 ** DB_UnresetViews means that one or more views have column names that | 948 ** DB_UnresetViews means that one or more views have column names that |
716 ** have been filled out. If the schema changes, these column names might | 949 ** have been filled out. If the schema changes, these column names might |
717 ** changes and so the view will need to be reset. | 950 ** changes and so the view will need to be reset. |
718 */ | 951 */ |
719 #define DB_SchemaLoaded 0x0001 /* The schema has been loaded */ | 952 #define DB_SchemaLoaded 0x0001 /* The schema has been loaded */ |
720 #define DB_UnresetViews 0x0002 /* Some views have defined column names */ | 953 #define DB_UnresetViews 0x0002 /* Some views have defined column names */ |
721 #define DB_Empty 0x0004 /* The file is empty (length 0 bytes) */ | 954 #define DB_Empty 0x0004 /* The file is empty (length 0 bytes) */ |
722 | 955 |
723 /* | 956 /* |
724 ** The number of different kinds of things that can be limited | 957 ** The number of different kinds of things that can be limited |
725 ** using the sqlite3_limit() interface. | 958 ** using the sqlite3_limit() interface. |
726 */ | 959 */ |
727 #define SQLITE_N_LIMIT (SQLITE_LIMIT_TRIGGER_DEPTH+1) | 960 #define SQLITE_N_LIMIT (SQLITE_LIMIT_WORKER_THREADS+1) |
728 | 961 |
729 /* | 962 /* |
730 ** Lookaside malloc is a set of fixed-size buffers that can be used | 963 ** Lookaside malloc is a set of fixed-size buffers that can be used |
731 ** to satisfy small transient memory allocation requests for objects | 964 ** to satisfy small transient memory allocation requests for objects |
732 ** associated with a particular database connection. The use of | 965 ** associated with a particular database connection. The use of |
733 ** lookaside malloc provides a significant performance enhancement | 966 ** lookaside malloc provides a significant performance enhancement |
734 ** (approx 10%) by avoiding numerous malloc/free requests while parsing | 967 ** (approx 10%) by avoiding numerous malloc/free requests while parsing |
735 ** SQL statements. | 968 ** SQL statements. |
736 ** | 969 ** |
737 ** The Lookaside structure holds configuration information about the | 970 ** The Lookaside structure holds configuration information about the |
(...skipping 26 matching lines...) Expand all Loading... |
764 /* | 997 /* |
765 ** A hash table for function definitions. | 998 ** A hash table for function definitions. |
766 ** | 999 ** |
767 ** Hash each FuncDef structure into one of the FuncDefHash.a[] slots. | 1000 ** Hash each FuncDef structure into one of the FuncDefHash.a[] slots. |
768 ** Collisions are on the FuncDef.pHash chain. | 1001 ** Collisions are on the FuncDef.pHash chain. |
769 */ | 1002 */ |
770 struct FuncDefHash { | 1003 struct FuncDefHash { |
771 FuncDef *a[23]; /* Hash table for functions */ | 1004 FuncDef *a[23]; /* Hash table for functions */ |
772 }; | 1005 }; |
773 | 1006 |
| 1007 #ifdef SQLITE_USER_AUTHENTICATION |
| 1008 /* |
| 1009 ** Information held in the "sqlite3" database connection object and used |
| 1010 ** to manage user authentication. |
| 1011 */ |
| 1012 typedef struct sqlite3_userauth sqlite3_userauth; |
| 1013 struct sqlite3_userauth { |
| 1014 u8 authLevel; /* Current authentication level */ |
| 1015 int nAuthPW; /* Size of the zAuthPW in bytes */ |
| 1016 char *zAuthPW; /* Password used to authenticate */ |
| 1017 char *zAuthUser; /* User name used to authenticate */ |
| 1018 }; |
| 1019 |
| 1020 /* Allowed values for sqlite3_userauth.authLevel */ |
| 1021 #define UAUTH_Unknown 0 /* Authentication not yet checked */ |
| 1022 #define UAUTH_Fail 1 /* User authentication failed */ |
| 1023 #define UAUTH_User 2 /* Authenticated as a normal user */ |
| 1024 #define UAUTH_Admin 3 /* Authenticated as an administrator */ |
| 1025 |
| 1026 /* Functions used only by user authorization logic */ |
| 1027 int sqlite3UserAuthTable(const char*); |
| 1028 int sqlite3UserAuthCheckLogin(sqlite3*,const char*,u8*); |
| 1029 void sqlite3UserAuthInit(sqlite3*); |
| 1030 void sqlite3CryptFunc(sqlite3_context*,int,sqlite3_value**); |
| 1031 |
| 1032 #endif /* SQLITE_USER_AUTHENTICATION */ |
| 1033 |
| 1034 /* |
| 1035 ** typedef for the authorization callback function. |
| 1036 */ |
| 1037 #ifdef SQLITE_USER_AUTHENTICATION |
| 1038 typedef int (*sqlite3_xauth)(void*,int,const char*,const char*,const char*, |
| 1039 const char*, const char*); |
| 1040 #else |
| 1041 typedef int (*sqlite3_xauth)(void*,int,const char*,const char*,const char*, |
| 1042 const char*); |
| 1043 #endif |
| 1044 |
| 1045 |
774 /* | 1046 /* |
775 ** Each database connection is an instance of the following structure. | 1047 ** Each database connection is an instance of the following structure. |
776 ** | |
777 ** The sqlite.lastRowid records the last insert rowid generated by an | |
778 ** insert statement. Inserts on views do not affect its value. Each | |
779 ** trigger has its own context, so that lastRowid can be updated inside | |
780 ** triggers as usual. The previous value will be restored once the trigger | |
781 ** exits. Upon entering a before or instead of trigger, lastRowid is no | |
782 ** longer (since after version 2.8.12) reset to -1. | |
783 ** | |
784 ** The sqlite.nChange does not count changes within triggers and keeps no | |
785 ** context. It is reset at start of sqlite3_exec. | |
786 ** The sqlite.lsChange represents the number of changes made by the last | |
787 ** insert, update, or delete statement. It remains constant throughout the | |
788 ** length of a statement and is then updated by OP_SetCounts. It keeps a | |
789 ** context stack just like lastRowid so that the count of changes | |
790 ** within a trigger is not seen outside the trigger. Changes to views do not | |
791 ** affect the value of lsChange. | |
792 ** The sqlite.csChange keeps track of the number of current changes (since | |
793 ** the last statement) and is used to update sqlite_lsChange. | |
794 ** | |
795 ** The member variables sqlite.errCode, sqlite.zErrMsg and sqlite.zErrMsg16 | |
796 ** store the most recent error code and, if applicable, string. The | |
797 ** internal function sqlite3Error() is used to set these variables | |
798 ** consistently. | |
799 */ | 1048 */ |
800 struct sqlite3 { | 1049 struct sqlite3 { |
801 sqlite3_vfs *pVfs; /* OS Interface */ | 1050 sqlite3_vfs *pVfs; /* OS Interface */ |
| 1051 struct Vdbe *pVdbe; /* List of active virtual machines */ |
| 1052 CollSeq *pDfltColl; /* The default collating sequence (BINARY) */ |
| 1053 sqlite3_mutex *mutex; /* Connection mutex */ |
| 1054 Db *aDb; /* All backends */ |
802 int nDb; /* Number of backends currently in use */ | 1055 int nDb; /* Number of backends currently in use */ |
803 Db *aDb; /* All backends */ | |
804 int flags; /* Miscellaneous flags. See below */ | 1056 int flags; /* Miscellaneous flags. See below */ |
805 int openFlags; /* Flags passed to sqlite3_vfs.xOpen() */ | 1057 i64 lastRowid; /* ROWID of most recent insert (see above) */ |
| 1058 i64 szMmap; /* Default mmap_size setting */ |
| 1059 unsigned int openFlags; /* Flags passed to sqlite3_vfs.xOpen() */ |
806 int errCode; /* Most recent error code (SQLITE_*) */ | 1060 int errCode; /* Most recent error code (SQLITE_*) */ |
807 int errMask; /* & result codes with this before returning */ | 1061 int errMask; /* & result codes with this before returning */ |
| 1062 u16 dbOptFlags; /* Flags to enable/disable optimizations */ |
808 u8 autoCommit; /* The auto-commit flag. */ | 1063 u8 autoCommit; /* The auto-commit flag. */ |
809 u8 temp_store; /* 1: file 2: memory 0: default */ | 1064 u8 temp_store; /* 1: file 2: memory 0: default */ |
810 u8 mallocFailed; /* True if we have seen a malloc failure */ | 1065 u8 mallocFailed; /* True if we have seen a malloc failure */ |
811 u8 dfltLockMode; /* Default locking-mode for attached dbs */ | 1066 u8 dfltLockMode; /* Default locking-mode for attached dbs */ |
812 signed char nextAutovac; /* Autovac setting after VACUUM if >=0 */ | 1067 signed char nextAutovac; /* Autovac setting after VACUUM if >=0 */ |
813 u8 suppressErr; /* Do not issue error messages if true */ | 1068 u8 suppressErr; /* Do not issue error messages if true */ |
| 1069 u8 vtabOnConflict; /* Value to return for s3_vtab_on_conflict() */ |
| 1070 u8 isTransactionSavepoint; /* True if the outermost savepoint is a TS */ |
814 int nextPagesize; /* Pagesize after VACUUM if >0 */ | 1071 int nextPagesize; /* Pagesize after VACUUM if >0 */ |
815 int nTable; /* Number of tables in the database */ | |
816 CollSeq *pDfltColl; /* The default collating sequence (BINARY) */ | |
817 i64 lastRowid; /* ROWID of most recent insert (see above) */ | |
818 u32 magic; /* Magic number for detect library misuse */ | 1072 u32 magic; /* Magic number for detect library misuse */ |
819 int nChange; /* Value returned by sqlite3_changes() */ | 1073 int nChange; /* Value returned by sqlite3_changes() */ |
820 int nTotalChange; /* Value returned by sqlite3_total_changes() */ | 1074 int nTotalChange; /* Value returned by sqlite3_total_changes() */ |
821 sqlite3_mutex *mutex; /* Connection mutex */ | |
822 int aLimit[SQLITE_N_LIMIT]; /* Limits */ | 1075 int aLimit[SQLITE_N_LIMIT]; /* Limits */ |
| 1076 int nMaxSorterMmap; /* Maximum size of regions mapped by sorter */ |
823 struct sqlite3InitInfo { /* Information used during initialization */ | 1077 struct sqlite3InitInfo { /* Information used during initialization */ |
824 int iDb; /* When back is being initialized */ | |
825 int newTnum; /* Rootpage of table being initialized */ | 1078 int newTnum; /* Rootpage of table being initialized */ |
| 1079 u8 iDb; /* Which db file is being initialized */ |
826 u8 busy; /* TRUE if currently initializing */ | 1080 u8 busy; /* TRUE if currently initializing */ |
827 u8 orphanTrigger; /* Last statement is orphaned TEMP trigger */ | 1081 u8 orphanTrigger; /* Last statement is orphaned TEMP trigger */ |
828 } init; | 1082 } init; |
| 1083 int nVdbeActive; /* Number of VDBEs currently running */ |
| 1084 int nVdbeRead; /* Number of active VDBEs that read or write */ |
| 1085 int nVdbeWrite; /* Number of active VDBEs that read and write */ |
| 1086 int nVdbeExec; /* Number of nested calls to VdbeExec() */ |
829 int nExtension; /* Number of loaded extensions */ | 1087 int nExtension; /* Number of loaded extensions */ |
830 void **aExtension; /* Array of shared library handles */ | 1088 void **aExtension; /* Array of shared library handles */ |
831 struct Vdbe *pVdbe; /* List of active virtual machines */ | |
832 int activeVdbeCnt; /* Number of VDBEs currently executing */ | |
833 int writeVdbeCnt; /* Number of active VDBEs that are writing */ | |
834 int vdbeExecCnt; /* Number of nested calls to VdbeExec() */ | |
835 void (*xTrace)(void*,const char*); /* Trace function */ | 1089 void (*xTrace)(void*,const char*); /* Trace function */ |
836 void *pTraceArg; /* Argument to the trace function */ | 1090 void *pTraceArg; /* Argument to the trace function */ |
837 void (*xProfile)(void*,const char*,u64); /* Profiling function */ | 1091 void (*xProfile)(void*,const char*,u64); /* Profiling function */ |
838 void *pProfileArg; /* Argument to profile function */ | 1092 void *pProfileArg; /* Argument to profile function */ |
839 void *pCommitArg; /* Argument to xCommitCallback() */ | 1093 void *pCommitArg; /* Argument to xCommitCallback() */ |
840 int (*xCommitCallback)(void*); /* Invoked at every commit. */ | 1094 int (*xCommitCallback)(void*); /* Invoked at every commit. */ |
841 void *pRollbackArg; /* Argument to xRollbackCallback() */ | 1095 void *pRollbackArg; /* Argument to xRollbackCallback() */ |
842 void (*xRollbackCallback)(void*); /* Invoked at every commit. */ | 1096 void (*xRollbackCallback)(void*); /* Invoked at every commit. */ |
843 void *pUpdateArg; | 1097 void *pUpdateArg; |
844 void (*xUpdateCallback)(void*,int, const char*,const char*,sqlite_int64); | 1098 void (*xUpdateCallback)(void*,int, const char*,const char*,sqlite_int64); |
845 #ifndef SQLITE_OMIT_WAL | 1099 #ifndef SQLITE_OMIT_WAL |
846 int (*xWalCallback)(void *, sqlite3 *, const char *, int); | 1100 int (*xWalCallback)(void *, sqlite3 *, const char *, int); |
847 void *pWalArg; | 1101 void *pWalArg; |
848 #endif | 1102 #endif |
849 void(*xCollNeeded)(void*,sqlite3*,int eTextRep,const char*); | 1103 void(*xCollNeeded)(void*,sqlite3*,int eTextRep,const char*); |
850 void(*xCollNeeded16)(void*,sqlite3*,int eTextRep,const void*); | 1104 void(*xCollNeeded16)(void*,sqlite3*,int eTextRep,const void*); |
851 void *pCollNeededArg; | 1105 void *pCollNeededArg; |
852 sqlite3_value *pErr; /* Most recent error message */ | 1106 sqlite3_value *pErr; /* Most recent error message */ |
853 char *zErrMsg; /* Most recent error message (UTF-8 encoded) */ | |
854 char *zErrMsg16; /* Most recent error message (UTF-16 encoded) */ | |
855 union { | 1107 union { |
856 volatile int isInterrupted; /* True if sqlite3_interrupt has been called */ | 1108 volatile int isInterrupted; /* True if sqlite3_interrupt has been called */ |
857 double notUsed1; /* Spacer */ | 1109 double notUsed1; /* Spacer */ |
858 } u1; | 1110 } u1; |
859 Lookaside lookaside; /* Lookaside malloc configuration */ | 1111 Lookaside lookaside; /* Lookaside malloc configuration */ |
860 #ifndef SQLITE_OMIT_AUTHORIZATION | 1112 #ifndef SQLITE_OMIT_AUTHORIZATION |
861 int (*xAuth)(void*,int,const char*,const char*,const char*,const char*); | 1113 sqlite3_xauth xAuth; /* Access authorization function */ |
862 /* Access authorization function */ | |
863 void *pAuthArg; /* 1st argument to the access auth function */ | 1114 void *pAuthArg; /* 1st argument to the access auth function */ |
864 #endif | 1115 #endif |
865 #ifndef SQLITE_OMIT_PROGRESS_CALLBACK | 1116 #ifndef SQLITE_OMIT_PROGRESS_CALLBACK |
866 int (*xProgress)(void *); /* The progress callback */ | 1117 int (*xProgress)(void *); /* The progress callback */ |
867 void *pProgressArg; /* Argument to the progress callback */ | 1118 void *pProgressArg; /* Argument to the progress callback */ |
868 int nProgressOps; /* Number of opcodes for progress callback */ | 1119 unsigned nProgressOps; /* Number of opcodes for progress callback */ |
869 #endif | 1120 #endif |
870 #ifndef SQLITE_OMIT_VIRTUALTABLE | 1121 #ifndef SQLITE_OMIT_VIRTUALTABLE |
| 1122 int nVTrans; /* Allocated size of aVTrans */ |
871 Hash aModule; /* populated by sqlite3_create_module() */ | 1123 Hash aModule; /* populated by sqlite3_create_module() */ |
872 Table *pVTab; /* vtab with active Connect/Create method */ | 1124 VtabCtx *pVtabCtx; /* Context for active vtab connect/create */ |
873 VTable **aVTrans; /* Virtual tables with open transactions */ | 1125 VTable **aVTrans; /* Virtual tables with open transactions */ |
874 int nVTrans; /* Allocated size of aVTrans */ | |
875 VTable *pDisconnect; /* Disconnect these in next sqlite3_prepare() */ | 1126 VTable *pDisconnect; /* Disconnect these in next sqlite3_prepare() */ |
876 #endif | 1127 #endif |
877 FuncDefHash aFunc; /* Hash table of connection functions */ | 1128 FuncDefHash aFunc; /* Hash table of connection functions */ |
878 Hash aCollSeq; /* All collating sequences */ | 1129 Hash aCollSeq; /* All collating sequences */ |
879 BusyHandler busyHandler; /* Busy callback */ | 1130 BusyHandler busyHandler; /* Busy callback */ |
880 int busyTimeout; /* Busy handler timeout, in msec */ | |
881 Db aDbStatic[2]; /* Static space for the 2 default backends */ | 1131 Db aDbStatic[2]; /* Static space for the 2 default backends */ |
882 Savepoint *pSavepoint; /* List of active savepoints */ | 1132 Savepoint *pSavepoint; /* List of active savepoints */ |
| 1133 int busyTimeout; /* Busy handler timeout, in msec */ |
883 int nSavepoint; /* Number of non-transaction savepoints */ | 1134 int nSavepoint; /* Number of non-transaction savepoints */ |
884 int nStatement; /* Number of nested statement-transactions */ | 1135 int nStatement; /* Number of nested statement-transactions */ |
885 u8 isTransactionSavepoint; /* True if the outermost savepoint is a TS */ | |
886 i64 nDeferredCons; /* Net deferred constraints this transaction. */ | 1136 i64 nDeferredCons; /* Net deferred constraints this transaction. */ |
| 1137 i64 nDeferredImmCons; /* Net deferred immediate constraints */ |
887 int *pnBytesFreed; /* If not NULL, increment this in DbFree() */ | 1138 int *pnBytesFreed; /* If not NULL, increment this in DbFree() */ |
888 | |
889 #ifdef SQLITE_ENABLE_UNLOCK_NOTIFY | 1139 #ifdef SQLITE_ENABLE_UNLOCK_NOTIFY |
890 /* The following variables are all protected by the STATIC_MASTER | 1140 /* The following variables are all protected by the STATIC_MASTER |
891 ** mutex, not by sqlite3.mutex. They are used by code in notify.c. | 1141 ** mutex, not by sqlite3.mutex. They are used by code in notify.c. |
892 ** | 1142 ** |
893 ** When X.pUnlockConnection==Y, that means that X is waiting for Y to | 1143 ** When X.pUnlockConnection==Y, that means that X is waiting for Y to |
894 ** unlock so that it can proceed. | 1144 ** unlock so that it can proceed. |
895 ** | 1145 ** |
896 ** When X.pBlockingConnection==Y, that means that something that X tried | 1146 ** When X.pBlockingConnection==Y, that means that something that X tried |
897 ** tried to do recently failed with an SQLITE_LOCKED error due to locks | 1147 ** tried to do recently failed with an SQLITE_LOCKED error due to locks |
898 ** held by Y. | 1148 ** held by Y. |
899 */ | 1149 */ |
900 sqlite3 *pBlockingConnection; /* Connection that caused SQLITE_LOCKED */ | 1150 sqlite3 *pBlockingConnection; /* Connection that caused SQLITE_LOCKED */ |
901 sqlite3 *pUnlockConnection; /* Connection to watch for unlock */ | 1151 sqlite3 *pUnlockConnection; /* Connection to watch for unlock */ |
902 void *pUnlockArg; /* Argument to xUnlockNotify */ | 1152 void *pUnlockArg; /* Argument to xUnlockNotify */ |
903 void (*xUnlockNotify)(void **, int); /* Unlock notify callback */ | 1153 void (*xUnlockNotify)(void **, int); /* Unlock notify callback */ |
904 sqlite3 *pNextBlocked; /* Next in list of all blocked connections */ | 1154 sqlite3 *pNextBlocked; /* Next in list of all blocked connections */ |
905 #endif | 1155 #endif |
| 1156 #ifdef SQLITE_USER_AUTHENTICATION |
| 1157 sqlite3_userauth auth; /* User authentication information */ |
| 1158 #endif |
906 }; | 1159 }; |
907 | 1160 |
908 /* | 1161 /* |
909 ** A macro to discover the encoding of a database. | 1162 ** A macro to discover the encoding of a database. |
910 */ | 1163 */ |
911 #define ENC(db) ((db)->aDb[0].pSchema->enc) | 1164 #define ENC(db) ((db)->aDb[0].pSchema->enc) |
912 | 1165 |
913 /* | 1166 /* |
914 ** Possible values for the sqlite3.flags. | 1167 ** Possible values for the sqlite3.flags. |
915 */ | 1168 */ |
916 #define SQLITE_VdbeTrace 0x00000100 /* True to trace VDBE execution */ | 1169 #define SQLITE_VdbeTrace 0x00000001 /* True to trace VDBE execution */ |
917 #define SQLITE_InternChanges 0x00000200 /* Uncommitted Hash table changes */ | 1170 #define SQLITE_InternChanges 0x00000002 /* Uncommitted Hash table changes */ |
918 #define SQLITE_FullColNames 0x00000400 /* Show full column names on SELECT */ | 1171 #define SQLITE_FullFSync 0x00000004 /* Use full fsync on the backend */ |
919 #define SQLITE_ShortColNames 0x00000800 /* Show short columns names */ | 1172 #define SQLITE_CkptFullFSync 0x00000008 /* Use full fsync for checkpoint */ |
920 #define SQLITE_CountRows 0x00001000 /* Count rows changed by INSERT, */ | 1173 #define SQLITE_CacheSpill 0x00000010 /* OK to spill pager cache */ |
| 1174 #define SQLITE_FullColNames 0x00000020 /* Show full column names on SELECT */ |
| 1175 #define SQLITE_ShortColNames 0x00000040 /* Show short columns names */ |
| 1176 #define SQLITE_CountRows 0x00000080 /* Count rows changed by INSERT, */ |
921 /* DELETE, or UPDATE and return */ | 1177 /* DELETE, or UPDATE and return */ |
922 /* the count using a callback. */ | 1178 /* the count using a callback. */ |
923 #define SQLITE_NullCallback 0x00002000 /* Invoke the callback once if the */ | 1179 #define SQLITE_NullCallback 0x00000100 /* Invoke the callback once if the */ |
924 /* result set is empty */ | 1180 /* result set is empty */ |
925 #define SQLITE_SqlTrace 0x00004000 /* Debug print SQL as it executes */ | 1181 #define SQLITE_SqlTrace 0x00000200 /* Debug print SQL as it executes */ |
926 #define SQLITE_VdbeListing 0x00008000 /* Debug listings of VDBE programs */ | 1182 #define SQLITE_VdbeListing 0x00000400 /* Debug listings of VDBE programs */ |
927 #define SQLITE_WriteSchema 0x00010000 /* OK to update SQLITE_MASTER */ | 1183 #define SQLITE_WriteSchema 0x00000800 /* OK to update SQLITE_MASTER */ |
928 #define SQLITE_NoReadlock 0x00020000 /* Readlocks are omitted when | 1184 #define SQLITE_VdbeAddopTrace 0x00001000 /* Trace sqlite3VdbeAddOp() calls */ |
929 ** accessing read-only databases */ | 1185 #define SQLITE_IgnoreChecks 0x00002000 /* Do not enforce check constraints */ |
930 #define SQLITE_IgnoreChecks 0x00040000 /* Do not enforce check constraints */ | 1186 #define SQLITE_ReadUncommitted 0x0004000 /* For shared-cache mode */ |
931 #define SQLITE_ReadUncommitted 0x0080000 /* For shared-cache mode */ | 1187 #define SQLITE_LegacyFileFmt 0x00008000 /* Create new databases in format 1 */ |
932 #define SQLITE_LegacyFileFmt 0x00100000 /* Create new databases in format 1 */ | 1188 #define SQLITE_RecoveryMode 0x00010000 /* Ignore schema errors */ |
933 #define SQLITE_FullFSync 0x00200000 /* Use full fsync on the backend */ | 1189 #define SQLITE_ReverseOrder 0x00020000 /* Reverse unordered SELECTs */ |
934 #define SQLITE_CkptFullFSync 0x00400000 /* Use full fsync for checkpoint */ | 1190 #define SQLITE_RecTriggers 0x00040000 /* Enable recursive triggers */ |
935 #define SQLITE_RecoveryMode 0x00800000 /* Ignore schema errors */ | 1191 #define SQLITE_ForeignKeys 0x00080000 /* Enforce foreign key constraints */ |
936 #define SQLITE_ReverseOrder 0x01000000 /* Reverse unordered SELECTs */ | 1192 #define SQLITE_AutoIndex 0x00100000 /* Enable automatic indexes */ |
937 #define SQLITE_RecTriggers 0x02000000 /* Enable recursive triggers */ | 1193 #define SQLITE_PreferBuiltin 0x00200000 /* Preference to built-in funcs */ |
938 #define SQLITE_ForeignKeys 0x04000000 /* Enforce foreign key constraints */ | 1194 #define SQLITE_LoadExtension 0x00400000 /* Enable load_extension */ |
939 #define SQLITE_AutoIndex 0x08000000 /* Enable automatic indexes */ | 1195 #define SQLITE_EnableTrigger 0x00800000 /* True to enable triggers */ |
940 #define SQLITE_PreferBuiltin 0x10000000 /* Preference to built-in funcs */ | 1196 #define SQLITE_DeferFKs 0x01000000 /* Defer all FK constraints */ |
941 #define SQLITE_LoadExtension 0x20000000 /* Enable load_extension */ | 1197 #define SQLITE_QueryOnly 0x02000000 /* Disable database changes */ |
942 #define SQLITE_EnableTrigger 0x40000000 /* True to enable triggers */ | 1198 #define SQLITE_VdbeEQP 0x04000000 /* Debug EXPLAIN QUERY PLAN */ |
| 1199 |
943 | 1200 |
944 /* | 1201 /* |
945 ** Bits of the sqlite3.flags field that are used by the | 1202 ** Bits of the sqlite3.dbOptFlags field that are used by the |
946 ** sqlite3_test_control(SQLITE_TESTCTRL_OPTIMIZATIONS,...) interface. | 1203 ** sqlite3_test_control(SQLITE_TESTCTRL_OPTIMIZATIONS,...) interface to |
947 ** These must be the low-order bits of the flags field. | 1204 ** selectively disable various optimizations. |
948 */ | 1205 */ |
949 #define SQLITE_QueryFlattener 0x01 /* Disable query flattening */ | 1206 #define SQLITE_QueryFlattener 0x0001 /* Query flattening */ |
950 #define SQLITE_ColumnCache 0x02 /* Disable the column cache */ | 1207 #define SQLITE_ColumnCache 0x0002 /* Column cache */ |
951 #define SQLITE_IndexSort 0x04 /* Disable indexes for sorting */ | 1208 #define SQLITE_GroupByOrder 0x0004 /* GROUPBY cover of ORDERBY */ |
952 #define SQLITE_IndexSearch 0x08 /* Disable indexes for searching */ | 1209 #define SQLITE_FactorOutConst 0x0008 /* Constant factoring */ |
953 #define SQLITE_IndexCover 0x10 /* Disable index covering table */ | 1210 /* not used 0x0010 // Was: SQLITE_IdxRealAsInt */ |
954 #define SQLITE_GroupByOrder 0x20 /* Disable GROUPBY cover of ORDERBY */ | 1211 #define SQLITE_DistinctOpt 0x0020 /* DISTINCT using indexes */ |
955 #define SQLITE_FactorOutConst 0x40 /* Disable factoring out constants */ | 1212 #define SQLITE_CoverIdxScan 0x0040 /* Covering index scans */ |
956 #define SQLITE_OptMask 0xff /* Mask of all disablable opts */ | 1213 #define SQLITE_OrderByIdxJoin 0x0080 /* ORDER BY of joins via index */ |
| 1214 #define SQLITE_SubqCoroutine 0x0100 /* Evaluate subqueries as coroutines */ |
| 1215 #define SQLITE_Transitive 0x0200 /* Transitive constraints */ |
| 1216 #define SQLITE_OmitNoopJoin 0x0400 /* Omit unused tables in joins */ |
| 1217 #define SQLITE_Stat3 0x0800 /* Use the SQLITE_STAT3 table */ |
| 1218 #define SQLITE_AllOpts 0xffff /* All optimizations */ |
| 1219 |
| 1220 /* |
| 1221 ** Macros for testing whether or not optimizations are enabled or disabled. |
| 1222 */ |
| 1223 #ifndef SQLITE_OMIT_BUILTIN_TEST |
| 1224 #define OptimizationDisabled(db, mask) (((db)->dbOptFlags&(mask))!=0) |
| 1225 #define OptimizationEnabled(db, mask) (((db)->dbOptFlags&(mask))==0) |
| 1226 #else |
| 1227 #define OptimizationDisabled(db, mask) 0 |
| 1228 #define OptimizationEnabled(db, mask) 1 |
| 1229 #endif |
| 1230 |
| 1231 /* |
| 1232 ** Return true if it OK to factor constant expressions into the initialization |
| 1233 ** code. The argument is a Parse object for the code generator. |
| 1234 */ |
| 1235 #define ConstFactorOk(P) ((P)->okConstFactor) |
957 | 1236 |
958 /* | 1237 /* |
959 ** Possible values for the sqlite.magic field. | 1238 ** Possible values for the sqlite.magic field. |
960 ** The numbers are obtained at random and have no special meaning, other | 1239 ** The numbers are obtained at random and have no special meaning, other |
961 ** than being distinct from one another. | 1240 ** than being distinct from one another. |
962 */ | 1241 */ |
963 #define SQLITE_MAGIC_OPEN 0xa029a697 /* Database is open */ | 1242 #define SQLITE_MAGIC_OPEN 0xa029a697 /* Database is open */ |
964 #define SQLITE_MAGIC_CLOSED 0x9f3c2d33 /* Database is closed */ | 1243 #define SQLITE_MAGIC_CLOSED 0x9f3c2d33 /* Database is closed */ |
965 #define SQLITE_MAGIC_SICK 0x4b771290 /* Error and awaiting close */ | 1244 #define SQLITE_MAGIC_SICK 0x4b771290 /* Error and awaiting close */ |
966 #define SQLITE_MAGIC_BUSY 0xf03b7906 /* Database currently in use */ | 1245 #define SQLITE_MAGIC_BUSY 0xf03b7906 /* Database currently in use */ |
967 #define SQLITE_MAGIC_ERROR 0xb5357930 /* An SQLITE_MISUSE error occurred */ | 1246 #define SQLITE_MAGIC_ERROR 0xb5357930 /* An SQLITE_MISUSE error occurred */ |
| 1247 #define SQLITE_MAGIC_ZOMBIE 0x64cffc7f /* Close with last statement close */ |
968 | 1248 |
969 /* | 1249 /* |
970 ** Each SQL function is defined by an instance of the following | 1250 ** Each SQL function is defined by an instance of the following |
971 ** structure. A pointer to this structure is stored in the sqlite.aFunc | 1251 ** structure. A pointer to this structure is stored in the sqlite.aFunc |
972 ** hash table. When multiple functions have the same name, the hash table | 1252 ** hash table. When multiple functions have the same name, the hash table |
973 ** points to a linked list of these structures. | 1253 ** points to a linked list of these structures. |
974 */ | 1254 */ |
975 struct FuncDef { | 1255 struct FuncDef { |
976 i16 nArg; /* Number of arguments. -1 means unlimited */ | 1256 i16 nArg; /* Number of arguments. -1 means unlimited */ |
977 u8 iPrefEnc; /* Preferred text encoding (SQLITE_UTF8, 16LE, 16BE) */ | 1257 u16 funcFlags; /* Some combination of SQLITE_FUNC_* */ |
978 u8 flags; /* Some combination of SQLITE_FUNC_* */ | |
979 void *pUserData; /* User data parameter */ | 1258 void *pUserData; /* User data parameter */ |
980 FuncDef *pNext; /* Next function with same name */ | 1259 FuncDef *pNext; /* Next function with same name */ |
981 void (*xFunc)(sqlite3_context*,int,sqlite3_value**); /* Regular function */ | 1260 void (*xFunc)(sqlite3_context*,int,sqlite3_value**); /* Regular function */ |
982 void (*xStep)(sqlite3_context*,int,sqlite3_value**); /* Aggregate step */ | 1261 void (*xStep)(sqlite3_context*,int,sqlite3_value**); /* Aggregate step */ |
983 void (*xFinalize)(sqlite3_context*); /* Aggregate finalizer */ | 1262 void (*xFinalize)(sqlite3_context*); /* Aggregate finalizer */ |
984 char *zName; /* SQL name of the function. */ | 1263 char *zName; /* SQL name of the function. */ |
985 FuncDef *pHash; /* Next with a different name but the same hash */ | 1264 FuncDef *pHash; /* Next with a different name but the same hash */ |
986 FuncDestructor *pDestructor; /* Reference counted destructor function */ | 1265 FuncDestructor *pDestructor; /* Reference counted destructor function */ |
987 }; | 1266 }; |
988 | 1267 |
(...skipping 11 matching lines...) Expand all Loading... |
1000 ** count on this object is decremented. When it reaches 0, the destructor | 1279 ** count on this object is decremented. When it reaches 0, the destructor |
1001 ** is invoked and the FuncDestructor structure freed. | 1280 ** is invoked and the FuncDestructor structure freed. |
1002 */ | 1281 */ |
1003 struct FuncDestructor { | 1282 struct FuncDestructor { |
1004 int nRef; | 1283 int nRef; |
1005 void (*xDestroy)(void *); | 1284 void (*xDestroy)(void *); |
1006 void *pUserData; | 1285 void *pUserData; |
1007 }; | 1286 }; |
1008 | 1287 |
1009 /* | 1288 /* |
1010 ** Possible values for FuncDef.flags | 1289 ** Possible values for FuncDef.flags. Note that the _LENGTH and _TYPEOF |
| 1290 ** values must correspond to OPFLAG_LENGTHARG and OPFLAG_TYPEOFARG. There |
| 1291 ** are assert() statements in the code to verify this. |
1011 */ | 1292 */ |
1012 #define SQLITE_FUNC_LIKE 0x01 /* Candidate for the LIKE optimization */ | 1293 #define SQLITE_FUNC_ENCMASK 0x003 /* SQLITE_UTF8, SQLITE_UTF16BE or UTF16LE */ |
1013 #define SQLITE_FUNC_CASE 0x02 /* Case-sensitive LIKE-type function */ | 1294 #define SQLITE_FUNC_LIKE 0x004 /* Candidate for the LIKE optimization */ |
1014 #define SQLITE_FUNC_EPHEM 0x04 /* Ephemeral. Delete with VDBE */ | 1295 #define SQLITE_FUNC_CASE 0x008 /* Case-sensitive LIKE-type function */ |
1015 #define SQLITE_FUNC_NEEDCOLL 0x08 /* sqlite3GetFuncCollSeq() might be called */ | 1296 #define SQLITE_FUNC_EPHEM 0x010 /* Ephemeral. Delete with VDBE */ |
1016 #define SQLITE_FUNC_PRIVATE 0x10 /* Allowed for internal use only */ | 1297 #define SQLITE_FUNC_NEEDCOLL 0x020 /* sqlite3GetFuncCollSeq() might be called */ |
1017 #define SQLITE_FUNC_COUNT 0x20 /* Built-in count(*) aggregate */ | 1298 #define SQLITE_FUNC_LENGTH 0x040 /* Built-in length() function */ |
1018 #define SQLITE_FUNC_COALESCE 0x40 /* Built-in coalesce() or ifnull() function */ | 1299 #define SQLITE_FUNC_TYPEOF 0x080 /* Built-in typeof() function */ |
| 1300 #define SQLITE_FUNC_COUNT 0x100 /* Built-in count(*) aggregate */ |
| 1301 #define SQLITE_FUNC_COALESCE 0x200 /* Built-in coalesce() or ifnull() */ |
| 1302 #define SQLITE_FUNC_UNLIKELY 0x400 /* Built-in unlikely() function */ |
| 1303 #define SQLITE_FUNC_CONSTANT 0x800 /* Constant inputs give a constant output */ |
| 1304 #define SQLITE_FUNC_MINMAX 0x1000 /* True for min() and max() aggregates */ |
1019 | 1305 |
1020 /* | 1306 /* |
1021 ** The following three macros, FUNCTION(), LIKEFUNC() and AGGREGATE() are | 1307 ** The following three macros, FUNCTION(), LIKEFUNC() and AGGREGATE() are |
1022 ** used to create the initializers for the FuncDef structures. | 1308 ** used to create the initializers for the FuncDef structures. |
1023 ** | 1309 ** |
1024 ** FUNCTION(zName, nArg, iArg, bNC, xFunc) | 1310 ** FUNCTION(zName, nArg, iArg, bNC, xFunc) |
1025 ** Used to create a scalar function definition of a function zName | 1311 ** Used to create a scalar function definition of a function zName |
1026 ** implemented by C function xFunc that accepts nArg arguments. The | 1312 ** implemented by C function xFunc that accepts nArg arguments. The |
1027 ** value passed as iArg is cast to a (void*) and made available | 1313 ** value passed as iArg is cast to a (void*) and made available |
1028 ** as the user-data (sqlite3_user_data()) for the function. If | 1314 ** as the user-data (sqlite3_user_data()) for the function. If |
1029 ** argument bNC is true, then the SQLITE_FUNC_NEEDCOLL flag is set. | 1315 ** argument bNC is true, then the SQLITE_FUNC_NEEDCOLL flag is set. |
1030 ** | 1316 ** |
| 1317 ** VFUNCTION(zName, nArg, iArg, bNC, xFunc) |
| 1318 ** Like FUNCTION except it omits the SQLITE_FUNC_CONSTANT flag. |
| 1319 ** |
1031 ** AGGREGATE(zName, nArg, iArg, bNC, xStep, xFinal) | 1320 ** AGGREGATE(zName, nArg, iArg, bNC, xStep, xFinal) |
1032 ** Used to create an aggregate function definition implemented by | 1321 ** Used to create an aggregate function definition implemented by |
1033 ** the C functions xStep and xFinal. The first four parameters | 1322 ** the C functions xStep and xFinal. The first four parameters |
1034 ** are interpreted in the same way as the first 4 parameters to | 1323 ** are interpreted in the same way as the first 4 parameters to |
1035 ** FUNCTION(). | 1324 ** FUNCTION(). |
1036 ** | 1325 ** |
1037 ** LIKEFUNC(zName, nArg, pArg, flags) | 1326 ** LIKEFUNC(zName, nArg, pArg, flags) |
1038 ** Used to create a scalar function definition of a function zName | 1327 ** Used to create a scalar function definition of a function zName |
1039 ** that accepts nArg arguments and is implemented by a call to C | 1328 ** that accepts nArg arguments and is implemented by a call to C |
1040 ** function likeFunc. Argument pArg is cast to a (void *) and made | 1329 ** function likeFunc. Argument pArg is cast to a (void *) and made |
1041 ** available as the function user-data (sqlite3_user_data()). The | 1330 ** available as the function user-data (sqlite3_user_data()). The |
1042 ** FuncDef.flags variable is set to the value passed as the flags | 1331 ** FuncDef.flags variable is set to the value passed as the flags |
1043 ** parameter. | 1332 ** parameter. |
1044 */ | 1333 */ |
1045 #define FUNCTION(zName, nArg, iArg, bNC, xFunc) \ | 1334 #define FUNCTION(zName, nArg, iArg, bNC, xFunc) \ |
1046 {nArg, SQLITE_UTF8, bNC*SQLITE_FUNC_NEEDCOLL, \ | 1335 {nArg, SQLITE_FUNC_CONSTANT|SQLITE_UTF8|(bNC*SQLITE_FUNC_NEEDCOLL), \ |
| 1336 SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, 0, #zName, 0, 0} |
| 1337 #define VFUNCTION(zName, nArg, iArg, bNC, xFunc) \ |
| 1338 {nArg, SQLITE_UTF8|(bNC*SQLITE_FUNC_NEEDCOLL), \ |
| 1339 SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, 0, #zName, 0, 0} |
| 1340 #define FUNCTION2(zName, nArg, iArg, bNC, xFunc, extraFlags) \ |
| 1341 {nArg,SQLITE_FUNC_CONSTANT|SQLITE_UTF8|(bNC*SQLITE_FUNC_NEEDCOLL)|extraFlags,\ |
1047 SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, 0, #zName, 0, 0} | 1342 SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, 0, #zName, 0, 0} |
1048 #define STR_FUNCTION(zName, nArg, pArg, bNC, xFunc) \ | 1343 #define STR_FUNCTION(zName, nArg, pArg, bNC, xFunc) \ |
1049 {nArg, SQLITE_UTF8, bNC*SQLITE_FUNC_NEEDCOLL, \ | 1344 {nArg, SQLITE_FUNC_CONSTANT|SQLITE_UTF8|(bNC*SQLITE_FUNC_NEEDCOLL), \ |
1050 pArg, 0, xFunc, 0, 0, #zName, 0, 0} | 1345 pArg, 0, xFunc, 0, 0, #zName, 0, 0} |
1051 #define LIKEFUNC(zName, nArg, arg, flags) \ | 1346 #define LIKEFUNC(zName, nArg, arg, flags) \ |
1052 {nArg, SQLITE_UTF8, flags, (void *)arg, 0, likeFunc, 0, 0, #zName, 0, 0} | 1347 {nArg, SQLITE_FUNC_CONSTANT|SQLITE_UTF8|flags, \ |
| 1348 (void *)arg, 0, likeFunc, 0, 0, #zName, 0, 0} |
1053 #define AGGREGATE(zName, nArg, arg, nc, xStep, xFinal) \ | 1349 #define AGGREGATE(zName, nArg, arg, nc, xStep, xFinal) \ |
1054 {nArg, SQLITE_UTF8, nc*SQLITE_FUNC_NEEDCOLL, \ | 1350 {nArg, SQLITE_UTF8|(nc*SQLITE_FUNC_NEEDCOLL), \ |
| 1351 SQLITE_INT_TO_PTR(arg), 0, 0, xStep,xFinal,#zName,0,0} |
| 1352 #define AGGREGATE2(zName, nArg, arg, nc, xStep, xFinal, extraFlags) \ |
| 1353 {nArg, SQLITE_UTF8|(nc*SQLITE_FUNC_NEEDCOLL)|extraFlags, \ |
1055 SQLITE_INT_TO_PTR(arg), 0, 0, xStep,xFinal,#zName,0,0} | 1354 SQLITE_INT_TO_PTR(arg), 0, 0, xStep,xFinal,#zName,0,0} |
1056 | 1355 |
1057 /* | 1356 /* |
1058 ** All current savepoints are stored in a linked list starting at | 1357 ** All current savepoints are stored in a linked list starting at |
1059 ** sqlite3.pSavepoint. The first element in the list is the most recently | 1358 ** sqlite3.pSavepoint. The first element in the list is the most recently |
1060 ** opened savepoint. Savepoints are added to the list by the vdbe | 1359 ** opened savepoint. Savepoints are added to the list by the vdbe |
1061 ** OP_Savepoint instruction. | 1360 ** OP_Savepoint instruction. |
1062 */ | 1361 */ |
1063 struct Savepoint { | 1362 struct Savepoint { |
1064 char *zName; /* Savepoint name (nul-terminated) */ | 1363 char *zName; /* Savepoint name (nul-terminated) */ |
1065 i64 nDeferredCons; /* Number of deferred fk violations */ | 1364 i64 nDeferredCons; /* Number of deferred fk violations */ |
| 1365 i64 nDeferredImmCons; /* Number of deferred imm fk. */ |
1066 Savepoint *pNext; /* Parent savepoint (if any) */ | 1366 Savepoint *pNext; /* Parent savepoint (if any) */ |
1067 }; | 1367 }; |
1068 | 1368 |
1069 /* | 1369 /* |
1070 ** The following are used as the second parameter to sqlite3Savepoint(), | 1370 ** The following are used as the second parameter to sqlite3Savepoint(), |
1071 ** and as the P1 argument to the OP_Savepoint instruction. | 1371 ** and as the P1 argument to the OP_Savepoint instruction. |
1072 */ | 1372 */ |
1073 #define SAVEPOINT_BEGIN 0 | 1373 #define SAVEPOINT_BEGIN 0 |
1074 #define SAVEPOINT_RELEASE 1 | 1374 #define SAVEPOINT_RELEASE 1 |
1075 #define SAVEPOINT_ROLLBACK 2 | 1375 #define SAVEPOINT_ROLLBACK 2 |
(...skipping 14 matching lines...) Expand all Loading... |
1090 /* | 1390 /* |
1091 ** information about each column of an SQL table is held in an instance | 1391 ** information about each column of an SQL table is held in an instance |
1092 ** of this structure. | 1392 ** of this structure. |
1093 */ | 1393 */ |
1094 struct Column { | 1394 struct Column { |
1095 char *zName; /* Name of this column */ | 1395 char *zName; /* Name of this column */ |
1096 Expr *pDflt; /* Default value of this column */ | 1396 Expr *pDflt; /* Default value of this column */ |
1097 char *zDflt; /* Original text of the default value */ | 1397 char *zDflt; /* Original text of the default value */ |
1098 char *zType; /* Data type for this column */ | 1398 char *zType; /* Data type for this column */ |
1099 char *zColl; /* Collating sequence. If NULL, use the default */ | 1399 char *zColl; /* Collating sequence. If NULL, use the default */ |
1100 u8 notNull; /* True if there is a NOT NULL constraint */ | 1400 u8 notNull; /* An OE_ code for handling a NOT NULL constraint */ |
1101 u8 isPrimKey; /* True if this column is part of the PRIMARY KEY */ | |
1102 char affinity; /* One of the SQLITE_AFF_... values */ | 1401 char affinity; /* One of the SQLITE_AFF_... values */ |
1103 #ifndef SQLITE_OMIT_VIRTUALTABLE | 1402 u8 szEst; /* Estimated size of this column. INT==1 */ |
1104 u8 isHidden; /* True if this column is 'hidden' */ | 1403 u8 colFlags; /* Boolean properties. See COLFLAG_ defines below */ |
1105 #endif | |
1106 }; | 1404 }; |
1107 | 1405 |
| 1406 /* Allowed values for Column.colFlags: |
| 1407 */ |
| 1408 #define COLFLAG_PRIMKEY 0x0001 /* Column is part of the primary key */ |
| 1409 #define COLFLAG_HIDDEN 0x0002 /* A hidden column in a virtual table */ |
| 1410 |
1108 /* | 1411 /* |
1109 ** A "Collating Sequence" is defined by an instance of the following | 1412 ** A "Collating Sequence" is defined by an instance of the following |
1110 ** structure. Conceptually, a collating sequence consists of a name and | 1413 ** structure. Conceptually, a collating sequence consists of a name and |
1111 ** a comparison routine that defines the order of that sequence. | 1414 ** a comparison routine that defines the order of that sequence. |
1112 ** | 1415 ** |
1113 ** There may two separate implementations of the collation function, one | 1416 ** If CollSeq.xCmp is NULL, it means that the |
1114 ** that processes text in UTF-8 encoding (CollSeq.xCmp) and another that | |
1115 ** processes text encoded in UTF-16 (CollSeq.xCmp16), using the machine | |
1116 ** native byte order. When a collation sequence is invoked, SQLite selects | |
1117 ** the version that will require the least expensive encoding | |
1118 ** translations, if any. | |
1119 ** | |
1120 ** The CollSeq.pUser member variable is an extra parameter that passed in | |
1121 ** as the first argument to the UTF-8 comparison function, xCmp. | |
1122 ** CollSeq.pUser16 is the equivalent for the UTF-16 comparison function, | |
1123 ** xCmp16. | |
1124 ** | |
1125 ** If both CollSeq.xCmp and CollSeq.xCmp16 are NULL, it means that the | |
1126 ** collating sequence is undefined. Indices built on an undefined | 1417 ** collating sequence is undefined. Indices built on an undefined |
1127 ** collating sequence may not be read or written. | 1418 ** collating sequence may not be read or written. |
1128 */ | 1419 */ |
1129 struct CollSeq { | 1420 struct CollSeq { |
1130 char *zName; /* Name of the collating sequence, UTF-8 encoded */ | 1421 char *zName; /* Name of the collating sequence, UTF-8 encoded */ |
1131 u8 enc; /* Text encoding handled by xCmp() */ | 1422 u8 enc; /* Text encoding handled by xCmp() */ |
1132 u8 type; /* One of the SQLITE_COLL_... values below */ | |
1133 void *pUser; /* First argument to xCmp() */ | 1423 void *pUser; /* First argument to xCmp() */ |
1134 int (*xCmp)(void*,int, const void*, int, const void*); | 1424 int (*xCmp)(void*,int, const void*, int, const void*); |
1135 void (*xDel)(void*); /* Destructor for pUser */ | 1425 void (*xDel)(void*); /* Destructor for pUser */ |
1136 }; | 1426 }; |
1137 | 1427 |
1138 /* | 1428 /* |
1139 ** Allowed values of CollSeq.type: | |
1140 */ | |
1141 #define SQLITE_COLL_BINARY 1 /* The default memcmp() collating sequence */ | |
1142 #define SQLITE_COLL_NOCASE 2 /* The built-in NOCASE collating sequence */ | |
1143 #define SQLITE_COLL_REVERSE 3 /* The built-in REVERSE collating sequence */ | |
1144 #define SQLITE_COLL_USER 0 /* Any other user-defined collating sequence */ | |
1145 | |
1146 /* | |
1147 ** A sort order can be either ASC or DESC. | 1429 ** A sort order can be either ASC or DESC. |
1148 */ | 1430 */ |
1149 #define SQLITE_SO_ASC 0 /* Sort in ascending order */ | 1431 #define SQLITE_SO_ASC 0 /* Sort in ascending order */ |
1150 #define SQLITE_SO_DESC 1 /* Sort in ascending order */ | 1432 #define SQLITE_SO_DESC 1 /* Sort in ascending order */ |
1151 | 1433 |
1152 /* | 1434 /* |
1153 ** Column affinity types. | 1435 ** Column affinity types. |
1154 ** | 1436 ** |
1155 ** These used to have mnemonic name like 'i' for SQLITE_AFF_INTEGER and | 1437 ** These used to have mnemonic name like 'i' for SQLITE_AFF_INTEGER and |
1156 ** 't' for SQLITE_AFF_TEXT. But we can save a little space and improve | 1438 ** 't' for SQLITE_AFF_TEXT. But we can save a little space and improve |
1157 ** the speed a little by numbering the values consecutively. | 1439 ** the speed a little by numbering the values consecutively. |
1158 ** | 1440 ** |
1159 ** But rather than start with 0 or 1, we begin with 'a'. That way, | 1441 ** But rather than start with 0 or 1, we begin with 'A'. That way, |
1160 ** when multiple affinity types are concatenated into a string and | 1442 ** when multiple affinity types are concatenated into a string and |
1161 ** used as the P4 operand, they will be more readable. | 1443 ** used as the P4 operand, they will be more readable. |
1162 ** | 1444 ** |
1163 ** Note also that the numeric types are grouped together so that testing | 1445 ** Note also that the numeric types are grouped together so that testing |
1164 ** for a numeric type is a single comparison. | 1446 ** for a numeric type is a single comparison. And the NONE type is first. |
1165 */ | 1447 */ |
1166 #define SQLITE_AFF_TEXT 'a' | 1448 #define SQLITE_AFF_NONE 'A' |
1167 #define SQLITE_AFF_NONE 'b' | 1449 #define SQLITE_AFF_TEXT 'B' |
1168 #define SQLITE_AFF_NUMERIC 'c' | 1450 #define SQLITE_AFF_NUMERIC 'C' |
1169 #define SQLITE_AFF_INTEGER 'd' | 1451 #define SQLITE_AFF_INTEGER 'D' |
1170 #define SQLITE_AFF_REAL 'e' | 1452 #define SQLITE_AFF_REAL 'E' |
1171 | 1453 |
1172 #define sqlite3IsNumericAffinity(X) ((X)>=SQLITE_AFF_NUMERIC) | 1454 #define sqlite3IsNumericAffinity(X) ((X)>=SQLITE_AFF_NUMERIC) |
1173 | 1455 |
1174 /* | 1456 /* |
1175 ** The SQLITE_AFF_MASK values masks off the significant bits of an | 1457 ** The SQLITE_AFF_MASK values masks off the significant bits of an |
1176 ** affinity value. | 1458 ** affinity value. |
1177 */ | 1459 */ |
1178 #define SQLITE_AFF_MASK 0x67 | 1460 #define SQLITE_AFF_MASK 0x47 |
1179 | 1461 |
1180 /* | 1462 /* |
1181 ** Additional bit values that can be ORed with an affinity without | 1463 ** Additional bit values that can be ORed with an affinity without |
1182 ** changing the affinity. | 1464 ** changing the affinity. |
| 1465 ** |
| 1466 ** The SQLITE_NOTNULL flag is a combination of NULLEQ and JUMPIFNULL. |
| 1467 ** It causes an assert() to fire if either operand to a comparison |
| 1468 ** operator is NULL. It is added to certain comparison operators to |
| 1469 ** prove that the operands are always NOT NULL. |
1183 */ | 1470 */ |
1184 #define SQLITE_JUMPIFNULL 0x08 /* jumps if either operand is NULL */ | 1471 #define SQLITE_JUMPIFNULL 0x10 /* jumps if either operand is NULL */ |
1185 #define SQLITE_STOREP2 0x10 /* Store result in reg[P2] rather than jump */ | 1472 #define SQLITE_STOREP2 0x20 /* Store result in reg[P2] rather than jump */ |
1186 #define SQLITE_NULLEQ 0x80 /* NULL=NULL */ | 1473 #define SQLITE_NULLEQ 0x80 /* NULL=NULL */ |
| 1474 #define SQLITE_NOTNULL 0x90 /* Assert that operands are never NULL */ |
1187 | 1475 |
1188 /* | 1476 /* |
1189 ** An object of this type is created for each virtual table present in | 1477 ** An object of this type is created for each virtual table present in |
1190 ** the database schema. | 1478 ** the database schema. |
1191 ** | 1479 ** |
1192 ** If the database schema is shared, then there is one instance of this | 1480 ** If the database schema is shared, then there is one instance of this |
1193 ** structure for each database connection (sqlite3*) that uses the shared | 1481 ** structure for each database connection (sqlite3*) that uses the shared |
1194 ** schema. This is because each database connection requires its own unique | 1482 ** schema. This is because each database connection requires its own unique |
1195 ** instance of the sqlite3_vtab* handle used to access the virtual table | 1483 ** instance of the sqlite3_vtab* handle used to access the virtual table |
1196 ** implementation. sqlite3_vtab* handles can not be shared between | 1484 ** implementation. sqlite3_vtab* handles can not be shared between |
(...skipping 28 matching lines...) Expand all Loading... |
1225 ** | 1513 ** |
1226 ** The memory for objects of this type is always allocated by | 1514 ** The memory for objects of this type is always allocated by |
1227 ** sqlite3DbMalloc(), using the connection handle stored in VTable.db as | 1515 ** sqlite3DbMalloc(), using the connection handle stored in VTable.db as |
1228 ** the first argument. | 1516 ** the first argument. |
1229 */ | 1517 */ |
1230 struct VTable { | 1518 struct VTable { |
1231 sqlite3 *db; /* Database connection associated with this table */ | 1519 sqlite3 *db; /* Database connection associated with this table */ |
1232 Module *pMod; /* Pointer to module implementation */ | 1520 Module *pMod; /* Pointer to module implementation */ |
1233 sqlite3_vtab *pVtab; /* Pointer to vtab instance */ | 1521 sqlite3_vtab *pVtab; /* Pointer to vtab instance */ |
1234 int nRef; /* Number of pointers to this structure */ | 1522 int nRef; /* Number of pointers to this structure */ |
| 1523 u8 bConstraint; /* True if constraints are supported */ |
| 1524 int iSavepoint; /* Depth of the SAVEPOINT stack */ |
1235 VTable *pNext; /* Next in linked list (see above) */ | 1525 VTable *pNext; /* Next in linked list (see above) */ |
1236 }; | 1526 }; |
1237 | 1527 |
1238 /* | 1528 /* |
1239 ** Each SQL table is represented in memory by an instance of the | 1529 ** Each SQL table is represented in memory by an instance of the |
1240 ** following structure. | 1530 ** following structure. |
1241 ** | 1531 ** |
1242 ** Table.zName is the name of the table. The case of the original | 1532 ** Table.zName is the name of the table. The case of the original |
1243 ** CREATE TABLE statement is stored, but case is not significant for | 1533 ** CREATE TABLE statement is stored, but case is not significant for |
1244 ** comparisons. | 1534 ** comparisons. |
(...skipping 15 matching lines...) Expand all Loading... |
1260 ** holds temporary tables and indices. If TF_Ephemeral is set | 1550 ** holds temporary tables and indices. If TF_Ephemeral is set |
1261 ** then the table is stored in a file that is automatically deleted | 1551 ** then the table is stored in a file that is automatically deleted |
1262 ** when the VDBE cursor to the table is closed. In this case Table.tnum | 1552 ** when the VDBE cursor to the table is closed. In this case Table.tnum |
1263 ** refers VDBE cursor number that holds the table open, not to the root | 1553 ** refers VDBE cursor number that holds the table open, not to the root |
1264 ** page number. Transient tables are used to hold the results of a | 1554 ** page number. Transient tables are used to hold the results of a |
1265 ** sub-query that appears instead of a real table name in the FROM clause | 1555 ** sub-query that appears instead of a real table name in the FROM clause |
1266 ** of a SELECT statement. | 1556 ** of a SELECT statement. |
1267 */ | 1557 */ |
1268 struct Table { | 1558 struct Table { |
1269 char *zName; /* Name of the table or view */ | 1559 char *zName; /* Name of the table or view */ |
1270 int iPKey; /* If not negative, use aCol[iPKey] as the primary key */ | |
1271 int nCol; /* Number of columns in this table */ | |
1272 Column *aCol; /* Information about each column */ | 1560 Column *aCol; /* Information about each column */ |
1273 Index *pIndex; /* List of SQL indexes on this table. */ | 1561 Index *pIndex; /* List of SQL indexes on this table. */ |
1274 int tnum; /* Root BTree node for this table (see note above) */ | |
1275 unsigned nRowEst; /* Estimated rows in table - from sqlite_stat1 table */ | |
1276 Select *pSelect; /* NULL for tables. Points to definition if a view. */ | 1562 Select *pSelect; /* NULL for tables. Points to definition if a view. */ |
1277 u16 nRef; /* Number of pointers to this Table */ | |
1278 u8 tabFlags; /* Mask of TF_* values */ | |
1279 u8 keyConf; /* What to do in case of uniqueness conflict on iPKey */ | |
1280 FKey *pFKey; /* Linked list of all foreign keys in this table */ | 1563 FKey *pFKey; /* Linked list of all foreign keys in this table */ |
1281 char *zColAff; /* String defining the affinity of each column */ | 1564 char *zColAff; /* String defining the affinity of each column */ |
1282 #ifndef SQLITE_OMIT_CHECK | 1565 #ifndef SQLITE_OMIT_CHECK |
1283 Expr *pCheck; /* The AND of all CHECK constraints */ | 1566 ExprList *pCheck; /* All CHECK constraints */ |
1284 #endif | 1567 #endif |
| 1568 LogEst nRowLogEst; /* Estimated rows in table - from sqlite_stat1 table */ |
| 1569 int tnum; /* Root BTree node for this table (see note above) */ |
| 1570 i16 iPKey; /* If not negative, use aCol[iPKey] as the primary key */ |
| 1571 i16 nCol; /* Number of columns in this table */ |
| 1572 u16 nRef; /* Number of pointers to this Table */ |
| 1573 LogEst szTabRow; /* Estimated size of each table row in bytes */ |
| 1574 #ifdef SQLITE_ENABLE_COSTMULT |
| 1575 LogEst costMult; /* Cost multiplier for using this table */ |
| 1576 #endif |
| 1577 u8 tabFlags; /* Mask of TF_* values */ |
| 1578 u8 keyConf; /* What to do in case of uniqueness conflict on iPKey */ |
1285 #ifndef SQLITE_OMIT_ALTERTABLE | 1579 #ifndef SQLITE_OMIT_ALTERTABLE |
1286 int addColOffset; /* Offset in CREATE TABLE stmt to add a new column */ | 1580 int addColOffset; /* Offset in CREATE TABLE stmt to add a new column */ |
1287 #endif | 1581 #endif |
1288 #ifndef SQLITE_OMIT_VIRTUALTABLE | 1582 #ifndef SQLITE_OMIT_VIRTUALTABLE |
1289 VTable *pVTable; /* List of VTable objects. */ | |
1290 int nModuleArg; /* Number of arguments to the module */ | 1583 int nModuleArg; /* Number of arguments to the module */ |
1291 char **azModuleArg; /* Text of all module args. [0] is module name */ | 1584 char **azModuleArg; /* Text of all module args. [0] is module name */ |
| 1585 VTable *pVTable; /* List of VTable objects. */ |
1292 #endif | 1586 #endif |
1293 Trigger *pTrigger; /* List of triggers stored in pSchema */ | 1587 Trigger *pTrigger; /* List of triggers stored in pSchema */ |
1294 Schema *pSchema; /* Schema that contains this table */ | 1588 Schema *pSchema; /* Schema that contains this table */ |
1295 Table *pNextZombie; /* Next on the Parse.pZombieTab list */ | 1589 Table *pNextZombie; /* Next on the Parse.pZombieTab list */ |
1296 }; | 1590 }; |
1297 | 1591 |
1298 /* | 1592 /* |
1299 ** Allowed values for Tabe.tabFlags. | 1593 ** Allowed values for Table.tabFlags. |
1300 */ | 1594 */ |
1301 #define TF_Readonly 0x01 /* Read-only system table */ | 1595 #define TF_Readonly 0x01 /* Read-only system table */ |
1302 #define TF_Ephemeral 0x02 /* An ephemeral table */ | 1596 #define TF_Ephemeral 0x02 /* An ephemeral table */ |
1303 #define TF_HasPrimaryKey 0x04 /* Table has a primary key */ | 1597 #define TF_HasPrimaryKey 0x04 /* Table has a primary key */ |
1304 #define TF_Autoincrement 0x08 /* Integer primary key is autoincrement */ | 1598 #define TF_Autoincrement 0x08 /* Integer primary key is autoincrement */ |
1305 #define TF_Virtual 0x10 /* Is a virtual table */ | 1599 #define TF_Virtual 0x10 /* Is a virtual table */ |
1306 #define TF_NeedMetadata 0x20 /* aCol[].zType and aCol[].pColl missing */ | 1600 #define TF_WithoutRowid 0x20 /* No rowid used. PRIMARY KEY is the key */ |
1307 | |
1308 | 1601 |
1309 | 1602 |
1310 /* | 1603 /* |
1311 ** Test to see whether or not a table is a virtual table. This is | 1604 ** Test to see whether or not a table is a virtual table. This is |
1312 ** done as a macro so that it will be optimized out when virtual | 1605 ** done as a macro so that it will be optimized out when virtual |
1313 ** table support is omitted from the build. | 1606 ** table support is omitted from the build. |
1314 */ | 1607 */ |
1315 #ifndef SQLITE_OMIT_VIRTUALTABLE | 1608 #ifndef SQLITE_OMIT_VIRTUALTABLE |
1316 # define IsVirtual(X) (((X)->tabFlags & TF_Virtual)!=0) | 1609 # define IsVirtual(X) (((X)->tabFlags & TF_Virtual)!=0) |
1317 # define IsHiddenColumn(X) ((X)->isHidden) | 1610 # define IsHiddenColumn(X) (((X)->colFlags & COLFLAG_HIDDEN)!=0) |
1318 #else | 1611 #else |
1319 # define IsVirtual(X) 0 | 1612 # define IsVirtual(X) 0 |
1320 # define IsHiddenColumn(X) 0 | 1613 # define IsHiddenColumn(X) 0 |
1321 #endif | 1614 #endif |
1322 | 1615 |
| 1616 /* Does the table have a rowid */ |
| 1617 #define HasRowid(X) (((X)->tabFlags & TF_WithoutRowid)==0) |
| 1618 |
1323 /* | 1619 /* |
1324 ** Each foreign key constraint is an instance of the following structure. | 1620 ** Each foreign key constraint is an instance of the following structure. |
1325 ** | 1621 ** |
1326 ** A foreign key is associated with two tables. The "from" table is | 1622 ** A foreign key is associated with two tables. The "from" table is |
1327 ** the table that contains the REFERENCES clause that creates the foreign | 1623 ** the table that contains the REFERENCES clause that creates the foreign |
1328 ** key. The "to" table is the table that is named in the REFERENCES clause. | 1624 ** key. The "to" table is the table that is named in the REFERENCES clause. |
1329 ** Consider this example: | 1625 ** Consider this example: |
1330 ** | 1626 ** |
1331 ** CREATE TABLE ex1( | 1627 ** CREATE TABLE ex1( |
1332 ** a INTEGER PRIMARY KEY, | 1628 ** a INTEGER PRIMARY KEY, |
1333 ** b INTEGER CONSTRAINT fk1 REFERENCES ex2(x) | 1629 ** b INTEGER CONSTRAINT fk1 REFERENCES ex2(x) |
1334 ** ); | 1630 ** ); |
1335 ** | 1631 ** |
1336 ** For foreign key "fk1", the from-table is "ex1" and the to-table is "ex2". | 1632 ** For foreign key "fk1", the from-table is "ex1" and the to-table is "ex2". |
| 1633 ** Equivalent names: |
| 1634 ** |
| 1635 ** from-table == child-table |
| 1636 ** to-table == parent-table |
1337 ** | 1637 ** |
1338 ** Each REFERENCES clause generates an instance of the following structure | 1638 ** Each REFERENCES clause generates an instance of the following structure |
1339 ** which is attached to the from-table. The to-table need not exist when | 1639 ** which is attached to the from-table. The to-table need not exist when |
1340 ** the from-table is created. The existence of the to-table is not checked. | 1640 ** the from-table is created. The existence of the to-table is not checked. |
| 1641 ** |
| 1642 ** The list of all parents for child Table X is held at X.pFKey. |
| 1643 ** |
| 1644 ** A list of all children for a table named Z (which might not even exist) |
| 1645 ** is held in Schema.fkeyHash with a hash key of Z. |
1341 */ | 1646 */ |
1342 struct FKey { | 1647 struct FKey { |
1343 Table *pFrom; /* Table containing the REFERENCES clause (aka: Child) */ | 1648 Table *pFrom; /* Table containing the REFERENCES clause (aka: Child) */ |
1344 FKey *pNextFrom; /* Next foreign key in pFrom */ | 1649 FKey *pNextFrom; /* Next FKey with the same in pFrom. Next parent of pFrom */ |
1345 char *zTo; /* Name of table that the key points to (aka: Parent) */ | 1650 char *zTo; /* Name of table that the key points to (aka: Parent) */ |
1346 FKey *pNextTo; /* Next foreign key on table named zTo */ | 1651 FKey *pNextTo; /* Next with the same zTo. Next child of zTo. */ |
1347 FKey *pPrevTo; /* Previous foreign key on table named zTo */ | 1652 FKey *pPrevTo; /* Previous with the same zTo */ |
1348 int nCol; /* Number of columns in this key */ | 1653 int nCol; /* Number of columns in this key */ |
1349 /* EV: R-30323-21917 */ | 1654 /* EV: R-30323-21917 */ |
1350 u8 isDeferred; /* True if constraint checking is deferred till COMMIT */ | 1655 u8 isDeferred; /* True if constraint checking is deferred till COMMIT */ |
1351 u8 aAction[2]; /* ON DELETE and ON UPDATE actions, respectively */ | 1656 u8 aAction[2]; /* ON DELETE and ON UPDATE actions, respectively */ |
1352 Trigger *apTrigger[2]; /* Triggers for aAction[] actions */ | 1657 Trigger *apTrigger[2];/* Triggers for aAction[] actions */ |
1353 struct sColMap { /* Mapping of columns in pFrom to columns in zTo */ | 1658 struct sColMap { /* Mapping of columns in pFrom to columns in zTo */ |
1354 int iFrom; /* Index of column in pFrom */ | 1659 int iFrom; /* Index of column in pFrom */ |
1355 char *zCol; /* Name of column in zTo. If 0 use PRIMARY KEY */ | 1660 char *zCol; /* Name of column in zTo. If NULL use PRIMARY KEY */ |
1356 } aCol[1]; /* One entry for each of nCol column s */ | 1661 } aCol[1]; /* One entry for each of nCol columns */ |
1357 }; | 1662 }; |
1358 | 1663 |
1359 /* | 1664 /* |
1360 ** SQLite supports many different ways to resolve a constraint | 1665 ** SQLite supports many different ways to resolve a constraint |
1361 ** error. ROLLBACK processing means that a constraint violation | 1666 ** error. ROLLBACK processing means that a constraint violation |
1362 ** causes the operation in process to fail and for the current transaction | 1667 ** causes the operation in process to fail and for the current transaction |
1363 ** to be rolled back. ABORT processing means the operation in process | 1668 ** to be rolled back. ABORT processing means the operation in process |
1364 ** fails and any prior changes from that one operation are backed out, | 1669 ** fails and any prior changes from that one operation are backed out, |
1365 ** but the transaction is not rolled back. FAIL processing means that | 1670 ** but the transaction is not rolled back. FAIL processing means that |
1366 ** the operation in progress stops and returns an error code. But prior | 1671 ** the operation in progress stops and returns an error code. But prior |
(...skipping 19 matching lines...) Expand all Loading... |
1386 #define OE_Abort 2 /* Back out changes but do no rollback transaction */ | 1691 #define OE_Abort 2 /* Back out changes but do no rollback transaction */ |
1387 #define OE_Fail 3 /* Stop the operation but leave all prior changes */ | 1692 #define OE_Fail 3 /* Stop the operation but leave all prior changes */ |
1388 #define OE_Ignore 4 /* Ignore the error. Do not do the INSERT or UPDATE */ | 1693 #define OE_Ignore 4 /* Ignore the error. Do not do the INSERT or UPDATE */ |
1389 #define OE_Replace 5 /* Delete existing record, then do INSERT or UPDATE */ | 1694 #define OE_Replace 5 /* Delete existing record, then do INSERT or UPDATE */ |
1390 | 1695 |
1391 #define OE_Restrict 6 /* OE_Abort for IMMEDIATE, OE_Rollback for DEFERRED */ | 1696 #define OE_Restrict 6 /* OE_Abort for IMMEDIATE, OE_Rollback for DEFERRED */ |
1392 #define OE_SetNull 7 /* Set the foreign key value to NULL */ | 1697 #define OE_SetNull 7 /* Set the foreign key value to NULL */ |
1393 #define OE_SetDflt 8 /* Set the foreign key value to its default */ | 1698 #define OE_SetDflt 8 /* Set the foreign key value to its default */ |
1394 #define OE_Cascade 9 /* Cascade the changes */ | 1699 #define OE_Cascade 9 /* Cascade the changes */ |
1395 | 1700 |
1396 #define OE_Default 99 /* Do whatever the default action is */ | 1701 #define OE_Default 10 /* Do whatever the default action is */ |
1397 | 1702 |
1398 | 1703 |
1399 /* | 1704 /* |
1400 ** An instance of the following structure is passed as the first | 1705 ** An instance of the following structure is passed as the first |
1401 ** argument to sqlite3VdbeKeyCompare and is used to control the | 1706 ** argument to sqlite3VdbeKeyCompare and is used to control the |
1402 ** comparison of the two index keys. | 1707 ** comparison of the two index keys. |
| 1708 ** |
| 1709 ** Note that aSortOrder[] and aColl[] have nField+1 slots. There |
| 1710 ** are nField slots for the columns of an index then one extra slot |
| 1711 ** for the rowid at the end. |
1403 */ | 1712 */ |
1404 struct KeyInfo { | 1713 struct KeyInfo { |
| 1714 u32 nRef; /* Number of references to this KeyInfo object */ |
| 1715 u8 enc; /* Text encoding - one of the SQLITE_UTF* values */ |
| 1716 u16 nField; /* Number of key columns in the index */ |
| 1717 u16 nXField; /* Number of columns beyond the key columns */ |
1405 sqlite3 *db; /* The database connection */ | 1718 sqlite3 *db; /* The database connection */ |
1406 u8 enc; /* Text encoding - one of the SQLITE_UTF* values */ | 1719 u8 *aSortOrder; /* Sort order for each column. */ |
1407 u16 nField; /* Number of entries in aColl[] */ | |
1408 u8 *aSortOrder; /* Sort order for each column. May be NULL */ | |
1409 CollSeq *aColl[1]; /* Collating sequence for each term of the key */ | 1720 CollSeq *aColl[1]; /* Collating sequence for each term of the key */ |
1410 }; | 1721 }; |
1411 | 1722 |
1412 /* | 1723 /* |
1413 ** An instance of the following structure holds information about a | 1724 ** An instance of the following structure holds information about a |
1414 ** single index record that has already been parsed out into individual | 1725 ** single index record that has already been parsed out into individual |
1415 ** values. | 1726 ** values. |
1416 ** | 1727 ** |
1417 ** A record is an object that contains one or more fields of data. | 1728 ** A record is an object that contains one or more fields of data. |
1418 ** Records are used to store the content of a table row and to store | 1729 ** Records are used to store the content of a table row and to store |
1419 ** the key of an index. A blob encoding of a record is created by | 1730 ** the key of an index. A blob encoding of a record is created by |
1420 ** the OP_MakeRecord opcode of the VDBE and is disassembled by the | 1731 ** the OP_MakeRecord opcode of the VDBE and is disassembled by the |
1421 ** OP_Column opcode. | 1732 ** OP_Column opcode. |
1422 ** | 1733 ** |
1423 ** This structure holds a record that has already been disassembled | 1734 ** This structure holds a record that has already been disassembled |
1424 ** into its constituent fields. | 1735 ** into its constituent fields. |
| 1736 ** |
| 1737 ** The r1 and r2 member variables are only used by the optimized comparison |
| 1738 ** functions vdbeRecordCompareInt() and vdbeRecordCompareString(). |
1425 */ | 1739 */ |
1426 struct UnpackedRecord { | 1740 struct UnpackedRecord { |
1427 KeyInfo *pKeyInfo; /* Collation and sort-order information */ | 1741 KeyInfo *pKeyInfo; /* Collation and sort-order information */ |
1428 u16 nField; /* Number of entries in apMem[] */ | 1742 u16 nField; /* Number of entries in apMem[] */ |
1429 u16 flags; /* Boolean settings. UNPACKED_... below */ | 1743 i8 default_rc; /* Comparison result if keys are equal */ |
1430 i64 rowid; /* Used by UNPACKED_PREFIX_SEARCH */ | 1744 u8 errCode; /* Error detected by xRecordCompare (CORRUPT or NOMEM) */ |
1431 Mem *aMem; /* Values */ | 1745 Mem *aMem; /* Values */ |
| 1746 int r1; /* Value to return if (lhs > rhs) */ |
| 1747 int r2; /* Value to return if (rhs < lhs) */ |
1432 }; | 1748 }; |
1433 | 1749 |
1434 /* | |
1435 ** Allowed values of UnpackedRecord.flags | |
1436 */ | |
1437 #define UNPACKED_NEED_FREE 0x0001 /* Memory is from sqlite3Malloc() */ | |
1438 #define UNPACKED_NEED_DESTROY 0x0002 /* apMem[]s should all be destroyed */ | |
1439 #define UNPACKED_IGNORE_ROWID 0x0004 /* Ignore trailing rowid on key1 */ | |
1440 #define UNPACKED_INCRKEY 0x0008 /* Make this key an epsilon larger */ | |
1441 #define UNPACKED_PREFIX_MATCH 0x0010 /* A prefix match is considered OK */ | |
1442 #define UNPACKED_PREFIX_SEARCH 0x0020 /* A prefix match is considered OK */ | |
1443 | 1750 |
1444 /* | 1751 /* |
1445 ** Each SQL index is represented in memory by an | 1752 ** Each SQL index is represented in memory by an |
1446 ** instance of the following structure. | 1753 ** instance of the following structure. |
1447 ** | 1754 ** |
1448 ** The columns of the table that are to be indexed are described | 1755 ** The columns of the table that are to be indexed are described |
1449 ** by the aiColumn[] field of this structure. For example, suppose | 1756 ** by the aiColumn[] field of this structure. For example, suppose |
1450 ** we have the following table and index: | 1757 ** we have the following table and index: |
1451 ** | 1758 ** |
1452 ** CREATE TABLE Ex1(c1 int, c2 int, c3 text); | 1759 ** CREATE TABLE Ex1(c1 int, c2 int, c3 text); |
1453 ** CREATE INDEX Ex2 ON Ex1(c3,c1); | 1760 ** CREATE INDEX Ex2 ON Ex1(c3,c1); |
1454 ** | 1761 ** |
1455 ** In the Table structure describing Ex1, nCol==3 because there are | 1762 ** In the Table structure describing Ex1, nCol==3 because there are |
1456 ** three columns in the table. In the Index structure describing | 1763 ** three columns in the table. In the Index structure describing |
1457 ** Ex2, nColumn==2 since 2 of the 3 columns of Ex1 are indexed. | 1764 ** Ex2, nColumn==2 since 2 of the 3 columns of Ex1 are indexed. |
1458 ** The value of aiColumn is {2, 0}. aiColumn[0]==2 because the | 1765 ** The value of aiColumn is {2, 0}. aiColumn[0]==2 because the |
1459 ** first column to be indexed (c3) has an index of 2 in Ex1.aCol[]. | 1766 ** first column to be indexed (c3) has an index of 2 in Ex1.aCol[]. |
1460 ** The second column to be indexed (c1) has an index of 0 in | 1767 ** The second column to be indexed (c1) has an index of 0 in |
1461 ** Ex1.aCol[], hence Ex2.aiColumn[1]==0. | 1768 ** Ex1.aCol[], hence Ex2.aiColumn[1]==0. |
1462 ** | 1769 ** |
1463 ** The Index.onError field determines whether or not the indexed columns | 1770 ** The Index.onError field determines whether or not the indexed columns |
1464 ** must be unique and what to do if they are not. When Index.onError=OE_None, | 1771 ** must be unique and what to do if they are not. When Index.onError=OE_None, |
1465 ** it means this is not a unique index. Otherwise it is a unique index | 1772 ** it means this is not a unique index. Otherwise it is a unique index |
1466 ** and the value of Index.onError indicate the which conflict resolution | 1773 ** and the value of Index.onError indicate the which conflict resolution |
1467 ** algorithm to employ whenever an attempt is made to insert a non-unique | 1774 ** algorithm to employ whenever an attempt is made to insert a non-unique |
1468 ** element. | 1775 ** element. |
1469 */ | 1776 */ |
1470 struct Index { | 1777 struct Index { |
1471 char *zName; /* Name of this index */ | 1778 char *zName; /* Name of this index */ |
1472 int nColumn; /* Number of columns in the table used by this index */ | 1779 i16 *aiColumn; /* Which columns are used by this index. 1st is 0 */ |
1473 int *aiColumn; /* Which columns are used by this index. 1st is 0 */ | 1780 LogEst *aiRowLogEst; /* From ANALYZE: Est. rows selected by each column */ |
1474 unsigned *aiRowEst; /* Result of ANALYZE: Est. rows selected by each column */ | 1781 Table *pTable; /* The SQL table being indexed */ |
1475 Table *pTable; /* The SQL table being indexed */ | 1782 char *zColAff; /* String defining the affinity of each column */ |
1476 int tnum; /* Page containing root of this index in database file */ | 1783 Index *pNext; /* The next index associated with the same table */ |
1477 u8 onError; /* OE_Abort, OE_Ignore, OE_Replace, or OE_None */ | 1784 Schema *pSchema; /* Schema containing this index */ |
1478 u8 autoIndex; /* True if is automatically created (ex: by UNIQUE) */ | 1785 u8 *aSortOrder; /* for each column: True==DESC, False==ASC */ |
1479 u8 bUnordered; /* Use this index for == or IN queries only */ | 1786 char **azColl; /* Array of collation sequence names for index */ |
1480 char *zColAff; /* String defining the affinity of each column */ | 1787 Expr *pPartIdxWhere; /* WHERE clause for partial indices */ |
1481 Index *pNext; /* The next index associated with the same table */ | 1788 KeyInfo *pKeyInfo; /* A KeyInfo object suitable for this index */ |
1482 Schema *pSchema; /* Schema containing this index */ | 1789 int tnum; /* DB Page containing root of this index */ |
1483 u8 *aSortOrder; /* Array of size Index.nColumn. True==DESC, False==ASC */ | 1790 LogEst szIdxRow; /* Estimated average row size in bytes */ |
1484 char **azColl; /* Array of collation sequence names for index */ | 1791 u16 nKeyCol; /* Number of columns forming the key */ |
1485 IndexSample *aSample; /* Array of SQLITE_INDEX_SAMPLES samples */ | 1792 u16 nColumn; /* Number of columns stored in the index */ |
| 1793 u8 onError; /* OE_Abort, OE_Ignore, OE_Replace, or OE_None */ |
| 1794 unsigned idxType:2; /* 1==UNIQUE, 2==PRIMARY KEY, 0==CREATE INDEX */ |
| 1795 unsigned bUnordered:1; /* Use this index for == or IN queries only */ |
| 1796 unsigned uniqNotNull:1; /* True if UNIQUE and NOT NULL for all columns */ |
| 1797 unsigned isResized:1; /* True if resizeIndexObject() has been called */ |
| 1798 unsigned isCovering:1; /* True if this is a covering index */ |
| 1799 #ifdef SQLITE_ENABLE_STAT3_OR_STAT4 |
| 1800 int nSample; /* Number of elements in aSample[] */ |
| 1801 int nSampleCol; /* Size of IndexSample.anEq[] and so on */ |
| 1802 tRowcnt *aAvgEq; /* Average nEq values for keys not in aSample */ |
| 1803 IndexSample *aSample; /* Samples of the left-most key */ |
| 1804 tRowcnt *aiRowEst; /* Non-logarithmic stat1 data for this table */ |
| 1805 #endif |
1486 }; | 1806 }; |
1487 | 1807 |
1488 /* | 1808 /* |
1489 ** Each sample stored in the sqlite_stat2 table is represented in memory | 1809 ** Allowed values for Index.idxType |
1490 ** using a structure of this type. | 1810 */ |
| 1811 #define SQLITE_IDXTYPE_APPDEF 0 /* Created using CREATE INDEX */ |
| 1812 #define SQLITE_IDXTYPE_UNIQUE 1 /* Implements a UNIQUE constraint */ |
| 1813 #define SQLITE_IDXTYPE_PRIMARYKEY 2 /* Is the PRIMARY KEY for the table */ |
| 1814 |
| 1815 /* Return true if index X is a PRIMARY KEY index */ |
| 1816 #define IsPrimaryKeyIndex(X) ((X)->idxType==SQLITE_IDXTYPE_PRIMARYKEY) |
| 1817 |
| 1818 /* Return true if index X is a UNIQUE index */ |
| 1819 #define IsUniqueIndex(X) ((X)->onError!=OE_None) |
| 1820 |
| 1821 /* |
| 1822 ** Each sample stored in the sqlite_stat3 table is represented in memory |
| 1823 ** using a structure of this type. See documentation at the top of the |
| 1824 ** analyze.c source file for additional information. |
1491 */ | 1825 */ |
1492 struct IndexSample { | 1826 struct IndexSample { |
1493 union { | 1827 void *p; /* Pointer to sampled record */ |
1494 char *z; /* Value if eType is SQLITE_TEXT or SQLITE_BLOB */ | 1828 int n; /* Size of record in bytes */ |
1495 double r; /* Value if eType is SQLITE_FLOAT or SQLITE_INTEGER */ | 1829 tRowcnt *anEq; /* Est. number of rows where the key equals this sample */ |
1496 } u; | 1830 tRowcnt *anLt; /* Est. number of rows where key is less than this sample */ |
1497 u8 eType; /* SQLITE_NULL, SQLITE_INTEGER ... etc. */ | 1831 tRowcnt *anDLt; /* Est. number of distinct keys less than this sample */ |
1498 u8 nByte; /* Size in byte of text or blob. */ | |
1499 }; | 1832 }; |
1500 | 1833 |
1501 /* | 1834 /* |
1502 ** Each token coming out of the lexer is an instance of | 1835 ** Each token coming out of the lexer is an instance of |
1503 ** this structure. Tokens are also used as part of an expression. | 1836 ** this structure. Tokens are also used as part of an expression. |
1504 ** | 1837 ** |
1505 ** Note if Token.z==0 then Token.dyn and Token.n are undefined and | 1838 ** Note if Token.z==0 then Token.dyn and Token.n are undefined and |
1506 ** may contain random values. Do not make any assumptions about Token.dyn | 1839 ** may contain random values. Do not make any assumptions about Token.dyn |
1507 ** and Token.n when Token.z==0. | 1840 ** and Token.n when Token.z==0. |
1508 */ | 1841 */ |
(...skipping 14 matching lines...) Expand all Loading... |
1523 ** AggInfo.pGroupBy and AggInfo.aFunc.pExpr point to fields within the | 1856 ** AggInfo.pGroupBy and AggInfo.aFunc.pExpr point to fields within the |
1524 ** original Select structure that describes the SELECT statement. These | 1857 ** original Select structure that describes the SELECT statement. These |
1525 ** fields do not need to be freed when deallocating the AggInfo structure. | 1858 ** fields do not need to be freed when deallocating the AggInfo structure. |
1526 */ | 1859 */ |
1527 struct AggInfo { | 1860 struct AggInfo { |
1528 u8 directMode; /* Direct rendering mode means take data directly | 1861 u8 directMode; /* Direct rendering mode means take data directly |
1529 ** from source tables rather than from accumulators */ | 1862 ** from source tables rather than from accumulators */ |
1530 u8 useSortingIdx; /* In direct mode, reference the sorting index rather | 1863 u8 useSortingIdx; /* In direct mode, reference the sorting index rather |
1531 ** than the source table */ | 1864 ** than the source table */ |
1532 int sortingIdx; /* Cursor number of the sorting index */ | 1865 int sortingIdx; /* Cursor number of the sorting index */ |
| 1866 int sortingIdxPTab; /* Cursor number of pseudo-table */ |
| 1867 int nSortingColumn; /* Number of columns in the sorting index */ |
| 1868 int mnReg, mxReg; /* Range of registers allocated for aCol and aFunc */ |
1533 ExprList *pGroupBy; /* The group by clause */ | 1869 ExprList *pGroupBy; /* The group by clause */ |
1534 int nSortingColumn; /* Number of columns in the sorting index */ | |
1535 struct AggInfo_col { /* For each column used in source tables */ | 1870 struct AggInfo_col { /* For each column used in source tables */ |
1536 Table *pTab; /* Source table */ | 1871 Table *pTab; /* Source table */ |
1537 int iTable; /* Cursor number of the source table */ | 1872 int iTable; /* Cursor number of the source table */ |
1538 int iColumn; /* Column number within the source table */ | 1873 int iColumn; /* Column number within the source table */ |
1539 int iSorterColumn; /* Column number in the sorting index */ | 1874 int iSorterColumn; /* Column number in the sorting index */ |
1540 int iMem; /* Memory location that acts as accumulator */ | 1875 int iMem; /* Memory location that acts as accumulator */ |
1541 Expr *pExpr; /* The original expression */ | 1876 Expr *pExpr; /* The original expression */ |
1542 } *aCol; | 1877 } *aCol; |
1543 int nColumn; /* Number of used entries in aCol[] */ | 1878 int nColumn; /* Number of used entries in aCol[] */ |
1544 int nColumnAlloc; /* Number of slots allocated for aCol[] */ | |
1545 int nAccumulator; /* Number of columns that show through to the output. | 1879 int nAccumulator; /* Number of columns that show through to the output. |
1546 ** Additional columns are used only as parameters to | 1880 ** Additional columns are used only as parameters to |
1547 ** aggregate functions */ | 1881 ** aggregate functions */ |
1548 struct AggInfo_func { /* For each aggregate function */ | 1882 struct AggInfo_func { /* For each aggregate function */ |
1549 Expr *pExpr; /* Expression encoding the function */ | 1883 Expr *pExpr; /* Expression encoding the function */ |
1550 FuncDef *pFunc; /* The aggregate function implementation */ | 1884 FuncDef *pFunc; /* The aggregate function implementation */ |
1551 int iMem; /* Memory location that acts as accumulator */ | 1885 int iMem; /* Memory location that acts as accumulator */ |
1552 int iDistinct; /* Ephemeral table used to enforce DISTINCT */ | 1886 int iDistinct; /* Ephemeral table used to enforce DISTINCT */ |
1553 } *aFunc; | 1887 } *aFunc; |
1554 int nFunc; /* Number of entries in aFunc[] */ | 1888 int nFunc; /* Number of entries in aFunc[] */ |
1555 int nFuncAlloc; /* Number of slots allocated for aFunc[] */ | |
1556 }; | 1889 }; |
1557 | 1890 |
1558 /* | 1891 /* |
1559 ** The datatype ynVar is a signed integer, either 16-bit or 32-bit. | 1892 ** The datatype ynVar is a signed integer, either 16-bit or 32-bit. |
1560 ** Usually it is 16-bits. But if SQLITE_MAX_VARIABLE_NUMBER is greater | 1893 ** Usually it is 16-bits. But if SQLITE_MAX_VARIABLE_NUMBER is greater |
1561 ** than 32767 we have to make it 32-bit. 16-bit is preferred because | 1894 ** than 32767 we have to make it 32-bit. 16-bit is preferred because |
1562 ** it uses less memory in the Expr object, which is a big memory user | 1895 ** it uses less memory in the Expr object, which is a big memory user |
1563 ** in systems with lots of prepared statements. And few applications | 1896 ** in systems with lots of prepared statements. And few applications |
1564 ** need more than about 10 or 20 variables. But some extreme users want | 1897 ** need more than about 10 or 20 variables. But some extreme users want |
1565 ** to have prepared statements with over 32767 variables, and for them | 1898 ** to have prepared statements with over 32767 variables, and for them |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1630 ** If the EP_Reduced and EP_TokenOnly flags are set when | 1963 ** If the EP_Reduced and EP_TokenOnly flags are set when |
1631 ** an Expr object is truncated. When EP_Reduced is set, then all | 1964 ** an Expr object is truncated. When EP_Reduced is set, then all |
1632 ** the child Expr objects in the Expr.pLeft and Expr.pRight subtrees | 1965 ** the child Expr objects in the Expr.pLeft and Expr.pRight subtrees |
1633 ** are contained within the same memory allocation. Note, however, that | 1966 ** are contained within the same memory allocation. Note, however, that |
1634 ** the subtrees in Expr.x.pList or Expr.x.pSelect are always separately | 1967 ** the subtrees in Expr.x.pList or Expr.x.pSelect are always separately |
1635 ** allocated, regardless of whether or not EP_Reduced is set. | 1968 ** allocated, regardless of whether or not EP_Reduced is set. |
1636 */ | 1969 */ |
1637 struct Expr { | 1970 struct Expr { |
1638 u8 op; /* Operation performed by this node */ | 1971 u8 op; /* Operation performed by this node */ |
1639 char affinity; /* The affinity of the column or 0 if not a column */ | 1972 char affinity; /* The affinity of the column or 0 if not a column */ |
1640 u16 flags; /* Various flags. EP_* See below */ | 1973 u32 flags; /* Various flags. EP_* See below */ |
1641 union { | 1974 union { |
1642 char *zToken; /* Token value. Zero terminated and dequoted */ | 1975 char *zToken; /* Token value. Zero terminated and dequoted */ |
1643 int iValue; /* Non-negative integer value if EP_IntValue */ | 1976 int iValue; /* Non-negative integer value if EP_IntValue */ |
1644 } u; | 1977 } u; |
1645 | 1978 |
1646 /* If the EP_TokenOnly flag is set in the Expr.flags mask, then no | 1979 /* If the EP_TokenOnly flag is set in the Expr.flags mask, then no |
1647 ** space is allocated for the fields below this point. An attempt to | 1980 ** space is allocated for the fields below this point. An attempt to |
1648 ** access them will result in a segfault or malfunction. | 1981 ** access them will result in a segfault or malfunction. |
1649 *********************************************************************/ | 1982 *********************************************************************/ |
1650 | 1983 |
1651 Expr *pLeft; /* Left subnode */ | 1984 Expr *pLeft; /* Left subnode */ |
1652 Expr *pRight; /* Right subnode */ | 1985 Expr *pRight; /* Right subnode */ |
1653 union { | 1986 union { |
1654 ExprList *pList; /* Function arguments or in "<expr> IN (<expr-list)" */ | 1987 ExprList *pList; /* op = IN, EXISTS, SELECT, CASE, FUNCTION, BETWEEN */ |
1655 Select *pSelect; /* Used for sub-selects and "<expr> IN (<select>)" */ | 1988 Select *pSelect; /* EP_xIsSelect and op = IN, EXISTS, SELECT */ |
1656 } x; | 1989 } x; |
1657 CollSeq *pColl; /* The collation type of the column or 0 */ | |
1658 | 1990 |
1659 /* If the EP_Reduced flag is set in the Expr.flags mask, then no | 1991 /* If the EP_Reduced flag is set in the Expr.flags mask, then no |
1660 ** space is allocated for the fields below this point. An attempt to | 1992 ** space is allocated for the fields below this point. An attempt to |
1661 ** access them will result in a segfault or malfunction. | 1993 ** access them will result in a segfault or malfunction. |
1662 *********************************************************************/ | 1994 *********************************************************************/ |
1663 | 1995 |
| 1996 #if SQLITE_MAX_EXPR_DEPTH>0 |
| 1997 int nHeight; /* Height of the tree headed by this node */ |
| 1998 #endif |
1664 int iTable; /* TK_COLUMN: cursor number of table holding column | 1999 int iTable; /* TK_COLUMN: cursor number of table holding column |
1665 ** TK_REGISTER: register number | 2000 ** TK_REGISTER: register number |
1666 ** TK_TRIGGER: 1 -> new, 0 -> old */ | 2001 ** TK_TRIGGER: 1 -> new, 0 -> old |
| 2002 ** EP_Unlikely: 1000 times likelihood */ |
1667 ynVar iColumn; /* TK_COLUMN: column index. -1 for rowid. | 2003 ynVar iColumn; /* TK_COLUMN: column index. -1 for rowid. |
1668 ** TK_VARIABLE: variable number (always >= 1). */ | 2004 ** TK_VARIABLE: variable number (always >= 1). */ |
1669 i16 iAgg; /* Which entry in pAggInfo->aCol[] or ->aFunc[] */ | 2005 i16 iAgg; /* Which entry in pAggInfo->aCol[] or ->aFunc[] */ |
1670 i16 iRightJoinTable; /* If EP_FromJoin, the right table of the join */ | 2006 i16 iRightJoinTable; /* If EP_FromJoin, the right table of the join */ |
1671 u8 flags2; /* Second set of flags. EP2_... */ | 2007 u8 op2; /* TK_REGISTER: original value of Expr.op |
1672 u8 op2; /* If a TK_REGISTER, the original value of Expr.op */ | 2008 ** TK_COLUMN: the value of p5 for OP_Column |
| 2009 ** TK_AGG_FUNCTION: nesting depth */ |
1673 AggInfo *pAggInfo; /* Used by TK_AGG_COLUMN and TK_AGG_FUNCTION */ | 2010 AggInfo *pAggInfo; /* Used by TK_AGG_COLUMN and TK_AGG_FUNCTION */ |
1674 Table *pTab; /* Table for TK_COLUMN expressions. */ | 2011 Table *pTab; /* Table for TK_COLUMN expressions. */ |
1675 #if SQLITE_MAX_EXPR_DEPTH>0 | |
1676 int nHeight; /* Height of the tree headed by this node */ | |
1677 #endif | |
1678 }; | 2012 }; |
1679 | 2013 |
1680 /* | 2014 /* |
1681 ** The following are the meanings of bits in the Expr.flags field. | 2015 ** The following are the meanings of bits in the Expr.flags field. |
1682 */ | 2016 */ |
1683 #define EP_FromJoin 0x0001 /* Originated in ON or USING clause of a join */ | 2017 #define EP_FromJoin 0x000001 /* Originates in ON/USING clause of outer join */ |
1684 #define EP_Agg 0x0002 /* Contains one or more aggregate functions */ | 2018 #define EP_Agg 0x000002 /* Contains one or more aggregate functions */ |
1685 #define EP_Resolved 0x0004 /* IDs have been resolved to COLUMNs */ | 2019 #define EP_Resolved 0x000004 /* IDs have been resolved to COLUMNs */ |
1686 #define EP_Error 0x0008 /* Expression contains one or more errors */ | 2020 #define EP_Error 0x000008 /* Expression contains one or more errors */ |
1687 #define EP_Distinct 0x0010 /* Aggregate function with DISTINCT keyword */ | 2021 #define EP_Distinct 0x000010 /* Aggregate function with DISTINCT keyword */ |
1688 #define EP_VarSelect 0x0020 /* pSelect is correlated, not constant */ | 2022 #define EP_VarSelect 0x000020 /* pSelect is correlated, not constant */ |
1689 #define EP_DblQuoted 0x0040 /* token.z was originally in "..." */ | 2023 #define EP_DblQuoted 0x000040 /* token.z was originally in "..." */ |
1690 #define EP_InfixFunc 0x0080 /* True for an infix function: LIKE, GLOB, etc */ | 2024 #define EP_InfixFunc 0x000080 /* True for an infix function: LIKE, GLOB, etc */ |
1691 #define EP_ExpCollate 0x0100 /* Collating sequence specified explicitly */ | 2025 #define EP_Collate 0x000100 /* Tree contains a TK_COLLATE operator */ |
1692 #define EP_FixedDest 0x0200 /* Result needed in a specific register */ | 2026 #define EP_Generic 0x000200 /* Ignore COLLATE or affinity on this tree */ |
1693 #define EP_IntValue 0x0400 /* Integer value contained in u.iValue */ | 2027 #define EP_IntValue 0x000400 /* Integer value contained in u.iValue */ |
1694 #define EP_xIsSelect 0x0800 /* x.pSelect is valid (otherwise x.pList is) */ | 2028 #define EP_xIsSelect 0x000800 /* x.pSelect is valid (otherwise x.pList is) */ |
1695 | 2029 #define EP_Skip 0x001000 /* COLLATE, AS, or UNLIKELY */ |
1696 #define EP_Reduced 0x1000 /* Expr struct is EXPR_REDUCEDSIZE bytes only */ | 2030 #define EP_Reduced 0x002000 /* Expr struct EXPR_REDUCEDSIZE bytes only */ |
1697 #define EP_TokenOnly 0x2000 /* Expr struct is EXPR_TOKENONLYSIZE bytes only */ | 2031 #define EP_TokenOnly 0x004000 /* Expr struct EXPR_TOKENONLYSIZE bytes only */ |
1698 #define EP_Static 0x4000 /* Held in memory not obtained from malloc() */ | 2032 #define EP_Static 0x008000 /* Held in memory not obtained from malloc() */ |
1699 | 2033 #define EP_MemToken 0x010000 /* Need to sqlite3DbFree() Expr.zToken */ |
1700 /* | 2034 #define EP_NoReduce 0x020000 /* Cannot EXPRDUP_REDUCE this Expr */ |
1701 ** The following are the meanings of bits in the Expr.flags2 field. | 2035 #define EP_Unlikely 0x040000 /* unlikely() or likelihood() function */ |
1702 */ | 2036 #define EP_Constant 0x080000 /* Node is a constant */ |
1703 #define EP2_MallocedToken 0x0001 /* Need to sqlite3DbFree() Expr.zToken */ | 2037 #define EP_CanBeNull 0x100000 /* Can be null despite NOT NULL constraint */ |
1704 #define EP2_Irreducible 0x0002 /* Cannot EXPRDUP_REDUCE this Expr */ | |
1705 | |
1706 /* | |
1707 ** The pseudo-routine sqlite3ExprSetIrreducible sets the EP2_Irreducible | |
1708 ** flag on an expression structure. This flag is used for VV&A only. The | |
1709 ** routine is implemented as a macro that only works when in debugging mode, | |
1710 ** so as not to burden production code. | |
1711 */ | |
1712 #ifdef SQLITE_DEBUG | |
1713 # define ExprSetIrreducible(X) (X)->flags2 |= EP2_Irreducible | |
1714 #else | |
1715 # define ExprSetIrreducible(X) | |
1716 #endif | |
1717 | 2038 |
1718 /* | 2039 /* |
1719 ** These macros can be used to test, set, or clear bits in the | 2040 ** These macros can be used to test, set, or clear bits in the |
1720 ** Expr.flags field. | 2041 ** Expr.flags field. |
1721 */ | 2042 */ |
1722 #define ExprHasProperty(E,P) (((E)->flags&(P))==(P)) | 2043 #define ExprHasProperty(E,P) (((E)->flags&(P))!=0) |
1723 #define ExprHasAnyProperty(E,P) (((E)->flags&(P))!=0) | 2044 #define ExprHasAllProperty(E,P) (((E)->flags&(P))==(P)) |
1724 #define ExprSetProperty(E,P) (E)->flags|=(P) | 2045 #define ExprSetProperty(E,P) (E)->flags|=(P) |
1725 #define ExprClearProperty(E,P) (E)->flags&=~(P) | 2046 #define ExprClearProperty(E,P) (E)->flags&=~(P) |
1726 | 2047 |
| 2048 /* The ExprSetVVAProperty() macro is used for Verification, Validation, |
| 2049 ** and Accreditation only. It works like ExprSetProperty() during VVA |
| 2050 ** processes but is a no-op for delivery. |
| 2051 */ |
| 2052 #ifdef SQLITE_DEBUG |
| 2053 # define ExprSetVVAProperty(E,P) (E)->flags|=(P) |
| 2054 #else |
| 2055 # define ExprSetVVAProperty(E,P) |
| 2056 #endif |
| 2057 |
1727 /* | 2058 /* |
1728 ** Macros to determine the number of bytes required by a normal Expr | 2059 ** Macros to determine the number of bytes required by a normal Expr |
1729 ** struct, an Expr struct with the EP_Reduced flag set in Expr.flags | 2060 ** struct, an Expr struct with the EP_Reduced flag set in Expr.flags |
1730 ** and an Expr struct with the EP_TokenOnly flag set. | 2061 ** and an Expr struct with the EP_TokenOnly flag set. |
1731 */ | 2062 */ |
1732 #define EXPR_FULLSIZE sizeof(Expr) /* Full size */ | 2063 #define EXPR_FULLSIZE sizeof(Expr) /* Full size */ |
1733 #define EXPR_REDUCEDSIZE offsetof(Expr,iTable) /* Common features */ | 2064 #define EXPR_REDUCEDSIZE offsetof(Expr,iTable) /* Common features */ |
1734 #define EXPR_TOKENONLYSIZE offsetof(Expr,pLeft) /* Fewer features */ | 2065 #define EXPR_TOKENONLYSIZE offsetof(Expr,pLeft) /* Fewer features */ |
1735 | 2066 |
1736 /* | 2067 /* |
1737 ** Flags passed to the sqlite3ExprDup() function. See the header comment | 2068 ** Flags passed to the sqlite3ExprDup() function. See the header comment |
1738 ** above sqlite3ExprDup() for details. | 2069 ** above sqlite3ExprDup() for details. |
1739 */ | 2070 */ |
1740 #define EXPRDUP_REDUCE 0x0001 /* Used reduced-size Expr nodes */ | 2071 #define EXPRDUP_REDUCE 0x0001 /* Used reduced-size Expr nodes */ |
1741 | 2072 |
1742 /* | 2073 /* |
1743 ** A list of expressions. Each expression may optionally have a | 2074 ** A list of expressions. Each expression may optionally have a |
1744 ** name. An expr/name combination can be used in several ways, such | 2075 ** name. An expr/name combination can be used in several ways, such |
1745 ** as the list of "expr AS ID" fields following a "SELECT" or in the | 2076 ** as the list of "expr AS ID" fields following a "SELECT" or in the |
1746 ** list of "ID = expr" items in an UPDATE. A list of expressions can | 2077 ** list of "ID = expr" items in an UPDATE. A list of expressions can |
1747 ** also be used as the argument to a function, in which case the a.zName | 2078 ** also be used as the argument to a function, in which case the a.zName |
1748 ** field is not used. | 2079 ** field is not used. |
| 2080 ** |
| 2081 ** By default the Expr.zSpan field holds a human-readable description of |
| 2082 ** the expression that is used in the generation of error messages and |
| 2083 ** column labels. In this case, Expr.zSpan is typically the text of a |
| 2084 ** column expression as it exists in a SELECT statement. However, if |
| 2085 ** the bSpanIsTab flag is set, then zSpan is overloaded to mean the name |
| 2086 ** of the result column in the form: DATABASE.TABLE.COLUMN. This later |
| 2087 ** form is used for name resolution with nested FROM clauses. |
1749 */ | 2088 */ |
1750 struct ExprList { | 2089 struct ExprList { |
1751 int nExpr; /* Number of expressions on the list */ | 2090 int nExpr; /* Number of expressions on the list */ |
1752 int nAlloc; /* Number of entries allocated below */ | 2091 struct ExprList_item { /* For each expression in the list */ |
1753 int iECursor; /* VDBE Cursor associated with this ExprList */ | 2092 Expr *pExpr; /* The list of expressions */ |
1754 struct ExprList_item { | 2093 char *zName; /* Token associated with this expression */ |
1755 Expr *pExpr; /* The list of expressions */ | 2094 char *zSpan; /* Original text of the expression */ |
1756 char *zName; /* Token associated with this expression */ | 2095 u8 sortOrder; /* 1 for DESC or 0 for ASC */ |
1757 char *zSpan; /* Original text of the expression */ | 2096 unsigned done :1; /* A flag to indicate when processing is finished */ |
1758 u8 sortOrder; /* 1 for DESC or 0 for ASC */ | 2097 unsigned bSpanIsTab :1; /* zSpan holds DB.TABLE.COLUMN */ |
1759 u8 done; /* A flag to indicate when processing is finished */ | 2098 unsigned reusable :1; /* Constant expression is reusable */ |
1760 u16 iCol; /* For ORDER BY, column number in result set */ | 2099 union { |
1761 u16 iAlias; /* Index into Parse.aAlias[] for zName */ | 2100 struct { |
1762 } *a; /* One entry for each expression */ | 2101 u16 iOrderByCol; /* For ORDER BY, column number in result set */ |
| 2102 u16 iAlias; /* Index into Parse.aAlias[] for zName */ |
| 2103 } x; |
| 2104 int iConstExprReg; /* Register in which Expr value is cached */ |
| 2105 } u; |
| 2106 } *a; /* Alloc a power of two greater or equal to nExpr */ |
1763 }; | 2107 }; |
1764 | 2108 |
1765 /* | 2109 /* |
1766 ** An instance of this structure is used by the parser to record both | 2110 ** An instance of this structure is used by the parser to record both |
1767 ** the parse tree for an expression and the span of input text for an | 2111 ** the parse tree for an expression and the span of input text for an |
1768 ** expression. | 2112 ** expression. |
1769 */ | 2113 */ |
1770 struct ExprSpan { | 2114 struct ExprSpan { |
1771 Expr *pExpr; /* The expression parse tree */ | 2115 Expr *pExpr; /* The expression parse tree */ |
1772 const char *zStart; /* First character of input text */ | 2116 const char *zStart; /* First character of input text */ |
(...skipping 14 matching lines...) Expand all Loading... |
1787 ** INSERT INTO t(a,b,c) ... | 2131 ** INSERT INTO t(a,b,c) ... |
1788 ** | 2132 ** |
1789 ** If "a" is the k-th column of table "t", then IdList.a[0].idx==k. | 2133 ** If "a" is the k-th column of table "t", then IdList.a[0].idx==k. |
1790 */ | 2134 */ |
1791 struct IdList { | 2135 struct IdList { |
1792 struct IdList_item { | 2136 struct IdList_item { |
1793 char *zName; /* Name of the identifier */ | 2137 char *zName; /* Name of the identifier */ |
1794 int idx; /* Index in some Table.aCol[] of a column named zName */ | 2138 int idx; /* Index in some Table.aCol[] of a column named zName */ |
1795 } *a; | 2139 } *a; |
1796 int nId; /* Number of identifiers on the list */ | 2140 int nId; /* Number of identifiers on the list */ |
1797 int nAlloc; /* Number of entries allocated for a[] below */ | |
1798 }; | 2141 }; |
1799 | 2142 |
1800 /* | 2143 /* |
1801 ** The bitmask datatype defined below is used for various optimizations. | 2144 ** The bitmask datatype defined below is used for various optimizations. |
1802 ** | 2145 ** |
1803 ** Changing this from a 64-bit to a 32-bit type limits the number of | 2146 ** Changing this from a 64-bit to a 32-bit type limits the number of |
1804 ** tables in a join to 32 instead of 64. But it also reduces the size | 2147 ** tables in a join to 32 instead of 64. But it also reduces the size |
1805 ** of the library by 738 bytes on ix86. | 2148 ** of the library by 738 bytes on ix86. |
1806 */ | 2149 */ |
1807 typedef u64 Bitmask; | 2150 typedef u64 Bitmask; |
1808 | 2151 |
1809 /* | 2152 /* |
1810 ** The number of bits in a Bitmask. "BMS" means "BitMask Size". | 2153 ** The number of bits in a Bitmask. "BMS" means "BitMask Size". |
1811 */ | 2154 */ |
1812 #define BMS ((int)(sizeof(Bitmask)*8)) | 2155 #define BMS ((int)(sizeof(Bitmask)*8)) |
1813 | 2156 |
1814 /* | 2157 /* |
| 2158 ** A bit in a Bitmask |
| 2159 */ |
| 2160 #define MASKBIT(n) (((Bitmask)1)<<(n)) |
| 2161 #define MASKBIT32(n) (((unsigned int)1)<<(n)) |
| 2162 |
| 2163 /* |
1815 ** The following structure describes the FROM clause of a SELECT statement. | 2164 ** The following structure describes the FROM clause of a SELECT statement. |
1816 ** Each table or subquery in the FROM clause is a separate element of | 2165 ** Each table or subquery in the FROM clause is a separate element of |
1817 ** the SrcList.a[] array. | 2166 ** the SrcList.a[] array. |
1818 ** | 2167 ** |
1819 ** With the addition of multiple database support, the following structure | 2168 ** With the addition of multiple database support, the following structure |
1820 ** can also be used to describe a particular table such as the table that | 2169 ** can also be used to describe a particular table such as the table that |
1821 ** is modified by an INSERT, DELETE, or UPDATE statement. In standard SQL, | 2170 ** is modified by an INSERT, DELETE, or UPDATE statement. In standard SQL, |
1822 ** such a table must be a simple name: ID. But in SQLite, the table can | 2171 ** such a table must be a simple name: ID. But in SQLite, the table can |
1823 ** now be identified by a database name, a dot, then the table name: ID.ID. | 2172 ** now be identified by a database name, a dot, then the table name: ID.ID. |
1824 ** | 2173 ** |
1825 ** The jointype starts out showing the join type between the current table | 2174 ** The jointype starts out showing the join type between the current table |
1826 ** and the next table on the list. The parser builds the list this way. | 2175 ** and the next table on the list. The parser builds the list this way. |
1827 ** But sqlite3SrcListShiftJoinType() later shifts the jointypes so that each | 2176 ** But sqlite3SrcListShiftJoinType() later shifts the jointypes so that each |
1828 ** jointype expresses the join between the table and the previous table. | 2177 ** jointype expresses the join between the table and the previous table. |
1829 ** | 2178 ** |
1830 ** In the colUsed field, the high-order bit (bit 63) is set if the table | 2179 ** In the colUsed field, the high-order bit (bit 63) is set if the table |
1831 ** contains more than 63 columns and the 64-th or later column is used. | 2180 ** contains more than 63 columns and the 64-th or later column is used. |
1832 */ | 2181 */ |
1833 struct SrcList { | 2182 struct SrcList { |
1834 i16 nSrc; /* Number of tables or subqueries in the FROM clause */ | 2183 int nSrc; /* Number of tables or subqueries in the FROM clause */ |
1835 i16 nAlloc; /* Number of entries allocated in a[] below */ | 2184 u32 nAlloc; /* Number of entries allocated in a[] below */ |
1836 struct SrcList_item { | 2185 struct SrcList_item { |
| 2186 Schema *pSchema; /* Schema to which this item is fixed */ |
1837 char *zDatabase; /* Name of database holding this table */ | 2187 char *zDatabase; /* Name of database holding this table */ |
1838 char *zName; /* Name of the table */ | 2188 char *zName; /* Name of the table */ |
1839 char *zAlias; /* The "B" part of a "A AS B" phrase. zName is the "A" */ | 2189 char *zAlias; /* The "B" part of a "A AS B" phrase. zName is the "A" */ |
1840 Table *pTab; /* An SQL table corresponding to zName */ | 2190 Table *pTab; /* An SQL table corresponding to zName */ |
1841 Select *pSelect; /* A SELECT statement used in place of a table name */ | 2191 Select *pSelect; /* A SELECT statement used in place of a table name */ |
1842 u8 isPopulated; /* Temporary table associated with SELECT is populated */ | 2192 int addrFillSub; /* Address of subroutine to manifest a subquery */ |
| 2193 int regReturn; /* Register holding return address of addrFillSub */ |
| 2194 int regResult; /* Registers holding results of a co-routine */ |
1843 u8 jointype; /* Type of join between this able and the previous */ | 2195 u8 jointype; /* Type of join between this able and the previous */ |
1844 u8 notIndexed; /* True if there is a NOT INDEXED clause */ | 2196 unsigned notIndexed :1; /* True if there is a NOT INDEXED clause */ |
| 2197 unsigned isCorrelated :1; /* True if sub-query is correlated */ |
| 2198 unsigned viaCoroutine :1; /* Implemented as a co-routine */ |
| 2199 unsigned isRecursive :1; /* True for recursive reference in WITH */ |
1845 #ifndef SQLITE_OMIT_EXPLAIN | 2200 #ifndef SQLITE_OMIT_EXPLAIN |
1846 u8 iSelectId; /* If pSelect!=0, the id of the sub-select in EQP */ | 2201 u8 iSelectId; /* If pSelect!=0, the id of the sub-select in EQP */ |
1847 #endif | 2202 #endif |
1848 int iCursor; /* The VDBE cursor number used to access this table */ | 2203 int iCursor; /* The VDBE cursor number used to access this table */ |
1849 Expr *pOn; /* The ON clause of a join */ | 2204 Expr *pOn; /* The ON clause of a join */ |
1850 IdList *pUsing; /* The USING clause of a join */ | 2205 IdList *pUsing; /* The USING clause of a join */ |
1851 Bitmask colUsed; /* Bit N (1<<N) set if column N of pTab is used */ | 2206 Bitmask colUsed; /* Bit N (1<<N) set if column N of pTab is used */ |
1852 char *zIndex; /* Identifier from "INDEXED BY <zIndex>" clause */ | 2207 char *zIndex; /* Identifier from "INDEXED BY <zIndex>" clause */ |
1853 Index *pIndex; /* Index structure corresponding to zIndex, if any */ | 2208 Index *pIndex; /* Index structure corresponding to zIndex, if any */ |
1854 } a[1]; /* One entry for each identifier on the list */ | 2209 } a[1]; /* One entry for each identifier on the list */ |
1855 }; | 2210 }; |
1856 | 2211 |
1857 /* | 2212 /* |
1858 ** Permitted values of the SrcList.a.jointype field | 2213 ** Permitted values of the SrcList.a.jointype field |
1859 */ | 2214 */ |
1860 #define JT_INNER 0x0001 /* Any kind of inner or cross join */ | 2215 #define JT_INNER 0x0001 /* Any kind of inner or cross join */ |
1861 #define JT_CROSS 0x0002 /* Explicit use of the CROSS keyword */ | 2216 #define JT_CROSS 0x0002 /* Explicit use of the CROSS keyword */ |
1862 #define JT_NATURAL 0x0004 /* True for a "natural" join */ | 2217 #define JT_NATURAL 0x0004 /* True for a "natural" join */ |
1863 #define JT_LEFT 0x0008 /* Left outer join */ | 2218 #define JT_LEFT 0x0008 /* Left outer join */ |
1864 #define JT_RIGHT 0x0010 /* Right outer join */ | 2219 #define JT_RIGHT 0x0010 /* Right outer join */ |
1865 #define JT_OUTER 0x0020 /* The "OUTER" keyword is present */ | 2220 #define JT_OUTER 0x0020 /* The "OUTER" keyword is present */ |
1866 #define JT_ERROR 0x0040 /* unknown or unsupported join type */ | 2221 #define JT_ERROR 0x0040 /* unknown or unsupported join type */ |
1867 | 2222 |
1868 | 2223 |
1869 /* | 2224 /* |
1870 ** A WherePlan object holds information that describes a lookup | |
1871 ** strategy. | |
1872 ** | |
1873 ** This object is intended to be opaque outside of the where.c module. | |
1874 ** It is included here only so that that compiler will know how big it | |
1875 ** is. None of the fields in this object should be used outside of | |
1876 ** the where.c module. | |
1877 ** | |
1878 ** Within the union, pIdx is only used when wsFlags&WHERE_INDEXED is true. | |
1879 ** pTerm is only used when wsFlags&WHERE_MULTI_OR is true. And pVtabIdx | |
1880 ** is only used when wsFlags&WHERE_VIRTUALTABLE is true. It is never the | |
1881 ** case that more than one of these conditions is true. | |
1882 */ | |
1883 struct WherePlan { | |
1884 u32 wsFlags; /* WHERE_* flags that describe the strategy */ | |
1885 u32 nEq; /* Number of == constraints */ | |
1886 double nRow; /* Estimated number of rows (for EQP) */ | |
1887 union { | |
1888 Index *pIdx; /* Index when WHERE_INDEXED is true */ | |
1889 struct WhereTerm *pTerm; /* WHERE clause term for OR-search */ | |
1890 sqlite3_index_info *pVtabIdx; /* Virtual table index to use */ | |
1891 } u; | |
1892 }; | |
1893 | |
1894 /* | |
1895 ** For each nested loop in a WHERE clause implementation, the WhereInfo | |
1896 ** structure contains a single instance of this structure. This structure | |
1897 ** is intended to be private the the where.c module and should not be | |
1898 ** access or modified by other modules. | |
1899 ** | |
1900 ** The pIdxInfo field is used to help pick the best index on a | |
1901 ** virtual table. The pIdxInfo pointer contains indexing | |
1902 ** information for the i-th table in the FROM clause before reordering. | |
1903 ** All the pIdxInfo pointers are freed by whereInfoFree() in where.c. | |
1904 ** All other information in the i-th WhereLevel object for the i-th table | |
1905 ** after FROM clause ordering. | |
1906 */ | |
1907 struct WhereLevel { | |
1908 WherePlan plan; /* query plan for this element of the FROM clause */ | |
1909 int iLeftJoin; /* Memory cell used to implement LEFT OUTER JOIN */ | |
1910 int iTabCur; /* The VDBE cursor used to access the table */ | |
1911 int iIdxCur; /* The VDBE cursor used to access pIdx */ | |
1912 int addrBrk; /* Jump here to break out of the loop */ | |
1913 int addrNxt; /* Jump here to start the next IN combination */ | |
1914 int addrCont; /* Jump here to continue with the next loop cycle */ | |
1915 int addrFirst; /* First instruction of interior of the loop */ | |
1916 u8 iFrom; /* Which entry in the FROM clause */ | |
1917 u8 op, p5; /* Opcode and P5 of the opcode that ends the loop */ | |
1918 int p1, p2; /* Operands of the opcode used to ends the loop */ | |
1919 union { /* Information that depends on plan.wsFlags */ | |
1920 struct { | |
1921 int nIn; /* Number of entries in aInLoop[] */ | |
1922 struct InLoop { | |
1923 int iCur; /* The VDBE cursor used by this IN operator */ | |
1924 int addrInTop; /* Top of the IN loop */ | |
1925 } *aInLoop; /* Information about each nested IN operator */ | |
1926 } in; /* Used when plan.wsFlags&WHERE_IN_ABLE */ | |
1927 } u; | |
1928 | |
1929 /* The following field is really not part of the current level. But | |
1930 ** we need a place to cache virtual table index information for each | |
1931 ** virtual table in the FROM clause and the WhereLevel structure is | |
1932 ** a convenient place since there is one WhereLevel for each FROM clause | |
1933 ** element. | |
1934 */ | |
1935 sqlite3_index_info *pIdxInfo; /* Index info for n-th source table */ | |
1936 }; | |
1937 | |
1938 /* | |
1939 ** Flags appropriate for the wctrlFlags parameter of sqlite3WhereBegin() | 2225 ** Flags appropriate for the wctrlFlags parameter of sqlite3WhereBegin() |
1940 ** and the WhereInfo.wctrlFlags member. | 2226 ** and the WhereInfo.wctrlFlags member. |
1941 */ | 2227 */ |
1942 #define WHERE_ORDERBY_NORMAL 0x0000 /* No-op */ | 2228 #define WHERE_ORDERBY_NORMAL 0x0000 /* No-op */ |
1943 #define WHERE_ORDERBY_MIN 0x0001 /* ORDER BY processing for min() func */ | 2229 #define WHERE_ORDERBY_MIN 0x0001 /* ORDER BY processing for min() func */ |
1944 #define WHERE_ORDERBY_MAX 0x0002 /* ORDER BY processing for max() func */ | 2230 #define WHERE_ORDERBY_MAX 0x0002 /* ORDER BY processing for max() func */ |
1945 #define WHERE_ONEPASS_DESIRED 0x0004 /* Want to do one-pass UPDATE/DELETE */ | 2231 #define WHERE_ONEPASS_DESIRED 0x0004 /* Want to do one-pass UPDATE/DELETE */ |
1946 #define WHERE_DUPLICATES_OK 0x0008 /* Ok to return a row more than once */ | 2232 #define WHERE_DUPLICATES_OK 0x0008 /* Ok to return a row more than once */ |
1947 #define WHERE_OMIT_OPEN 0x0010 /* Table cursors are already open */ | 2233 #define WHERE_OMIT_OPEN_CLOSE 0x0010 /* Table cursors are already open */ |
1948 #define WHERE_OMIT_CLOSE 0x0020 /* Omit close of table & index cursors */ | 2234 #define WHERE_FORCE_TABLE 0x0020 /* Do not use an index-only search */ |
1949 #define WHERE_FORCE_TABLE 0x0040 /* Do not use an index-only search */ | 2235 #define WHERE_ONETABLE_ONLY 0x0040 /* Only code the 1st table in pTabList */ |
1950 #define WHERE_ONETABLE_ONLY 0x0080 /* Only code the 1st table in pTabList */ | 2236 /* 0x0080 // not currently used */ |
| 2237 #define WHERE_GROUPBY 0x0100 /* pOrderBy is really a GROUP BY */ |
| 2238 #define WHERE_DISTINCTBY 0x0200 /* pOrderby is really a DISTINCT clause */ |
| 2239 #define WHERE_WANT_DISTINCT 0x0400 /* All output needs to be distinct */ |
| 2240 #define WHERE_SORTBYGROUP 0x0800 /* Support sqlite3WhereIsSorted() */ |
| 2241 #define WHERE_REOPEN_IDX 0x1000 /* Try to use OP_ReopenIdx */ |
1951 | 2242 |
1952 /* | 2243 /* Allowed return values from sqlite3WhereIsDistinct() |
1953 ** The WHERE clause processing routine has two halves. The | |
1954 ** first part does the start of the WHERE loop and the second | |
1955 ** half does the tail of the WHERE loop. An instance of | |
1956 ** this structure is returned by the first half and passed | |
1957 ** into the second half to give some continuity. | |
1958 */ | 2244 */ |
1959 struct WhereInfo { | 2245 #define WHERE_DISTINCT_NOOP 0 /* DISTINCT keyword not used */ |
1960 Parse *pParse; /* Parsing and code generating context */ | 2246 #define WHERE_DISTINCT_UNIQUE 1 /* No duplicates */ |
1961 u16 wctrlFlags; /* Flags originally passed to sqlite3WhereBegin() */ | 2247 #define WHERE_DISTINCT_ORDERED 2 /* All duplicates are adjacent */ |
1962 u8 okOnePass; /* Ok to use one-pass algorithm for UPDATE or DELETE */ | 2248 #define WHERE_DISTINCT_UNORDERED 3 /* Duplicates are scattered */ |
1963 u8 untestedTerms; /* Not all WHERE terms resolved by outer loop */ | |
1964 SrcList *pTabList; /* List of tables in the join */ | |
1965 int iTop; /* The very beginning of the WHERE loop */ | |
1966 int iContinue; /* Jump here to continue with next record */ | |
1967 int iBreak; /* Jump here to break out of the loop */ | |
1968 int nLevel; /* Number of nested loop */ | |
1969 struct WhereClause *pWC; /* Decomposition of the WHERE clause */ | |
1970 double savedNQueryLoop; /* pParse->nQueryLoop outside the WHERE loop */ | |
1971 double nRowOut; /* Estimated number of output rows */ | |
1972 WhereLevel a[1]; /* Information about each nest loop in WHERE */ | |
1973 }; | |
1974 | 2249 |
1975 /* | 2250 /* |
1976 ** A NameContext defines a context in which to resolve table and column | 2251 ** A NameContext defines a context in which to resolve table and column |
1977 ** names. The context consists of a list of tables (the pSrcList) field and | 2252 ** names. The context consists of a list of tables (the pSrcList) field and |
1978 ** a list of named expression (pEList). The named expression list may | 2253 ** a list of named expression (pEList). The named expression list may |
1979 ** be NULL. The pSrc corresponds to the FROM clause of a SELECT or | 2254 ** be NULL. The pSrc corresponds to the FROM clause of a SELECT or |
1980 ** to the table being operated on by INSERT, UPDATE, or DELETE. The | 2255 ** to the table being operated on by INSERT, UPDATE, or DELETE. The |
1981 ** pEList corresponds to the result set of a SELECT and is NULL for | 2256 ** pEList corresponds to the result set of a SELECT and is NULL for |
1982 ** other statements. | 2257 ** other statements. |
1983 ** | 2258 ** |
1984 ** NameContexts can be nested. When resolving names, the inner-most | 2259 ** NameContexts can be nested. When resolving names, the inner-most |
1985 ** context is searched first. If no match is found, the next outer | 2260 ** context is searched first. If no match is found, the next outer |
1986 ** context is checked. If there is still no match, the next context | 2261 ** context is checked. If there is still no match, the next context |
1987 ** is checked. This process continues until either a match is found | 2262 ** is checked. This process continues until either a match is found |
1988 ** or all contexts are check. When a match is found, the nRef member of | 2263 ** or all contexts are check. When a match is found, the nRef member of |
1989 ** the context containing the match is incremented. | 2264 ** the context containing the match is incremented. |
1990 ** | 2265 ** |
1991 ** Each subquery gets a new NameContext. The pNext field points to the | 2266 ** Each subquery gets a new NameContext. The pNext field points to the |
1992 ** NameContext in the parent query. Thus the process of scanning the | 2267 ** NameContext in the parent query. Thus the process of scanning the |
1993 ** NameContext list corresponds to searching through successively outer | 2268 ** NameContext list corresponds to searching through successively outer |
1994 ** subqueries looking for a match. | 2269 ** subqueries looking for a match. |
1995 */ | 2270 */ |
1996 struct NameContext { | 2271 struct NameContext { |
1997 Parse *pParse; /* The parser */ | 2272 Parse *pParse; /* The parser */ |
1998 SrcList *pSrcList; /* One or more tables used to resolve names */ | 2273 SrcList *pSrcList; /* One or more tables used to resolve names */ |
1999 ExprList *pEList; /* Optional list of named expressions */ | 2274 ExprList *pEList; /* Optional list of result-set columns */ |
| 2275 AggInfo *pAggInfo; /* Information about aggregates at this level */ |
| 2276 NameContext *pNext; /* Next outer name context. NULL for outermost */ |
2000 int nRef; /* Number of names resolved by this context */ | 2277 int nRef; /* Number of names resolved by this context */ |
2001 int nErr; /* Number of errors encountered while resolving names */ | 2278 int nErr; /* Number of errors encountered while resolving names */ |
2002 u8 allowAgg; /* Aggregate functions allowed here */ | 2279 u16 ncFlags; /* Zero or more NC_* flags defined below */ |
2003 u8 hasAgg; /* True if aggregates are seen */ | |
2004 u8 isCheck; /* True if resolving names in a CHECK constraint */ | |
2005 int nDepth; /* Depth of subquery recursion. 1 for no recursion */ | |
2006 AggInfo *pAggInfo; /* Information about aggregates at this level */ | |
2007 NameContext *pNext; /* Next outer name context. NULL for outermost */ | |
2008 }; | 2280 }; |
2009 | 2281 |
2010 /* | 2282 /* |
| 2283 ** Allowed values for the NameContext, ncFlags field. |
| 2284 ** |
| 2285 ** Note: NC_MinMaxAgg must have the same value as SF_MinMaxAgg and |
| 2286 ** SQLITE_FUNC_MINMAX. |
| 2287 ** |
| 2288 */ |
| 2289 #define NC_AllowAgg 0x0001 /* Aggregate functions are allowed here */ |
| 2290 #define NC_HasAgg 0x0002 /* One or more aggregate functions seen */ |
| 2291 #define NC_IsCheck 0x0004 /* True if resolving names in a CHECK constraint */ |
| 2292 #define NC_InAggFunc 0x0008 /* True if analyzing arguments to an agg func */ |
| 2293 #define NC_PartIdx 0x0010 /* True if resolving a partial index WHERE */ |
| 2294 #define NC_MinMaxAgg 0x1000 /* min/max aggregates seen. See note above */ |
| 2295 |
| 2296 /* |
2011 ** An instance of the following structure contains all information | 2297 ** An instance of the following structure contains all information |
2012 ** needed to generate code for a single SELECT statement. | 2298 ** needed to generate code for a single SELECT statement. |
2013 ** | 2299 ** |
2014 ** nLimit is set to -1 if there is no LIMIT clause. nOffset is set to 0. | 2300 ** nLimit is set to -1 if there is no LIMIT clause. nOffset is set to 0. |
2015 ** If there is a LIMIT clause, the parser sets nLimit to the value of the | 2301 ** If there is a LIMIT clause, the parser sets nLimit to the value of the |
2016 ** limit and nOffset to the value of the offset (or 0 if there is not | 2302 ** limit and nOffset to the value of the offset (or 0 if there is not |
2017 ** offset). But later on, nLimit and nOffset become the memory locations | 2303 ** offset). But later on, nLimit and nOffset become the memory locations |
2018 ** in the VDBE that record the limit and offset counters. | 2304 ** in the VDBE that record the limit and offset counters. |
2019 ** | 2305 ** |
2020 ** addrOpenEphm[] entries contain the address of OP_OpenEphemeral opcodes. | 2306 ** addrOpenEphm[] entries contain the address of OP_OpenEphemeral opcodes. |
2021 ** These addresses must be stored so that we can go back and fill in | 2307 ** These addresses must be stored so that we can go back and fill in |
2022 ** the P4_KEYINFO and P2 parameters later. Neither the KeyInfo nor | 2308 ** the P4_KEYINFO and P2 parameters later. Neither the KeyInfo nor |
2023 ** the number of columns in P2 can be computed at the same time | 2309 ** the number of columns in P2 can be computed at the same time |
2024 ** as the OP_OpenEphm instruction is coded because not | 2310 ** as the OP_OpenEphm instruction is coded because not |
2025 ** enough information about the compound query is known at that point. | 2311 ** enough information about the compound query is known at that point. |
2026 ** The KeyInfo for addrOpenTran[0] and [1] contains collating sequences | 2312 ** The KeyInfo for addrOpenTran[0] and [1] contains collating sequences |
2027 ** for the result set. The KeyInfo for addrOpenTran[2] contains collating | 2313 ** for the result set. The KeyInfo for addrOpenEphm[2] contains collating |
2028 ** sequences for the ORDER BY clause. | 2314 ** sequences for the ORDER BY clause. |
2029 */ | 2315 */ |
2030 struct Select { | 2316 struct Select { |
2031 ExprList *pEList; /* The fields of the result */ | 2317 ExprList *pEList; /* The fields of the result */ |
2032 u8 op; /* One of: TK_UNION TK_ALL TK_INTERSECT TK_EXCEPT */ | 2318 u8 op; /* One of: TK_UNION TK_ALL TK_INTERSECT TK_EXCEPT */ |
2033 char affinity; /* MakeRecord with this affinity for SRT_Set */ | |
2034 u16 selFlags; /* Various SF_* values */ | 2319 u16 selFlags; /* Various SF_* values */ |
| 2320 int iLimit, iOffset; /* Memory registers holding LIMIT & OFFSET counters */ |
| 2321 #if SELECTTRACE_ENABLED |
| 2322 char zSelName[12]; /* Symbolic name of this SELECT use for debugging */ |
| 2323 #endif |
| 2324 int addrOpenEphm[2]; /* OP_OpenEphem opcodes related to this select */ |
| 2325 u64 nSelectRow; /* Estimated number of result rows */ |
2035 SrcList *pSrc; /* The FROM clause */ | 2326 SrcList *pSrc; /* The FROM clause */ |
2036 Expr *pWhere; /* The WHERE clause */ | 2327 Expr *pWhere; /* The WHERE clause */ |
2037 ExprList *pGroupBy; /* The GROUP BY clause */ | 2328 ExprList *pGroupBy; /* The GROUP BY clause */ |
2038 Expr *pHaving; /* The HAVING clause */ | 2329 Expr *pHaving; /* The HAVING clause */ |
2039 ExprList *pOrderBy; /* The ORDER BY clause */ | 2330 ExprList *pOrderBy; /* The ORDER BY clause */ |
2040 Select *pPrior; /* Prior select in a compound select statement */ | 2331 Select *pPrior; /* Prior select in a compound select statement */ |
2041 Select *pNext; /* Next select to the left in a compound */ | 2332 Select *pNext; /* Next select to the left in a compound */ |
2042 Select *pRightmost; /* Right-most select in a compound select statement */ | |
2043 Expr *pLimit; /* LIMIT expression. NULL means not used. */ | 2333 Expr *pLimit; /* LIMIT expression. NULL means not used. */ |
2044 Expr *pOffset; /* OFFSET expression. NULL means not used. */ | 2334 Expr *pOffset; /* OFFSET expression. NULL means not used. */ |
2045 int iLimit, iOffset; /* Memory registers holding LIMIT & OFFSET counters */ | 2335 With *pWith; /* WITH clause attached to this select. Or NULL. */ |
2046 int addrOpenEphm[3]; /* OP_OpenEphem opcodes related to this select */ | |
2047 double nSelectRow; /* Estimated number of result rows */ | |
2048 }; | 2336 }; |
2049 | 2337 |
2050 /* | 2338 /* |
2051 ** Allowed values for Select.selFlags. The "SF" prefix stands for | 2339 ** Allowed values for Select.selFlags. The "SF" prefix stands for |
2052 ** "Select Flag". | 2340 ** "Select Flag". |
2053 */ | 2341 */ |
2054 #define SF_Distinct 0x0001 /* Output should be DISTINCT */ | 2342 #define SF_Distinct 0x0001 /* Output should be DISTINCT */ |
2055 #define SF_Resolved 0x0002 /* Identifiers have been resolved */ | 2343 #define SF_Resolved 0x0002 /* Identifiers have been resolved */ |
2056 #define SF_Aggregate 0x0004 /* Contains aggregate functions */ | 2344 #define SF_Aggregate 0x0004 /* Contains aggregate functions */ |
2057 #define SF_UsesEphemeral 0x0008 /* Uses the OpenEphemeral opcode */ | 2345 #define SF_UsesEphemeral 0x0008 /* Uses the OpenEphemeral opcode */ |
2058 #define SF_Expanded 0x0010 /* sqlite3SelectExpand() called on this */ | 2346 #define SF_Expanded 0x0010 /* sqlite3SelectExpand() called on this */ |
2059 #define SF_HasTypeInfo 0x0020 /* FROM subqueries have Table metadata */ | 2347 #define SF_HasTypeInfo 0x0020 /* FROM subqueries have Table metadata */ |
| 2348 #define SF_Compound 0x0040 /* Part of a compound query */ |
| 2349 #define SF_Values 0x0080 /* Synthesized from VALUES clause */ |
| 2350 /* 0x0100 NOT USED */ |
| 2351 #define SF_NestedFrom 0x0200 /* Part of a parenthesized FROM clause */ |
| 2352 #define SF_MaybeConvert 0x0400 /* Need convertCompoundSelectToSubquery() */ |
| 2353 #define SF_Recursive 0x0800 /* The recursive part of a recursive CTE */ |
| 2354 #define SF_MinMaxAgg 0x1000 /* Aggregate containing min() or max() */ |
2060 | 2355 |
2061 | 2356 |
2062 /* | 2357 /* |
2063 ** The results of a select can be distributed in several ways. The | 2358 ** The results of a SELECT can be distributed in several ways, as defined |
2064 ** "SRT" prefix means "SELECT Result Type". | 2359 ** by one of the following macros. The "SRT" prefix means "SELECT Result |
| 2360 ** Type". |
| 2361 ** |
| 2362 ** SRT_Union Store results as a key in a temporary index |
| 2363 ** identified by pDest->iSDParm. |
| 2364 ** |
| 2365 ** SRT_Except Remove results from the temporary index pDest->iSDParm. |
| 2366 ** |
| 2367 ** SRT_Exists Store a 1 in memory cell pDest->iSDParm if the result |
| 2368 ** set is not empty. |
| 2369 ** |
| 2370 ** SRT_Discard Throw the results away. This is used by SELECT |
| 2371 ** statements within triggers whose only purpose is |
| 2372 ** the side-effects of functions. |
| 2373 ** |
| 2374 ** All of the above are free to ignore their ORDER BY clause. Those that |
| 2375 ** follow must honor the ORDER BY clause. |
| 2376 ** |
| 2377 ** SRT_Output Generate a row of output (using the OP_ResultRow |
| 2378 ** opcode) for each row in the result set. |
| 2379 ** |
| 2380 ** SRT_Mem Only valid if the result is a single column. |
| 2381 ** Store the first column of the first result row |
| 2382 ** in register pDest->iSDParm then abandon the rest |
| 2383 ** of the query. This destination implies "LIMIT 1". |
| 2384 ** |
| 2385 ** SRT_Set The result must be a single column. Store each |
| 2386 ** row of result as the key in table pDest->iSDParm. |
| 2387 ** Apply the affinity pDest->affSdst before storing |
| 2388 ** results. Used to implement "IN (SELECT ...)". |
| 2389 ** |
| 2390 ** SRT_EphemTab Create an temporary table pDest->iSDParm and store |
| 2391 ** the result there. The cursor is left open after |
| 2392 ** returning. This is like SRT_Table except that |
| 2393 ** this destination uses OP_OpenEphemeral to create |
| 2394 ** the table first. |
| 2395 ** |
| 2396 ** SRT_Coroutine Generate a co-routine that returns a new row of |
| 2397 ** results each time it is invoked. The entry point |
| 2398 ** of the co-routine is stored in register pDest->iSDParm |
| 2399 ** and the result row is stored in pDest->nDest registers |
| 2400 ** starting with pDest->iSdst. |
| 2401 ** |
| 2402 ** SRT_Table Store results in temporary table pDest->iSDParm. |
| 2403 ** SRT_Fifo This is like SRT_EphemTab except that the table |
| 2404 ** is assumed to already be open. SRT_Fifo has |
| 2405 ** the additional property of being able to ignore |
| 2406 ** the ORDER BY clause. |
| 2407 ** |
| 2408 ** SRT_DistFifo Store results in a temporary table pDest->iSDParm. |
| 2409 ** But also use temporary table pDest->iSDParm+1 as |
| 2410 ** a record of all prior results and ignore any duplicate |
| 2411 ** rows. Name means: "Distinct Fifo". |
| 2412 ** |
| 2413 ** SRT_Queue Store results in priority queue pDest->iSDParm (really |
| 2414 ** an index). Append a sequence number so that all entries |
| 2415 ** are distinct. |
| 2416 ** |
| 2417 ** SRT_DistQueue Store results in priority queue pDest->iSDParm only if |
| 2418 ** the same record has never been stored before. The |
| 2419 ** index at pDest->iSDParm+1 hold all prior stores. |
2065 */ | 2420 */ |
2066 #define SRT_Union 1 /* Store result as keys in an index */ | 2421 #define SRT_Union 1 /* Store result as keys in an index */ |
2067 #define SRT_Except 2 /* Remove result from a UNION index */ | 2422 #define SRT_Except 2 /* Remove result from a UNION index */ |
2068 #define SRT_Exists 3 /* Store 1 if the result is not empty */ | 2423 #define SRT_Exists 3 /* Store 1 if the result is not empty */ |
2069 #define SRT_Discard 4 /* Do not save the results anywhere */ | 2424 #define SRT_Discard 4 /* Do not save the results anywhere */ |
| 2425 #define SRT_Fifo 5 /* Store result as data with an automatic rowid */ |
| 2426 #define SRT_DistFifo 6 /* Like SRT_Fifo, but unique results only */ |
| 2427 #define SRT_Queue 7 /* Store result in an queue */ |
| 2428 #define SRT_DistQueue 8 /* Like SRT_Queue, but unique results only */ |
2070 | 2429 |
2071 /* The ORDER BY clause is ignored for all of the above */ | 2430 /* The ORDER BY clause is ignored for all of the above */ |
2072 #define IgnorableOrderby(X) ((X->eDest)<=SRT_Discard) | 2431 #define IgnorableOrderby(X) ((X->eDest)<=SRT_DistQueue) |
2073 | 2432 |
2074 #define SRT_Output 5 /* Output each row of result */ | 2433 #define SRT_Output 9 /* Output each row of result */ |
2075 #define SRT_Mem 6 /* Store result in a memory cell */ | 2434 #define SRT_Mem 10 /* Store result in a memory cell */ |
2076 #define SRT_Set 7 /* Store results as keys in an index */ | 2435 #define SRT_Set 11 /* Store results as keys in an index */ |
2077 #define SRT_Table 8 /* Store result as data with an automatic rowid */ | 2436 #define SRT_EphemTab 12 /* Create transient tab and store like SRT_Table */ |
2078 #define SRT_EphemTab 9 /* Create transient tab and store like SRT_Table */ | 2437 #define SRT_Coroutine 13 /* Generate a single row of result */ |
2079 #define SRT_Coroutine 10 /* Generate a single row of result */ | 2438 #define SRT_Table 14 /* Store result as data with an automatic rowid */ |
2080 | 2439 |
2081 /* | 2440 /* |
2082 ** A structure used to customize the behavior of sqlite3Select(). See | 2441 ** An instance of this object describes where to put of the results of |
2083 ** comments above sqlite3Select() for details. | 2442 ** a SELECT statement. |
2084 */ | 2443 */ |
2085 typedef struct SelectDest SelectDest; | |
2086 struct SelectDest { | 2444 struct SelectDest { |
2087 u8 eDest; /* How to dispose of the results */ | 2445 u8 eDest; /* How to dispose of the results. On of SRT_* above. */ |
2088 u8 affinity; /* Affinity used when eDest==SRT_Set */ | 2446 char affSdst; /* Affinity used when eDest==SRT_Set */ |
2089 int iParm; /* A parameter used by the eDest disposal method */ | 2447 int iSDParm; /* A parameter used by the eDest disposal method */ |
2090 int iMem; /* Base register where results are written */ | 2448 int iSdst; /* Base register where results are written */ |
2091 int nMem; /* Number of registers allocated */ | 2449 int nSdst; /* Number of registers allocated */ |
| 2450 ExprList *pOrderBy; /* Key columns for SRT_Queue and SRT_DistQueue */ |
2092 }; | 2451 }; |
2093 | 2452 |
2094 /* | 2453 /* |
2095 ** During code generation of statements that do inserts into AUTOINCREMENT | 2454 ** During code generation of statements that do inserts into AUTOINCREMENT |
2096 ** tables, the following information is attached to the Table.u.autoInc.p | 2455 ** tables, the following information is attached to the Table.u.autoInc.p |
2097 ** pointer of each autoincrement table to record some side information that | 2456 ** pointer of each autoincrement table to record some side information that |
2098 ** the code generator needs. We have to keep per-table autoincrement | 2457 ** the code generator needs. We have to keep per-table autoincrement |
2099 ** information in case inserts are down within triggers. Triggers do not | 2458 ** information in case inserts are down within triggers. Triggers do not |
2100 ** normally coordinate their activities, but we do need to coordinate the | 2459 ** normally coordinate their activities, but we do need to coordinate the |
2101 ** loading and saving of autoincrement information. | 2460 ** loading and saving of autoincrement information. |
(...skipping 25 matching lines...) Expand all Loading... |
2127 ** The Parse.pTriggerPrg list never contains two entries with the same | 2486 ** The Parse.pTriggerPrg list never contains two entries with the same |
2128 ** values for both pTrigger and orconf. | 2487 ** values for both pTrigger and orconf. |
2129 ** | 2488 ** |
2130 ** The TriggerPrg.aColmask[0] variable is set to a mask of old.* columns | 2489 ** The TriggerPrg.aColmask[0] variable is set to a mask of old.* columns |
2131 ** accessed (or set to 0 for triggers fired as a result of INSERT | 2490 ** accessed (or set to 0 for triggers fired as a result of INSERT |
2132 ** statements). Similarly, the TriggerPrg.aColmask[1] variable is set to | 2491 ** statements). Similarly, the TriggerPrg.aColmask[1] variable is set to |
2133 ** a mask of new.* columns used by the program. | 2492 ** a mask of new.* columns used by the program. |
2134 */ | 2493 */ |
2135 struct TriggerPrg { | 2494 struct TriggerPrg { |
2136 Trigger *pTrigger; /* Trigger this program was coded from */ | 2495 Trigger *pTrigger; /* Trigger this program was coded from */ |
| 2496 TriggerPrg *pNext; /* Next entry in Parse.pTriggerPrg list */ |
| 2497 SubProgram *pProgram; /* Program implementing pTrigger/orconf */ |
2137 int orconf; /* Default ON CONFLICT policy */ | 2498 int orconf; /* Default ON CONFLICT policy */ |
2138 SubProgram *pProgram; /* Program implementing pTrigger/orconf */ | |
2139 u32 aColmask[2]; /* Masks of old.*, new.* columns accessed */ | 2499 u32 aColmask[2]; /* Masks of old.*, new.* columns accessed */ |
2140 TriggerPrg *pNext; /* Next entry in Parse.pTriggerPrg list */ | |
2141 }; | 2500 }; |
2142 | 2501 |
2143 /* | 2502 /* |
2144 ** The yDbMask datatype for the bitmask of all attached databases. | 2503 ** The yDbMask datatype for the bitmask of all attached databases. |
2145 */ | 2504 */ |
2146 #if SQLITE_MAX_ATTACHED>30 | 2505 #if SQLITE_MAX_ATTACHED>30 |
2147 typedef sqlite3_uint64 yDbMask; | 2506 typedef unsigned char yDbMask[(SQLITE_MAX_ATTACHED+9)/8]; |
| 2507 # define DbMaskTest(M,I) (((M)[(I)/8]&(1<<((I)&7)))!=0) |
| 2508 # define DbMaskZero(M) memset((M),0,sizeof(M)) |
| 2509 # define DbMaskSet(M,I) (M)[(I)/8]|=(1<<((I)&7)) |
| 2510 # define DbMaskAllZero(M) sqlite3DbMaskAllZero(M) |
| 2511 # define DbMaskNonZero(M) (sqlite3DbMaskAllZero(M)==0) |
2148 #else | 2512 #else |
2149 typedef unsigned int yDbMask; | 2513 typedef unsigned int yDbMask; |
| 2514 # define DbMaskTest(M,I) (((M)&(((yDbMask)1)<<(I)))!=0) |
| 2515 # define DbMaskZero(M) (M)=0 |
| 2516 # define DbMaskSet(M,I) (M)|=(((yDbMask)1)<<(I)) |
| 2517 # define DbMaskAllZero(M) (M)==0 |
| 2518 # define DbMaskNonZero(M) (M)!=0 |
2150 #endif | 2519 #endif |
2151 | 2520 |
2152 /* | 2521 /* |
2153 ** An SQL parser context. A copy of this structure is passed through | 2522 ** An SQL parser context. A copy of this structure is passed through |
2154 ** the parser and down into all the parser action routine in order to | 2523 ** the parser and down into all the parser action routine in order to |
2155 ** carry around information that is global to the entire parse. | 2524 ** carry around information that is global to the entire parse. |
2156 ** | 2525 ** |
2157 ** The structure is divided into two parts. When the parser and code | 2526 ** The structure is divided into two parts. When the parser and code |
2158 ** generate call themselves recursively, the first part of the structure | 2527 ** generate call themselves recursively, the first part of the structure |
2159 ** is constant but the second part is reset at the beginning and end of | 2528 ** is constant but the second part is reset at the beginning and end of |
2160 ** each recursion. | 2529 ** each recursion. |
2161 ** | 2530 ** |
2162 ** The nTableLock and aTableLock variables are only used if the shared-cache | 2531 ** The nTableLock and aTableLock variables are only used if the shared-cache |
2163 ** feature is enabled (if sqlite3Tsd()->useSharedData is true). They are | 2532 ** feature is enabled (if sqlite3Tsd()->useSharedData is true). They are |
2164 ** used to store the set of table-locks required by the statement being | 2533 ** used to store the set of table-locks required by the statement being |
2165 ** compiled. Function sqlite3TableLock() is used to add entries to the | 2534 ** compiled. Function sqlite3TableLock() is used to add entries to the |
2166 ** list. | 2535 ** list. |
2167 */ | 2536 */ |
2168 struct Parse { | 2537 struct Parse { |
2169 sqlite3 *db; /* The main database structure */ | 2538 sqlite3 *db; /* The main database structure */ |
2170 int rc; /* Return code from execution */ | |
2171 char *zErrMsg; /* An error message */ | 2539 char *zErrMsg; /* An error message */ |
2172 Vdbe *pVdbe; /* An engine for executing database bytecode */ | 2540 Vdbe *pVdbe; /* An engine for executing database bytecode */ |
| 2541 int rc; /* Return code from execution */ |
2173 u8 colNamesSet; /* TRUE after OP_ColumnName has been issued to pVdbe */ | 2542 u8 colNamesSet; /* TRUE after OP_ColumnName has been issued to pVdbe */ |
2174 u8 nameClash; /* A permanent table name clashes with temp table name */ | |
2175 u8 checkSchema; /* Causes schema cookie check after an error */ | 2543 u8 checkSchema; /* Causes schema cookie check after an error */ |
2176 u8 nested; /* Number of nested calls to the parser/code generator */ | 2544 u8 nested; /* Number of nested calls to the parser/code generator */ |
2177 u8 parseError; /* True after a parsing error. Ticket #1794 */ | |
2178 u8 nTempReg; /* Number of temporary registers in aTempReg[] */ | 2545 u8 nTempReg; /* Number of temporary registers in aTempReg[] */ |
2179 u8 nTempInUse; /* Number of aTempReg[] currently checked out */ | 2546 u8 isMultiWrite; /* True if statement may modify/insert multiple rows */ |
| 2547 u8 mayAbort; /* True if statement may throw an ABORT exception */ |
| 2548 u8 hasCompound; /* Need to invoke convertCompoundSelectToSubquery() */ |
| 2549 u8 okConstFactor; /* OK to factor out constants */ |
2180 int aTempReg[8]; /* Holding area for temporary registers */ | 2550 int aTempReg[8]; /* Holding area for temporary registers */ |
2181 int nRangeReg; /* Size of the temporary register block */ | 2551 int nRangeReg; /* Size of the temporary register block */ |
2182 int iRangeReg; /* First register in temporary register block */ | 2552 int iRangeReg; /* First register in temporary register block */ |
2183 int nErr; /* Number of errors seen */ | 2553 int nErr; /* Number of errors seen */ |
2184 int nTab; /* Number of previously allocated VDBE cursors */ | 2554 int nTab; /* Number of previously allocated VDBE cursors */ |
2185 int nMem; /* Number of memory cells used so far */ | 2555 int nMem; /* Number of memory cells used so far */ |
2186 int nSet; /* Number of sets used so far */ | 2556 int nSet; /* Number of sets used so far */ |
| 2557 int nOnce; /* Number of OP_Once instructions so far */ |
| 2558 int nOpAlloc; /* Number of slots allocated for Vdbe.aOp[] */ |
| 2559 int iFixedOp; /* Never back out opcodes iFixedOp-1 or earlier */ |
2187 int ckBase; /* Base register of data during check constraints */ | 2560 int ckBase; /* Base register of data during check constraints */ |
| 2561 int iPartIdxTab; /* Table corresponding to a partial index */ |
2188 int iCacheLevel; /* ColCache valid when aColCache[].iLevel<=iCacheLevel */ | 2562 int iCacheLevel; /* ColCache valid when aColCache[].iLevel<=iCacheLevel */ |
2189 int iCacheCnt; /* Counter used to generate aColCache[].lru values */ | 2563 int iCacheCnt; /* Counter used to generate aColCache[].lru values */ |
2190 u8 nColCache; /* Number of entries in the column cache */ | 2564 int nLabel; /* Number of labels used */ |
2191 u8 iColCache; /* Next entry of the cache to replace */ | 2565 int *aLabel; /* Space to hold the labels */ |
2192 struct yColCache { | 2566 struct yColCache { |
2193 int iTable; /* Table cursor number */ | 2567 int iTable; /* Table cursor number */ |
2194 int iColumn; /* Table column number */ | 2568 i16 iColumn; /* Table column number */ |
2195 u8 tempReg; /* iReg is a temp register that needs to be freed */ | 2569 u8 tempReg; /* iReg is a temp register that needs to be freed */ |
2196 int iLevel; /* Nesting level */ | 2570 int iLevel; /* Nesting level */ |
2197 int iReg; /* Reg with value of this column. 0 means none. */ | 2571 int iReg; /* Reg with value of this column. 0 means none. */ |
2198 int lru; /* Least recently used entry has the smallest value */ | 2572 int lru; /* Least recently used entry has the smallest value */ |
2199 } aColCache[SQLITE_N_COLCACHE]; /* One for each column cache entry */ | 2573 } aColCache[SQLITE_N_COLCACHE]; /* One for each column cache entry */ |
| 2574 ExprList *pConstExpr;/* Constant expressions */ |
| 2575 Token constraintName;/* Name of the constraint currently being parsed */ |
2200 yDbMask writeMask; /* Start a write transaction on these databases */ | 2576 yDbMask writeMask; /* Start a write transaction on these databases */ |
2201 yDbMask cookieMask; /* Bitmask of schema verified databases */ | 2577 yDbMask cookieMask; /* Bitmask of schema verified databases */ |
2202 u8 isMultiWrite; /* True if statement may affect/insert multiple rows */ | |
2203 u8 mayAbort; /* True if statement may throw an ABORT exception */ | |
2204 int cookieGoto; /* Address of OP_Goto to cookie verifier subroutine */ | |
2205 int cookieValue[SQLITE_MAX_ATTACHED+2]; /* Values of cookies to verify */ | 2578 int cookieValue[SQLITE_MAX_ATTACHED+2]; /* Values of cookies to verify */ |
| 2579 int regRowid; /* Register holding rowid of CREATE TABLE entry */ |
| 2580 int regRoot; /* Register holding root page number for new objects */ |
| 2581 int nMaxArg; /* Max args passed to user function by sub-program */ |
| 2582 #if SELECTTRACE_ENABLED |
| 2583 int nSelect; /* Number of SELECT statements seen */ |
| 2584 int nSelectIndent; /* How far to indent SELECTTRACE() output */ |
| 2585 #endif |
2206 #ifndef SQLITE_OMIT_SHARED_CACHE | 2586 #ifndef SQLITE_OMIT_SHARED_CACHE |
2207 int nTableLock; /* Number of locks in aTableLock */ | 2587 int nTableLock; /* Number of locks in aTableLock */ |
2208 TableLock *aTableLock; /* Required table locks for shared-cache mode */ | 2588 TableLock *aTableLock; /* Required table locks for shared-cache mode */ |
2209 #endif | 2589 #endif |
2210 int regRowid; /* Register holding rowid of CREATE TABLE entry */ | |
2211 int regRoot; /* Register holding root page number for new objects */ | |
2212 AutoincInfo *pAinc; /* Information about AUTOINCREMENT counters */ | 2590 AutoincInfo *pAinc; /* Information about AUTOINCREMENT counters */ |
2213 int nMaxArg; /* Max args passed to user function by sub-program */ | |
2214 | 2591 |
2215 /* Information used while coding trigger programs. */ | 2592 /* Information used while coding trigger programs. */ |
2216 Parse *pToplevel; /* Parse structure for main program (or NULL) */ | 2593 Parse *pToplevel; /* Parse structure for main program (or NULL) */ |
2217 Table *pTriggerTab; /* Table triggers are being coded for */ | 2594 Table *pTriggerTab; /* Table triggers are being coded for */ |
| 2595 int addrCrTab; /* Address of OP_CreateTable opcode on CREATE TABLE */ |
| 2596 int addrSkipPK; /* Address of instruction to skip PRIMARY KEY index */ |
| 2597 u32 nQueryLoop; /* Est number of iterations of a query (10*log2(N)) */ |
2218 u32 oldmask; /* Mask of old.* columns referenced */ | 2598 u32 oldmask; /* Mask of old.* columns referenced */ |
2219 u32 newmask; /* Mask of new.* columns referenced */ | 2599 u32 newmask; /* Mask of new.* columns referenced */ |
2220 u8 eTriggerOp; /* TK_UPDATE, TK_INSERT or TK_DELETE */ | 2600 u8 eTriggerOp; /* TK_UPDATE, TK_INSERT or TK_DELETE */ |
2221 u8 eOrconf; /* Default ON CONFLICT policy for trigger steps */ | 2601 u8 eOrconf; /* Default ON CONFLICT policy for trigger steps */ |
2222 u8 disableTriggers; /* True to disable triggers */ | 2602 u8 disableTriggers; /* True to disable triggers */ |
2223 double nQueryLoop; /* Estimated number of iterations of a query */ | |
2224 | 2603 |
2225 /* Above is constant between recursions. Below is reset before and after | 2604 /************************************************************************ |
2226 ** each recursion */ | 2605 ** Above is constant between recursions. Below is reset before and after |
| 2606 ** each recursion. The boundary between these two regions is determined |
| 2607 ** using offsetof(Parse,nVar) so the nVar field must be the first field |
| 2608 ** in the recursive region. |
| 2609 ************************************************************************/ |
2227 | 2610 |
2228 int nVar; /* Number of '?' variables seen in the SQL so far */ | 2611 int nVar; /* Number of '?' variables seen in the SQL so far */ |
2229 int nVarExpr; /* Number of used slots in apVarExpr[] */ | 2612 int nzVar; /* Number of available slots in azVar[] */ |
2230 int nVarExprAlloc; /* Number of allocated slots in apVarExpr[] */ | 2613 u8 iPkSortOrder; /* ASC or DESC for INTEGER PRIMARY KEY */ |
2231 Expr **apVarExpr; /* Pointers to :aaa and $aaaa wildcard expressions */ | 2614 u8 bFreeWith; /* True if pWith should be freed with parser */ |
2232 Vdbe *pReprepare; /* VM being reprepared (sqlite3Reprepare()) */ | 2615 u8 explain; /* True if the EXPLAIN flag is found on the query */ |
2233 int nAlias; /* Number of aliased result set columns */ | 2616 #ifndef SQLITE_OMIT_VIRTUALTABLE |
2234 int nAliasAlloc; /* Number of allocated slots for aAlias[] */ | 2617 u8 declareVtab; /* True if inside sqlite3_declare_vtab() */ |
2235 int *aAlias; /* Register used to hold aliased result */ | 2618 int nVtabLock; /* Number of virtual tables to lock */ |
2236 u8 explain; /* True if the EXPLAIN flag is found on the query */ | 2619 #endif |
2237 Token sNameToken; /* Token with unqualified schema object name */ | 2620 int nAlias; /* Number of aliased result set columns */ |
2238 Token sLastToken; /* The last token parsed */ | 2621 int nHeight; /* Expression tree height of current sub-select */ |
2239 const char *zTail; /* All SQL text past the last semicolon parsed */ | 2622 #ifndef SQLITE_OMIT_EXPLAIN |
2240 Table *pNewTable; /* A table being constructed by CREATE TABLE */ | 2623 int iSelectId; /* ID of current select for EXPLAIN output */ |
| 2624 int iNextSelectId; /* Next available select ID for EXPLAIN output */ |
| 2625 #endif |
| 2626 char **azVar; /* Pointers to names of parameters */ |
| 2627 Vdbe *pReprepare; /* VM being reprepared (sqlite3Reprepare()) */ |
| 2628 const char *zTail; /* All SQL text past the last semicolon parsed */ |
| 2629 Table *pNewTable; /* A table being constructed by CREATE TABLE */ |
2241 Trigger *pNewTrigger; /* Trigger under construct by a CREATE TRIGGER */ | 2630 Trigger *pNewTrigger; /* Trigger under construct by a CREATE TRIGGER */ |
2242 const char *zAuthContext; /* The 6th parameter to db->xAuth callbacks */ | 2631 const char *zAuthContext; /* The 6th parameter to db->xAuth callbacks */ |
| 2632 Token sNameToken; /* Token with unqualified schema object name */ |
| 2633 Token sLastToken; /* The last token parsed */ |
2243 #ifndef SQLITE_OMIT_VIRTUALTABLE | 2634 #ifndef SQLITE_OMIT_VIRTUALTABLE |
2244 Token sArg; /* Complete text of a module argument */ | 2635 Token sArg; /* Complete text of a module argument */ |
2245 u8 declareVtab; /* True if inside sqlite3_declare_vtab() */ | 2636 Table **apVtabLock; /* Pointer to virtual tables needing locking */ |
2246 int nVtabLock; /* Number of virtual tables to lock */ | |
2247 Table **apVtabLock; /* Pointer to virtual tables needing locking */ | |
2248 #endif | 2637 #endif |
2249 int nHeight; /* Expression tree height of current sub-select */ | 2638 Table *pZombieTab; /* List of Table objects to delete after code gen */ |
2250 Table *pZombieTab; /* List of Table objects to delete after code gen */ | 2639 TriggerPrg *pTriggerPrg; /* Linked list of coded triggers */ |
2251 TriggerPrg *pTriggerPrg; /* Linked list of coded triggers */ | 2640 With *pWith; /* Current WITH clause, or NULL */ |
2252 | |
2253 #ifndef SQLITE_OMIT_EXPLAIN | |
2254 int iSelectId; | |
2255 int iNextSelectId; | |
2256 #endif | |
2257 }; | 2641 }; |
2258 | 2642 |
| 2643 /* |
| 2644 ** Return true if currently inside an sqlite3_declare_vtab() call. |
| 2645 */ |
2259 #ifdef SQLITE_OMIT_VIRTUALTABLE | 2646 #ifdef SQLITE_OMIT_VIRTUALTABLE |
2260 #define IN_DECLARE_VTAB 0 | 2647 #define IN_DECLARE_VTAB 0 |
2261 #else | 2648 #else |
2262 #define IN_DECLARE_VTAB (pParse->declareVtab) | 2649 #define IN_DECLARE_VTAB (pParse->declareVtab) |
2263 #endif | 2650 #endif |
2264 | 2651 |
2265 /* | 2652 /* |
2266 ** An instance of the following structure can be declared on a stack and used | 2653 ** An instance of the following structure can be declared on a stack and used |
2267 ** to save the Parse.zAuthContext value so that it can be restored later. | 2654 ** to save the Parse.zAuthContext value so that it can be restored later. |
2268 */ | 2655 */ |
2269 struct AuthContext { | 2656 struct AuthContext { |
2270 const char *zAuthContext; /* Put saved Parse.zAuthContext here */ | 2657 const char *zAuthContext; /* Put saved Parse.zAuthContext here */ |
2271 Parse *pParse; /* The Parse structure */ | 2658 Parse *pParse; /* The Parse structure */ |
2272 }; | 2659 }; |
2273 | 2660 |
2274 /* | 2661 /* |
2275 ** Bitfield flags for P5 value in OP_Insert and OP_Delete | 2662 ** Bitfield flags for P5 value in various opcodes. |
2276 */ | 2663 */ |
2277 #define OPFLAG_NCHANGE 0x01 /* Set to update db->nChange */ | 2664 #define OPFLAG_NCHANGE 0x01 /* Set to update db->nChange */ |
| 2665 #define OPFLAG_EPHEM 0x01 /* OP_Column: Ephemeral output is ok */ |
2278 #define OPFLAG_LASTROWID 0x02 /* Set to update db->lastRowid */ | 2666 #define OPFLAG_LASTROWID 0x02 /* Set to update db->lastRowid */ |
2279 #define OPFLAG_ISUPDATE 0x04 /* This OP_Insert is an sql UPDATE */ | 2667 #define OPFLAG_ISUPDATE 0x04 /* This OP_Insert is an sql UPDATE */ |
2280 #define OPFLAG_APPEND 0x08 /* This is likely to be an append */ | 2668 #define OPFLAG_APPEND 0x08 /* This is likely to be an append */ |
2281 #define OPFLAG_USESEEKRESULT 0x10 /* Try to avoid a seek in BtreeInsert() */ | 2669 #define OPFLAG_USESEEKRESULT 0x10 /* Try to avoid a seek in BtreeInsert() */ |
2282 #define OPFLAG_CLEARCACHE 0x20 /* Clear pseudo-table cache in OP_Column */ | 2670 #define OPFLAG_LENGTHARG 0x40 /* OP_Column only used for length() */ |
| 2671 #define OPFLAG_TYPEOFARG 0x80 /* OP_Column only used for typeof() */ |
| 2672 #define OPFLAG_BULKCSR 0x01 /* OP_Open** used to open bulk cursor */ |
| 2673 #define OPFLAG_P2ISREG 0x02 /* P2 to OP_Open** is a register number */ |
| 2674 #define OPFLAG_PERMUTE 0x01 /* OP_Compare: use the permutation */ |
2283 | 2675 |
2284 /* | 2676 /* |
2285 * Each trigger present in the database schema is stored as an instance of | 2677 * Each trigger present in the database schema is stored as an instance of |
2286 * struct Trigger. | 2678 * struct Trigger. |
2287 * | 2679 * |
2288 * Pointers to instances of struct Trigger are stored in two ways. | 2680 * Pointers to instances of struct Trigger are stored in two ways. |
2289 * 1. In the "trigHash" hash table (part of the sqlite3* that represents the | 2681 * 1. In the "trigHash" hash table (part of the sqlite3* that represents the |
2290 * database). This allows Trigger structures to be retrieved by name. | 2682 * database). This allows Trigger structures to be retrieved by name. |
2291 * 2. All triggers associated with a single table form a linked list, using the | 2683 * 2. All triggers associated with a single table form a linked list, using the |
2292 * pNext member of struct Trigger. A pointer to the first element of the | 2684 * pNext member of struct Trigger. A pointer to the first element of the |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2358 * argument. | 2750 * argument. |
2359 * | 2751 * |
2360 */ | 2752 */ |
2361 struct TriggerStep { | 2753 struct TriggerStep { |
2362 u8 op; /* One of TK_DELETE, TK_UPDATE, TK_INSERT, TK_SELECT */ | 2754 u8 op; /* One of TK_DELETE, TK_UPDATE, TK_INSERT, TK_SELECT */ |
2363 u8 orconf; /* OE_Rollback etc. */ | 2755 u8 orconf; /* OE_Rollback etc. */ |
2364 Trigger *pTrig; /* The trigger that this step is a part of */ | 2756 Trigger *pTrig; /* The trigger that this step is a part of */ |
2365 Select *pSelect; /* SELECT statment or RHS of INSERT INTO .. SELECT ... */ | 2757 Select *pSelect; /* SELECT statment or RHS of INSERT INTO .. SELECT ... */ |
2366 Token target; /* Target table for DELETE, UPDATE, INSERT */ | 2758 Token target; /* Target table for DELETE, UPDATE, INSERT */ |
2367 Expr *pWhere; /* The WHERE clause for DELETE or UPDATE steps */ | 2759 Expr *pWhere; /* The WHERE clause for DELETE or UPDATE steps */ |
2368 ExprList *pExprList; /* SET clause for UPDATE. VALUES clause for INSERT */ | 2760 ExprList *pExprList; /* SET clause for UPDATE. */ |
2369 IdList *pIdList; /* Column names for INSERT */ | 2761 IdList *pIdList; /* Column names for INSERT */ |
2370 TriggerStep *pNext; /* Next in the link-list */ | 2762 TriggerStep *pNext; /* Next in the link-list */ |
2371 TriggerStep *pLast; /* Last element in link-list. Valid for 1st elem only */ | 2763 TriggerStep *pLast; /* Last element in link-list. Valid for 1st elem only */ |
2372 }; | 2764 }; |
2373 | 2765 |
2374 /* | 2766 /* |
2375 ** The following structure contains information used by the sqliteFix... | 2767 ** The following structure contains information used by the sqliteFix... |
2376 ** routines as they walk the parse tree to make database references | 2768 ** routines as they walk the parse tree to make database references |
2377 ** explicit. | 2769 ** explicit. |
2378 */ | 2770 */ |
2379 typedef struct DbFixer DbFixer; | 2771 typedef struct DbFixer DbFixer; |
2380 struct DbFixer { | 2772 struct DbFixer { |
2381 Parse *pParse; /* The parsing context. Error messages written here */ | 2773 Parse *pParse; /* The parsing context. Error messages written here */ |
| 2774 Schema *pSchema; /* Fix items to this schema */ |
| 2775 int bVarOnly; /* Check for variable references only */ |
2382 const char *zDb; /* Make sure all objects are contained in this database */ | 2776 const char *zDb; /* Make sure all objects are contained in this database */ |
2383 const char *zType; /* Type of the container - used for error messages */ | 2777 const char *zType; /* Type of the container - used for error messages */ |
2384 const Token *pName; /* Name of the container - used for error messages */ | 2778 const Token *pName; /* Name of the container - used for error messages */ |
2385 }; | 2779 }; |
2386 | 2780 |
2387 /* | 2781 /* |
2388 ** An objected used to accumulate the text of a string where we | 2782 ** An objected used to accumulate the text of a string where we |
2389 ** do not necessarily know how big the string will be in the end. | 2783 ** do not necessarily know how big the string will be in the end. |
2390 */ | 2784 */ |
2391 struct StrAccum { | 2785 struct StrAccum { |
2392 sqlite3 *db; /* Optional database for lookaside. Can be NULL */ | 2786 sqlite3 *db; /* Optional database for lookaside. Can be NULL */ |
2393 char *zBase; /* A base allocation. Not from malloc. */ | 2787 char *zBase; /* A base allocation. Not from malloc. */ |
2394 char *zText; /* The string collected so far */ | 2788 char *zText; /* The string collected so far */ |
2395 int nChar; /* Length of the string so far */ | 2789 int nChar; /* Length of the string so far */ |
2396 int nAlloc; /* Amount of space allocated in zText */ | 2790 int nAlloc; /* Amount of space allocated in zText */ |
2397 int mxAlloc; /* Maximum allowed string length */ | 2791 int mxAlloc; /* Maximum allowed string length */ |
2398 u8 mallocFailed; /* Becomes true if any memory allocation fails */ | |
2399 u8 useMalloc; /* 0: none, 1: sqlite3DbMalloc, 2: sqlite3_malloc */ | 2792 u8 useMalloc; /* 0: none, 1: sqlite3DbMalloc, 2: sqlite3_malloc */ |
2400 u8 tooBig; /* Becomes true if string size exceeds limits */ | 2793 u8 accError; /* STRACCUM_NOMEM or STRACCUM_TOOBIG */ |
2401 }; | 2794 }; |
| 2795 #define STRACCUM_NOMEM 1 |
| 2796 #define STRACCUM_TOOBIG 2 |
2402 | 2797 |
2403 /* | 2798 /* |
2404 ** A pointer to this structure is used to communicate information | 2799 ** A pointer to this structure is used to communicate information |
2405 ** from sqlite3Init and OP_ParseSchema into the sqlite3InitCallback. | 2800 ** from sqlite3Init and OP_ParseSchema into the sqlite3InitCallback. |
2406 */ | 2801 */ |
2407 typedef struct { | 2802 typedef struct { |
2408 sqlite3 *db; /* The database being initialized */ | 2803 sqlite3 *db; /* The database being initialized */ |
| 2804 char **pzErrMsg; /* Error message stored here */ |
2409 int iDb; /* 0 for main database. 1 for TEMP, 2.. for ATTACHed */ | 2805 int iDb; /* 0 for main database. 1 for TEMP, 2.. for ATTACHed */ |
2410 char **pzErrMsg; /* Error message stored here */ | |
2411 int rc; /* Result code stored here */ | 2806 int rc; /* Result code stored here */ |
2412 } InitData; | 2807 } InitData; |
2413 | 2808 |
2414 /* | 2809 /* |
2415 ** Structure containing global configuration data for the SQLite library. | 2810 ** Structure containing global configuration data for the SQLite library. |
2416 ** | 2811 ** |
2417 ** This structure also contains some state information. | 2812 ** This structure also contains some state information. |
2418 */ | 2813 */ |
2419 struct Sqlite3Config { | 2814 struct Sqlite3Config { |
2420 int bMemstat; /* True to enable memory status */ | 2815 int bMemstat; /* True to enable memory status */ |
2421 int bCoreMutex; /* True to enable core mutexing */ | 2816 int bCoreMutex; /* True to enable core mutexing */ |
2422 int bFullMutex; /* True to enable full mutexing */ | 2817 int bFullMutex; /* True to enable full mutexing */ |
| 2818 int bOpenUri; /* True to interpret filenames as URIs */ |
| 2819 int bUseCis; /* Use covering indices for full-scans */ |
2423 int mxStrlen; /* Maximum string length */ | 2820 int mxStrlen; /* Maximum string length */ |
| 2821 int neverCorrupt; /* Database is always well-formed */ |
2424 int szLookaside; /* Default lookaside buffer size */ | 2822 int szLookaside; /* Default lookaside buffer size */ |
2425 int nLookaside; /* Default lookaside buffer count */ | 2823 int nLookaside; /* Default lookaside buffer count */ |
2426 sqlite3_mem_methods m; /* Low-level memory allocation interface */ | 2824 sqlite3_mem_methods m; /* Low-level memory allocation interface */ |
2427 sqlite3_mutex_methods mutex; /* Low-level mutex interface */ | 2825 sqlite3_mutex_methods mutex; /* Low-level mutex interface */ |
2428 sqlite3_pcache_methods pcache; /* Low-level page-cache interface */ | 2826 sqlite3_pcache_methods2 pcache2; /* Low-level page-cache interface */ |
2429 void *pHeap; /* Heap storage space */ | 2827 void *pHeap; /* Heap storage space */ |
2430 int nHeap; /* Size of pHeap[] */ | 2828 int nHeap; /* Size of pHeap[] */ |
2431 int mnReq, mxReq; /* Min and max heap requests sizes */ | 2829 int mnReq, mxReq; /* Min and max heap requests sizes */ |
| 2830 sqlite3_int64 szMmap; /* mmap() space per open file */ |
| 2831 sqlite3_int64 mxMmap; /* Maximum value for szMmap */ |
2432 void *pScratch; /* Scratch memory */ | 2832 void *pScratch; /* Scratch memory */ |
2433 int szScratch; /* Size of each scratch buffer */ | 2833 int szScratch; /* Size of each scratch buffer */ |
2434 int nScratch; /* Number of scratch buffers */ | 2834 int nScratch; /* Number of scratch buffers */ |
2435 void *pPage; /* Page cache memory */ | 2835 void *pPage; /* Page cache memory */ |
2436 int szPage; /* Size of each page in pPage[] */ | 2836 int szPage; /* Size of each page in pPage[] */ |
2437 int nPage; /* Number of pages in pPage[] */ | 2837 int nPage; /* Number of pages in pPage[] */ |
2438 int mxParserStack; /* maximum depth of the parser stack */ | 2838 int mxParserStack; /* maximum depth of the parser stack */ |
2439 int sharedCacheEnabled; /* true if shared-cache mode enabled */ | 2839 int sharedCacheEnabled; /* true if shared-cache mode enabled */ |
2440 /* The above might be initialized to non-zero. The following need to always | 2840 /* The above might be initialized to non-zero. The following need to always |
2441 ** initially be zero, however. */ | 2841 ** initially be zero, however. */ |
2442 int isInit; /* True after initialization has finished */ | 2842 int isInit; /* True after initialization has finished */ |
2443 int inProgress; /* True while initialization in progress */ | 2843 int inProgress; /* True while initialization in progress */ |
2444 int isMutexInit; /* True after mutexes are initialized */ | 2844 int isMutexInit; /* True after mutexes are initialized */ |
2445 int isMallocInit; /* True after malloc is initialized */ | 2845 int isMallocInit; /* True after malloc is initialized */ |
2446 int isPCacheInit; /* True after malloc is initialized */ | 2846 int isPCacheInit; /* True after malloc is initialized */ |
| 2847 int nRefInitMutex; /* Number of users of pInitMutex */ |
2447 sqlite3_mutex *pInitMutex; /* Mutex used by sqlite3_initialize() */ | 2848 sqlite3_mutex *pInitMutex; /* Mutex used by sqlite3_initialize() */ |
2448 int nRefInitMutex; /* Number of users of pInitMutex */ | |
2449 void (*xLog)(void*,int,const char*); /* Function for logging */ | 2849 void (*xLog)(void*,int,const char*); /* Function for logging */ |
2450 void *pLogArg; /* First argument to xLog() */ | 2850 void *pLogArg; /* First argument to xLog() */ |
| 2851 #ifdef SQLITE_ENABLE_SQLLOG |
| 2852 void(*xSqllog)(void*,sqlite3*,const char*, int); |
| 2853 void *pSqllogArg; |
| 2854 #endif |
| 2855 #ifdef SQLITE_VDBE_COVERAGE |
| 2856 /* The following callback (if not NULL) is invoked on every VDBE branch |
| 2857 ** operation. Set the callback using SQLITE_TESTCTRL_VDBE_COVERAGE. |
| 2858 */ |
| 2859 void (*xVdbeBranch)(void*,int iSrcLine,u8 eThis,u8 eMx); /* Callback */ |
| 2860 void *pVdbeBranchArg; /* 1st argument */ |
| 2861 #endif |
| 2862 #ifndef SQLITE_OMIT_BUILTIN_TEST |
| 2863 int (*xTestCallback)(int); /* Invoked by sqlite3FaultSim() */ |
| 2864 #endif |
| 2865 int bLocaltimeFault; /* True to fail localtime() calls */ |
2451 }; | 2866 }; |
2452 | 2867 |
2453 /* | 2868 /* |
| 2869 ** This macro is used inside of assert() statements to indicate that |
| 2870 ** the assert is only valid on a well-formed database. Instead of: |
| 2871 ** |
| 2872 ** assert( X ); |
| 2873 ** |
| 2874 ** One writes: |
| 2875 ** |
| 2876 ** assert( X || CORRUPT_DB ); |
| 2877 ** |
| 2878 ** CORRUPT_DB is true during normal operation. CORRUPT_DB does not indicate |
| 2879 ** that the database is definitely corrupt, only that it might be corrupt. |
| 2880 ** For most test cases, CORRUPT_DB is set to false using a special |
| 2881 ** sqlite3_test_control(). This enables assert() statements to prove |
| 2882 ** things that are always true for well-formed databases. |
| 2883 */ |
| 2884 #define CORRUPT_DB (sqlite3Config.neverCorrupt==0) |
| 2885 |
| 2886 /* |
2454 ** Context pointer passed down through the tree-walk. | 2887 ** Context pointer passed down through the tree-walk. |
2455 */ | 2888 */ |
2456 struct Walker { | 2889 struct Walker { |
2457 int (*xExprCallback)(Walker*, Expr*); /* Callback for expressions */ | 2890 int (*xExprCallback)(Walker*, Expr*); /* Callback for expressions */ |
2458 int (*xSelectCallback)(Walker*,Select*); /* Callback for SELECTs */ | 2891 int (*xSelectCallback)(Walker*,Select*); /* Callback for SELECTs */ |
| 2892 void (*xSelectCallback2)(Walker*,Select*);/* Second callback for SELECTs */ |
2459 Parse *pParse; /* Parser context. */ | 2893 Parse *pParse; /* Parser context. */ |
| 2894 int walkerDepth; /* Number of subqueries */ |
2460 union { /* Extra data for callback */ | 2895 union { /* Extra data for callback */ |
2461 NameContext *pNC; /* Naming context */ | 2896 NameContext *pNC; /* Naming context */ |
2462 int i; /* Integer value */ | 2897 int i; /* Integer value */ |
| 2898 SrcList *pSrcList; /* FROM clause */ |
| 2899 struct SrcCount *pSrcCount; /* Counting column references */ |
2463 } u; | 2900 } u; |
2464 }; | 2901 }; |
2465 | 2902 |
2466 /* Forward declarations */ | 2903 /* Forward declarations */ |
2467 int sqlite3WalkExpr(Walker*, Expr*); | 2904 int sqlite3WalkExpr(Walker*, Expr*); |
2468 int sqlite3WalkExprList(Walker*, ExprList*); | 2905 int sqlite3WalkExprList(Walker*, ExprList*); |
2469 int sqlite3WalkSelect(Walker*, Select*); | 2906 int sqlite3WalkSelect(Walker*, Select*); |
2470 int sqlite3WalkSelectExpr(Walker*, Select*); | 2907 int sqlite3WalkSelectExpr(Walker*, Select*); |
2471 int sqlite3WalkSelectFrom(Walker*, Select*); | 2908 int sqlite3WalkSelectFrom(Walker*, Select*); |
2472 | 2909 |
2473 /* | 2910 /* |
2474 ** Return code from the parse-tree walking primitives and their | 2911 ** Return code from the parse-tree walking primitives and their |
2475 ** callbacks. | 2912 ** callbacks. |
2476 */ | 2913 */ |
2477 #define WRC_Continue 0 /* Continue down into children */ | 2914 #define WRC_Continue 0 /* Continue down into children */ |
2478 #define WRC_Prune 1 /* Omit children but continue walking siblings */ | 2915 #define WRC_Prune 1 /* Omit children but continue walking siblings */ |
2479 #define WRC_Abort 2 /* Abandon the tree walk */ | 2916 #define WRC_Abort 2 /* Abandon the tree walk */ |
2480 | 2917 |
2481 /* | 2918 /* |
| 2919 ** An instance of this structure represents a set of one or more CTEs |
| 2920 ** (common table expressions) created by a single WITH clause. |
| 2921 */ |
| 2922 struct With { |
| 2923 int nCte; /* Number of CTEs in the WITH clause */ |
| 2924 With *pOuter; /* Containing WITH clause, or NULL */ |
| 2925 struct Cte { /* For each CTE in the WITH clause.... */ |
| 2926 char *zName; /* Name of this CTE */ |
| 2927 ExprList *pCols; /* List of explicit column names, or NULL */ |
| 2928 Select *pSelect; /* The definition of this CTE */ |
| 2929 const char *zErr; /* Error message for circular references */ |
| 2930 } a[1]; |
| 2931 }; |
| 2932 |
| 2933 #ifdef SQLITE_DEBUG |
| 2934 /* |
| 2935 ** An instance of the TreeView object is used for printing the content of |
| 2936 ** data structures on sqlite3DebugPrintf() using a tree-like view. |
| 2937 */ |
| 2938 struct TreeView { |
| 2939 int iLevel; /* Which level of the tree we are on */ |
| 2940 u8 bLine[100]; /* Draw vertical in column i if bLine[i] is true */ |
| 2941 }; |
| 2942 #endif /* SQLITE_DEBUG */ |
| 2943 |
| 2944 /* |
2482 ** Assuming zIn points to the first byte of a UTF-8 character, | 2945 ** Assuming zIn points to the first byte of a UTF-8 character, |
2483 ** advance zIn to point to the first byte of the next UTF-8 character. | 2946 ** advance zIn to point to the first byte of the next UTF-8 character. |
2484 */ | 2947 */ |
2485 #define SQLITE_SKIP_UTF8(zIn) { \ | 2948 #define SQLITE_SKIP_UTF8(zIn) { \ |
2486 if( (*(zIn++))>=0xc0 ){ \ | 2949 if( (*(zIn++))>=0xc0 ){ \ |
2487 while( (*zIn & 0xc0)==0x80 ){ zIn++; } \ | 2950 while( (*zIn & 0xc0)==0x80 ){ zIn++; } \ |
2488 } \ | 2951 } \ |
2489 } | 2952 } |
2490 | 2953 |
2491 /* | 2954 /* |
2492 ** The SQLITE_*_BKPT macros are substitutes for the error codes with | 2955 ** The SQLITE_*_BKPT macros are substitutes for the error codes with |
2493 ** the same name but without the _BKPT suffix. These macros invoke | 2956 ** the same name but without the _BKPT suffix. These macros invoke |
2494 ** routines that report the line-number on which the error originated | 2957 ** routines that report the line-number on which the error originated |
2495 ** using sqlite3_log(). The routines also provide a convenient place | 2958 ** using sqlite3_log(). The routines also provide a convenient place |
2496 ** to set a debugger breakpoint. | 2959 ** to set a debugger breakpoint. |
2497 */ | 2960 */ |
2498 int sqlite3CorruptError(int); | 2961 int sqlite3CorruptError(int); |
2499 int sqlite3MisuseError(int); | 2962 int sqlite3MisuseError(int); |
2500 int sqlite3CantopenError(int); | 2963 int sqlite3CantopenError(int); |
2501 #define SQLITE_CORRUPT_BKPT sqlite3CorruptError(__LINE__) | 2964 #define SQLITE_CORRUPT_BKPT sqlite3CorruptError(__LINE__) |
2502 #define SQLITE_MISUSE_BKPT sqlite3MisuseError(__LINE__) | 2965 #define SQLITE_MISUSE_BKPT sqlite3MisuseError(__LINE__) |
2503 #define SQLITE_CANTOPEN_BKPT sqlite3CantopenError(__LINE__) | 2966 #define SQLITE_CANTOPEN_BKPT sqlite3CantopenError(__LINE__) |
2504 | 2967 |
2505 | 2968 |
2506 /* | 2969 /* |
2507 ** FTS4 is really an extension for FTS3. It is enabled using the | 2970 ** FTS4 is really an extension for FTS3. It is enabled using the |
2508 ** SQLITE_ENABLE_FTS3 macro. But to avoid confusion we also all | 2971 ** SQLITE_ENABLE_FTS3 macro. But to avoid confusion we also call |
2509 ** the SQLITE_ENABLE_FTS4 macro to serve as an alisse for SQLITE_ENABLE_FTS3. | 2972 ** the SQLITE_ENABLE_FTS4 macro to serve as an alias for SQLITE_ENABLE_FTS3. |
2510 */ | 2973 */ |
2511 #if defined(SQLITE_ENABLE_FTS4) && !defined(SQLITE_ENABLE_FTS3) | 2974 #if defined(SQLITE_ENABLE_FTS4) && !defined(SQLITE_ENABLE_FTS3) |
2512 # define SQLITE_ENABLE_FTS3 | 2975 # define SQLITE_ENABLE_FTS3 |
2513 #endif | 2976 #endif |
2514 | 2977 |
2515 /* | 2978 /* |
2516 ** The ctype.h header is needed for non-ASCII systems. It is also | 2979 ** The ctype.h header is needed for non-ASCII systems. It is also |
2517 ** needed by FTS3 when FTS3 is included in the amalgamation. | 2980 ** needed by FTS3 when FTS3 is included in the amalgamation. |
2518 */ | 2981 */ |
2519 #if !defined(SQLITE_ASCII) || \ | 2982 #if !defined(SQLITE_ASCII) || \ |
2520 (defined(SQLITE_ENABLE_FTS3) && defined(SQLITE_AMALGAMATION)) | 2983 (defined(SQLITE_ENABLE_FTS3) && defined(SQLITE_AMALGAMATION)) |
2521 # include <ctype.h> | 2984 # include <ctype.h> |
2522 #endif | 2985 #endif |
2523 | 2986 |
2524 /* | 2987 /* |
2525 ** The CoreServices.h and CoreFoundation.h headers are needed for excluding a | |
2526 ** -journal file from Time Machine backups when its associated database has | |
2527 ** previously been excluded by the client code. | |
2528 */ | |
2529 #if defined(__APPLE__) | |
2530 #include <CoreServices/CoreServices.h> | |
2531 #include <CoreFoundation/CoreFoundation.h> | |
2532 #endif | |
2533 | |
2534 /* | |
2535 ** The following macros mimic the standard library functions toupper(), | 2988 ** The following macros mimic the standard library functions toupper(), |
2536 ** isspace(), isalnum(), isdigit() and isxdigit(), respectively. The | 2989 ** isspace(), isalnum(), isdigit() and isxdigit(), respectively. The |
2537 ** sqlite versions only work for ASCII characters, regardless of locale. | 2990 ** sqlite versions only work for ASCII characters, regardless of locale. |
2538 */ | 2991 */ |
2539 #ifdef SQLITE_ASCII | 2992 #ifdef SQLITE_ASCII |
2540 # define sqlite3Toupper(x) ((x)&~(sqlite3CtypeMap[(unsigned char)(x)]&0x20)) | 2993 # define sqlite3Toupper(x) ((x)&~(sqlite3CtypeMap[(unsigned char)(x)]&0x20)) |
2541 # define sqlite3Isspace(x) (sqlite3CtypeMap[(unsigned char)(x)]&0x01) | 2994 # define sqlite3Isspace(x) (sqlite3CtypeMap[(unsigned char)(x)]&0x01) |
2542 # define sqlite3Isalnum(x) (sqlite3CtypeMap[(unsigned char)(x)]&0x06) | 2995 # define sqlite3Isalnum(x) (sqlite3CtypeMap[(unsigned char)(x)]&0x06) |
2543 # define sqlite3Isalpha(x) (sqlite3CtypeMap[(unsigned char)(x)]&0x02) | 2996 # define sqlite3Isalpha(x) (sqlite3CtypeMap[(unsigned char)(x)]&0x02) |
2544 # define sqlite3Isdigit(x) (sqlite3CtypeMap[(unsigned char)(x)]&0x04) | 2997 # define sqlite3Isdigit(x) (sqlite3CtypeMap[(unsigned char)(x)]&0x04) |
2545 # define sqlite3Isxdigit(x) (sqlite3CtypeMap[(unsigned char)(x)]&0x08) | 2998 # define sqlite3Isxdigit(x) (sqlite3CtypeMap[(unsigned char)(x)]&0x08) |
2546 # define sqlite3Tolower(x) (sqlite3UpperToLower[(unsigned char)(x)]) | 2999 # define sqlite3Tolower(x) (sqlite3UpperToLower[(unsigned char)(x)]) |
2547 #else | 3000 #else |
2548 # define sqlite3Toupper(x) toupper((unsigned char)(x)) | 3001 # define sqlite3Toupper(x) toupper((unsigned char)(x)) |
2549 # define sqlite3Isspace(x) isspace((unsigned char)(x)) | 3002 # define sqlite3Isspace(x) isspace((unsigned char)(x)) |
2550 # define sqlite3Isalnum(x) isalnum((unsigned char)(x)) | 3003 # define sqlite3Isalnum(x) isalnum((unsigned char)(x)) |
2551 # define sqlite3Isalpha(x) isalpha((unsigned char)(x)) | 3004 # define sqlite3Isalpha(x) isalpha((unsigned char)(x)) |
2552 # define sqlite3Isdigit(x) isdigit((unsigned char)(x)) | 3005 # define sqlite3Isdigit(x) isdigit((unsigned char)(x)) |
2553 # define sqlite3Isxdigit(x) isxdigit((unsigned char)(x)) | 3006 # define sqlite3Isxdigit(x) isxdigit((unsigned char)(x)) |
2554 # define sqlite3Tolower(x) tolower((unsigned char)(x)) | 3007 # define sqlite3Tolower(x) tolower((unsigned char)(x)) |
2555 #endif | 3008 #endif |
| 3009 int sqlite3IsIdChar(u8); |
2556 | 3010 |
2557 /* | 3011 /* |
2558 ** Internal function prototypes | 3012 ** Internal function prototypes |
2559 */ | 3013 */ |
2560 int sqlite3StrICmp(const char *, const char *); | 3014 #define sqlite3StrICmp sqlite3_stricmp |
2561 int sqlite3Strlen30(const char*); | 3015 int sqlite3Strlen30(const char*); |
2562 #define sqlite3StrNICmp sqlite3_strnicmp | 3016 #define sqlite3StrNICmp sqlite3_strnicmp |
2563 | 3017 |
2564 int sqlite3MallocInit(void); | 3018 int sqlite3MallocInit(void); |
2565 void sqlite3MallocEnd(void); | 3019 void sqlite3MallocEnd(void); |
2566 void *sqlite3Malloc(int); | 3020 void *sqlite3Malloc(u64); |
2567 void *sqlite3MallocZero(int); | 3021 void *sqlite3MallocZero(u64); |
2568 void *sqlite3DbMallocZero(sqlite3*, int); | 3022 void *sqlite3DbMallocZero(sqlite3*, u64); |
2569 void *sqlite3DbMallocRaw(sqlite3*, int); | 3023 void *sqlite3DbMallocRaw(sqlite3*, u64); |
2570 char *sqlite3DbStrDup(sqlite3*,const char*); | 3024 char *sqlite3DbStrDup(sqlite3*,const char*); |
2571 char *sqlite3DbStrNDup(sqlite3*,const char*, int); | 3025 char *sqlite3DbStrNDup(sqlite3*,const char*, u64); |
2572 void *sqlite3Realloc(void*, int); | 3026 void *sqlite3Realloc(void*, u64); |
2573 void *sqlite3DbReallocOrFree(sqlite3 *, void *, int); | 3027 void *sqlite3DbReallocOrFree(sqlite3 *, void *, u64); |
2574 void *sqlite3DbRealloc(sqlite3 *, void *, int); | 3028 void *sqlite3DbRealloc(sqlite3 *, void *, u64); |
2575 void sqlite3DbFree(sqlite3*, void*); | 3029 void sqlite3DbFree(sqlite3*, void*); |
2576 int sqlite3MallocSize(void*); | 3030 int sqlite3MallocSize(void*); |
2577 int sqlite3DbMallocSize(sqlite3*, void*); | 3031 int sqlite3DbMallocSize(sqlite3*, void*); |
2578 void *sqlite3ScratchMalloc(int); | 3032 void *sqlite3ScratchMalloc(int); |
2579 void sqlite3ScratchFree(void*); | 3033 void sqlite3ScratchFree(void*); |
2580 void *sqlite3PageMalloc(int); | 3034 void *sqlite3PageMalloc(int); |
2581 void sqlite3PageFree(void*); | 3035 void sqlite3PageFree(void*); |
2582 void sqlite3MemSetDefault(void); | 3036 void sqlite3MemSetDefault(void); |
2583 void sqlite3BenignMallocHooks(void (*)(void), void (*)(void)); | 3037 void sqlite3BenignMallocHooks(void (*)(void), void (*)(void)); |
2584 int sqlite3HeapNearlyFull(void); | 3038 int sqlite3HeapNearlyFull(void); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2620 int sqlite3StatusValue(int); | 3074 int sqlite3StatusValue(int); |
2621 void sqlite3StatusAdd(int, int); | 3075 void sqlite3StatusAdd(int, int); |
2622 void sqlite3StatusSet(int, int); | 3076 void sqlite3StatusSet(int, int); |
2623 | 3077 |
2624 #ifndef SQLITE_OMIT_FLOATING_POINT | 3078 #ifndef SQLITE_OMIT_FLOATING_POINT |
2625 int sqlite3IsNaN(double); | 3079 int sqlite3IsNaN(double); |
2626 #else | 3080 #else |
2627 # define sqlite3IsNaN(X) 0 | 3081 # define sqlite3IsNaN(X) 0 |
2628 #endif | 3082 #endif |
2629 | 3083 |
2630 void sqlite3VXPrintf(StrAccum*, int, const char*, va_list); | 3084 /* |
2631 #ifndef SQLITE_OMIT_TRACE | 3085 ** An instance of the following structure holds information about SQL |
2632 void sqlite3XPrintf(StrAccum*, const char*, ...); | 3086 ** functions arguments that are the parameters to the printf() function. |
2633 #endif | 3087 */ |
| 3088 struct PrintfArguments { |
| 3089 int nArg; /* Total number of arguments */ |
| 3090 int nUsed; /* Number of arguments used so far */ |
| 3091 sqlite3_value **apArg; /* The argument values */ |
| 3092 }; |
| 3093 |
| 3094 #define SQLITE_PRINTF_INTERNAL 0x01 |
| 3095 #define SQLITE_PRINTF_SQLFUNC 0x02 |
| 3096 void sqlite3VXPrintf(StrAccum*, u32, const char*, va_list); |
| 3097 void sqlite3XPrintf(StrAccum*, u32, const char*, ...); |
2634 char *sqlite3MPrintf(sqlite3*,const char*, ...); | 3098 char *sqlite3MPrintf(sqlite3*,const char*, ...); |
2635 char *sqlite3VMPrintf(sqlite3*,const char*, va_list); | 3099 char *sqlite3VMPrintf(sqlite3*,const char*, va_list); |
2636 char *sqlite3MAppendf(sqlite3*,char*,const char*,...); | 3100 char *sqlite3MAppendf(sqlite3*,char*,const char*,...); |
2637 #if defined(SQLITE_TEST) || defined(SQLITE_DEBUG) | 3101 #if defined(SQLITE_TEST) || defined(SQLITE_DEBUG) |
2638 void sqlite3DebugPrintf(const char*, ...); | 3102 void sqlite3DebugPrintf(const char*, ...); |
2639 #endif | 3103 #endif |
2640 #if defined(SQLITE_TEST) | 3104 #if defined(SQLITE_TEST) |
2641 void *sqlite3TestTextToPtr(const char*); | 3105 void *sqlite3TestTextToPtr(const char*); |
2642 #endif | 3106 #endif |
| 3107 |
| 3108 #if defined(SQLITE_DEBUG) |
| 3109 TreeView *sqlite3TreeViewPush(TreeView*,u8); |
| 3110 void sqlite3TreeViewPop(TreeView*); |
| 3111 void sqlite3TreeViewLine(TreeView*, const char*, ...); |
| 3112 void sqlite3TreeViewItem(TreeView*, const char*, u8); |
| 3113 void sqlite3TreeViewExpr(TreeView*, const Expr*, u8); |
| 3114 void sqlite3TreeViewExprList(TreeView*, const ExprList*, u8, const char*); |
| 3115 void sqlite3TreeViewSelect(TreeView*, const Select*, u8); |
| 3116 #endif |
| 3117 |
| 3118 |
2643 void sqlite3SetString(char **, sqlite3*, const char*, ...); | 3119 void sqlite3SetString(char **, sqlite3*, const char*, ...); |
2644 void sqlite3ErrorMsg(Parse*, const char*, ...); | 3120 void sqlite3ErrorMsg(Parse*, const char*, ...); |
2645 int sqlite3Dequote(char*); | 3121 int sqlite3Dequote(char*); |
2646 int sqlite3KeywordCode(const unsigned char*, int); | 3122 int sqlite3KeywordCode(const unsigned char*, int); |
2647 int sqlite3RunParser(Parse*, const char*, char **); | 3123 int sqlite3RunParser(Parse*, const char*, char **); |
2648 void sqlite3FinishCoding(Parse*); | 3124 void sqlite3FinishCoding(Parse*); |
2649 int sqlite3GetTempReg(Parse*); | 3125 int sqlite3GetTempReg(Parse*); |
2650 void sqlite3ReleaseTempReg(Parse*,int); | 3126 void sqlite3ReleaseTempReg(Parse*,int); |
2651 int sqlite3GetTempRange(Parse*,int); | 3127 int sqlite3GetTempRange(Parse*,int); |
2652 void sqlite3ReleaseTempRange(Parse*,int,int); | 3128 void sqlite3ReleaseTempRange(Parse*,int,int); |
| 3129 void sqlite3ClearTempRegCache(Parse*); |
2653 Expr *sqlite3ExprAlloc(sqlite3*,int,const Token*,int); | 3130 Expr *sqlite3ExprAlloc(sqlite3*,int,const Token*,int); |
2654 Expr *sqlite3Expr(sqlite3*,int,const char*); | 3131 Expr *sqlite3Expr(sqlite3*,int,const char*); |
2655 void sqlite3ExprAttachSubtrees(sqlite3*,Expr*,Expr*,Expr*); | 3132 void sqlite3ExprAttachSubtrees(sqlite3*,Expr*,Expr*,Expr*); |
2656 Expr *sqlite3PExpr(Parse*, int, Expr*, Expr*, const Token*); | 3133 Expr *sqlite3PExpr(Parse*, int, Expr*, Expr*, const Token*); |
2657 Expr *sqlite3ExprAnd(sqlite3*,Expr*, Expr*); | 3134 Expr *sqlite3ExprAnd(sqlite3*,Expr*, Expr*); |
2658 Expr *sqlite3ExprFunction(Parse*,ExprList*, Token*); | 3135 Expr *sqlite3ExprFunction(Parse*,ExprList*, Token*); |
2659 void sqlite3ExprAssignVarNumber(Parse*, Expr*); | 3136 void sqlite3ExprAssignVarNumber(Parse*, Expr*); |
2660 void sqlite3ExprDelete(sqlite3*, Expr*); | 3137 void sqlite3ExprDelete(sqlite3*, Expr*); |
2661 ExprList *sqlite3ExprListAppend(Parse*,ExprList*,Expr*); | 3138 ExprList *sqlite3ExprListAppend(Parse*,ExprList*,Expr*); |
2662 void sqlite3ExprListSetName(Parse*,ExprList*,Token*,int); | 3139 void sqlite3ExprListSetName(Parse*,ExprList*,Token*,int); |
2663 void sqlite3ExprListSetSpan(Parse*,ExprList*,ExprSpan*); | 3140 void sqlite3ExprListSetSpan(Parse*,ExprList*,ExprSpan*); |
2664 void sqlite3ExprListDelete(sqlite3*, ExprList*); | 3141 void sqlite3ExprListDelete(sqlite3*, ExprList*); |
2665 int sqlite3Init(sqlite3*, char**); | 3142 int sqlite3Init(sqlite3*, char**); |
2666 int sqlite3InitCallback(void*, int, char**, char**); | 3143 int sqlite3InitCallback(void*, int, char**, char**); |
2667 void sqlite3Pragma(Parse*,Token*,Token*,Token*,int); | 3144 void sqlite3Pragma(Parse*,Token*,Token*,Token*,int); |
2668 void sqlite3ResetInternalSchema(sqlite3*, int); | 3145 void sqlite3ResetAllSchemasOfConnection(sqlite3*); |
| 3146 void sqlite3ResetOneSchema(sqlite3*,int); |
| 3147 void sqlite3CollapseDatabaseArray(sqlite3*); |
2669 void sqlite3BeginParse(Parse*,int); | 3148 void sqlite3BeginParse(Parse*,int); |
2670 void sqlite3CommitInternalChanges(sqlite3*); | 3149 void sqlite3CommitInternalChanges(sqlite3*); |
2671 Table *sqlite3ResultSetOfSelect(Parse*,Select*); | 3150 Table *sqlite3ResultSetOfSelect(Parse*,Select*); |
2672 void sqlite3OpenMasterTable(Parse *, int); | 3151 void sqlite3OpenMasterTable(Parse *, int); |
| 3152 Index *sqlite3PrimaryKeyIndex(Table*); |
| 3153 i16 sqlite3ColumnOfIndex(Index*, i16); |
2673 void sqlite3StartTable(Parse*,Token*,Token*,int,int,int,int); | 3154 void sqlite3StartTable(Parse*,Token*,Token*,int,int,int,int); |
2674 void sqlite3AddColumn(Parse*,Token*); | 3155 void sqlite3AddColumn(Parse*,Token*); |
2675 void sqlite3AddNotNull(Parse*, int); | 3156 void sqlite3AddNotNull(Parse*, int); |
2676 void sqlite3AddPrimaryKey(Parse*, ExprList*, int, int, int); | 3157 void sqlite3AddPrimaryKey(Parse*, ExprList*, int, int, int); |
2677 void sqlite3AddCheckConstraint(Parse*, Expr*); | 3158 void sqlite3AddCheckConstraint(Parse*, Expr*); |
2678 void sqlite3AddColumnType(Parse*,Token*); | 3159 void sqlite3AddColumnType(Parse*,Token*); |
2679 void sqlite3AddDefaultValue(Parse*,ExprSpan*); | 3160 void sqlite3AddDefaultValue(Parse*,ExprSpan*); |
2680 void sqlite3AddCollateType(Parse*, Token*); | 3161 void sqlite3AddCollateType(Parse*, Token*); |
2681 void sqlite3EndTable(Parse*,Token*,Token*,Select*); | 3162 void sqlite3EndTable(Parse*,Token*,Token*,u8,Select*); |
| 3163 int sqlite3ParseUri(const char*,const char*,unsigned int*, |
| 3164 sqlite3_vfs**,char**,char **); |
| 3165 Btree *sqlite3DbNameToBtree(sqlite3*,const char*); |
| 3166 int sqlite3CodeOnce(Parse *); |
| 3167 |
| 3168 #ifdef SQLITE_OMIT_BUILTIN_TEST |
| 3169 # define sqlite3FaultSim(X) SQLITE_OK |
| 3170 #else |
| 3171 int sqlite3FaultSim(int); |
| 3172 #endif |
2682 | 3173 |
2683 Bitvec *sqlite3BitvecCreate(u32); | 3174 Bitvec *sqlite3BitvecCreate(u32); |
2684 int sqlite3BitvecTest(Bitvec*, u32); | 3175 int sqlite3BitvecTest(Bitvec*, u32); |
2685 int sqlite3BitvecSet(Bitvec*, u32); | 3176 int sqlite3BitvecSet(Bitvec*, u32); |
2686 void sqlite3BitvecClear(Bitvec*, u32, void*); | 3177 void sqlite3BitvecClear(Bitvec*, u32, void*); |
2687 void sqlite3BitvecDestroy(Bitvec*); | 3178 void sqlite3BitvecDestroy(Bitvec*); |
2688 u32 sqlite3BitvecSize(Bitvec*); | 3179 u32 sqlite3BitvecSize(Bitvec*); |
2689 int sqlite3BitvecBuiltinTest(int,int*); | 3180 int sqlite3BitvecBuiltinTest(int,int*); |
2690 | 3181 |
2691 RowSet *sqlite3RowSetInit(sqlite3*, void*, unsigned int); | 3182 RowSet *sqlite3RowSetInit(sqlite3*, void*, unsigned int); |
2692 void sqlite3RowSetClear(RowSet*); | 3183 void sqlite3RowSetClear(RowSet*); |
2693 void sqlite3RowSetInsert(RowSet*, i64); | 3184 void sqlite3RowSetInsert(RowSet*, i64); |
2694 int sqlite3RowSetTest(RowSet*, u8 iBatch, i64); | 3185 int sqlite3RowSetTest(RowSet*, int iBatch, i64); |
2695 int sqlite3RowSetNext(RowSet*, i64*); | 3186 int sqlite3RowSetNext(RowSet*, i64*); |
2696 | 3187 |
2697 void sqlite3CreateView(Parse*,Token*,Token*,Token*,Select*,int,int); | 3188 void sqlite3CreateView(Parse*,Token*,Token*,Token*,Select*,int,int); |
2698 | 3189 |
2699 #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) | 3190 #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) |
2700 int sqlite3ViewGetColumnNames(Parse*,Table*); | 3191 int sqlite3ViewGetColumnNames(Parse*,Table*); |
2701 #else | 3192 #else |
2702 # define sqlite3ViewGetColumnNames(A,B) 0 | 3193 # define sqlite3ViewGetColumnNames(A,B) 0 |
2703 #endif | 3194 #endif |
2704 | 3195 |
| 3196 #if SQLITE_MAX_ATTACHED>30 |
| 3197 int sqlite3DbMaskAllZero(yDbMask); |
| 3198 #endif |
2705 void sqlite3DropTable(Parse*, SrcList*, int, int); | 3199 void sqlite3DropTable(Parse*, SrcList*, int, int); |
| 3200 void sqlite3CodeDropTable(Parse*, Table*, int, int); |
2706 void sqlite3DeleteTable(sqlite3*, Table*); | 3201 void sqlite3DeleteTable(sqlite3*, Table*); |
2707 #ifndef SQLITE_OMIT_AUTOINCREMENT | 3202 #ifndef SQLITE_OMIT_AUTOINCREMENT |
2708 void sqlite3AutoincrementBegin(Parse *pParse); | 3203 void sqlite3AutoincrementBegin(Parse *pParse); |
2709 void sqlite3AutoincrementEnd(Parse *pParse); | 3204 void sqlite3AutoincrementEnd(Parse *pParse); |
2710 #else | 3205 #else |
2711 # define sqlite3AutoincrementBegin(X) | 3206 # define sqlite3AutoincrementBegin(X) |
2712 # define sqlite3AutoincrementEnd(X) | 3207 # define sqlite3AutoincrementEnd(X) |
2713 #endif | 3208 #endif |
2714 void sqlite3Insert(Parse*, SrcList*, ExprList*, Select*, IdList*, int); | 3209 void sqlite3Insert(Parse*, SrcList*, Select*, IdList*, int); |
2715 void *sqlite3ArrayAllocate(sqlite3*,void*,int,int,int*,int*,int*); | 3210 void *sqlite3ArrayAllocate(sqlite3*,void*,int,int*,int*); |
2716 IdList *sqlite3IdListAppend(sqlite3*, IdList*, Token*); | 3211 IdList *sqlite3IdListAppend(sqlite3*, IdList*, Token*); |
2717 int sqlite3IdListIndex(IdList*,const char*); | 3212 int sqlite3IdListIndex(IdList*,const char*); |
2718 SrcList *sqlite3SrcListEnlarge(sqlite3*, SrcList*, int, int); | 3213 SrcList *sqlite3SrcListEnlarge(sqlite3*, SrcList*, int, int); |
2719 SrcList *sqlite3SrcListAppend(sqlite3*, SrcList*, Token*, Token*); | 3214 SrcList *sqlite3SrcListAppend(sqlite3*, SrcList*, Token*, Token*); |
2720 SrcList *sqlite3SrcListAppendFromTerm(Parse*, SrcList*, Token*, Token*, | 3215 SrcList *sqlite3SrcListAppendFromTerm(Parse*, SrcList*, Token*, Token*, |
2721 Token*, Select*, Expr*, IdList*); | 3216 Token*, Select*, Expr*, IdList*); |
2722 void sqlite3SrcListIndexedBy(Parse *, SrcList *, Token *); | 3217 void sqlite3SrcListIndexedBy(Parse *, SrcList *, Token *); |
2723 int sqlite3IndexedByLookup(Parse *, struct SrcList_item *); | 3218 int sqlite3IndexedByLookup(Parse *, struct SrcList_item *); |
2724 void sqlite3SrcListShiftJoinType(SrcList*); | 3219 void sqlite3SrcListShiftJoinType(SrcList*); |
2725 void sqlite3SrcListAssignCursors(Parse*, SrcList*); | 3220 void sqlite3SrcListAssignCursors(Parse*, SrcList*); |
2726 void sqlite3IdListDelete(sqlite3*, IdList*); | 3221 void sqlite3IdListDelete(sqlite3*, IdList*); |
2727 void sqlite3SrcListDelete(sqlite3*, SrcList*); | 3222 void sqlite3SrcListDelete(sqlite3*, SrcList*); |
| 3223 Index *sqlite3AllocateIndexObject(sqlite3*,i16,int,char**); |
2728 Index *sqlite3CreateIndex(Parse*,Token*,Token*,SrcList*,ExprList*,int,Token*, | 3224 Index *sqlite3CreateIndex(Parse*,Token*,Token*,SrcList*,ExprList*,int,Token*, |
2729 Token*, int, int); | 3225 Expr*, int, int); |
2730 void sqlite3DropIndex(Parse*, SrcList*, int); | 3226 void sqlite3DropIndex(Parse*, SrcList*, int); |
2731 int sqlite3Select(Parse*, Select*, SelectDest*); | 3227 int sqlite3Select(Parse*, Select*, SelectDest*); |
2732 Select *sqlite3SelectNew(Parse*,ExprList*,SrcList*,Expr*,ExprList*, | 3228 Select *sqlite3SelectNew(Parse*,ExprList*,SrcList*,Expr*,ExprList*, |
2733 Expr*,ExprList*,int,Expr*,Expr*); | 3229 Expr*,ExprList*,u16,Expr*,Expr*); |
2734 void sqlite3SelectDelete(sqlite3*, Select*); | 3230 void sqlite3SelectDelete(sqlite3*, Select*); |
2735 Table *sqlite3SrcListLookup(Parse*, SrcList*); | 3231 Table *sqlite3SrcListLookup(Parse*, SrcList*); |
2736 int sqlite3IsReadOnly(Parse*, Table*, int); | 3232 int sqlite3IsReadOnly(Parse*, Table*, int); |
2737 void sqlite3OpenTable(Parse*, int iCur, int iDb, Table*, int); | 3233 void sqlite3OpenTable(Parse*, int iCur, int iDb, Table*, int); |
2738 #if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY) | 3234 #if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY) |
2739 Expr *sqlite3LimitWhere(Parse *, SrcList *, Expr *, ExprList *, Expr *, Expr *,
char *); | 3235 Expr *sqlite3LimitWhere(Parse*,SrcList*,Expr*,ExprList*,Expr*,Expr*,char*); |
2740 #endif | 3236 #endif |
2741 void sqlite3DeleteFrom(Parse*, SrcList*, Expr*); | 3237 void sqlite3DeleteFrom(Parse*, SrcList*, Expr*); |
2742 void sqlite3Update(Parse*, SrcList*, ExprList*, Expr*, int); | 3238 void sqlite3Update(Parse*, SrcList*, ExprList*, Expr*, int); |
2743 WhereInfo *sqlite3WhereBegin(Parse*, SrcList*, Expr*, ExprList**, u16); | 3239 WhereInfo *sqlite3WhereBegin(Parse*,SrcList*,Expr*,ExprList*,ExprList*,u16,int); |
2744 void sqlite3WhereEnd(WhereInfo*); | 3240 void sqlite3WhereEnd(WhereInfo*); |
2745 int sqlite3ExprCodeGetColumn(Parse*, Table*, int, int, int); | 3241 u64 sqlite3WhereOutputRowCount(WhereInfo*); |
| 3242 int sqlite3WhereIsDistinct(WhereInfo*); |
| 3243 int sqlite3WhereIsOrdered(WhereInfo*); |
| 3244 int sqlite3WhereIsSorted(WhereInfo*); |
| 3245 int sqlite3WhereContinueLabel(WhereInfo*); |
| 3246 int sqlite3WhereBreakLabel(WhereInfo*); |
| 3247 int sqlite3WhereOkOnePass(WhereInfo*, int*); |
| 3248 int sqlite3ExprCodeGetColumn(Parse*, Table*, int, int, int, u8); |
2746 void sqlite3ExprCodeGetColumnOfTable(Vdbe*, Table*, int, int, int); | 3249 void sqlite3ExprCodeGetColumnOfTable(Vdbe*, Table*, int, int, int); |
2747 void sqlite3ExprCodeMove(Parse*, int, int, int); | 3250 void sqlite3ExprCodeMove(Parse*, int, int, int); |
2748 void sqlite3ExprCodeCopy(Parse*, int, int, int); | |
2749 void sqlite3ExprCacheStore(Parse*, int, int, int); | 3251 void sqlite3ExprCacheStore(Parse*, int, int, int); |
2750 void sqlite3ExprCachePush(Parse*); | 3252 void sqlite3ExprCachePush(Parse*); |
2751 void sqlite3ExprCachePop(Parse*, int); | 3253 void sqlite3ExprCachePop(Parse*); |
2752 void sqlite3ExprCacheRemove(Parse*, int, int); | 3254 void sqlite3ExprCacheRemove(Parse*, int, int); |
2753 void sqlite3ExprCacheClear(Parse*); | 3255 void sqlite3ExprCacheClear(Parse*); |
2754 void sqlite3ExprCacheAffinityChange(Parse*, int, int); | 3256 void sqlite3ExprCacheAffinityChange(Parse*, int, int); |
2755 int sqlite3ExprCode(Parse*, Expr*, int); | 3257 void sqlite3ExprCode(Parse*, Expr*, int); |
| 3258 void sqlite3ExprCodeFactorable(Parse*, Expr*, int); |
| 3259 void sqlite3ExprCodeAtInit(Parse*, Expr*, int, u8); |
2756 int sqlite3ExprCodeTemp(Parse*, Expr*, int*); | 3260 int sqlite3ExprCodeTemp(Parse*, Expr*, int*); |
2757 int sqlite3ExprCodeTarget(Parse*, Expr*, int); | 3261 int sqlite3ExprCodeTarget(Parse*, Expr*, int); |
2758 int sqlite3ExprCodeAndCache(Parse*, Expr*, int); | 3262 void sqlite3ExprCodeAndCache(Parse*, Expr*, int); |
2759 void sqlite3ExprCodeConstants(Parse*, Expr*); | 3263 int sqlite3ExprCodeExprList(Parse*, ExprList*, int, u8); |
2760 int sqlite3ExprCodeExprList(Parse*, ExprList*, int, int); | 3264 #define SQLITE_ECEL_DUP 0x01 /* Deep, not shallow copies */ |
| 3265 #define SQLITE_ECEL_FACTOR 0x02 /* Factor out constant terms */ |
2761 void sqlite3ExprIfTrue(Parse*, Expr*, int, int); | 3266 void sqlite3ExprIfTrue(Parse*, Expr*, int, int); |
2762 void sqlite3ExprIfFalse(Parse*, Expr*, int, int); | 3267 void sqlite3ExprIfFalse(Parse*, Expr*, int, int); |
2763 Table *sqlite3FindTable(sqlite3*,const char*, const char*); | 3268 Table *sqlite3FindTable(sqlite3*,const char*, const char*); |
2764 Table *sqlite3LocateTable(Parse*,int isView,const char*, const char*); | 3269 Table *sqlite3LocateTable(Parse*,int isView,const char*, const char*); |
| 3270 Table *sqlite3LocateTableItem(Parse*,int isView,struct SrcList_item *); |
2765 Index *sqlite3FindIndex(sqlite3*,const char*, const char*); | 3271 Index *sqlite3FindIndex(sqlite3*,const char*, const char*); |
2766 void sqlite3UnlinkAndDeleteTable(sqlite3*,int,const char*); | 3272 void sqlite3UnlinkAndDeleteTable(sqlite3*,int,const char*); |
2767 void sqlite3UnlinkAndDeleteIndex(sqlite3*,int,const char*); | 3273 void sqlite3UnlinkAndDeleteIndex(sqlite3*,int,const char*); |
2768 void sqlite3Vacuum(Parse*); | 3274 void sqlite3Vacuum(Parse*); |
2769 int sqlite3RunVacuum(char**, sqlite3*); | 3275 int sqlite3RunVacuum(char**, sqlite3*); |
2770 char *sqlite3NameFromToken(sqlite3*, Token*); | 3276 char *sqlite3NameFromToken(sqlite3*, Token*); |
2771 int sqlite3ExprCompare(Expr*, Expr*); | 3277 int sqlite3ExprCompare(Expr*, Expr*, int); |
2772 int sqlite3ExprListCompare(ExprList*, ExprList*); | 3278 int sqlite3ExprListCompare(ExprList*, ExprList*, int); |
| 3279 int sqlite3ExprImpliesExpr(Expr*, Expr*, int); |
2773 void sqlite3ExprAnalyzeAggregates(NameContext*, Expr*); | 3280 void sqlite3ExprAnalyzeAggregates(NameContext*, Expr*); |
2774 void sqlite3ExprAnalyzeAggList(NameContext*,ExprList*); | 3281 void sqlite3ExprAnalyzeAggList(NameContext*,ExprList*); |
| 3282 int sqlite3FunctionUsesThisSrc(Expr*, SrcList*); |
2775 Vdbe *sqlite3GetVdbe(Parse*); | 3283 Vdbe *sqlite3GetVdbe(Parse*); |
2776 void sqlite3PrngSaveState(void); | 3284 void sqlite3PrngSaveState(void); |
2777 void sqlite3PrngRestoreState(void); | 3285 void sqlite3PrngRestoreState(void); |
2778 void sqlite3PrngResetState(void); | 3286 void sqlite3RollbackAll(sqlite3*,int); |
2779 void sqlite3RollbackAll(sqlite3*); | |
2780 void sqlite3CodeVerifySchema(Parse*, int); | 3287 void sqlite3CodeVerifySchema(Parse*, int); |
2781 void sqlite3CodeVerifyNamedSchema(Parse*, const char *zDb); | 3288 void sqlite3CodeVerifyNamedSchema(Parse*, const char *zDb); |
2782 void sqlite3BeginTransaction(Parse*, int); | 3289 void sqlite3BeginTransaction(Parse*, int); |
2783 void sqlite3CommitTransaction(Parse*); | 3290 void sqlite3CommitTransaction(Parse*); |
2784 void sqlite3RollbackTransaction(Parse*); | 3291 void sqlite3RollbackTransaction(Parse*); |
2785 void sqlite3Savepoint(Parse*, int, Token*); | 3292 void sqlite3Savepoint(Parse*, int, Token*); |
2786 void sqlite3CloseSavepoints(sqlite3 *); | 3293 void sqlite3CloseSavepoints(sqlite3 *); |
| 3294 void sqlite3LeaveMutexAndCloseZombie(sqlite3*); |
2787 int sqlite3ExprIsConstant(Expr*); | 3295 int sqlite3ExprIsConstant(Expr*); |
2788 int sqlite3ExprIsConstantNotJoin(Expr*); | 3296 int sqlite3ExprIsConstantNotJoin(Expr*); |
2789 int sqlite3ExprIsConstantOrFunction(Expr*); | 3297 int sqlite3ExprIsConstantOrFunction(Expr*, u8); |
2790 int sqlite3ExprIsInteger(Expr*, int*); | 3298 int sqlite3ExprIsInteger(Expr*, int*); |
2791 int sqlite3ExprCanBeNull(const Expr*); | 3299 int sqlite3ExprCanBeNull(const Expr*); |
2792 void sqlite3ExprCodeIsNullJump(Vdbe*, const Expr*, int, int); | |
2793 int sqlite3ExprNeedsNoAffinityChange(const Expr*, char); | 3300 int sqlite3ExprNeedsNoAffinityChange(const Expr*, char); |
2794 int sqlite3IsRowid(const char*); | 3301 int sqlite3IsRowid(const char*); |
2795 void sqlite3GenerateRowDelete(Parse*, Table*, int, int, int, Trigger *, int); | 3302 void sqlite3GenerateRowDelete(Parse*,Table*,Trigger*,int,int,int,i16,u8,u8,u8); |
2796 void sqlite3GenerateRowIndexDelete(Parse*, Table*, int, int*); | 3303 void sqlite3GenerateRowIndexDelete(Parse*, Table*, int, int, int*); |
2797 int sqlite3GenerateIndexKey(Parse*, Index*, int, int, int); | 3304 int sqlite3GenerateIndexKey(Parse*, Index*, int, int, int, int*,Index*,int); |
2798 void sqlite3GenerateConstraintChecks(Parse*,Table*,int,int, | 3305 void sqlite3ResolvePartIdxLabel(Parse*,int); |
2799 int*,int,int,int,int,int*); | 3306 void sqlite3GenerateConstraintChecks(Parse*,Table*,int*,int,int,int,int, |
2800 void sqlite3CompleteInsertion(Parse*, Table*, int, int, int*, int, int, int); | 3307 u8,u8,int,int*); |
2801 int sqlite3OpenTableAndIndices(Parse*, Table*, int, int); | 3308 void sqlite3CompleteInsertion(Parse*,Table*,int,int,int,int*,int,int,int); |
| 3309 int sqlite3OpenTableAndIndices(Parse*, Table*, int, int, u8*, int*, int*); |
2802 void sqlite3BeginWriteOperation(Parse*, int, int); | 3310 void sqlite3BeginWriteOperation(Parse*, int, int); |
2803 void sqlite3MultiWrite(Parse*); | 3311 void sqlite3MultiWrite(Parse*); |
2804 void sqlite3MayAbort(Parse*); | 3312 void sqlite3MayAbort(Parse*); |
2805 void sqlite3HaltConstraint(Parse*, int, char*, int); | 3313 void sqlite3HaltConstraint(Parse*, int, int, char*, i8, u8); |
| 3314 void sqlite3UniqueConstraint(Parse*, int, Index*); |
| 3315 void sqlite3RowidConstraint(Parse*, int, Table*); |
2806 Expr *sqlite3ExprDup(sqlite3*,Expr*,int); | 3316 Expr *sqlite3ExprDup(sqlite3*,Expr*,int); |
2807 ExprList *sqlite3ExprListDup(sqlite3*,ExprList*,int); | 3317 ExprList *sqlite3ExprListDup(sqlite3*,ExprList*,int); |
2808 SrcList *sqlite3SrcListDup(sqlite3*,SrcList*,int); | 3318 SrcList *sqlite3SrcListDup(sqlite3*,SrcList*,int); |
2809 IdList *sqlite3IdListDup(sqlite3*,IdList*); | 3319 IdList *sqlite3IdListDup(sqlite3*,IdList*); |
2810 Select *sqlite3SelectDup(sqlite3*,Select*,int); | 3320 Select *sqlite3SelectDup(sqlite3*,Select*,int); |
| 3321 #if SELECTTRACE_ENABLED |
| 3322 void sqlite3SelectSetName(Select*,const char*); |
| 3323 #else |
| 3324 # define sqlite3SelectSetName(A,B) |
| 3325 #endif |
2811 void sqlite3FuncDefInsert(FuncDefHash*, FuncDef*); | 3326 void sqlite3FuncDefInsert(FuncDefHash*, FuncDef*); |
2812 FuncDef *sqlite3FindFunction(sqlite3*,const char*,int,int,u8,int); | 3327 FuncDef *sqlite3FindFunction(sqlite3*,const char*,int,int,u8,u8); |
2813 void sqlite3RegisterBuiltinFunctions(sqlite3*); | 3328 void sqlite3RegisterBuiltinFunctions(sqlite3*); |
2814 void sqlite3RegisterDateTimeFunctions(void); | 3329 void sqlite3RegisterDateTimeFunctions(void); |
2815 void sqlite3RegisterGlobalFunctions(void); | 3330 void sqlite3RegisterGlobalFunctions(void); |
2816 int sqlite3SafetyCheckOk(sqlite3*); | 3331 int sqlite3SafetyCheckOk(sqlite3*); |
2817 int sqlite3SafetyCheckSickOrOk(sqlite3*); | 3332 int sqlite3SafetyCheckSickOrOk(sqlite3*); |
2818 void sqlite3ChangeCookie(Parse*, int); | 3333 void sqlite3ChangeCookie(Parse*, int); |
2819 | 3334 |
2820 #if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER) | 3335 #if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER) |
2821 void sqlite3MaterializeView(Parse*, Table*, Expr*, int); | 3336 void sqlite3MaterializeView(Parse*, Table*, Expr*, int); |
2822 #endif | 3337 #endif |
2823 | 3338 |
2824 #ifndef SQLITE_OMIT_TRIGGER | 3339 #ifndef SQLITE_OMIT_TRIGGER |
2825 void sqlite3BeginTrigger(Parse*, Token*,Token*,int,int,IdList*,SrcList*, | 3340 void sqlite3BeginTrigger(Parse*, Token*,Token*,int,int,IdList*,SrcList*, |
2826 Expr*,int, int); | 3341 Expr*,int, int); |
2827 void sqlite3FinishTrigger(Parse*, TriggerStep*, Token*); | 3342 void sqlite3FinishTrigger(Parse*, TriggerStep*, Token*); |
2828 void sqlite3DropTrigger(Parse*, SrcList*, int); | 3343 void sqlite3DropTrigger(Parse*, SrcList*, int); |
2829 void sqlite3DropTriggerPtr(Parse*, Trigger*); | 3344 void sqlite3DropTriggerPtr(Parse*, Trigger*); |
2830 Trigger *sqlite3TriggersExist(Parse *, Table*, int, ExprList*, int *pMask); | 3345 Trigger *sqlite3TriggersExist(Parse *, Table*, int, ExprList*, int *pMask); |
2831 Trigger *sqlite3TriggerList(Parse *, Table *); | 3346 Trigger *sqlite3TriggerList(Parse *, Table *); |
2832 void sqlite3CodeRowTrigger(Parse*, Trigger *, int, ExprList*, int, Table *, | 3347 void sqlite3CodeRowTrigger(Parse*, Trigger *, int, ExprList*, int, Table *, |
2833 int, int, int); | 3348 int, int, int); |
2834 void sqlite3CodeRowTriggerDirect(Parse *, Trigger *, Table *, int, int, int); | 3349 void sqlite3CodeRowTriggerDirect(Parse *, Trigger *, Table *, int, int, int); |
2835 void sqliteViewTriggers(Parse*, Table*, Expr*, int, ExprList*); | 3350 void sqliteViewTriggers(Parse*, Table*, Expr*, int, ExprList*); |
2836 void sqlite3DeleteTriggerStep(sqlite3*, TriggerStep*); | 3351 void sqlite3DeleteTriggerStep(sqlite3*, TriggerStep*); |
2837 TriggerStep *sqlite3TriggerSelectStep(sqlite3*,Select*); | 3352 TriggerStep *sqlite3TriggerSelectStep(sqlite3*,Select*); |
2838 TriggerStep *sqlite3TriggerInsertStep(sqlite3*,Token*, IdList*, | 3353 TriggerStep *sqlite3TriggerInsertStep(sqlite3*,Token*, IdList*, |
2839 ExprList*,Select*,u8); | 3354 Select*,u8); |
2840 TriggerStep *sqlite3TriggerUpdateStep(sqlite3*,Token*,ExprList*, Expr*, u8); | 3355 TriggerStep *sqlite3TriggerUpdateStep(sqlite3*,Token*,ExprList*, Expr*, u8); |
2841 TriggerStep *sqlite3TriggerDeleteStep(sqlite3*,Token*, Expr*); | 3356 TriggerStep *sqlite3TriggerDeleteStep(sqlite3*,Token*, Expr*); |
2842 void sqlite3DeleteTrigger(sqlite3*, Trigger*); | 3357 void sqlite3DeleteTrigger(sqlite3*, Trigger*); |
2843 void sqlite3UnlinkAndDeleteTrigger(sqlite3*,int,const char*); | 3358 void sqlite3UnlinkAndDeleteTrigger(sqlite3*,int,const char*); |
2844 u32 sqlite3TriggerColmask(Parse*,Trigger*,ExprList*,int,int,Table*,int); | 3359 u32 sqlite3TriggerColmask(Parse*,Trigger*,ExprList*,int,int,Table*,int); |
2845 # define sqlite3ParseToplevel(p) ((p)->pToplevel ? (p)->pToplevel : (p)) | 3360 # define sqlite3ParseToplevel(p) ((p)->pToplevel ? (p)->pToplevel : (p)) |
2846 #else | 3361 #else |
2847 # define sqlite3TriggersExist(B,C,D,E,F) 0 | 3362 # define sqlite3TriggersExist(B,C,D,E,F) 0 |
2848 # define sqlite3DeleteTrigger(A,B) | 3363 # define sqlite3DeleteTrigger(A,B) |
2849 # define sqlite3DropTriggerPtr(A,B) | 3364 # define sqlite3DropTriggerPtr(A,B) |
(...skipping 15 matching lines...) Expand all Loading... |
2865 void sqlite3AuthContextPop(AuthContext*); | 3380 void sqlite3AuthContextPop(AuthContext*); |
2866 int sqlite3AuthReadCol(Parse*, const char *, const char *, int); | 3381 int sqlite3AuthReadCol(Parse*, const char *, const char *, int); |
2867 #else | 3382 #else |
2868 # define sqlite3AuthRead(a,b,c,d) | 3383 # define sqlite3AuthRead(a,b,c,d) |
2869 # define sqlite3AuthCheck(a,b,c,d,e) SQLITE_OK | 3384 # define sqlite3AuthCheck(a,b,c,d,e) SQLITE_OK |
2870 # define sqlite3AuthContextPush(a,b,c) | 3385 # define sqlite3AuthContextPush(a,b,c) |
2871 # define sqlite3AuthContextPop(a) ((void)(a)) | 3386 # define sqlite3AuthContextPop(a) ((void)(a)) |
2872 #endif | 3387 #endif |
2873 void sqlite3Attach(Parse*, Expr*, Expr*, Expr*); | 3388 void sqlite3Attach(Parse*, Expr*, Expr*, Expr*); |
2874 void sqlite3Detach(Parse*, Expr*); | 3389 void sqlite3Detach(Parse*, Expr*); |
2875 int sqlite3FixInit(DbFixer*, Parse*, int, const char*, const Token*); | 3390 void sqlite3FixInit(DbFixer*, Parse*, int, const char*, const Token*); |
2876 int sqlite3FixSrcList(DbFixer*, SrcList*); | 3391 int sqlite3FixSrcList(DbFixer*, SrcList*); |
2877 int sqlite3FixSelect(DbFixer*, Select*); | 3392 int sqlite3FixSelect(DbFixer*, Select*); |
2878 int sqlite3FixExpr(DbFixer*, Expr*); | 3393 int sqlite3FixExpr(DbFixer*, Expr*); |
2879 int sqlite3FixExprList(DbFixer*, ExprList*); | 3394 int sqlite3FixExprList(DbFixer*, ExprList*); |
2880 int sqlite3FixTriggerStep(DbFixer*, TriggerStep*); | 3395 int sqlite3FixTriggerStep(DbFixer*, TriggerStep*); |
2881 int sqlite3AtoF(const char *z, double*, int, u8); | 3396 int sqlite3AtoF(const char *z, double*, int, u8); |
2882 int sqlite3GetInt32(const char *, int*); | 3397 int sqlite3GetInt32(const char *, int*); |
2883 int sqlite3Atoi(const char*); | 3398 int sqlite3Atoi(const char*); |
2884 int sqlite3Utf16ByteLen(const void *pData, int nChar); | 3399 int sqlite3Utf16ByteLen(const void *pData, int nChar); |
2885 int sqlite3Utf8CharLen(const char *pData, int nByte); | 3400 int sqlite3Utf8CharLen(const char *pData, int nByte); |
2886 int sqlite3Utf8Read(const u8*, const u8**); | 3401 u32 sqlite3Utf8Read(const u8**); |
| 3402 LogEst sqlite3LogEst(u64); |
| 3403 LogEst sqlite3LogEstAdd(LogEst,LogEst); |
| 3404 #ifndef SQLITE_OMIT_VIRTUALTABLE |
| 3405 LogEst sqlite3LogEstFromDouble(double); |
| 3406 #endif |
| 3407 u64 sqlite3LogEstToInt(LogEst); |
2887 | 3408 |
2888 /* | 3409 /* |
2889 ** Routines to read and write variable-length integers. These used to | 3410 ** Routines to read and write variable-length integers. These used to |
2890 ** be defined locally, but now we use the varint routines in the util.c | 3411 ** be defined locally, but now we use the varint routines in the util.c |
2891 ** file. Code should use the MACRO forms below, as the Varint32 versions | 3412 ** file. |
2892 ** are coded to assume the single byte case is already handled (which | |
2893 ** the MACRO form does). | |
2894 */ | 3413 */ |
2895 int sqlite3PutVarint(unsigned char*, u64); | 3414 int sqlite3PutVarint(unsigned char*, u64); |
2896 int sqlite3PutVarint32(unsigned char*, u32); | |
2897 u8 sqlite3GetVarint(const unsigned char *, u64 *); | 3415 u8 sqlite3GetVarint(const unsigned char *, u64 *); |
2898 u8 sqlite3GetVarint32(const unsigned char *, u32 *); | 3416 u8 sqlite3GetVarint32(const unsigned char *, u32 *); |
2899 int sqlite3VarintLen(u64 v); | 3417 int sqlite3VarintLen(u64 v); |
2900 | 3418 |
2901 /* | 3419 /* |
2902 ** The header of a record consists of a sequence variable-length integers. | 3420 ** The common case is for a varint to be a single byte. They following |
2903 ** These integers are almost always small and are encoded as a single byte. | 3421 ** macros handle the common case without a procedure call, but then call |
2904 ** The following macros take advantage this fact to provide a fast encode | 3422 ** the procedure for larger varints. |
2905 ** and decode of the integers in a record header. It is faster for the common | |
2906 ** case where the integer is a single byte. It is a little slower when the | |
2907 ** integer is two or more bytes. But overall it is faster. | |
2908 ** | |
2909 ** The following expressions are equivalent: | |
2910 ** | |
2911 ** x = sqlite3GetVarint32( A, &B ); | |
2912 ** x = sqlite3PutVarint32( A, B ); | |
2913 ** | |
2914 ** x = getVarint32( A, B ); | |
2915 ** x = putVarint32( A, B ); | |
2916 ** | |
2917 */ | 3423 */ |
2918 #define getVarint32(A,B) (u8)((*(A)<(u8)0x80) ? ((B) = (u32)*(A)),1 : sqlite3Ge
tVarint32((A), (u32 *)&(B))) | 3424 #define getVarint32(A,B) \ |
2919 #define putVarint32(A,B) (u8)(((u32)(B)<(u32)0x80) ? (*(A) = (unsigned char)(B)
),1 : sqlite3PutVarint32((A), (B))) | 3425 (u8)((*(A)<(u8)0x80)?((B)=(u32)*(A)),1:sqlite3GetVarint32((A),(u32 *)&(B))) |
| 3426 #define putVarint32(A,B) \ |
| 3427 (u8)(((u32)(B)<(u32)0x80)?(*(A)=(unsigned char)(B)),1:\ |
| 3428 sqlite3PutVarint((A),(B))) |
2920 #define getVarint sqlite3GetVarint | 3429 #define getVarint sqlite3GetVarint |
2921 #define putVarint sqlite3PutVarint | 3430 #define putVarint sqlite3PutVarint |
2922 | 3431 |
2923 | 3432 |
2924 const char *sqlite3IndexAffinityStr(Vdbe *, Index *); | 3433 const char *sqlite3IndexAffinityStr(Vdbe *, Index *); |
2925 void sqlite3TableAffinityStr(Vdbe *, Table *); | 3434 void sqlite3TableAffinity(Vdbe*, Table*, int); |
2926 char sqlite3CompareAffinity(Expr *pExpr, char aff2); | 3435 char sqlite3CompareAffinity(Expr *pExpr, char aff2); |
2927 int sqlite3IndexAffinityOk(Expr *pExpr, char idx_affinity); | 3436 int sqlite3IndexAffinityOk(Expr *pExpr, char idx_affinity); |
2928 char sqlite3ExprAffinity(Expr *pExpr); | 3437 char sqlite3ExprAffinity(Expr *pExpr); |
2929 int sqlite3Atoi64(const char*, i64*, int, u8); | 3438 int sqlite3Atoi64(const char*, i64*, int, u8); |
2930 void sqlite3Error(sqlite3*, int, const char*,...); | 3439 int sqlite3DecOrHexToI64(const char*, i64*); |
| 3440 void sqlite3ErrorWithMsg(sqlite3*, int, const char*,...); |
| 3441 void sqlite3Error(sqlite3*,int); |
2931 void *sqlite3HexToBlob(sqlite3*, const char *z, int n); | 3442 void *sqlite3HexToBlob(sqlite3*, const char *z, int n); |
| 3443 u8 sqlite3HexToInt(int h); |
2932 int sqlite3TwoPartName(Parse *, Token *, Token *, Token **); | 3444 int sqlite3TwoPartName(Parse *, Token *, Token *, Token **); |
| 3445 |
| 3446 #if defined(SQLITE_TEST) |
| 3447 const char *sqlite3ErrName(int); |
| 3448 #endif |
| 3449 |
2933 const char *sqlite3ErrStr(int); | 3450 const char *sqlite3ErrStr(int); |
2934 int sqlite3ReadSchema(Parse *pParse); | 3451 int sqlite3ReadSchema(Parse *pParse); |
2935 CollSeq *sqlite3FindCollSeq(sqlite3*,u8 enc, const char*,int); | 3452 CollSeq *sqlite3FindCollSeq(sqlite3*,u8 enc, const char*,int); |
2936 CollSeq *sqlite3LocateCollSeq(Parse *pParse, const char*zName); | 3453 CollSeq *sqlite3LocateCollSeq(Parse *pParse, const char*zName); |
2937 CollSeq *sqlite3ExprCollSeq(Parse *pParse, Expr *pExpr); | 3454 CollSeq *sqlite3ExprCollSeq(Parse *pParse, Expr *pExpr); |
2938 Expr *sqlite3ExprSetColl(Expr*, CollSeq*); | 3455 Expr *sqlite3ExprAddCollateToken(Parse *pParse, Expr*, const Token*); |
2939 Expr *sqlite3ExprSetCollByToken(Parse *pParse, Expr*, Token*); | 3456 Expr *sqlite3ExprAddCollateString(Parse*,Expr*,const char*); |
| 3457 Expr *sqlite3ExprSkipCollate(Expr*); |
2940 int sqlite3CheckCollSeq(Parse *, CollSeq *); | 3458 int sqlite3CheckCollSeq(Parse *, CollSeq *); |
2941 int sqlite3CheckObjectName(Parse *, const char *); | 3459 int sqlite3CheckObjectName(Parse *, const char *); |
2942 void sqlite3VdbeSetChanges(sqlite3 *, int); | 3460 void sqlite3VdbeSetChanges(sqlite3 *, int); |
2943 int sqlite3AddInt64(i64*,i64); | 3461 int sqlite3AddInt64(i64*,i64); |
2944 int sqlite3SubInt64(i64*,i64); | 3462 int sqlite3SubInt64(i64*,i64); |
2945 int sqlite3MulInt64(i64*,i64); | 3463 int sqlite3MulInt64(i64*,i64); |
2946 int sqlite3AbsInt32(int); | 3464 int sqlite3AbsInt32(int); |
| 3465 #ifdef SQLITE_ENABLE_8_3_NAMES |
| 3466 void sqlite3FileSuffix3(const char*, char*); |
| 3467 #else |
| 3468 # define sqlite3FileSuffix3(X,Y) |
| 3469 #endif |
| 3470 u8 sqlite3GetBoolean(const char *z,u8); |
2947 | 3471 |
2948 const void *sqlite3ValueText(sqlite3_value*, u8); | 3472 const void *sqlite3ValueText(sqlite3_value*, u8); |
2949 int sqlite3ValueBytes(sqlite3_value*, u8); | 3473 int sqlite3ValueBytes(sqlite3_value*, u8); |
2950 void sqlite3ValueSetStr(sqlite3_value*, int, const void *,u8, | 3474 void sqlite3ValueSetStr(sqlite3_value*, int, const void *,u8, |
2951 void(*)(void*)); | 3475 void(*)(void*)); |
| 3476 void sqlite3ValueSetNull(sqlite3_value*); |
2952 void sqlite3ValueFree(sqlite3_value*); | 3477 void sqlite3ValueFree(sqlite3_value*); |
2953 sqlite3_value *sqlite3ValueNew(sqlite3 *); | 3478 sqlite3_value *sqlite3ValueNew(sqlite3 *); |
2954 char *sqlite3Utf16to8(sqlite3 *, const void*, int, u8); | 3479 char *sqlite3Utf16to8(sqlite3 *, const void*, int, u8); |
2955 #ifdef SQLITE_ENABLE_STAT2 | |
2956 char *sqlite3Utf8to16(sqlite3 *, u8, char *, int, int *); | |
2957 #endif | |
2958 int sqlite3ValueFromExpr(sqlite3 *, Expr *, u8, u8, sqlite3_value **); | 3480 int sqlite3ValueFromExpr(sqlite3 *, Expr *, u8, u8, sqlite3_value **); |
2959 void sqlite3ValueApplyAffinity(sqlite3_value *, u8, u8); | 3481 void sqlite3ValueApplyAffinity(sqlite3_value *, u8, u8); |
2960 #ifndef SQLITE_AMALGAMATION | 3482 #ifndef SQLITE_AMALGAMATION |
2961 extern const unsigned char sqlite3OpcodeProperty[]; | 3483 extern const unsigned char sqlite3OpcodeProperty[]; |
2962 extern const unsigned char sqlite3UpperToLower[]; | 3484 extern const unsigned char sqlite3UpperToLower[]; |
2963 extern const unsigned char sqlite3CtypeMap[]; | 3485 extern const unsigned char sqlite3CtypeMap[]; |
2964 extern const Token sqlite3IntTokens[]; | 3486 extern const Token sqlite3IntTokens[]; |
2965 extern SQLITE_WSD struct Sqlite3Config sqlite3Config; | 3487 extern SQLITE_WSD struct Sqlite3Config sqlite3Config; |
2966 extern SQLITE_WSD FuncDefHash sqlite3GlobalFunctions; | 3488 extern SQLITE_WSD FuncDefHash sqlite3GlobalFunctions; |
2967 #ifndef SQLITE_OMIT_WSD | 3489 #ifndef SQLITE_OMIT_WSD |
2968 extern int sqlite3PendingByte; | 3490 extern int sqlite3PendingByte; |
2969 #endif | 3491 #endif |
2970 #endif | 3492 #endif |
2971 void sqlite3RootPageMoved(sqlite3*, int, int, int); | 3493 void sqlite3RootPageMoved(sqlite3*, int, int, int); |
2972 void sqlite3Reindex(Parse*, Token*, Token*); | 3494 void sqlite3Reindex(Parse*, Token*, Token*); |
2973 void sqlite3AlterFunctions(void); | 3495 void sqlite3AlterFunctions(void); |
2974 void sqlite3AlterRenameTable(Parse*, SrcList*, Token*); | 3496 void sqlite3AlterRenameTable(Parse*, SrcList*, Token*); |
2975 int sqlite3GetToken(const unsigned char *, int *); | 3497 int sqlite3GetToken(const unsigned char *, int *); |
2976 void sqlite3NestedParse(Parse*, const char*, ...); | 3498 void sqlite3NestedParse(Parse*, const char*, ...); |
2977 void sqlite3ExpirePreparedStatements(sqlite3*); | 3499 void sqlite3ExpirePreparedStatements(sqlite3*); |
2978 int sqlite3CodeSubselect(Parse *, Expr *, int, int); | 3500 int sqlite3CodeSubselect(Parse *, Expr *, int, int); |
2979 void sqlite3SelectPrep(Parse*, Select*, NameContext*); | 3501 void sqlite3SelectPrep(Parse*, Select*, NameContext*); |
| 3502 int sqlite3MatchSpanName(const char*, const char*, const char*, const char*); |
2980 int sqlite3ResolveExprNames(NameContext*, Expr*); | 3503 int sqlite3ResolveExprNames(NameContext*, Expr*); |
2981 void sqlite3ResolveSelectNames(Parse*, Select*, NameContext*); | 3504 void sqlite3ResolveSelectNames(Parse*, Select*, NameContext*); |
| 3505 void sqlite3ResolveSelfReference(Parse*,Table*,int,Expr*,ExprList*); |
2982 int sqlite3ResolveOrderGroupBy(Parse*, Select*, ExprList*, const char*); | 3506 int sqlite3ResolveOrderGroupBy(Parse*, Select*, ExprList*, const char*); |
2983 void sqlite3ColumnDefault(Vdbe *, Table *, int, int); | 3507 void sqlite3ColumnDefault(Vdbe *, Table *, int, int); |
2984 void sqlite3AlterFinishAddColumn(Parse *, Token *); | 3508 void sqlite3AlterFinishAddColumn(Parse *, Token *); |
2985 void sqlite3AlterBeginAddColumn(Parse *, SrcList *); | 3509 void sqlite3AlterBeginAddColumn(Parse *, SrcList *); |
2986 CollSeq *sqlite3GetCollSeq(sqlite3*, u8, CollSeq *, const char*); | 3510 CollSeq *sqlite3GetCollSeq(Parse*, u8, CollSeq *, const char*); |
2987 char sqlite3AffinityType(const char*); | 3511 char sqlite3AffinityType(const char*, u8*); |
2988 void sqlite3Analyze(Parse*, Token*, Token*); | 3512 void sqlite3Analyze(Parse*, Token*, Token*); |
2989 int sqlite3InvokeBusyHandler(BusyHandler*); | 3513 int sqlite3InvokeBusyHandler(BusyHandler*); |
2990 int sqlite3FindDb(sqlite3*, Token*); | 3514 int sqlite3FindDb(sqlite3*, Token*); |
2991 int sqlite3FindDbName(sqlite3 *, const char *); | 3515 int sqlite3FindDbName(sqlite3 *, const char *); |
2992 int sqlite3AnalysisLoad(sqlite3*,int iDB); | 3516 int sqlite3AnalysisLoad(sqlite3*,int iDB); |
2993 void sqlite3DeleteIndexSamples(sqlite3*,Index*); | 3517 void sqlite3DeleteIndexSamples(sqlite3*,Index*); |
2994 void sqlite3DefaultRowEst(Index*); | 3518 void sqlite3DefaultRowEst(Index*); |
2995 void sqlite3RegisterLikeFunctions(sqlite3*, int); | 3519 void sqlite3RegisterLikeFunctions(sqlite3*, int); |
2996 int sqlite3IsLikeFunction(sqlite3*,Expr*,int*,char*); | 3520 int sqlite3IsLikeFunction(sqlite3*,Expr*,int*,char*); |
2997 void sqlite3MinimumFileFormat(Parse*, int, int); | 3521 void sqlite3MinimumFileFormat(Parse*, int, int); |
2998 void sqlite3SchemaClear(void *); | 3522 void sqlite3SchemaClear(void *); |
2999 Schema *sqlite3SchemaGet(sqlite3 *, Btree *); | 3523 Schema *sqlite3SchemaGet(sqlite3 *, Btree *); |
3000 int sqlite3SchemaToIndex(sqlite3 *db, Schema *); | 3524 int sqlite3SchemaToIndex(sqlite3 *db, Schema *); |
3001 KeyInfo *sqlite3IndexKeyinfo(Parse *, Index *); | 3525 KeyInfo *sqlite3KeyInfoAlloc(sqlite3*,int,int); |
| 3526 void sqlite3KeyInfoUnref(KeyInfo*); |
| 3527 KeyInfo *sqlite3KeyInfoRef(KeyInfo*); |
| 3528 KeyInfo *sqlite3KeyInfoOfIndex(Parse*, Index*); |
| 3529 #ifdef SQLITE_DEBUG |
| 3530 int sqlite3KeyInfoIsWriteable(KeyInfo*); |
| 3531 #endif |
3002 int sqlite3CreateFunc(sqlite3 *, const char *, int, int, void *, | 3532 int sqlite3CreateFunc(sqlite3 *, const char *, int, int, void *, |
3003 void (*)(sqlite3_context*,int,sqlite3_value **), | 3533 void (*)(sqlite3_context*,int,sqlite3_value **), |
3004 void (*)(sqlite3_context*,int,sqlite3_value **), void (*)(sqlite3_context*), | 3534 void (*)(sqlite3_context*,int,sqlite3_value **), void (*)(sqlite3_context*), |
3005 FuncDestructor *pDestructor | 3535 FuncDestructor *pDestructor |
3006 ); | 3536 ); |
3007 int sqlite3ApiExit(sqlite3 *db, int); | 3537 int sqlite3ApiExit(sqlite3 *db, int); |
3008 int sqlite3OpenTempDatabase(Parse *); | 3538 int sqlite3OpenTempDatabase(Parse *); |
3009 | 3539 |
3010 void sqlite3StrAccumInit(StrAccum*, char*, int, int); | 3540 void sqlite3StrAccumInit(StrAccum*, char*, int, int); |
3011 void sqlite3StrAccumAppend(StrAccum*,const char*,int); | 3541 void sqlite3StrAccumAppend(StrAccum*,const char*,int); |
| 3542 void sqlite3StrAccumAppendAll(StrAccum*,const char*); |
| 3543 void sqlite3AppendChar(StrAccum*,int,char); |
3012 char *sqlite3StrAccumFinish(StrAccum*); | 3544 char *sqlite3StrAccumFinish(StrAccum*); |
3013 void sqlite3StrAccumReset(StrAccum*); | 3545 void sqlite3StrAccumReset(StrAccum*); |
3014 void sqlite3SelectDestInit(SelectDest*,int,int); | 3546 void sqlite3SelectDestInit(SelectDest*,int,int); |
3015 Expr *sqlite3CreateColumnExpr(sqlite3 *, SrcList *, int, int); | 3547 Expr *sqlite3CreateColumnExpr(sqlite3 *, SrcList *, int, int); |
3016 | 3548 |
3017 void sqlite3BackupRestart(sqlite3_backup *); | 3549 void sqlite3BackupRestart(sqlite3_backup *); |
3018 void sqlite3BackupUpdate(sqlite3_backup *, Pgno, const u8 *); | 3550 void sqlite3BackupUpdate(sqlite3_backup *, Pgno, const u8 *); |
3019 | 3551 |
| 3552 #ifdef SQLITE_ENABLE_STAT3_OR_STAT4 |
| 3553 void sqlite3AnalyzeFunctions(void); |
| 3554 int sqlite3Stat4ProbeSetValue(Parse*,Index*,UnpackedRecord**,Expr*,u8,int,int*); |
| 3555 int sqlite3Stat4ValueFromExpr(Parse*, Expr*, u8, sqlite3_value**); |
| 3556 void sqlite3Stat4ProbeFree(UnpackedRecord*); |
| 3557 int sqlite3Stat4Column(sqlite3*, const void*, int, int, sqlite3_value**); |
| 3558 #endif |
| 3559 |
3020 /* | 3560 /* |
3021 ** The interface to the LEMON-generated parser | 3561 ** The interface to the LEMON-generated parser |
3022 */ | 3562 */ |
3023 void *sqlite3ParserAlloc(void*(*)(size_t)); | 3563 void *sqlite3ParserAlloc(void*(*)(u64)); |
3024 void sqlite3ParserFree(void*, void(*)(void*)); | 3564 void sqlite3ParserFree(void*, void(*)(void*)); |
3025 void sqlite3Parser(void*, int, Token, Parse*); | 3565 void sqlite3Parser(void*, int, Token, Parse*); |
3026 #ifdef YYTRACKMAXSTACKDEPTH | 3566 #ifdef YYTRACKMAXSTACKDEPTH |
3027 int sqlite3ParserStackPeak(void*); | 3567 int sqlite3ParserStackPeak(void*); |
3028 #endif | 3568 #endif |
3029 | 3569 |
3030 void sqlite3AutoLoadExtensions(sqlite3*); | 3570 void sqlite3AutoLoadExtensions(sqlite3*); |
3031 #ifndef SQLITE_OMIT_LOAD_EXTENSION | 3571 #ifndef SQLITE_OMIT_LOAD_EXTENSION |
3032 void sqlite3CloseExtensions(sqlite3*); | 3572 void sqlite3CloseExtensions(sqlite3*); |
3033 #else | 3573 #else |
(...skipping 12 matching lines...) Expand all Loading... |
3046 | 3586 |
3047 #ifdef SQLITE_OMIT_VIRTUALTABLE | 3587 #ifdef SQLITE_OMIT_VIRTUALTABLE |
3048 # define sqlite3VtabClear(Y) | 3588 # define sqlite3VtabClear(Y) |
3049 # define sqlite3VtabSync(X,Y) SQLITE_OK | 3589 # define sqlite3VtabSync(X,Y) SQLITE_OK |
3050 # define sqlite3VtabRollback(X) | 3590 # define sqlite3VtabRollback(X) |
3051 # define sqlite3VtabCommit(X) | 3591 # define sqlite3VtabCommit(X) |
3052 # define sqlite3VtabInSync(db) 0 | 3592 # define sqlite3VtabInSync(db) 0 |
3053 # define sqlite3VtabLock(X) | 3593 # define sqlite3VtabLock(X) |
3054 # define sqlite3VtabUnlock(X) | 3594 # define sqlite3VtabUnlock(X) |
3055 # define sqlite3VtabUnlockList(X) | 3595 # define sqlite3VtabUnlockList(X) |
| 3596 # define sqlite3VtabSavepoint(X, Y, Z) SQLITE_OK |
| 3597 # define sqlite3GetVTable(X,Y) ((VTable*)0) |
3056 #else | 3598 #else |
3057 void sqlite3VtabClear(sqlite3 *db, Table*); | 3599 void sqlite3VtabClear(sqlite3 *db, Table*); |
3058 int sqlite3VtabSync(sqlite3 *db, char **); | 3600 void sqlite3VtabDisconnect(sqlite3 *db, Table *p); |
| 3601 int sqlite3VtabSync(sqlite3 *db, Vdbe*); |
3059 int sqlite3VtabRollback(sqlite3 *db); | 3602 int sqlite3VtabRollback(sqlite3 *db); |
3060 int sqlite3VtabCommit(sqlite3 *db); | 3603 int sqlite3VtabCommit(sqlite3 *db); |
3061 void sqlite3VtabLock(VTable *); | 3604 void sqlite3VtabLock(VTable *); |
3062 void sqlite3VtabUnlock(VTable *); | 3605 void sqlite3VtabUnlock(VTable *); |
3063 void sqlite3VtabUnlockList(sqlite3*); | 3606 void sqlite3VtabUnlockList(sqlite3*); |
| 3607 int sqlite3VtabSavepoint(sqlite3 *, int, int); |
| 3608 void sqlite3VtabImportErrmsg(Vdbe*, sqlite3_vtab*); |
| 3609 VTable *sqlite3GetVTable(sqlite3*, Table*); |
3064 # define sqlite3VtabInSync(db) ((db)->nVTrans>0 && (db)->aVTrans==0) | 3610 # define sqlite3VtabInSync(db) ((db)->nVTrans>0 && (db)->aVTrans==0) |
3065 #endif | 3611 #endif |
3066 void sqlite3VtabMakeWritable(Parse*,Table*); | 3612 void sqlite3VtabMakeWritable(Parse*,Table*); |
3067 void sqlite3VtabBeginParse(Parse*, Token*, Token*, Token*); | 3613 void sqlite3VtabBeginParse(Parse*, Token*, Token*, Token*, int); |
3068 void sqlite3VtabFinishParse(Parse*, Token*); | 3614 void sqlite3VtabFinishParse(Parse*, Token*); |
3069 void sqlite3VtabArgInit(Parse*); | 3615 void sqlite3VtabArgInit(Parse*); |
3070 void sqlite3VtabArgExtend(Parse*, Token*); | 3616 void sqlite3VtabArgExtend(Parse*, Token*); |
3071 int sqlite3VtabCallCreate(sqlite3*, int, const char *, char **); | 3617 int sqlite3VtabCallCreate(sqlite3*, int, const char *, char **); |
3072 int sqlite3VtabCallConnect(Parse*, Table*); | 3618 int sqlite3VtabCallConnect(Parse*, Table*); |
3073 int sqlite3VtabCallDestroy(sqlite3*, int, const char *); | 3619 int sqlite3VtabCallDestroy(sqlite3*, int, const char *); |
3074 int sqlite3VtabBegin(sqlite3 *, VTable *); | 3620 int sqlite3VtabBegin(sqlite3 *, VTable *); |
3075 FuncDef *sqlite3VtabOverloadFunction(sqlite3 *,FuncDef*, int nArg, Expr*); | 3621 FuncDef *sqlite3VtabOverloadFunction(sqlite3 *,FuncDef*, int nArg, Expr*); |
3076 void sqlite3InvalidFunction(sqlite3_context*,int,sqlite3_value**); | 3622 void sqlite3InvalidFunction(sqlite3_context*,int,sqlite3_value**); |
| 3623 sqlite3_int64 sqlite3StmtCurrentTime(sqlite3_context*); |
3077 int sqlite3VdbeParameterIndex(Vdbe*, const char*, int); | 3624 int sqlite3VdbeParameterIndex(Vdbe*, const char*, int); |
3078 int sqlite3TransferBindings(sqlite3_stmt *, sqlite3_stmt *); | 3625 int sqlite3TransferBindings(sqlite3_stmt *, sqlite3_stmt *); |
| 3626 void sqlite3ParserReset(Parse*); |
3079 int sqlite3Reprepare(Vdbe*); | 3627 int sqlite3Reprepare(Vdbe*); |
3080 void sqlite3ExprListCheckLength(Parse*, ExprList*, const char*); | 3628 void sqlite3ExprListCheckLength(Parse*, ExprList*, const char*); |
3081 CollSeq *sqlite3BinaryCompareCollSeq(Parse *, Expr *, Expr *); | 3629 CollSeq *sqlite3BinaryCompareCollSeq(Parse *, Expr *, Expr *); |
3082 int sqlite3TempInMemory(const sqlite3*); | 3630 int sqlite3TempInMemory(const sqlite3*); |
3083 VTable *sqlite3GetVTable(sqlite3*, Table*); | |
3084 const char *sqlite3JournalModename(int); | 3631 const char *sqlite3JournalModename(int); |
3085 int sqlite3Checkpoint(sqlite3*, int, int, int*, int*); | 3632 #ifndef SQLITE_OMIT_WAL |
3086 int sqlite3WalDefaultHook(void*,sqlite3*,const char*,int); | 3633 int sqlite3Checkpoint(sqlite3*, int, int, int*, int*); |
| 3634 int sqlite3WalDefaultHook(void*,sqlite3*,const char*,int); |
| 3635 #endif |
| 3636 #ifndef SQLITE_OMIT_CTE |
| 3637 With *sqlite3WithAdd(Parse*,With*,Token*,ExprList*,Select*); |
| 3638 void sqlite3WithDelete(sqlite3*,With*); |
| 3639 void sqlite3WithPush(Parse*, With*, u8); |
| 3640 #else |
| 3641 #define sqlite3WithPush(x,y,z) |
| 3642 #define sqlite3WithDelete(x,y) |
| 3643 #endif |
3087 | 3644 |
3088 /* Declarations for functions in fkey.c. All of these are replaced by | 3645 /* Declarations for functions in fkey.c. All of these are replaced by |
3089 ** no-op macros if OMIT_FOREIGN_KEY is defined. In this case no foreign | 3646 ** no-op macros if OMIT_FOREIGN_KEY is defined. In this case no foreign |
3090 ** key functionality is available. If OMIT_TRIGGER is defined but | 3647 ** key functionality is available. If OMIT_TRIGGER is defined but |
3091 ** OMIT_FOREIGN_KEY is not, only some of the functions are no-oped. In | 3648 ** OMIT_FOREIGN_KEY is not, only some of the functions are no-oped. In |
3092 ** this case foreign keys are parsed, but no other functionality is | 3649 ** this case foreign keys are parsed, but no other functionality is |
3093 ** provided (enforcement of FK constraints requires the triggers sub-system). | 3650 ** provided (enforcement of FK constraints requires the triggers sub-system). |
3094 */ | 3651 */ |
3095 #if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER) | 3652 #if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER) |
3096 void sqlite3FkCheck(Parse*, Table*, int, int); | 3653 void sqlite3FkCheck(Parse*, Table*, int, int, int*, int); |
3097 void sqlite3FkDropTable(Parse*, SrcList *, Table*); | 3654 void sqlite3FkDropTable(Parse*, SrcList *, Table*); |
3098 void sqlite3FkActions(Parse*, Table*, ExprList*, int); | 3655 void sqlite3FkActions(Parse*, Table*, ExprList*, int, int*, int); |
3099 int sqlite3FkRequired(Parse*, Table*, int*, int); | 3656 int sqlite3FkRequired(Parse*, Table*, int*, int); |
3100 u32 sqlite3FkOldmask(Parse*, Table*); | 3657 u32 sqlite3FkOldmask(Parse*, Table*); |
3101 FKey *sqlite3FkReferences(Table *); | 3658 FKey *sqlite3FkReferences(Table *); |
3102 #else | 3659 #else |
3103 #define sqlite3FkActions(a,b,c,d) | 3660 #define sqlite3FkActions(a,b,c,d,e,f) |
3104 #define sqlite3FkCheck(a,b,c,d) | 3661 #define sqlite3FkCheck(a,b,c,d,e,f) |
3105 #define sqlite3FkDropTable(a,b,c) | 3662 #define sqlite3FkDropTable(a,b,c) |
3106 #define sqlite3FkOldmask(a,b) 0 | 3663 #define sqlite3FkOldmask(a,b) 0 |
3107 #define sqlite3FkRequired(a,b,c,d) 0 | 3664 #define sqlite3FkRequired(a,b,c,d) 0 |
3108 #endif | 3665 #endif |
3109 #ifndef SQLITE_OMIT_FOREIGN_KEY | 3666 #ifndef SQLITE_OMIT_FOREIGN_KEY |
3110 void sqlite3FkDelete(sqlite3 *, Table*); | 3667 void sqlite3FkDelete(sqlite3 *, Table*); |
| 3668 int sqlite3FkLocateIndex(Parse*,Table*,FKey*,Index**,int**); |
3111 #else | 3669 #else |
3112 #define sqlite3FkDelete(a,b) | 3670 #define sqlite3FkDelete(a,b) |
| 3671 #define sqlite3FkLocateIndex(a,b,c,d,e) |
3113 #endif | 3672 #endif |
3114 | 3673 |
3115 | 3674 |
3116 /* | 3675 /* |
3117 ** Available fault injectors. Should be numbered beginning with 0. | 3676 ** Available fault injectors. Should be numbered beginning with 0. |
3118 */ | 3677 */ |
3119 #define SQLITE_FAULTINJECTOR_MALLOC 0 | 3678 #define SQLITE_FAULTINJECTOR_MALLOC 0 |
3120 #define SQLITE_FAULTINJECTOR_COUNT 1 | 3679 #define SQLITE_FAULTINJECTOR_COUNT 1 |
3121 | 3680 |
3122 /* | 3681 /* |
3123 ** The interface to the code in fault.c used for identifying "benign" | 3682 ** The interface to the code in fault.c used for identifying "benign" |
3124 ** malloc failures. This is only present if SQLITE_OMIT_BUILTIN_TEST | 3683 ** malloc failures. This is only present if SQLITE_OMIT_BUILTIN_TEST |
3125 ** is not defined. | 3684 ** is not defined. |
3126 */ | 3685 */ |
3127 #ifndef SQLITE_OMIT_BUILTIN_TEST | 3686 #ifndef SQLITE_OMIT_BUILTIN_TEST |
3128 void sqlite3BeginBenignMalloc(void); | 3687 void sqlite3BeginBenignMalloc(void); |
3129 void sqlite3EndBenignMalloc(void); | 3688 void sqlite3EndBenignMalloc(void); |
3130 #else | 3689 #else |
3131 #define sqlite3BeginBenignMalloc() | 3690 #define sqlite3BeginBenignMalloc() |
3132 #define sqlite3EndBenignMalloc() | 3691 #define sqlite3EndBenignMalloc() |
3133 #endif | 3692 #endif |
3134 | 3693 |
3135 #define IN_INDEX_ROWID 1 | 3694 /* |
3136 #define IN_INDEX_EPH 2 | 3695 ** Allowed return values from sqlite3FindInIndex() |
3137 #define IN_INDEX_INDEX 3 | 3696 */ |
3138 int sqlite3FindInIndex(Parse *, Expr *, int*); | 3697 #define IN_INDEX_ROWID 1 /* Search the rowid of the table */ |
| 3698 #define IN_INDEX_EPH 2 /* Search an ephemeral b-tree */ |
| 3699 #define IN_INDEX_INDEX_ASC 3 /* Existing index ASCENDING */ |
| 3700 #define IN_INDEX_INDEX_DESC 4 /* Existing index DESCENDING */ |
| 3701 #define IN_INDEX_NOOP 5 /* No table available. Use comparisons */ |
| 3702 /* |
| 3703 ** Allowed flags for the 3rd parameter to sqlite3FindInIndex(). |
| 3704 */ |
| 3705 #define IN_INDEX_NOOP_OK 0x0001 /* OK to return IN_INDEX_NOOP */ |
| 3706 #define IN_INDEX_MEMBERSHIP 0x0002 /* IN operator used for membership test */ |
| 3707 #define IN_INDEX_LOOP 0x0004 /* IN operator used as a loop */ |
| 3708 int sqlite3FindInIndex(Parse *, Expr *, u32, int*); |
3139 | 3709 |
3140 #ifdef SQLITE_ENABLE_ATOMIC_WRITE | 3710 #ifdef SQLITE_ENABLE_ATOMIC_WRITE |
3141 int sqlite3JournalOpen(sqlite3_vfs *, const char *, sqlite3_file *, int, int); | 3711 int sqlite3JournalOpen(sqlite3_vfs *, const char *, sqlite3_file *, int, int); |
3142 int sqlite3JournalSize(sqlite3_vfs *); | 3712 int sqlite3JournalSize(sqlite3_vfs *); |
3143 int sqlite3JournalCreate(sqlite3_file *); | 3713 int sqlite3JournalCreate(sqlite3_file *); |
| 3714 int sqlite3JournalExists(sqlite3_file *p); |
3144 #else | 3715 #else |
3145 #define sqlite3JournalSize(pVfs) ((pVfs)->szOsFile) | 3716 #define sqlite3JournalSize(pVfs) ((pVfs)->szOsFile) |
| 3717 #define sqlite3JournalExists(p) 1 |
3146 #endif | 3718 #endif |
3147 | 3719 |
3148 void sqlite3MemJournalOpen(sqlite3_file *); | 3720 void sqlite3MemJournalOpen(sqlite3_file *); |
3149 int sqlite3MemJournalSize(void); | 3721 int sqlite3MemJournalSize(void); |
3150 int sqlite3IsMemJournal(sqlite3_file *); | 3722 int sqlite3IsMemJournal(sqlite3_file *); |
3151 | 3723 |
3152 #if SQLITE_MAX_EXPR_DEPTH>0 | 3724 #if SQLITE_MAX_EXPR_DEPTH>0 |
3153 void sqlite3ExprSetHeight(Parse *pParse, Expr *p); | 3725 void sqlite3ExprSetHeight(Parse *pParse, Expr *p); |
3154 int sqlite3SelectExprHeight(Select *); | 3726 int sqlite3SelectExprHeight(Select *); |
3155 int sqlite3ExprCheckHeight(Parse*, int); | 3727 int sqlite3ExprCheckHeight(Parse*, int); |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3221 #ifdef SQLITE_MEMDEBUG | 3793 #ifdef SQLITE_MEMDEBUG |
3222 void sqlite3MemdebugSetType(void*,u8); | 3794 void sqlite3MemdebugSetType(void*,u8); |
3223 int sqlite3MemdebugHasType(void*,u8); | 3795 int sqlite3MemdebugHasType(void*,u8); |
3224 int sqlite3MemdebugNoType(void*,u8); | 3796 int sqlite3MemdebugNoType(void*,u8); |
3225 #else | 3797 #else |
3226 # define sqlite3MemdebugSetType(X,Y) /* no-op */ | 3798 # define sqlite3MemdebugSetType(X,Y) /* no-op */ |
3227 # define sqlite3MemdebugHasType(X,Y) 1 | 3799 # define sqlite3MemdebugHasType(X,Y) 1 |
3228 # define sqlite3MemdebugNoType(X,Y) 1 | 3800 # define sqlite3MemdebugNoType(X,Y) 1 |
3229 #endif | 3801 #endif |
3230 #define MEMTYPE_HEAP 0x01 /* General heap allocations */ | 3802 #define MEMTYPE_HEAP 0x01 /* General heap allocations */ |
3231 #define MEMTYPE_LOOKASIDE 0x02 /* Might have been lookaside memory */ | 3803 #define MEMTYPE_LOOKASIDE 0x02 /* Heap that might have been lookaside */ |
3232 #define MEMTYPE_SCRATCH 0x04 /* Scratch allocations */ | 3804 #define MEMTYPE_SCRATCH 0x04 /* Scratch allocations */ |
3233 #define MEMTYPE_PCACHE 0x08 /* Page cache allocations */ | 3805 #define MEMTYPE_PCACHE 0x08 /* Page cache allocations */ |
3234 #define MEMTYPE_DB 0x10 /* Uses sqlite3DbMalloc, not sqlite_malloc */ | 3806 |
| 3807 /* |
| 3808 ** Threading interface |
| 3809 */ |
| 3810 #if SQLITE_MAX_WORKER_THREADS>0 |
| 3811 int sqlite3ThreadCreate(SQLiteThread**,void*(*)(void*),void*); |
| 3812 int sqlite3ThreadJoin(SQLiteThread*, void**); |
| 3813 #endif |
3235 | 3814 |
3236 #endif /* _SQLITEINT_H_ */ | 3815 #endif /* _SQLITEINT_H_ */ |
OLD | NEW |