diff options
Diffstat (limited to 'libraries/sqlite/win32/sqliteInt.h')
-rwxr-xr-x | libraries/sqlite/win32/sqliteInt.h | 1972 |
1 files changed, 0 insertions, 1972 deletions
diff --git a/libraries/sqlite/win32/sqliteInt.h b/libraries/sqlite/win32/sqliteInt.h deleted file mode 100755 index 2170e53..0000000 --- a/libraries/sqlite/win32/sqliteInt.h +++ /dev/null | |||
@@ -1,1972 +0,0 @@ | |||
1 | /* | ||
2 | ** 2001 September 15 | ||
3 | ** | ||
4 | ** The author disclaims copyright to this source code. In place of | ||
5 | ** a legal notice, here is a blessing: | ||
6 | ** | ||
7 | ** May you do good and not evil. | ||
8 | ** May you find forgiveness for yourself and forgive others. | ||
9 | ** May you share freely, never taking more than you give. | ||
10 | ** | ||
11 | ************************************************************************* | ||
12 | ** Internal interface definitions for SQLite. | ||
13 | ** | ||
14 | ** @(#) $Id: sqliteInt.h,v 1.613 2007/10/03 08:46:45 danielk1977 Exp $ | ||
15 | */ | ||
16 | #ifndef _SQLITEINT_H_ | ||
17 | #define _SQLITEINT_H_ | ||
18 | #include "sqliteLimit.h" | ||
19 | |||
20 | /* | ||
21 | ** For testing purposes, the various size limit constants are really | ||
22 | ** variables that we can modify in the testfixture. | ||
23 | */ | ||
24 | #ifdef SQLITE_TEST | ||
25 | #undef SQLITE_MAX_LENGTH | ||
26 | #undef SQLITE_MAX_COLUMN | ||
27 | #undef SQLITE_MAX_SQL_LENGTH | ||
28 | #undef SQLITE_MAX_EXPR_DEPTH | ||
29 | #undef SQLITE_MAX_COMPOUND_SELECT | ||
30 | #undef SQLITE_MAX_VDBE_OP | ||
31 | #undef SQLITE_MAX_FUNCTION_ARG | ||
32 | #undef SQLITE_MAX_VARIABLE_NUMBER | ||
33 | #undef SQLITE_MAX_PAGE_SIZE | ||
34 | #undef SQLITE_MAX_PAGE_COUNT | ||
35 | #undef SQLITE_MAX_LIKE_PATTERN_LENGTH | ||
36 | |||
37 | #define SQLITE_MAX_LENGTH sqlite3MAX_LENGTH | ||
38 | #define SQLITE_MAX_COLUMN sqlite3MAX_COLUMN | ||
39 | #define SQLITE_MAX_SQL_LENGTH sqlite3MAX_SQL_LENGTH | ||
40 | #define SQLITE_MAX_EXPR_DEPTH sqlite3MAX_EXPR_DEPTH | ||
41 | #define SQLITE_MAX_COMPOUND_SELECT sqlite3MAX_COMPOUND_SELECT | ||
42 | #define SQLITE_MAX_VDBE_OP sqlite3MAX_VDBE_OP | ||
43 | #define SQLITE_MAX_FUNCTION_ARG sqlite3MAX_FUNCTION_ARG | ||
44 | #define SQLITE_MAX_VARIABLE_NUMBER sqlite3MAX_VARIABLE_NUMBER | ||
45 | #define SQLITE_MAX_PAGE_SIZE sqlite3MAX_PAGE_SIZE | ||
46 | #define SQLITE_MAX_PAGE_COUNT sqlite3MAX_PAGE_COUNT | ||
47 | #define SQLITE_MAX_LIKE_PATTERN_LENGTH sqlite3MAX_LIKE_PATTERN_LENGTH | ||
48 | |||
49 | extern int sqlite3MAX_LENGTH; | ||
50 | extern int sqlite3MAX_COLUMN; | ||
51 | extern int sqlite3MAX_SQL_LENGTH; | ||
52 | extern int sqlite3MAX_EXPR_DEPTH; | ||
53 | extern int sqlite3MAX_COMPOUND_SELECT; | ||
54 | extern int sqlite3MAX_VDBE_OP; | ||
55 | extern int sqlite3MAX_FUNCTION_ARG; | ||
56 | extern int sqlite3MAX_VARIABLE_NUMBER; | ||
57 | extern int sqlite3MAX_PAGE_SIZE; | ||
58 | extern int sqlite3MAX_PAGE_COUNT; | ||
59 | extern int sqlite3MAX_LIKE_PATTERN_LENGTH; | ||
60 | #endif | ||
61 | |||
62 | |||
63 | /* | ||
64 | ** The SQLITE_THREADSAFE macro must be defined as either 0 or 1. | ||
65 | ** Older versions of SQLite used an optional THREADSAFE macro. | ||
66 | ** We support that for legacy | ||
67 | */ | ||
68 | #if !defined(SQLITE_THREADSAFE) | ||
69 | #if defined(THREADSAFE) | ||
70 | # define SQLITE_THREADSAFE THREADSAFE | ||
71 | #else | ||
72 | # define SQLITE_THREADSAFE 1 | ||
73 | #endif | ||
74 | #endif | ||
75 | |||
76 | /* | ||
77 | ** We need to define _XOPEN_SOURCE as follows in order to enable | ||
78 | ** recursive mutexes on most unix systems. But Mac OS X is different. | ||
79 | ** The _XOPEN_SOURCE define causes problems for Mac OS X we are told, | ||
80 | ** so it is omitted there. See ticket #2673. | ||
81 | ** | ||
82 | ** Later we learn that _XOPEN_SOURCE is poorly or incorrectly | ||
83 | ** implemented on some systems. So we avoid defining it at all | ||
84 | ** if it is already defined or if it is unneeded because we are | ||
85 | ** not doing a threadsafe build. Ticket #2681. | ||
86 | */ | ||
87 | #if !defined(_XOPEN_SOURCE) && !defined(__MACOS__) && SQLITE_THREADSAFE | ||
88 | # define _XOPEN_SOURCE 500 /* Needed to enable pthread recursive mutexes */ | ||
89 | #endif | ||
90 | |||
91 | #if defined(SQLITE_TCL) || defined(TCLSH) | ||
92 | # include <tcl.h> | ||
93 | #endif | ||
94 | |||
95 | /* | ||
96 | ** Many people are failing to set -DNDEBUG=1 when compiling SQLite. | ||
97 | ** Setting NDEBUG makes the code smaller and run faster. So the following | ||
98 | ** lines are added to automatically set NDEBUG unless the -DSQLITE_DEBUG=1 | ||
99 | ** option is set. Thus NDEBUG becomes an opt-in rather than an opt-out | ||
100 | ** feature. | ||
101 | */ | ||
102 | #if !defined(NDEBUG) && !defined(SQLITE_DEBUG) | ||
103 | # define NDEBUG 1 | ||
104 | #endif | ||
105 | |||
106 | /* | ||
107 | ** These #defines should enable >2GB file support on Posix if the | ||
108 | ** underlying operating system supports it. If the OS lacks | ||
109 | ** large file support, or if the OS is windows, these should be no-ops. | ||
110 | ** | ||
111 | ** Large file support can be disabled using the -DSQLITE_DISABLE_LFS switch | ||
112 | ** on the compiler command line. This is necessary if you are compiling | ||
113 | ** on a recent machine (ex: RedHat 7.2) but you want your code to work | ||
114 | ** on an older machine (ex: RedHat 6.0). If you compile on RedHat 7.2 | ||
115 | ** without this option, LFS is enable. But LFS does not exist in the kernel | ||
116 | ** in RedHat 6.0, so the code won't work. Hence, for maximum binary | ||
117 | ** portability you should omit LFS. | ||
118 | ** | ||
119 | ** Similar is true for MacOS. LFS is only supported on MacOS 9 and later. | ||
120 | */ | ||
121 | #ifndef SQLITE_DISABLE_LFS | ||
122 | # define _LARGE_FILE 1 | ||
123 | # ifndef _FILE_OFFSET_BITS | ||
124 | # define _FILE_OFFSET_BITS 64 | ||
125 | # endif | ||
126 | # define _LARGEFILE_SOURCE 1 | ||
127 | #endif | ||
128 | |||
129 | #include "sqlite3.h" | ||
130 | #include "hash.h" | ||
131 | #include "parse.h" | ||
132 | #include <stdio.h> | ||
133 | #include <stdlib.h> | ||
134 | #include <string.h> | ||
135 | #include <assert.h> | ||
136 | #include <stddef.h> | ||
137 | |||
138 | #define sqlite3_isnan(X) ((X)!=(X)) | ||
139 | |||
140 | /* | ||
141 | ** If compiling for a processor that lacks floating point support, | ||
142 | ** substitute integer for floating-point | ||
143 | */ | ||
144 | #ifdef SQLITE_OMIT_FLOATING_POINT | ||
145 | # define double sqlite_int64 | ||
146 | # define LONGDOUBLE_TYPE sqlite_int64 | ||
147 | # ifndef SQLITE_BIG_DBL | ||
148 | # define SQLITE_BIG_DBL (0x7fffffffffffffff) | ||
149 | # endif | ||
150 | # define SQLITE_OMIT_DATETIME_FUNCS 1 | ||
151 | # define SQLITE_OMIT_TRACE 1 | ||
152 | # undef SQLITE_MIXED_ENDIAN_64BIT_FLOAT | ||
153 | #endif | ||
154 | #ifndef SQLITE_BIG_DBL | ||
155 | # define SQLITE_BIG_DBL (1e99) | ||
156 | #endif | ||
157 | |||
158 | /* | ||
159 | ** OMIT_TEMPDB is set to 1 if SQLITE_OMIT_TEMPDB is defined, or 0 | ||
160 | ** afterward. Having this macro allows us to cause the C compiler | ||
161 | ** to omit code used by TEMP tables without messy #ifndef statements. | ||
162 | */ | ||
163 | #ifdef SQLITE_OMIT_TEMPDB | ||
164 | #define OMIT_TEMPDB 1 | ||
165 | #else | ||
166 | #define OMIT_TEMPDB 0 | ||
167 | #endif | ||
168 | |||
169 | /* | ||
170 | ** If the following macro is set to 1, then NULL values are considered | ||
171 | ** distinct when determining whether or not two entries are the same | ||
172 | ** in a UNIQUE index. This is the way PostgreSQL, Oracle, DB2, MySQL, | ||
173 | ** OCELOT, and Firebird all work. The SQL92 spec explicitly says this | ||
174 | ** is the way things are suppose to work. | ||
175 | ** | ||
176 | ** If the following macro is set to 0, the NULLs are indistinct for | ||
177 | ** a UNIQUE index. In this mode, you can only have a single NULL entry | ||
178 | ** for a column declared UNIQUE. This is the way Informix and SQL Server | ||
179 | ** work. | ||
180 | */ | ||
181 | #define NULL_DISTINCT_FOR_UNIQUE 1 | ||
182 | |||
183 | /* | ||
184 | ** The "file format" number is an integer that is incremented whenever | ||
185 | ** the VDBE-level file format changes. The following macros define the | ||
186 | ** the default file format for new databases and the maximum file format | ||
187 | ** that the library can read. | ||
188 | */ | ||
189 | #define SQLITE_MAX_FILE_FORMAT 4 | ||
190 | #ifndef SQLITE_DEFAULT_FILE_FORMAT | ||
191 | # define SQLITE_DEFAULT_FILE_FORMAT 1 | ||
192 | #endif | ||
193 | |||
194 | /* | ||
195 | ** Provide a default value for TEMP_STORE in case it is not specified | ||
196 | ** on the command-line | ||
197 | */ | ||
198 | #ifndef TEMP_STORE | ||
199 | # define TEMP_STORE 1 | ||
200 | #endif | ||
201 | |||
202 | /* | ||
203 | ** GCC does not define the offsetof() macro so we'll have to do it | ||
204 | ** ourselves. | ||
205 | */ | ||
206 | #ifndef offsetof | ||
207 | #define offsetof(STRUCTURE,FIELD) ((int)((char*)&((STRUCTURE*)0)->FIELD)) | ||
208 | #endif | ||
209 | |||
210 | /* | ||
211 | ** Check to see if this machine uses EBCDIC. (Yes, believe it or | ||
212 | ** not, there are still machines out there that use EBCDIC.) | ||
213 | */ | ||
214 | #if 'A' == '\301' | ||
215 | # define SQLITE_EBCDIC 1 | ||
216 | #else | ||
217 | # define SQLITE_ASCII 1 | ||
218 | #endif | ||
219 | |||
220 | /* | ||
221 | ** Integers of known sizes. These typedefs might change for architectures | ||
222 | ** where the sizes very. Preprocessor macros are available so that the | ||
223 | ** types can be conveniently redefined at compile-type. Like this: | ||
224 | ** | ||
225 | ** cc '-DUINTPTR_TYPE=long long int' ... | ||
226 | */ | ||
227 | #ifndef UINT32_TYPE | ||
228 | # define UINT32_TYPE unsigned int | ||
229 | #endif | ||
230 | #ifndef UINT16_TYPE | ||
231 | # define UINT16_TYPE unsigned short int | ||
232 | #endif | ||
233 | #ifndef INT16_TYPE | ||
234 | # define INT16_TYPE short int | ||
235 | #endif | ||
236 | #ifndef UINT8_TYPE | ||
237 | # define UINT8_TYPE unsigned char | ||
238 | #endif | ||
239 | #ifndef INT8_TYPE | ||
240 | # define INT8_TYPE signed char | ||
241 | #endif | ||
242 | #ifndef LONGDOUBLE_TYPE | ||
243 | # define LONGDOUBLE_TYPE long double | ||
244 | #endif | ||
245 | typedef sqlite_int64 i64; /* 8-byte signed integer */ | ||
246 | typedef sqlite_uint64 u64; /* 8-byte unsigned integer */ | ||
247 | typedef UINT32_TYPE u32; /* 4-byte unsigned integer */ | ||
248 | typedef UINT16_TYPE u16; /* 2-byte unsigned integer */ | ||
249 | typedef INT16_TYPE i16; /* 2-byte signed integer */ | ||
250 | typedef UINT8_TYPE u8; /* 1-byte unsigned integer */ | ||
251 | typedef UINT8_TYPE i8; /* 1-byte signed integer */ | ||
252 | |||
253 | /* | ||
254 | ** Macros to determine whether the machine is big or little endian, | ||
255 | ** evaluated at runtime. | ||
256 | */ | ||
257 | #ifdef SQLITE_AMALGAMATION | ||
258 | const int sqlite3One; | ||
259 | #else | ||
260 | extern const int sqlite3one; | ||
261 | #endif | ||
262 | #if defined(i386) || defined(__i386__) || defined(_M_IX86) | ||
263 | # define SQLITE_BIGENDIAN 0 | ||
264 | # define SQLITE_LITTLEENDIAN 1 | ||
265 | # define SQLITE_UTF16NATIVE SQLITE_UTF16LE | ||
266 | #else | ||
267 | # define SQLITE_BIGENDIAN (*(char *)(&sqlite3one)==0) | ||
268 | # define SQLITE_LITTLEENDIAN (*(char *)(&sqlite3one)==1) | ||
269 | # define SQLITE_UTF16NATIVE (SQLITE_BIGENDIAN?SQLITE_UTF16BE:SQLITE_UTF16LE) | ||
270 | #endif | ||
271 | |||
272 | /* | ||
273 | ** An instance of the following structure is used to store the busy-handler | ||
274 | ** callback for a given sqlite handle. | ||
275 | ** | ||
276 | ** The sqlite.busyHandler member of the sqlite struct contains the busy | ||
277 | ** callback for the database handle. Each pager opened via the sqlite | ||
278 | ** handle is passed a pointer to sqlite.busyHandler. The busy-handler | ||
279 | ** callback is currently invoked only from within pager.c. | ||
280 | */ | ||
281 | typedef struct BusyHandler BusyHandler; | ||
282 | struct BusyHandler { | ||
283 | int (*xFunc)(void *,int); /* The busy callback */ | ||
284 | void *pArg; /* First arg to busy callback */ | ||
285 | int nBusy; /* Incremented with each busy call */ | ||
286 | }; | ||
287 | |||
288 | /* | ||
289 | ** Defer sourcing vdbe.h and btree.h until after the "u8" and | ||
290 | ** "BusyHandler typedefs. | ||
291 | */ | ||
292 | #include "btree.h" | ||
293 | #include "vdbe.h" | ||
294 | #include "pager.h" | ||
295 | |||
296 | |||
297 | /* | ||
298 | ** Name of the master database table. The master database table | ||
299 | ** is a special table that holds the names and attributes of all | ||
300 | ** user tables and indices. | ||
301 | */ | ||
302 | #define MASTER_NAME "sqlite_master" | ||
303 | #define TEMP_MASTER_NAME "sqlite_temp_master" | ||
304 | |||
305 | /* | ||
306 | ** The root-page of the master database table. | ||
307 | */ | ||
308 | #define MASTER_ROOT 1 | ||
309 | |||
310 | /* | ||
311 | ** The name of the schema table. | ||
312 | */ | ||
313 | #define SCHEMA_TABLE(x) ((!OMIT_TEMPDB)&&(x==1)?TEMP_MASTER_NAME:MASTER_NAME) | ||
314 | |||
315 | /* | ||
316 | ** A convenience macro that returns the number of elements in | ||
317 | ** an array. | ||
318 | */ | ||
319 | #define ArraySize(X) (sizeof(X)/sizeof(X[0])) | ||
320 | |||
321 | /* | ||
322 | ** Forward references to structures | ||
323 | */ | ||
324 | typedef struct AggInfo AggInfo; | ||
325 | typedef struct AuthContext AuthContext; | ||
326 | typedef struct CollSeq CollSeq; | ||
327 | typedef struct Column Column; | ||
328 | typedef struct Db Db; | ||
329 | typedef struct Schema Schema; | ||
330 | typedef struct Expr Expr; | ||
331 | typedef struct ExprList ExprList; | ||
332 | typedef struct FKey FKey; | ||
333 | typedef struct FuncDef FuncDef; | ||
334 | typedef struct IdList IdList; | ||
335 | typedef struct Index Index; | ||
336 | typedef struct KeyClass KeyClass; | ||
337 | typedef struct KeyInfo KeyInfo; | ||
338 | typedef struct Module Module; | ||
339 | typedef struct NameContext NameContext; | ||
340 | typedef struct Parse Parse; | ||
341 | typedef struct Select Select; | ||
342 | typedef struct SrcList SrcList; | ||
343 | typedef struct Table Table; | ||
344 | typedef struct TableLock TableLock; | ||
345 | typedef struct Token Token; | ||
346 | typedef struct TriggerStack TriggerStack; | ||
347 | typedef struct TriggerStep TriggerStep; | ||
348 | typedef struct Trigger Trigger; | ||
349 | typedef struct WhereInfo WhereInfo; | ||
350 | typedef struct WhereLevel WhereLevel; | ||
351 | |||
352 | #include "os.h" | ||
353 | #include "mutex.h" | ||
354 | |||
355 | /* | ||
356 | ** Each database file to be accessed by the system is an instance | ||
357 | ** of the following structure. There are normally two of these structures | ||
358 | ** in the sqlite.aDb[] array. aDb[0] is the main database file and | ||
359 | ** aDb[1] is the database file used to hold temporary tables. Additional | ||
360 | ** databases may be attached. | ||
361 | */ | ||
362 | struct Db { | ||
363 | char *zName; /* Name of this database */ | ||
364 | Btree *pBt; /* The B*Tree structure for this database file */ | ||
365 | u8 inTrans; /* 0: not writable. 1: Transaction. 2: Checkpoint */ | ||
366 | u8 safety_level; /* How aggressive at synching data to disk */ | ||
367 | void *pAux; /* Auxiliary data. Usually NULL */ | ||
368 | void (*xFreeAux)(void*); /* Routine to free pAux */ | ||
369 | Schema *pSchema; /* Pointer to database schema (possibly shared) */ | ||
370 | }; | ||
371 | |||
372 | /* | ||
373 | ** An instance of the following structure stores a database schema. | ||
374 | ** | ||
375 | ** If there are no virtual tables configured in this schema, the | ||
376 | ** Schema.db variable is set to NULL. After the first virtual table | ||
377 | ** has been added, it is set to point to the database connection | ||
378 | ** used to create the connection. Once a virtual table has been | ||
379 | ** added to the Schema structure and the Schema.db variable populated, | ||
380 | ** only that database connection may use the Schema to prepare | ||
381 | ** statements. | ||
382 | */ | ||
383 | struct Schema { | ||
384 | int schema_cookie; /* Database schema version number for this file */ | ||
385 | Hash tblHash; /* All tables indexed by name */ | ||
386 | Hash idxHash; /* All (named) indices indexed by name */ | ||
387 | Hash trigHash; /* All triggers indexed by name */ | ||
388 | Hash aFKey; /* Foreign keys indexed by to-table */ | ||
389 | Table *pSeqTab; /* The sqlite_sequence table used by AUTOINCREMENT */ | ||
390 | u8 file_format; /* Schema format version for this file */ | ||
391 | u8 enc; /* Text encoding used by this database */ | ||
392 | u16 flags; /* Flags associated with this schema */ | ||
393 | int cache_size; /* Number of pages to use in the cache */ | ||
394 | #ifndef SQLITE_OMIT_VIRTUALTABLE | ||
395 | sqlite3 *db; /* "Owner" connection. See comment above */ | ||
396 | #endif | ||
397 | }; | ||
398 | |||
399 | /* | ||
400 | ** These macros can be used to test, set, or clear bits in the | ||
401 | ** Db.flags field. | ||
402 | */ | ||
403 | #define DbHasProperty(D,I,P) (((D)->aDb[I].pSchema->flags&(P))==(P)) | ||
404 | #define DbHasAnyProperty(D,I,P) (((D)->aDb[I].pSchema->flags&(P))!=0) | ||
405 | #define DbSetProperty(D,I,P) (D)->aDb[I].pSchema->flags|=(P) | ||
406 | #define DbClearProperty(D,I,P) (D)->aDb[I].pSchema->flags&=~(P) | ||
407 | |||
408 | /* | ||
409 | ** Allowed values for the DB.flags field. | ||
410 | ** | ||
411 | ** The DB_SchemaLoaded flag is set after the database schema has been | ||
412 | ** read into internal hash tables. | ||
413 | ** | ||
414 | ** DB_UnresetViews means that one or more views have column names that | ||
415 | ** have been filled out. If the schema changes, these column names might | ||
416 | ** changes and so the view will need to be reset. | ||
417 | */ | ||
418 | #define DB_SchemaLoaded 0x0001 /* The schema has been loaded */ | ||
419 | #define DB_UnresetViews 0x0002 /* Some views have defined column names */ | ||
420 | #define DB_Empty 0x0004 /* The file is empty (length 0 bytes) */ | ||
421 | |||
422 | |||
423 | /* | ||
424 | ** Each database is an instance of the following structure. | ||
425 | ** | ||
426 | ** The sqlite.lastRowid records the last insert rowid generated by an | ||
427 | ** insert statement. Inserts on views do not affect its value. Each | ||
428 | ** trigger has its own context, so that lastRowid can be updated inside | ||
429 | ** triggers as usual. The previous value will be restored once the trigger | ||
430 | ** exits. Upon entering a before or instead of trigger, lastRowid is no | ||
431 | ** longer (since after version 2.8.12) reset to -1. | ||
432 | ** | ||
433 | ** The sqlite.nChange does not count changes within triggers and keeps no | ||
434 | ** context. It is reset at start of sqlite3_exec. | ||
435 | ** The sqlite.lsChange represents the number of changes made by the last | ||
436 | ** insert, update, or delete statement. It remains constant throughout the | ||
437 | ** length of a statement and is then updated by OP_SetCounts. It keeps a | ||
438 | ** context stack just like lastRowid so that the count of changes | ||
439 | ** within a trigger is not seen outside the trigger. Changes to views do not | ||
440 | ** affect the value of lsChange. | ||
441 | ** The sqlite.csChange keeps track of the number of current changes (since | ||
442 | ** the last statement) and is used to update sqlite_lsChange. | ||
443 | ** | ||
444 | ** The member variables sqlite.errCode, sqlite.zErrMsg and sqlite.zErrMsg16 | ||
445 | ** store the most recent error code and, if applicable, string. The | ||
446 | ** internal function sqlite3Error() is used to set these variables | ||
447 | ** consistently. | ||
448 | */ | ||
449 | struct sqlite3 { | ||
450 | sqlite3_vfs *pVfs; /* OS Interface */ | ||
451 | int nDb; /* Number of backends currently in use */ | ||
452 | Db *aDb; /* All backends */ | ||
453 | int flags; /* Miscellanous flags. See below */ | ||
454 | int openFlags; /* Flags passed to sqlite3_vfs.xOpen() */ | ||
455 | int errCode; /* Most recent error code (SQLITE_*) */ | ||
456 | int errMask; /* & result codes with this before returning */ | ||
457 | u8 autoCommit; /* The auto-commit flag. */ | ||
458 | u8 temp_store; /* 1: file 2: memory 0: default */ | ||
459 | u8 mallocFailed; /* True if we have seen a malloc failure */ | ||
460 | int nTable; /* Number of tables in the database */ | ||
461 | CollSeq *pDfltColl; /* The default collating sequence (BINARY) */ | ||
462 | i64 lastRowid; /* ROWID of most recent insert (see above) */ | ||
463 | i64 priorNewRowid; /* Last randomly generated ROWID */ | ||
464 | int magic; /* Magic number for detect library misuse */ | ||
465 | int nChange; /* Value returned by sqlite3_changes() */ | ||
466 | int nTotalChange; /* Value returned by sqlite3_total_changes() */ | ||
467 | sqlite3_mutex *mutex; /* Connection mutex */ | ||
468 | struct sqlite3InitInfo { /* Information used during initialization */ | ||
469 | int iDb; /* When back is being initialized */ | ||
470 | int newTnum; /* Rootpage of table being initialized */ | ||
471 | u8 busy; /* TRUE if currently initializing */ | ||
472 | } init; | ||
473 | int nExtension; /* Number of loaded extensions */ | ||
474 | void **aExtension; /* Array of shared libraray handles */ | ||
475 | struct Vdbe *pVdbe; /* List of active virtual machines */ | ||
476 | int activeVdbeCnt; /* Number of vdbes currently executing */ | ||
477 | void (*xTrace)(void*,const char*); /* Trace function */ | ||
478 | void *pTraceArg; /* Argument to the trace function */ | ||
479 | void (*xProfile)(void*,const char*,u64); /* Profiling function */ | ||
480 | void *pProfileArg; /* Argument to profile function */ | ||
481 | void *pCommitArg; /* Argument to xCommitCallback() */ | ||
482 | int (*xCommitCallback)(void*); /* Invoked at every commit. */ | ||
483 | void *pRollbackArg; /* Argument to xRollbackCallback() */ | ||
484 | void (*xRollbackCallback)(void*); /* Invoked at every commit. */ | ||
485 | void *pUpdateArg; | ||
486 | void (*xUpdateCallback)(void*,int, const char*,const char*,sqlite_int64); | ||
487 | void(*xCollNeeded)(void*,sqlite3*,int eTextRep,const char*); | ||
488 | void(*xCollNeeded16)(void*,sqlite3*,int eTextRep,const void*); | ||
489 | void *pCollNeededArg; | ||
490 | sqlite3_value *pErr; /* Most recent error message */ | ||
491 | char *zErrMsg; /* Most recent error message (UTF-8 encoded) */ | ||
492 | char *zErrMsg16; /* Most recent error message (UTF-16 encoded) */ | ||
493 | union { | ||
494 | int isInterrupted; /* True if sqlite3_interrupt has been called */ | ||
495 | double notUsed1; /* Spacer */ | ||
496 | } u1; | ||
497 | #ifndef SQLITE_OMIT_AUTHORIZATION | ||
498 | int (*xAuth)(void*,int,const char*,const char*,const char*,const char*); | ||
499 | /* Access authorization function */ | ||
500 | void *pAuthArg; /* 1st argument to the access auth function */ | ||
501 | #endif | ||
502 | #ifndef SQLITE_OMIT_PROGRESS_CALLBACK | ||
503 | int (*xProgress)(void *); /* The progress callback */ | ||
504 | void *pProgressArg; /* Argument to the progress callback */ | ||
505 | int nProgressOps; /* Number of opcodes for progress callback */ | ||
506 | #endif | ||
507 | #ifndef SQLITE_OMIT_VIRTUALTABLE | ||
508 | Hash aModule; /* populated by sqlite3_create_module() */ | ||
509 | Table *pVTab; /* vtab with active Connect/Create method */ | ||
510 | sqlite3_vtab **aVTrans; /* Virtual tables with open transactions */ | ||
511 | int nVTrans; /* Allocated size of aVTrans */ | ||
512 | #endif | ||
513 | Hash aFunc; /* All functions that can be in SQL exprs */ | ||
514 | Hash aCollSeq; /* All collating sequences */ | ||
515 | BusyHandler busyHandler; /* Busy callback */ | ||
516 | int busyTimeout; /* Busy handler timeout, in msec */ | ||
517 | Db aDbStatic[2]; /* Static space for the 2 default backends */ | ||
518 | #ifdef SQLITE_SSE | ||
519 | sqlite3_stmt *pFetch; /* Used by SSE to fetch stored statements */ | ||
520 | #endif | ||
521 | u8 dfltLockMode; /* Default locking-mode for attached dbs */ | ||
522 | }; | ||
523 | |||
524 | /* | ||
525 | ** A macro to discover the encoding of a database. | ||
526 | */ | ||
527 | #define ENC(db) ((db)->aDb[0].pSchema->enc) | ||
528 | |||
529 | /* | ||
530 | ** Possible values for the sqlite.flags and or Db.flags fields. | ||
531 | ** | ||
532 | ** On sqlite.flags, the SQLITE_InTrans value means that we have | ||
533 | ** executed a BEGIN. On Db.flags, SQLITE_InTrans means a statement | ||
534 | ** transaction is active on that particular database file. | ||
535 | */ | ||
536 | #define SQLITE_VdbeTrace 0x00000001 /* True to trace VDBE execution */ | ||
537 | #define SQLITE_InTrans 0x00000008 /* True if in a transaction */ | ||
538 | #define SQLITE_InternChanges 0x00000010 /* Uncommitted Hash table changes */ | ||
539 | #define SQLITE_FullColNames 0x00000020 /* Show full column names on SELECT */ | ||
540 | #define SQLITE_ShortColNames 0x00000040 /* Show short columns names */ | ||
541 | #define SQLITE_CountRows 0x00000080 /* Count rows changed by INSERT, */ | ||
542 | /* DELETE, or UPDATE and return */ | ||
543 | /* the count using a callback. */ | ||
544 | #define SQLITE_NullCallback 0x00000100 /* Invoke the callback once if the */ | ||
545 | /* result set is empty */ | ||
546 | #define SQLITE_SqlTrace 0x00000200 /* Debug print SQL as it executes */ | ||
547 | #define SQLITE_VdbeListing 0x00000400 /* Debug listings of VDBE programs */ | ||
548 | #define SQLITE_WriteSchema 0x00000800 /* OK to update SQLITE_MASTER */ | ||
549 | #define SQLITE_NoReadlock 0x00001000 /* Readlocks are omitted when | ||
550 | ** accessing read-only databases */ | ||
551 | #define SQLITE_IgnoreChecks 0x00002000 /* Do not enforce check constraints */ | ||
552 | #define SQLITE_ReadUncommitted 0x00004000 /* For shared-cache mode */ | ||
553 | #define SQLITE_LegacyFileFmt 0x00008000 /* Create new databases in format 1 */ | ||
554 | #define SQLITE_FullFSync 0x00010000 /* Use full fsync on the backend */ | ||
555 | #define SQLITE_LoadExtension 0x00020000 /* Enable load_extension */ | ||
556 | |||
557 | #define SQLITE_RecoveryMode 0x00040000 /* Ignore schema errors */ | ||
558 | #define SQLITE_SharedCache 0x00080000 /* Cache sharing is enabled */ | ||
559 | #define SQLITE_Vtab 0x00100000 /* There exists a virtual table */ | ||
560 | |||
561 | /* | ||
562 | ** Possible values for the sqlite.magic field. | ||
563 | ** The numbers are obtained at random and have no special meaning, other | ||
564 | ** than being distinct from one another. | ||
565 | */ | ||
566 | #define SQLITE_MAGIC_OPEN 0xa029a697 /* Database is open */ | ||
567 | #define SQLITE_MAGIC_CLOSED 0x9f3c2d33 /* Database is closed */ | ||
568 | #define SQLITE_MAGIC_BUSY 0xf03b7906 /* Database currently in use */ | ||
569 | #define SQLITE_MAGIC_ERROR 0xb5357930 /* An SQLITE_MISUSE error occurred */ | ||
570 | |||
571 | /* | ||
572 | ** Each SQL function is defined by an instance of the following | ||
573 | ** structure. A pointer to this structure is stored in the sqlite.aFunc | ||
574 | ** hash table. When multiple functions have the same name, the hash table | ||
575 | ** points to a linked list of these structures. | ||
576 | */ | ||
577 | struct FuncDef { | ||
578 | i16 nArg; /* Number of arguments. -1 means unlimited */ | ||
579 | u8 iPrefEnc; /* Preferred text encoding (SQLITE_UTF8, 16LE, 16BE) */ | ||
580 | u8 needCollSeq; /* True if sqlite3GetFuncCollSeq() might be called */ | ||
581 | u8 flags; /* Some combination of SQLITE_FUNC_* */ | ||
582 | void *pUserData; /* User data parameter */ | ||
583 | FuncDef *pNext; /* Next function with same name */ | ||
584 | void (*xFunc)(sqlite3_context*,int,sqlite3_value**); /* Regular function */ | ||
585 | void (*xStep)(sqlite3_context*,int,sqlite3_value**); /* Aggregate step */ | ||
586 | void (*xFinalize)(sqlite3_context*); /* Aggregate finializer */ | ||
587 | char zName[1]; /* SQL name of the function. MUST BE LAST */ | ||
588 | }; | ||
589 | |||
590 | /* | ||
591 | ** Each SQLite module (virtual table definition) is defined by an | ||
592 | ** instance of the following structure, stored in the sqlite3.aModule | ||
593 | ** hash table. | ||
594 | */ | ||
595 | struct Module { | ||
596 | const sqlite3_module *pModule; /* Callback pointers */ | ||
597 | const char *zName; /* Name passed to create_module() */ | ||
598 | void *pAux; /* pAux passed to create_module() */ | ||
599 | void (*xDestroy)(void *); /* Module destructor function */ | ||
600 | }; | ||
601 | |||
602 | /* | ||
603 | ** Possible values for FuncDef.flags | ||
604 | */ | ||
605 | #define SQLITE_FUNC_LIKE 0x01 /* Candidate for the LIKE optimization */ | ||
606 | #define SQLITE_FUNC_CASE 0x02 /* Case-sensitive LIKE-type function */ | ||
607 | #define SQLITE_FUNC_EPHEM 0x04 /* Ephermeral. Delete with VDBE */ | ||
608 | |||
609 | /* | ||
610 | ** information about each column of an SQL table is held in an instance | ||
611 | ** of this structure. | ||
612 | */ | ||
613 | struct Column { | ||
614 | char *zName; /* Name of this column */ | ||
615 | Expr *pDflt; /* Default value of this column */ | ||
616 | char *zType; /* Data type for this column */ | ||
617 | char *zColl; /* Collating sequence. If NULL, use the default */ | ||
618 | u8 notNull; /* True if there is a NOT NULL constraint */ | ||
619 | u8 isPrimKey; /* True if this column is part of the PRIMARY KEY */ | ||
620 | char affinity; /* One of the SQLITE_AFF_... values */ | ||
621 | #ifndef SQLITE_OMIT_VIRTUALTABLE | ||
622 | u8 isHidden; /* True if this column is 'hidden' */ | ||
623 | #endif | ||
624 | }; | ||
625 | |||
626 | /* | ||
627 | ** A "Collating Sequence" is defined by an instance of the following | ||
628 | ** structure. Conceptually, a collating sequence consists of a name and | ||
629 | ** a comparison routine that defines the order of that sequence. | ||
630 | ** | ||
631 | ** There may two seperate implementations of the collation function, one | ||
632 | ** that processes text in UTF-8 encoding (CollSeq.xCmp) and another that | ||
633 | ** processes text encoded in UTF-16 (CollSeq.xCmp16), using the machine | ||
634 | ** native byte order. When a collation sequence is invoked, SQLite selects | ||
635 | ** the version that will require the least expensive encoding | ||
636 | ** translations, if any. | ||
637 | ** | ||
638 | ** The CollSeq.pUser member variable is an extra parameter that passed in | ||
639 | ** as the first argument to the UTF-8 comparison function, xCmp. | ||
640 | ** CollSeq.pUser16 is the equivalent for the UTF-16 comparison function, | ||
641 | ** xCmp16. | ||
642 | ** | ||
643 | ** If both CollSeq.xCmp and CollSeq.xCmp16 are NULL, it means that the | ||
644 | ** collating sequence is undefined. Indices built on an undefined | ||
645 | ** collating sequence may not be read or written. | ||
646 | */ | ||
647 | struct CollSeq { | ||
648 | char *zName; /* Name of the collating sequence, UTF-8 encoded */ | ||
649 | u8 enc; /* Text encoding handled by xCmp() */ | ||
650 | u8 type; /* One of the SQLITE_COLL_... values below */ | ||
651 | void *pUser; /* First argument to xCmp() */ | ||
652 | int (*xCmp)(void*,int, const void*, int, const void*); | ||
653 | void (*xDel)(void*); /* Destructor for pUser */ | ||
654 | }; | ||
655 | |||
656 | /* | ||
657 | ** Allowed values of CollSeq flags: | ||
658 | */ | ||
659 | #define SQLITE_COLL_BINARY 1 /* The default memcmp() collating sequence */ | ||
660 | #define SQLITE_COLL_NOCASE 2 /* The built-in NOCASE collating sequence */ | ||
661 | #define SQLITE_COLL_REVERSE 3 /* The built-in REVERSE collating sequence */ | ||
662 | #define SQLITE_COLL_USER 0 /* Any other user-defined collating sequence */ | ||
663 | |||
664 | /* | ||
665 | ** A sort order can be either ASC or DESC. | ||
666 | */ | ||
667 | #define SQLITE_SO_ASC 0 /* Sort in ascending order */ | ||
668 | #define SQLITE_SO_DESC 1 /* Sort in ascending order */ | ||
669 | |||
670 | /* | ||
671 | ** Column affinity types. | ||
672 | ** | ||
673 | ** These used to have mnemonic name like 'i' for SQLITE_AFF_INTEGER and | ||
674 | ** 't' for SQLITE_AFF_TEXT. But we can save a little space and improve | ||
675 | ** the speed a little by number the values consecutively. | ||
676 | ** | ||
677 | ** But rather than start with 0 or 1, we begin with 'a'. That way, | ||
678 | ** when multiple affinity types are concatenated into a string and | ||
679 | ** used as the P3 operand, they will be more readable. | ||
680 | ** | ||
681 | ** Note also that the numeric types are grouped together so that testing | ||
682 | ** for a numeric type is a single comparison. | ||
683 | */ | ||
684 | #define SQLITE_AFF_TEXT 'a' | ||
685 | #define SQLITE_AFF_NONE 'b' | ||
686 | #define SQLITE_AFF_NUMERIC 'c' | ||
687 | #define SQLITE_AFF_INTEGER 'd' | ||
688 | #define SQLITE_AFF_REAL 'e' | ||
689 | |||
690 | #define sqlite3IsNumericAffinity(X) ((X)>=SQLITE_AFF_NUMERIC) | ||
691 | |||
692 | /* | ||
693 | ** Each SQL table is represented in memory by an instance of the | ||
694 | ** following structure. | ||
695 | ** | ||
696 | ** Table.zName is the name of the table. The case of the original | ||
697 | ** CREATE TABLE statement is stored, but case is not significant for | ||
698 | ** comparisons. | ||
699 | ** | ||
700 | ** Table.nCol is the number of columns in this table. Table.aCol is a | ||
701 | ** pointer to an array of Column structures, one for each column. | ||
702 | ** | ||
703 | ** If the table has an INTEGER PRIMARY KEY, then Table.iPKey is the index of | ||
704 | ** the column that is that key. Otherwise Table.iPKey is negative. Note | ||
705 | ** that the datatype of the PRIMARY KEY must be INTEGER for this field to | ||
706 | ** be set. An INTEGER PRIMARY KEY is used as the rowid for each row of | ||
707 | ** the table. If a table has no INTEGER PRIMARY KEY, then a random rowid | ||
708 | ** is generated for each row of the table. Table.hasPrimKey is true if | ||
709 | ** the table has any PRIMARY KEY, INTEGER or otherwise. | ||
710 | ** | ||
711 | ** Table.tnum is the page number for the root BTree page of the table in the | ||
712 | ** database file. If Table.iDb is the index of the database table backend | ||
713 | ** in sqlite.aDb[]. 0 is for the main database and 1 is for the file that | ||
714 | ** holds temporary tables and indices. If Table.isEphem | ||
715 | ** is true, then the table is stored in a file that is automatically deleted | ||
716 | ** when the VDBE cursor to the table is closed. In this case Table.tnum | ||
717 | ** refers VDBE cursor number that holds the table open, not to the root | ||
718 | ** page number. Transient tables are used to hold the results of a | ||
719 | ** sub-query that appears instead of a real table name in the FROM clause | ||
720 | ** of a SELECT statement. | ||
721 | */ | ||
722 | struct Table { | ||
723 | char *zName; /* Name of the table */ | ||
724 | int nCol; /* Number of columns in this table */ | ||
725 | Column *aCol; /* Information about each column */ | ||
726 | int iPKey; /* If not less then 0, use aCol[iPKey] as the primary key */ | ||
727 | Index *pIndex; /* List of SQL indexes on this table. */ | ||
728 | int tnum; /* Root BTree node for this table (see note above) */ | ||
729 | Select *pSelect; /* NULL for tables. Points to definition if a view. */ | ||
730 | int nRef; /* Number of pointers to this Table */ | ||
731 | Trigger *pTrigger; /* List of SQL triggers on this table */ | ||
732 | FKey *pFKey; /* Linked list of all foreign keys in this table */ | ||
733 | char *zColAff; /* String defining the affinity of each column */ | ||
734 | #ifndef SQLITE_OMIT_CHECK | ||
735 | Expr *pCheck; /* The AND of all CHECK constraints */ | ||
736 | #endif | ||
737 | #ifndef SQLITE_OMIT_ALTERTABLE | ||
738 | int addColOffset; /* Offset in CREATE TABLE statement to add a new column */ | ||
739 | #endif | ||
740 | u8 readOnly; /* True if this table should not be written by the user */ | ||
741 | u8 isEphem; /* True if created using OP_OpenEphermeral */ | ||
742 | u8 hasPrimKey; /* True if there exists a primary key */ | ||
743 | u8 keyConf; /* What to do in case of uniqueness conflict on iPKey */ | ||
744 | u8 autoInc; /* True if the integer primary key is autoincrement */ | ||
745 | #ifndef SQLITE_OMIT_VIRTUALTABLE | ||
746 | u8 isVirtual; /* True if this is a virtual table */ | ||
747 | u8 isCommit; /* True once the CREATE TABLE has been committed */ | ||
748 | Module *pMod; /* Pointer to the implementation of the module */ | ||
749 | sqlite3_vtab *pVtab; /* Pointer to the module instance */ | ||
750 | int nModuleArg; /* Number of arguments to the module */ | ||
751 | char **azModuleArg; /* Text of all module args. [0] is module name */ | ||
752 | #endif | ||
753 | Schema *pSchema; /* Schema that contains this table */ | ||
754 | }; | ||
755 | |||
756 | /* | ||
757 | ** Test to see whether or not a table is a virtual table. This is | ||
758 | ** done as a macro so that it will be optimized out when virtual | ||
759 | ** table support is omitted from the build. | ||
760 | */ | ||
761 | #ifndef SQLITE_OMIT_VIRTUALTABLE | ||
762 | # define IsVirtual(X) ((X)->isVirtual) | ||
763 | # define IsHiddenColumn(X) ((X)->isHidden) | ||
764 | #else | ||
765 | # define IsVirtual(X) 0 | ||
766 | # define IsHiddenColumn(X) 0 | ||
767 | #endif | ||
768 | |||
769 | /* | ||
770 | ** Each foreign key constraint is an instance of the following structure. | ||
771 | ** | ||
772 | ** A foreign key is associated with two tables. The "from" table is | ||
773 | ** the table that contains the REFERENCES clause that creates the foreign | ||
774 | ** key. The "to" table is the table that is named in the REFERENCES clause. | ||
775 | ** Consider this example: | ||
776 | ** | ||
777 | ** CREATE TABLE ex1( | ||
778 | ** a INTEGER PRIMARY KEY, | ||
779 | ** b INTEGER CONSTRAINT fk1 REFERENCES ex2(x) | ||
780 | ** ); | ||
781 | ** | ||
782 | ** For foreign key "fk1", the from-table is "ex1" and the to-table is "ex2". | ||
783 | ** | ||
784 | ** Each REFERENCES clause generates an instance of the following structure | ||
785 | ** which is attached to the from-table. The to-table need not exist when | ||
786 | ** the from-table is created. The existance of the to-table is not checked | ||
787 | ** until an attempt is made to insert data into the from-table. | ||
788 | ** | ||
789 | ** The sqlite.aFKey hash table stores pointers to this structure | ||
790 | ** given the name of a to-table. For each to-table, all foreign keys | ||
791 | ** associated with that table are on a linked list using the FKey.pNextTo | ||
792 | ** field. | ||
793 | */ | ||
794 | struct FKey { | ||
795 | Table *pFrom; /* The table that constains the REFERENCES clause */ | ||
796 | FKey *pNextFrom; /* Next foreign key in pFrom */ | ||
797 | char *zTo; /* Name of table that the key points to */ | ||
798 | FKey *pNextTo; /* Next foreign key that points to zTo */ | ||
799 | int nCol; /* Number of columns in this key */ | ||
800 | struct sColMap { /* Mapping of columns in pFrom to columns in zTo */ | ||
801 | int iFrom; /* Index of column in pFrom */ | ||
802 | char *zCol; /* Name of column in zTo. If 0 use PRIMARY KEY */ | ||
803 | } *aCol; /* One entry for each of nCol column s */ | ||
804 | u8 isDeferred; /* True if constraint checking is deferred till COMMIT */ | ||
805 | u8 updateConf; /* How to resolve conflicts that occur on UPDATE */ | ||
806 | u8 deleteConf; /* How to resolve conflicts that occur on DELETE */ | ||
807 | u8 insertConf; /* How to resolve conflicts that occur on INSERT */ | ||
808 | }; | ||
809 | |||
810 | /* | ||
811 | ** SQLite supports many different ways to resolve a constraint | ||
812 | ** error. ROLLBACK processing means that a constraint violation | ||
813 | ** causes the operation in process to fail and for the current transaction | ||
814 | ** to be rolled back. ABORT processing means the operation in process | ||
815 | ** fails and any prior changes from that one operation are backed out, | ||
816 | ** but the transaction is not rolled back. FAIL processing means that | ||
817 | ** the operation in progress stops and returns an error code. But prior | ||
818 | ** changes due to the same operation are not backed out and no rollback | ||
819 | ** occurs. IGNORE means that the particular row that caused the constraint | ||
820 | ** error is not inserted or updated. Processing continues and no error | ||
821 | ** is returned. REPLACE means that preexisting database rows that caused | ||
822 | ** a UNIQUE constraint violation are removed so that the new insert or | ||
823 | ** update can proceed. Processing continues and no error is reported. | ||
824 | ** | ||
825 | ** RESTRICT, SETNULL, and CASCADE actions apply only to foreign keys. | ||
826 | ** RESTRICT is the same as ABORT for IMMEDIATE foreign keys and the | ||
827 | ** same as ROLLBACK for DEFERRED keys. SETNULL means that the foreign | ||
828 | ** key is set to NULL. CASCADE means that a DELETE or UPDATE of the | ||
829 | ** referenced table row is propagated into the row that holds the | ||
830 | ** foreign key. | ||
831 | ** | ||
832 | ** The following symbolic values are used to record which type | ||
833 | ** of action to take. | ||
834 | */ | ||
835 | #define OE_None 0 /* There is no constraint to check */ | ||
836 | #define OE_Rollback 1 /* Fail the operation and rollback the transaction */ | ||
837 | #define OE_Abort 2 /* Back out changes but do no rollback transaction */ | ||
838 | #define OE_Fail 3 /* Stop the operation but leave all prior changes */ | ||
839 | #define OE_Ignore 4 /* Ignore the error. Do not do the INSERT or UPDATE */ | ||
840 | #define OE_Replace 5 /* Delete existing record, then do INSERT or UPDATE */ | ||
841 | |||
842 | #define OE_Restrict 6 /* OE_Abort for IMMEDIATE, OE_Rollback for DEFERRED */ | ||
843 | #define OE_SetNull 7 /* Set the foreign key value to NULL */ | ||
844 | #define OE_SetDflt 8 /* Set the foreign key value to its default */ | ||
845 | #define OE_Cascade 9 /* Cascade the changes */ | ||
846 | |||
847 | #define OE_Default 99 /* Do whatever the default action is */ | ||
848 | |||
849 | |||
850 | /* | ||
851 | ** An instance of the following structure is passed as the first | ||
852 | ** argument to sqlite3VdbeKeyCompare and is used to control the | ||
853 | ** comparison of the two index keys. | ||
854 | ** | ||
855 | ** If the KeyInfo.incrKey value is true and the comparison would | ||
856 | ** otherwise be equal, then return a result as if the second key | ||
857 | ** were larger. | ||
858 | */ | ||
859 | struct KeyInfo { | ||
860 | sqlite3 *db; /* The database connection */ | ||
861 | u8 enc; /* Text encoding - one of the TEXT_Utf* values */ | ||
862 | u8 incrKey; /* Increase 2nd key by epsilon before comparison */ | ||
863 | int nField; /* Number of entries in aColl[] */ | ||
864 | u8 *aSortOrder; /* If defined an aSortOrder[i] is true, sort DESC */ | ||
865 | CollSeq *aColl[1]; /* Collating sequence for each term of the key */ | ||
866 | }; | ||
867 | |||
868 | /* | ||
869 | ** Each SQL index is represented in memory by an | ||
870 | ** instance of the following structure. | ||
871 | ** | ||
872 | ** The columns of the table that are to be indexed are described | ||
873 | ** by the aiColumn[] field of this structure. For example, suppose | ||
874 | ** we have the following table and index: | ||
875 | ** | ||
876 | ** CREATE TABLE Ex1(c1 int, c2 int, c3 text); | ||
877 | ** CREATE INDEX Ex2 ON Ex1(c3,c1); | ||
878 | ** | ||
879 | ** In the Table structure describing Ex1, nCol==3 because there are | ||
880 | ** three columns in the table. In the Index structure describing | ||
881 | ** Ex2, nColumn==2 since 2 of the 3 columns of Ex1 are indexed. | ||
882 | ** The value of aiColumn is {2, 0}. aiColumn[0]==2 because the | ||
883 | ** first column to be indexed (c3) has an index of 2 in Ex1.aCol[]. | ||
884 | ** The second column to be indexed (c1) has an index of 0 in | ||
885 | ** Ex1.aCol[], hence Ex2.aiColumn[1]==0. | ||
886 | ** | ||
887 | ** The Index.onError field determines whether or not the indexed columns | ||
888 | ** must be unique and what to do if they are not. When Index.onError=OE_None, | ||
889 | ** it means this is not a unique index. Otherwise it is a unique index | ||
890 | ** and the value of Index.onError indicate the which conflict resolution | ||
891 | ** algorithm to employ whenever an attempt is made to insert a non-unique | ||
892 | ** element. | ||
893 | */ | ||
894 | struct Index { | ||
895 | char *zName; /* Name of this index */ | ||
896 | int nColumn; /* Number of columns in the table used by this index */ | ||
897 | int *aiColumn; /* Which columns are used by this index. 1st is 0 */ | ||
898 | unsigned *aiRowEst; /* Result of ANALYZE: Est. rows selected by each column */ | ||
899 | Table *pTable; /* The SQL table being indexed */ | ||
900 | int tnum; /* Page containing root of this index in database file */ | ||
901 | u8 onError; /* OE_Abort, OE_Ignore, OE_Replace, or OE_None */ | ||
902 | u8 autoIndex; /* True if is automatically created (ex: by UNIQUE) */ | ||
903 | char *zColAff; /* String defining the affinity of each column */ | ||
904 | Index *pNext; /* The next index associated with the same table */ | ||
905 | Schema *pSchema; /* Schema containing this index */ | ||
906 | u8 *aSortOrder; /* Array of size Index.nColumn. True==DESC, False==ASC */ | ||
907 | char **azColl; /* Array of collation sequence names for index */ | ||
908 | }; | ||
909 | |||
910 | /* | ||
911 | ** Each token coming out of the lexer is an instance of | ||
912 | ** this structure. Tokens are also used as part of an expression. | ||
913 | ** | ||
914 | ** Note if Token.z==0 then Token.dyn and Token.n are undefined and | ||
915 | ** may contain random values. Do not make any assuptions about Token.dyn | ||
916 | ** and Token.n when Token.z==0. | ||
917 | */ | ||
918 | struct Token { | ||
919 | const unsigned char *z; /* Text of the token. Not NULL-terminated! */ | ||
920 | unsigned dyn : 1; /* True for malloced memory, false for static */ | ||
921 | unsigned n : 31; /* Number of characters in this token */ | ||
922 | }; | ||
923 | |||
924 | /* | ||
925 | ** An instance of this structure contains information needed to generate | ||
926 | ** code for a SELECT that contains aggregate functions. | ||
927 | ** | ||
928 | ** If Expr.op==TK_AGG_COLUMN or TK_AGG_FUNCTION then Expr.pAggInfo is a | ||
929 | ** pointer to this structure. The Expr.iColumn field is the index in | ||
930 | ** AggInfo.aCol[] or AggInfo.aFunc[] of information needed to generate | ||
931 | ** code for that node. | ||
932 | ** | ||
933 | ** AggInfo.pGroupBy and AggInfo.aFunc.pExpr point to fields within the | ||
934 | ** original Select structure that describes the SELECT statement. These | ||
935 | ** fields do not need to be freed when deallocating the AggInfo structure. | ||
936 | */ | ||
937 | struct AggInfo { | ||
938 | u8 directMode; /* Direct rendering mode means take data directly | ||
939 | ** from source tables rather than from accumulators */ | ||
940 | u8 useSortingIdx; /* In direct mode, reference the sorting index rather | ||
941 | ** than the source table */ | ||
942 | int sortingIdx; /* Cursor number of the sorting index */ | ||
943 | ExprList *pGroupBy; /* The group by clause */ | ||
944 | int nSortingColumn; /* Number of columns in the sorting index */ | ||
945 | struct AggInfo_col { /* For each column used in source tables */ | ||
946 | Table *pTab; /* Source table */ | ||
947 | int iTable; /* Cursor number of the source table */ | ||
948 | int iColumn; /* Column number within the source table */ | ||
949 | int iSorterColumn; /* Column number in the sorting index */ | ||
950 | int iMem; /* Memory location that acts as accumulator */ | ||
951 | Expr *pExpr; /* The original expression */ | ||
952 | } *aCol; | ||
953 | int nColumn; /* Number of used entries in aCol[] */ | ||
954 | int nColumnAlloc; /* Number of slots allocated for aCol[] */ | ||
955 | int nAccumulator; /* Number of columns that show through to the output. | ||
956 | ** Additional columns are used only as parameters to | ||
957 | ** aggregate functions */ | ||
958 | struct AggInfo_func { /* For each aggregate function */ | ||
959 | Expr *pExpr; /* Expression encoding the function */ | ||
960 | FuncDef *pFunc; /* The aggregate function implementation */ | ||
961 | int iMem; /* Memory location that acts as accumulator */ | ||
962 | int iDistinct; /* Ephermeral table used to enforce DISTINCT */ | ||
963 | } *aFunc; | ||
964 | int nFunc; /* Number of entries in aFunc[] */ | ||
965 | int nFuncAlloc; /* Number of slots allocated for aFunc[] */ | ||
966 | }; | ||
967 | |||
968 | /* | ||
969 | ** Each node of an expression in the parse tree is an instance | ||
970 | ** of this structure. | ||
971 | ** | ||
972 | ** Expr.op is the opcode. The integer parser token codes are reused | ||
973 | ** as opcodes here. For example, the parser defines TK_GE to be an integer | ||
974 | ** code representing the ">=" operator. This same integer code is reused | ||
975 | ** to represent the greater-than-or-equal-to operator in the expression | ||
976 | ** tree. | ||
977 | ** | ||
978 | ** Expr.pRight and Expr.pLeft are subexpressions. Expr.pList is a list | ||
979 | ** of argument if the expression is a function. | ||
980 | ** | ||
981 | ** Expr.token is the operator token for this node. For some expressions | ||
982 | ** that have subexpressions, Expr.token can be the complete text that gave | ||
983 | ** rise to the Expr. In the latter case, the token is marked as being | ||
984 | ** a compound token. | ||
985 | ** | ||
986 | ** An expression of the form ID or ID.ID refers to a column in a table. | ||
987 | ** For such expressions, Expr.op is set to TK_COLUMN and Expr.iTable is | ||
988 | ** the integer cursor number of a VDBE cursor pointing to that table and | ||
989 | ** Expr.iColumn is the column number for the specific column. If the | ||
990 | ** expression is used as a result in an aggregate SELECT, then the | ||
991 | ** value is also stored in the Expr.iAgg column in the aggregate so that | ||
992 | ** it can be accessed after all aggregates are computed. | ||
993 | ** | ||
994 | ** If the expression is a function, the Expr.iTable is an integer code | ||
995 | ** representing which function. If the expression is an unbound variable | ||
996 | ** marker (a question mark character '?' in the original SQL) then the | ||
997 | ** Expr.iTable holds the index number for that variable. | ||
998 | ** | ||
999 | ** If the expression is a subquery then Expr.iColumn holds an integer | ||
1000 | ** register number containing the result of the subquery. If the | ||
1001 | ** subquery gives a constant result, then iTable is -1. If the subquery | ||
1002 | ** gives a different answer at different times during statement processing | ||
1003 | ** then iTable is the address of a subroutine that computes the subquery. | ||
1004 | ** | ||
1005 | ** The Expr.pSelect field points to a SELECT statement. The SELECT might | ||
1006 | ** be the right operand of an IN operator. Or, if a scalar SELECT appears | ||
1007 | ** in an expression the opcode is TK_SELECT and Expr.pSelect is the only | ||
1008 | ** operand. | ||
1009 | ** | ||
1010 | ** If the Expr is of type OP_Column, and the table it is selecting from | ||
1011 | ** is a disk table or the "old.*" pseudo-table, then pTab points to the | ||
1012 | ** corresponding table definition. | ||
1013 | */ | ||
1014 | struct Expr { | ||
1015 | u8 op; /* Operation performed by this node */ | ||
1016 | char affinity; /* The affinity of the column or 0 if not a column */ | ||
1017 | u16 flags; /* Various flags. See below */ | ||
1018 | CollSeq *pColl; /* The collation type of the column or 0 */ | ||
1019 | Expr *pLeft, *pRight; /* Left and right subnodes */ | ||
1020 | ExprList *pList; /* A list of expressions used as function arguments | ||
1021 | ** or in "<expr> IN (<expr-list)" */ | ||
1022 | Token token; /* An operand token */ | ||
1023 | Token span; /* Complete text of the expression */ | ||
1024 | int iTable, iColumn; /* When op==TK_COLUMN, then this expr node means the | ||
1025 | ** iColumn-th field of the iTable-th table. */ | ||
1026 | AggInfo *pAggInfo; /* Used by TK_AGG_COLUMN and TK_AGG_FUNCTION */ | ||
1027 | int iAgg; /* Which entry in pAggInfo->aCol[] or ->aFunc[] */ | ||
1028 | int iRightJoinTable; /* If EP_FromJoin, the right table of the join */ | ||
1029 | Select *pSelect; /* When the expression is a sub-select. Also the | ||
1030 | ** right side of "<expr> IN (<select>)" */ | ||
1031 | Table *pTab; /* Table for OP_Column expressions. */ | ||
1032 | /* Schema *pSchema; */ | ||
1033 | #if defined(SQLITE_TEST) || SQLITE_MAX_EXPR_DEPTH>0 | ||
1034 | int nHeight; /* Height of the tree headed by this node */ | ||
1035 | #endif | ||
1036 | }; | ||
1037 | |||
1038 | /* | ||
1039 | ** The following are the meanings of bits in the Expr.flags field. | ||
1040 | */ | ||
1041 | #define EP_FromJoin 0x01 /* Originated in ON or USING clause of a join */ | ||
1042 | #define EP_Agg 0x02 /* Contains one or more aggregate functions */ | ||
1043 | #define EP_Resolved 0x04 /* IDs have been resolved to COLUMNs */ | ||
1044 | #define EP_Error 0x08 /* Expression contains one or more errors */ | ||
1045 | #define EP_Distinct 0x10 /* Aggregate function with DISTINCT keyword */ | ||
1046 | #define EP_VarSelect 0x20 /* pSelect is correlated, not constant */ | ||
1047 | #define EP_Dequoted 0x40 /* True if the string has been dequoted */ | ||
1048 | #define EP_InfixFunc 0x80 /* True for an infix function: LIKE, GLOB, etc */ | ||
1049 | #define EP_ExpCollate 0x100 /* Collating sequence specified explicitly */ | ||
1050 | |||
1051 | /* | ||
1052 | ** These macros can be used to test, set, or clear bits in the | ||
1053 | ** Expr.flags field. | ||
1054 | */ | ||
1055 | #define ExprHasProperty(E,P) (((E)->flags&(P))==(P)) | ||
1056 | #define ExprHasAnyProperty(E,P) (((E)->flags&(P))!=0) | ||
1057 | #define ExprSetProperty(E,P) (E)->flags|=(P) | ||
1058 | #define ExprClearProperty(E,P) (E)->flags&=~(P) | ||
1059 | |||
1060 | /* | ||
1061 | ** A list of expressions. Each expression may optionally have a | ||
1062 | ** name. An expr/name combination can be used in several ways, such | ||
1063 | ** as the list of "expr AS ID" fields following a "SELECT" or in the | ||
1064 | ** list of "ID = expr" items in an UPDATE. A list of expressions can | ||
1065 | ** also be used as the argument to a function, in which case the a.zName | ||
1066 | ** field is not used. | ||
1067 | */ | ||
1068 | struct ExprList { | ||
1069 | int nExpr; /* Number of expressions on the list */ | ||
1070 | int nAlloc; /* Number of entries allocated below */ | ||
1071 | int iECursor; /* VDBE Cursor associated with this ExprList */ | ||
1072 | struct ExprList_item { | ||
1073 | Expr *pExpr; /* The list of expressions */ | ||
1074 | char *zName; /* Token associated with this expression */ | ||
1075 | u8 sortOrder; /* 1 for DESC or 0 for ASC */ | ||
1076 | u8 isAgg; /* True if this is an aggregate like count(*) */ | ||
1077 | u8 done; /* A flag to indicate when processing is finished */ | ||
1078 | } *a; /* One entry for each expression */ | ||
1079 | }; | ||
1080 | |||
1081 | /* | ||
1082 | ** An instance of this structure can hold a simple list of identifiers, | ||
1083 | ** such as the list "a,b,c" in the following statements: | ||
1084 | ** | ||
1085 | ** INSERT INTO t(a,b,c) VALUES ...; | ||
1086 | ** CREATE INDEX idx ON t(a,b,c); | ||
1087 | ** CREATE TRIGGER trig BEFORE UPDATE ON t(a,b,c) ...; | ||
1088 | ** | ||
1089 | ** The IdList.a.idx field is used when the IdList represents the list of | ||
1090 | ** column names after a table name in an INSERT statement. In the statement | ||
1091 | ** | ||
1092 | ** INSERT INTO t(a,b,c) ... | ||
1093 | ** | ||
1094 | ** If "a" is the k-th column of table "t", then IdList.a[0].idx==k. | ||
1095 | */ | ||
1096 | struct IdList { | ||
1097 | struct IdList_item { | ||
1098 | char *zName; /* Name of the identifier */ | ||
1099 | int idx; /* Index in some Table.aCol[] of a column named zName */ | ||
1100 | } *a; | ||
1101 | int nId; /* Number of identifiers on the list */ | ||
1102 | int nAlloc; /* Number of entries allocated for a[] below */ | ||
1103 | }; | ||
1104 | |||
1105 | /* | ||
1106 | ** The bitmask datatype defined below is used for various optimizations. | ||
1107 | ** | ||
1108 | ** Changing this from a 64-bit to a 32-bit type limits the number of | ||
1109 | ** tables in a join to 32 instead of 64. But it also reduces the size | ||
1110 | ** of the library by 738 bytes on ix86. | ||
1111 | */ | ||
1112 | typedef u64 Bitmask; | ||
1113 | |||
1114 | /* | ||
1115 | ** The following structure describes the FROM clause of a SELECT statement. | ||
1116 | ** Each table or subquery in the FROM clause is a separate element of | ||
1117 | ** the SrcList.a[] array. | ||
1118 | ** | ||
1119 | ** With the addition of multiple database support, the following structure | ||
1120 | ** can also be used to describe a particular table such as the table that | ||
1121 | ** is modified by an INSERT, DELETE, or UPDATE statement. In standard SQL, | ||
1122 | ** such a table must be a simple name: ID. But in SQLite, the table can | ||
1123 | ** now be identified by a database name, a dot, then the table name: ID.ID. | ||
1124 | ** | ||
1125 | ** The jointype starts out showing the join type between the current table | ||
1126 | ** and the next table on the list. The parser builds the list this way. | ||
1127 | ** But sqlite3SrcListShiftJoinType() later shifts the jointypes so that each | ||
1128 | ** jointype expresses the join between the table and the previous table. | ||
1129 | */ | ||
1130 | struct SrcList { | ||
1131 | i16 nSrc; /* Number of tables or subqueries in the FROM clause */ | ||
1132 | i16 nAlloc; /* Number of entries allocated in a[] below */ | ||
1133 | struct SrcList_item { | ||
1134 | char *zDatabase; /* Name of database holding this table */ | ||
1135 | char *zName; /* Name of the table */ | ||
1136 | char *zAlias; /* The "B" part of a "A AS B" phrase. zName is the "A" */ | ||
1137 | Table *pTab; /* An SQL table corresponding to zName */ | ||
1138 | Select *pSelect; /* A SELECT statement used in place of a table name */ | ||
1139 | u8 isPopulated; /* Temporary table associated with SELECT is populated */ | ||
1140 | u8 jointype; /* Type of join between this able and the previous */ | ||
1141 | int iCursor; /* The VDBE cursor number used to access this table */ | ||
1142 | Expr *pOn; /* The ON clause of a join */ | ||
1143 | IdList *pUsing; /* The USING clause of a join */ | ||
1144 | Bitmask colUsed; /* Bit N (1<<N) set if column N or pTab is used */ | ||
1145 | } a[1]; /* One entry for each identifier on the list */ | ||
1146 | }; | ||
1147 | |||
1148 | /* | ||
1149 | ** Permitted values of the SrcList.a.jointype field | ||
1150 | */ | ||
1151 | #define JT_INNER 0x0001 /* Any kind of inner or cross join */ | ||
1152 | #define JT_CROSS 0x0002 /* Explicit use of the CROSS keyword */ | ||
1153 | #define JT_NATURAL 0x0004 /* True for a "natural" join */ | ||
1154 | #define JT_LEFT 0x0008 /* Left outer join */ | ||
1155 | #define JT_RIGHT 0x0010 /* Right outer join */ | ||
1156 | #define JT_OUTER 0x0020 /* The "OUTER" keyword is present */ | ||
1157 | #define JT_ERROR 0x0040 /* unknown or unsupported join type */ | ||
1158 | |||
1159 | /* | ||
1160 | ** For each nested loop in a WHERE clause implementation, the WhereInfo | ||
1161 | ** structure contains a single instance of this structure. This structure | ||
1162 | ** is intended to be private the the where.c module and should not be | ||
1163 | ** access or modified by other modules. | ||
1164 | ** | ||
1165 | ** The pIdxInfo and pBestIdx fields are used to help pick the best | ||
1166 | ** index on a virtual table. The pIdxInfo pointer contains indexing | ||
1167 | ** information for the i-th table in the FROM clause before reordering. | ||
1168 | ** All the pIdxInfo pointers are freed by whereInfoFree() in where.c. | ||
1169 | ** The pBestIdx pointer is a copy of pIdxInfo for the i-th table after | ||
1170 | ** FROM clause ordering. This is a little confusing so I will repeat | ||
1171 | ** it in different words. WhereInfo.a[i].pIdxInfo is index information | ||
1172 | ** for WhereInfo.pTabList.a[i]. WhereInfo.a[i].pBestInfo is the | ||
1173 | ** index information for the i-th loop of the join. pBestInfo is always | ||
1174 | ** either NULL or a copy of some pIdxInfo. So for cleanup it is | ||
1175 | ** sufficient to free all of the pIdxInfo pointers. | ||
1176 | ** | ||
1177 | */ | ||
1178 | struct WhereLevel { | ||
1179 | int iFrom; /* Which entry in the FROM clause */ | ||
1180 | int flags; /* Flags associated with this level */ | ||
1181 | int iMem; /* First memory cell used by this level */ | ||
1182 | int iLeftJoin; /* Memory cell used to implement LEFT OUTER JOIN */ | ||
1183 | Index *pIdx; /* Index used. NULL if no index */ | ||
1184 | int iTabCur; /* The VDBE cursor used to access the table */ | ||
1185 | int iIdxCur; /* The VDBE cursor used to acesss pIdx */ | ||
1186 | int brk; /* Jump here to break out of the loop */ | ||
1187 | int nxt; /* Jump here to start the next IN combination */ | ||
1188 | int cont; /* Jump here to continue with the next loop cycle */ | ||
1189 | int top; /* First instruction of interior of the loop */ | ||
1190 | int op, p1, p2; /* Opcode used to terminate the loop */ | ||
1191 | int nEq; /* Number of == or IN constraints on this loop */ | ||
1192 | int nIn; /* Number of IN operators constraining this loop */ | ||
1193 | struct InLoop { | ||
1194 | int iCur; /* The VDBE cursor used by this IN operator */ | ||
1195 | int topAddr; /* Top of the IN loop */ | ||
1196 | } *aInLoop; /* Information about each nested IN operator */ | ||
1197 | sqlite3_index_info *pBestIdx; /* Index information for this level */ | ||
1198 | |||
1199 | /* The following field is really not part of the current level. But | ||
1200 | ** we need a place to cache index information for each table in the | ||
1201 | ** FROM clause and the WhereLevel structure is a convenient place. | ||
1202 | */ | ||
1203 | sqlite3_index_info *pIdxInfo; /* Index info for n-th source table */ | ||
1204 | }; | ||
1205 | |||
1206 | /* | ||
1207 | ** The WHERE clause processing routine has two halves. The | ||
1208 | ** first part does the start of the WHERE loop and the second | ||
1209 | ** half does the tail of the WHERE loop. An instance of | ||
1210 | ** this structure is returned by the first half and passed | ||
1211 | ** into the second half to give some continuity. | ||
1212 | */ | ||
1213 | struct WhereInfo { | ||
1214 | Parse *pParse; | ||
1215 | SrcList *pTabList; /* List of tables in the join */ | ||
1216 | int iTop; /* The very beginning of the WHERE loop */ | ||
1217 | int iContinue; /* Jump here to continue with next record */ | ||
1218 | int iBreak; /* Jump here to break out of the loop */ | ||
1219 | int nLevel; /* Number of nested loop */ | ||
1220 | sqlite3_index_info **apInfo; /* Array of pointers to index info structures */ | ||
1221 | WhereLevel a[1]; /* Information about each nest loop in the WHERE */ | ||
1222 | }; | ||
1223 | |||
1224 | /* | ||
1225 | ** A NameContext defines a context in which to resolve table and column | ||
1226 | ** names. The context consists of a list of tables (the pSrcList) field and | ||
1227 | ** a list of named expression (pEList). The named expression list may | ||
1228 | ** be NULL. The pSrc corresponds to the FROM clause of a SELECT or | ||
1229 | ** to the table being operated on by INSERT, UPDATE, or DELETE. The | ||
1230 | ** pEList corresponds to the result set of a SELECT and is NULL for | ||
1231 | ** other statements. | ||
1232 | ** | ||
1233 | ** NameContexts can be nested. When resolving names, the inner-most | ||
1234 | ** context is searched first. If no match is found, the next outer | ||
1235 | ** context is checked. If there is still no match, the next context | ||
1236 | ** is checked. This process continues until either a match is found | ||
1237 | ** or all contexts are check. When a match is found, the nRef member of | ||
1238 | ** the context containing the match is incremented. | ||
1239 | ** | ||
1240 | ** Each subquery gets a new NameContext. The pNext field points to the | ||
1241 | ** NameContext in the parent query. Thus the process of scanning the | ||
1242 | ** NameContext list corresponds to searching through successively outer | ||
1243 | ** subqueries looking for a match. | ||
1244 | */ | ||
1245 | struct NameContext { | ||
1246 | Parse *pParse; /* The parser */ | ||
1247 | SrcList *pSrcList; /* One or more tables used to resolve names */ | ||
1248 | ExprList *pEList; /* Optional list of named expressions */ | ||
1249 | int nRef; /* Number of names resolved by this context */ | ||
1250 | int nErr; /* Number of errors encountered while resolving names */ | ||
1251 | u8 allowAgg; /* Aggregate functions allowed here */ | ||
1252 | u8 hasAgg; /* True if aggregates are seen */ | ||
1253 | u8 isCheck; /* True if resolving names in a CHECK constraint */ | ||
1254 | int nDepth; /* Depth of subquery recursion. 1 for no recursion */ | ||
1255 | AggInfo *pAggInfo; /* Information about aggregates at this level */ | ||
1256 | NameContext *pNext; /* Next outer name context. NULL for outermost */ | ||
1257 | }; | ||
1258 | |||
1259 | /* | ||
1260 | ** An instance of the following structure contains all information | ||
1261 | ** needed to generate code for a single SELECT statement. | ||
1262 | ** | ||
1263 | ** nLimit is set to -1 if there is no LIMIT clause. nOffset is set to 0. | ||
1264 | ** If there is a LIMIT clause, the parser sets nLimit to the value of the | ||
1265 | ** limit and nOffset to the value of the offset (or 0 if there is not | ||
1266 | ** offset). But later on, nLimit and nOffset become the memory locations | ||
1267 | ** in the VDBE that record the limit and offset counters. | ||
1268 | ** | ||
1269 | ** addrOpenEphm[] entries contain the address of OP_OpenEphemeral opcodes. | ||
1270 | ** These addresses must be stored so that we can go back and fill in | ||
1271 | ** the P3_KEYINFO and P2 parameters later. Neither the KeyInfo nor | ||
1272 | ** the number of columns in P2 can be computed at the same time | ||
1273 | ** as the OP_OpenEphm instruction is coded because not | ||
1274 | ** enough information about the compound query is known at that point. | ||
1275 | ** The KeyInfo for addrOpenTran[0] and [1] contains collating sequences | ||
1276 | ** for the result set. The KeyInfo for addrOpenTran[2] contains collating | ||
1277 | ** sequences for the ORDER BY clause. | ||
1278 | */ | ||
1279 | struct Select { | ||
1280 | ExprList *pEList; /* The fields of the result */ | ||
1281 | u8 op; /* One of: TK_UNION TK_ALL TK_INTERSECT TK_EXCEPT */ | ||
1282 | u8 isDistinct; /* True if the DISTINCT keyword is present */ | ||
1283 | u8 isResolved; /* True once sqlite3SelectResolve() has run. */ | ||
1284 | u8 isAgg; /* True if this is an aggregate query */ | ||
1285 | u8 usesEphm; /* True if uses an OpenEphemeral opcode */ | ||
1286 | u8 disallowOrderBy; /* Do not allow an ORDER BY to be attached if TRUE */ | ||
1287 | char affinity; /* MakeRecord with this affinity for SRT_Set */ | ||
1288 | SrcList *pSrc; /* The FROM clause */ | ||
1289 | Expr *pWhere; /* The WHERE clause */ | ||
1290 | ExprList *pGroupBy; /* The GROUP BY clause */ | ||
1291 | Expr *pHaving; /* The HAVING clause */ | ||
1292 | ExprList *pOrderBy; /* The ORDER BY clause */ | ||
1293 | Select *pPrior; /* Prior select in a compound select statement */ | ||
1294 | Select *pRightmost; /* Right-most select in a compound select statement */ | ||
1295 | Expr *pLimit; /* LIMIT expression. NULL means not used. */ | ||
1296 | Expr *pOffset; /* OFFSET expression. NULL means not used. */ | ||
1297 | int iLimit, iOffset; /* Memory registers holding LIMIT & OFFSET counters */ | ||
1298 | int addrOpenEphm[3]; /* OP_OpenEphem opcodes related to this select */ | ||
1299 | }; | ||
1300 | |||
1301 | /* | ||
1302 | ** The results of a select can be distributed in several ways. | ||
1303 | */ | ||
1304 | #define SRT_Union 1 /* Store result as keys in an index */ | ||
1305 | #define SRT_Except 2 /* Remove result from a UNION index */ | ||
1306 | #define SRT_Discard 3 /* Do not save the results anywhere */ | ||
1307 | |||
1308 | /* The ORDER BY clause is ignored for all of the above */ | ||
1309 | #define IgnorableOrderby(X) (X<=SRT_Discard) | ||
1310 | |||
1311 | #define SRT_Callback 4 /* Invoke a callback with each row of result */ | ||
1312 | #define SRT_Mem 5 /* Store result in a memory cell */ | ||
1313 | #define SRT_Set 6 /* Store non-null results as keys in an index */ | ||
1314 | #define SRT_Table 7 /* Store result as data with an automatic rowid */ | ||
1315 | #define SRT_EphemTab 8 /* Create transient tab and store like SRT_Table */ | ||
1316 | #define SRT_Subroutine 9 /* Call a subroutine to handle results */ | ||
1317 | #define SRT_Exists 10 /* Store 1 if the result is not empty */ | ||
1318 | |||
1319 | /* | ||
1320 | ** An SQL parser context. A copy of this structure is passed through | ||
1321 | ** the parser and down into all the parser action routine in order to | ||
1322 | ** carry around information that is global to the entire parse. | ||
1323 | ** | ||
1324 | ** The structure is divided into two parts. When the parser and code | ||
1325 | ** generate call themselves recursively, the first part of the structure | ||
1326 | ** is constant but the second part is reset at the beginning and end of | ||
1327 | ** each recursion. | ||
1328 | ** | ||
1329 | ** The nTableLock and aTableLock variables are only used if the shared-cache | ||
1330 | ** feature is enabled (if sqlite3Tsd()->useSharedData is true). They are | ||
1331 | ** used to store the set of table-locks required by the statement being | ||
1332 | ** compiled. Function sqlite3TableLock() is used to add entries to the | ||
1333 | ** list. | ||
1334 | */ | ||
1335 | struct Parse { | ||
1336 | sqlite3 *db; /* The main database structure */ | ||
1337 | int rc; /* Return code from execution */ | ||
1338 | char *zErrMsg; /* An error message */ | ||
1339 | Vdbe *pVdbe; /* An engine for executing database bytecode */ | ||
1340 | u8 colNamesSet; /* TRUE after OP_ColumnName has been issued to pVdbe */ | ||
1341 | u8 nameClash; /* A permanent table name clashes with temp table name */ | ||
1342 | u8 checkSchema; /* Causes schema cookie check after an error */ | ||
1343 | u8 nested; /* Number of nested calls to the parser/code generator */ | ||
1344 | u8 parseError; /* True after a parsing error. Ticket #1794 */ | ||
1345 | int nErr; /* Number of errors seen */ | ||
1346 | int nTab; /* Number of previously allocated VDBE cursors */ | ||
1347 | int nMem; /* Number of memory cells used so far */ | ||
1348 | int nSet; /* Number of sets used so far */ | ||
1349 | int ckOffset; /* Stack offset to data used by CHECK constraints */ | ||
1350 | u32 writeMask; /* Start a write transaction on these databases */ | ||
1351 | u32 cookieMask; /* Bitmask of schema verified databases */ | ||
1352 | int cookieGoto; /* Address of OP_Goto to cookie verifier subroutine */ | ||
1353 | int cookieValue[SQLITE_MAX_ATTACHED+2]; /* Values of cookies to verify */ | ||
1354 | #ifndef SQLITE_OMIT_SHARED_CACHE | ||
1355 | int nTableLock; /* Number of locks in aTableLock */ | ||
1356 | TableLock *aTableLock; /* Required table locks for shared-cache mode */ | ||
1357 | #endif | ||
1358 | |||
1359 | /* Above is constant between recursions. Below is reset before and after | ||
1360 | ** each recursion */ | ||
1361 | |||
1362 | int nVar; /* Number of '?' variables seen in the SQL so far */ | ||
1363 | int nVarExpr; /* Number of used slots in apVarExpr[] */ | ||
1364 | int nVarExprAlloc; /* Number of allocated slots in apVarExpr[] */ | ||
1365 | Expr **apVarExpr; /* Pointers to :aaa and $aaaa wildcard expressions */ | ||
1366 | u8 explain; /* True if the EXPLAIN flag is found on the query */ | ||
1367 | Token sErrToken; /* The token at which the error occurred */ | ||
1368 | Token sNameToken; /* Token with unqualified schema object name */ | ||
1369 | Token sLastToken; /* The last token parsed */ | ||
1370 | const char *zSql; /* All SQL text */ | ||
1371 | const char *zTail; /* All SQL text past the last semicolon parsed */ | ||
1372 | Table *pNewTable; /* A table being constructed by CREATE TABLE */ | ||
1373 | Trigger *pNewTrigger; /* Trigger under construct by a CREATE TRIGGER */ | ||
1374 | TriggerStack *trigStack; /* Trigger actions being coded */ | ||
1375 | const char *zAuthContext; /* The 6th parameter to db->xAuth callbacks */ | ||
1376 | #ifndef SQLITE_OMIT_VIRTUALTABLE | ||
1377 | Token sArg; /* Complete text of a module argument */ | ||
1378 | u8 declareVtab; /* True if inside sqlite3_declare_vtab() */ | ||
1379 | Table *pVirtualLock; /* Require virtual table lock on this table */ | ||
1380 | #endif | ||
1381 | #if defined(SQLITE_TEST) || SQLITE_MAX_EXPR_DEPTH>0 | ||
1382 | int nHeight; /* Expression tree height of current sub-select */ | ||
1383 | #endif | ||
1384 | }; | ||
1385 | |||
1386 | #ifdef SQLITE_OMIT_VIRTUALTABLE | ||
1387 | #define IN_DECLARE_VTAB 0 | ||
1388 | #else | ||
1389 | #define IN_DECLARE_VTAB (pParse->declareVtab) | ||
1390 | #endif | ||
1391 | |||
1392 | /* | ||
1393 | ** An instance of the following structure can be declared on a stack and used | ||
1394 | ** to save the Parse.zAuthContext value so that it can be restored later. | ||
1395 | */ | ||
1396 | struct AuthContext { | ||
1397 | const char *zAuthContext; /* Put saved Parse.zAuthContext here */ | ||
1398 | Parse *pParse; /* The Parse structure */ | ||
1399 | }; | ||
1400 | |||
1401 | /* | ||
1402 | ** Bitfield flags for P2 value in OP_Insert and OP_Delete | ||
1403 | */ | ||
1404 | #define OPFLAG_NCHANGE 1 /* Set to update db->nChange */ | ||
1405 | #define OPFLAG_LASTROWID 2 /* Set to update db->lastRowid */ | ||
1406 | #define OPFLAG_ISUPDATE 4 /* This OP_Insert is an sql UPDATE */ | ||
1407 | #define OPFLAG_APPEND 8 /* This is likely to be an append */ | ||
1408 | |||
1409 | /* | ||
1410 | * Each trigger present in the database schema is stored as an instance of | ||
1411 | * struct Trigger. | ||
1412 | * | ||
1413 | * Pointers to instances of struct Trigger are stored in two ways. | ||
1414 | * 1. In the "trigHash" hash table (part of the sqlite3* that represents the | ||
1415 | * database). This allows Trigger structures to be retrieved by name. | ||
1416 | * 2. All triggers associated with a single table form a linked list, using the | ||
1417 | * pNext member of struct Trigger. A pointer to the first element of the | ||
1418 | * linked list is stored as the "pTrigger" member of the associated | ||
1419 | * struct Table. | ||
1420 | * | ||
1421 | * The "step_list" member points to the first element of a linked list | ||
1422 | * containing the SQL statements specified as the trigger program. | ||
1423 | */ | ||
1424 | struct Trigger { | ||
1425 | char *name; /* The name of the trigger */ | ||
1426 | char *table; /* The table or view to which the trigger applies */ | ||
1427 | u8 op; /* One of TK_DELETE, TK_UPDATE, TK_INSERT */ | ||
1428 | u8 tr_tm; /* One of TRIGGER_BEFORE, TRIGGER_AFTER */ | ||
1429 | Expr *pWhen; /* The WHEN clause of the expresion (may be NULL) */ | ||
1430 | IdList *pColumns; /* If this is an UPDATE OF <column-list> trigger, | ||
1431 | the <column-list> is stored here */ | ||
1432 | Token nameToken; /* Token containing zName. Use during parsing only */ | ||
1433 | Schema *pSchema; /* Schema containing the trigger */ | ||
1434 | Schema *pTabSchema; /* Schema containing the table */ | ||
1435 | TriggerStep *step_list; /* Link list of trigger program steps */ | ||
1436 | Trigger *pNext; /* Next trigger associated with the table */ | ||
1437 | }; | ||
1438 | |||
1439 | /* | ||
1440 | ** A trigger is either a BEFORE or an AFTER trigger. The following constants | ||
1441 | ** determine which. | ||
1442 | ** | ||
1443 | ** If there are multiple triggers, you might of some BEFORE and some AFTER. | ||
1444 | ** In that cases, the constants below can be ORed together. | ||
1445 | */ | ||
1446 | #define TRIGGER_BEFORE 1 | ||
1447 | #define TRIGGER_AFTER 2 | ||
1448 | |||
1449 | /* | ||
1450 | * An instance of struct TriggerStep is used to store a single SQL statement | ||
1451 | * that is a part of a trigger-program. | ||
1452 | * | ||
1453 | * Instances of struct TriggerStep are stored in a singly linked list (linked | ||
1454 | * using the "pNext" member) referenced by the "step_list" member of the | ||
1455 | * associated struct Trigger instance. The first element of the linked list is | ||
1456 | * the first step of the trigger-program. | ||
1457 | * | ||
1458 | * The "op" member indicates whether this is a "DELETE", "INSERT", "UPDATE" or | ||
1459 | * "SELECT" statement. The meanings of the other members is determined by the | ||
1460 | * value of "op" as follows: | ||
1461 | * | ||
1462 | * (op == TK_INSERT) | ||
1463 | * orconf -> stores the ON CONFLICT algorithm | ||
1464 | * pSelect -> If this is an INSERT INTO ... SELECT ... statement, then | ||
1465 | * this stores a pointer to the SELECT statement. Otherwise NULL. | ||
1466 | * target -> A token holding the name of the table to insert into. | ||
1467 | * pExprList -> If this is an INSERT INTO ... VALUES ... statement, then | ||
1468 | * this stores values to be inserted. Otherwise NULL. | ||
1469 | * pIdList -> If this is an INSERT INTO ... (<column-names>) VALUES ... | ||
1470 | * statement, then this stores the column-names to be | ||
1471 | * inserted into. | ||
1472 | * | ||
1473 | * (op == TK_DELETE) | ||
1474 | * target -> A token holding the name of the table to delete from. | ||
1475 | * pWhere -> The WHERE clause of the DELETE statement if one is specified. | ||
1476 | * Otherwise NULL. | ||
1477 | * | ||
1478 | * (op == TK_UPDATE) | ||
1479 | * target -> A token holding the name of the table to update rows of. | ||
1480 | * pWhere -> The WHERE clause of the UPDATE statement if one is specified. | ||
1481 | * Otherwise NULL. | ||
1482 | * pExprList -> A list of the columns to update and the expressions to update | ||
1483 | * them to. See sqlite3Update() documentation of "pChanges" | ||
1484 | * argument. | ||
1485 | * | ||
1486 | */ | ||
1487 | struct TriggerStep { | ||
1488 | int op; /* One of TK_DELETE, TK_UPDATE, TK_INSERT, TK_SELECT */ | ||
1489 | int orconf; /* OE_Rollback etc. */ | ||
1490 | Trigger *pTrig; /* The trigger that this step is a part of */ | ||
1491 | |||
1492 | Select *pSelect; /* Valid for SELECT and sometimes | ||
1493 | INSERT steps (when pExprList == 0) */ | ||
1494 | Token target; /* Valid for DELETE, UPDATE, INSERT steps */ | ||
1495 | Expr *pWhere; /* Valid for DELETE, UPDATE steps */ | ||
1496 | ExprList *pExprList; /* Valid for UPDATE statements and sometimes | ||
1497 | INSERT steps (when pSelect == 0) */ | ||
1498 | IdList *pIdList; /* Valid for INSERT statements only */ | ||
1499 | TriggerStep *pNext; /* Next in the link-list */ | ||
1500 | TriggerStep *pLast; /* Last element in link-list. Valid for 1st elem only */ | ||
1501 | }; | ||
1502 | |||
1503 | /* | ||
1504 | * An instance of struct TriggerStack stores information required during code | ||
1505 | * generation of a single trigger program. While the trigger program is being | ||
1506 | * coded, its associated TriggerStack instance is pointed to by the | ||
1507 | * "pTriggerStack" member of the Parse structure. | ||
1508 | * | ||
1509 | * The pTab member points to the table that triggers are being coded on. The | ||
1510 | * newIdx member contains the index of the vdbe cursor that points at the temp | ||
1511 | * table that stores the new.* references. If new.* references are not valid | ||
1512 | * for the trigger being coded (for example an ON DELETE trigger), then newIdx | ||
1513 | * is set to -1. The oldIdx member is analogous to newIdx, for old.* references. | ||
1514 | * | ||
1515 | * The ON CONFLICT policy to be used for the trigger program steps is stored | ||
1516 | * as the orconf member. If this is OE_Default, then the ON CONFLICT clause | ||
1517 | * specified for individual triggers steps is used. | ||
1518 | * | ||
1519 | * struct TriggerStack has a "pNext" member, to allow linked lists to be | ||
1520 | * constructed. When coding nested triggers (triggers fired by other triggers) | ||
1521 | * each nested trigger stores its parent trigger's TriggerStack as the "pNext" | ||
1522 | * pointer. Once the nested trigger has been coded, the pNext value is restored | ||
1523 | * to the pTriggerStack member of the Parse stucture and coding of the parent | ||
1524 | * trigger continues. | ||
1525 | * | ||
1526 | * Before a nested trigger is coded, the linked list pointed to by the | ||
1527 | * pTriggerStack is scanned to ensure that the trigger is not about to be coded | ||
1528 | * recursively. If this condition is detected, the nested trigger is not coded. | ||
1529 | */ | ||
1530 | struct TriggerStack { | ||
1531 | Table *pTab; /* Table that triggers are currently being coded on */ | ||
1532 | int newIdx; /* Index of vdbe cursor to "new" temp table */ | ||
1533 | int oldIdx; /* Index of vdbe cursor to "old" temp table */ | ||
1534 | int orconf; /* Current orconf policy */ | ||
1535 | int ignoreJump; /* where to jump to for a RAISE(IGNORE) */ | ||
1536 | Trigger *pTrigger; /* The trigger currently being coded */ | ||
1537 | TriggerStack *pNext; /* Next trigger down on the trigger stack */ | ||
1538 | }; | ||
1539 | |||
1540 | /* | ||
1541 | ** The following structure contains information used by the sqliteFix... | ||
1542 | ** routines as they walk the parse tree to make database references | ||
1543 | ** explicit. | ||
1544 | */ | ||
1545 | typedef struct DbFixer DbFixer; | ||
1546 | struct DbFixer { | ||
1547 | Parse *pParse; /* The parsing context. Error messages written here */ | ||
1548 | const char *zDb; /* Make sure all objects are contained in this database */ | ||
1549 | const char *zType; /* Type of the container - used for error messages */ | ||
1550 | const Token *pName; /* Name of the container - used for error messages */ | ||
1551 | }; | ||
1552 | |||
1553 | /* | ||
1554 | ** A pointer to this structure is used to communicate information | ||
1555 | ** from sqlite3Init and OP_ParseSchema into the sqlite3InitCallback. | ||
1556 | */ | ||
1557 | typedef struct { | ||
1558 | sqlite3 *db; /* The database being initialized */ | ||
1559 | int iDb; /* 0 for main database. 1 for TEMP, 2.. for ATTACHed */ | ||
1560 | char **pzErrMsg; /* Error message stored here */ | ||
1561 | int rc; /* Result code stored here */ | ||
1562 | } InitData; | ||
1563 | |||
1564 | /* | ||
1565 | ** Assuming zIn points to the first byte of a UTF-8 character, | ||
1566 | ** advance zIn to point to the first byte of the next UTF-8 character. | ||
1567 | */ | ||
1568 | #define SQLITE_SKIP_UTF8(zIn) { \ | ||
1569 | if( (*(zIn++))>=0xc0 ){ \ | ||
1570 | while( (*zIn & 0xc0)==0x80 ){ zIn++; } \ | ||
1571 | } \ | ||
1572 | } | ||
1573 | |||
1574 | /* | ||
1575 | ** The SQLITE_CORRUPT_BKPT macro can be either a constant (for production | ||
1576 | ** builds) or a function call (for debugging). If it is a function call, | ||
1577 | ** it allows the operator to set a breakpoint at the spot where database | ||
1578 | ** corruption is first detected. | ||
1579 | */ | ||
1580 | #ifdef SQLITE_DEBUG | ||
1581 | int sqlite3Corrupt(void); | ||
1582 | # define SQLITE_CORRUPT_BKPT sqlite3Corrupt() | ||
1583 | #else | ||
1584 | # define SQLITE_CORRUPT_BKPT SQLITE_CORRUPT | ||
1585 | #endif | ||
1586 | |||
1587 | /* | ||
1588 | ** Internal function prototypes | ||
1589 | */ | ||
1590 | int sqlite3StrICmp(const char *, const char *); | ||
1591 | int sqlite3StrNICmp(const char *, const char *, int); | ||
1592 | int sqlite3IsNumber(const char*, int*, u8); | ||
1593 | |||
1594 | void *sqlite3MallocZero(unsigned); | ||
1595 | void *sqlite3DbMallocZero(sqlite3*, unsigned); | ||
1596 | void *sqlite3DbMallocRaw(sqlite3*, unsigned); | ||
1597 | char *sqlite3StrDup(const char*); | ||
1598 | char *sqlite3StrNDup(const char*, int); | ||
1599 | char *sqlite3DbStrDup(sqlite3*,const char*); | ||
1600 | char *sqlite3DbStrNDup(sqlite3*,const char*, int); | ||
1601 | void *sqlite3DbReallocOrFree(sqlite3 *, void *, int); | ||
1602 | void *sqlite3DbRealloc(sqlite3 *, void *, int); | ||
1603 | |||
1604 | char *sqlite3MPrintf(sqlite3*,const char*, ...); | ||
1605 | char *sqlite3VMPrintf(sqlite3*,const char*, va_list); | ||
1606 | #if defined(SQLITE_TEST) || defined(SQLITE_DEBUG) | ||
1607 | void sqlite3DebugPrintf(const char*, ...); | ||
1608 | void *sqlite3TextToPtr(const char*); | ||
1609 | #endif | ||
1610 | void sqlite3SetString(char **, ...); | ||
1611 | void sqlite3ErrorMsg(Parse*, const char*, ...); | ||
1612 | void sqlite3ErrorClear(Parse*); | ||
1613 | void sqlite3Dequote(char*); | ||
1614 | void sqlite3DequoteExpr(sqlite3*, Expr*); | ||
1615 | int sqlite3KeywordCode(const unsigned char*, int); | ||
1616 | int sqlite3RunParser(Parse*, const char*, char **); | ||
1617 | void sqlite3FinishCoding(Parse*); | ||
1618 | Expr *sqlite3Expr(sqlite3*, int, Expr*, Expr*, const Token*); | ||
1619 | Expr *sqlite3PExpr(Parse*, int, Expr*, Expr*, const Token*); | ||
1620 | Expr *sqlite3RegisterExpr(Parse*,Token*); | ||
1621 | Expr *sqlite3ExprAnd(sqlite3*,Expr*, Expr*); | ||
1622 | void sqlite3ExprSpan(Expr*,Token*,Token*); | ||
1623 | Expr *sqlite3ExprFunction(Parse*,ExprList*, Token*); | ||
1624 | void sqlite3ExprAssignVarNumber(Parse*, Expr*); | ||
1625 | void sqlite3ExprDelete(Expr*); | ||
1626 | ExprList *sqlite3ExprListAppend(Parse*,ExprList*,Expr*,Token*); | ||
1627 | void sqlite3ExprListDelete(ExprList*); | ||
1628 | int sqlite3Init(sqlite3*, char**); | ||
1629 | int sqlite3InitCallback(void*, int, char**, char**); | ||
1630 | void sqlite3Pragma(Parse*,Token*,Token*,Token*,int); | ||
1631 | void sqlite3ResetInternalSchema(sqlite3*, int); | ||
1632 | void sqlite3BeginParse(Parse*,int); | ||
1633 | void sqlite3CommitInternalChanges(sqlite3*); | ||
1634 | Table *sqlite3ResultSetOfSelect(Parse*,char*,Select*); | ||
1635 | void sqlite3OpenMasterTable(Parse *, int); | ||
1636 | void sqlite3StartTable(Parse*,Token*,Token*,int,int,int,int); | ||
1637 | void sqlite3AddColumn(Parse*,Token*); | ||
1638 | void sqlite3AddNotNull(Parse*, int); | ||
1639 | void sqlite3AddPrimaryKey(Parse*, ExprList*, int, int, int); | ||
1640 | void sqlite3AddCheckConstraint(Parse*, Expr*); | ||
1641 | void sqlite3AddColumnType(Parse*,Token*); | ||
1642 | void sqlite3AddDefaultValue(Parse*,Expr*); | ||
1643 | void sqlite3AddCollateType(Parse*, const char*, int); | ||
1644 | void sqlite3EndTable(Parse*,Token*,Token*,Select*); | ||
1645 | |||
1646 | void sqlite3CreateView(Parse*,Token*,Token*,Token*,Select*,int,int); | ||
1647 | |||
1648 | #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) | ||
1649 | int sqlite3ViewGetColumnNames(Parse*,Table*); | ||
1650 | #else | ||
1651 | # define sqlite3ViewGetColumnNames(A,B) 0 | ||
1652 | #endif | ||
1653 | |||
1654 | void sqlite3DropTable(Parse*, SrcList*, int, int); | ||
1655 | void sqlite3DeleteTable(Table*); | ||
1656 | void sqlite3Insert(Parse*, SrcList*, ExprList*, Select*, IdList*, int); | ||
1657 | void *sqlite3ArrayAllocate(sqlite3*,void*,int,int,int*,int*,int*); | ||
1658 | IdList *sqlite3IdListAppend(sqlite3*, IdList*, Token*); | ||
1659 | int sqlite3IdListIndex(IdList*,const char*); | ||
1660 | SrcList *sqlite3SrcListAppend(sqlite3*, SrcList*, Token*, Token*); | ||
1661 | SrcList *sqlite3SrcListAppendFromTerm(Parse*, SrcList*, Token*, Token*, Token*, | ||
1662 | Select*, Expr*, IdList*); | ||
1663 | void sqlite3SrcListShiftJoinType(SrcList*); | ||
1664 | void sqlite3SrcListAssignCursors(Parse*, SrcList*); | ||
1665 | void sqlite3IdListDelete(IdList*); | ||
1666 | void sqlite3SrcListDelete(SrcList*); | ||
1667 | void sqlite3CreateIndex(Parse*,Token*,Token*,SrcList*,ExprList*,int,Token*, | ||
1668 | Token*, int, int); | ||
1669 | void sqlite3DropIndex(Parse*, SrcList*, int); | ||
1670 | int sqlite3Select(Parse*, Select*, int, int, Select*, int, int*, char *aff); | ||
1671 | Select *sqlite3SelectNew(Parse*,ExprList*,SrcList*,Expr*,ExprList*, | ||
1672 | Expr*,ExprList*,int,Expr*,Expr*); | ||
1673 | void sqlite3SelectDelete(Select*); | ||
1674 | Table *sqlite3SrcListLookup(Parse*, SrcList*); | ||
1675 | int sqlite3IsReadOnly(Parse*, Table*, int); | ||
1676 | void sqlite3OpenTable(Parse*, int iCur, int iDb, Table*, int); | ||
1677 | void sqlite3DeleteFrom(Parse*, SrcList*, Expr*); | ||
1678 | void sqlite3Update(Parse*, SrcList*, ExprList*, Expr*, int); | ||
1679 | WhereInfo *sqlite3WhereBegin(Parse*, SrcList*, Expr*, ExprList**); | ||
1680 | void sqlite3WhereEnd(WhereInfo*); | ||
1681 | void sqlite3ExprCodeGetColumn(Vdbe*, Table*, int, int); | ||
1682 | void sqlite3ExprCode(Parse*, Expr*); | ||
1683 | void sqlite3ExprCodeAndCache(Parse*, Expr*); | ||
1684 | int sqlite3ExprCodeExprList(Parse*, ExprList*); | ||
1685 | void sqlite3ExprIfTrue(Parse*, Expr*, int, int); | ||
1686 | void sqlite3ExprIfFalse(Parse*, Expr*, int, int); | ||
1687 | Table *sqlite3FindTable(sqlite3*,const char*, const char*); | ||
1688 | Table *sqlite3LocateTable(Parse*,const char*, const char*); | ||
1689 | Index *sqlite3FindIndex(sqlite3*,const char*, const char*); | ||
1690 | void sqlite3UnlinkAndDeleteTable(sqlite3*,int,const char*); | ||
1691 | void sqlite3UnlinkAndDeleteIndex(sqlite3*,int,const char*); | ||
1692 | void sqlite3Vacuum(Parse*); | ||
1693 | int sqlite3RunVacuum(char**, sqlite3*); | ||
1694 | char *sqlite3NameFromToken(sqlite3*, Token*); | ||
1695 | int sqlite3ExprCompare(Expr*, Expr*); | ||
1696 | int sqlite3ExprResolveNames(NameContext *, Expr *); | ||
1697 | int sqlite3ExprAnalyzeAggregates(NameContext*, Expr*); | ||
1698 | int sqlite3ExprAnalyzeAggList(NameContext*,ExprList*); | ||
1699 | Vdbe *sqlite3GetVdbe(Parse*); | ||
1700 | Expr *sqlite3CreateIdExpr(Parse *, const char*); | ||
1701 | void sqlite3Randomness(int, void*); | ||
1702 | void sqlite3RollbackAll(sqlite3*); | ||
1703 | void sqlite3CodeVerifySchema(Parse*, int); | ||
1704 | void sqlite3BeginTransaction(Parse*, int); | ||
1705 | void sqlite3CommitTransaction(Parse*); | ||
1706 | void sqlite3RollbackTransaction(Parse*); | ||
1707 | int sqlite3ExprIsConstant(Expr*); | ||
1708 | int sqlite3ExprIsConstantNotJoin(Expr*); | ||
1709 | int sqlite3ExprIsConstantOrFunction(Expr*); | ||
1710 | int sqlite3ExprIsInteger(Expr*, int*); | ||
1711 | int sqlite3IsRowid(const char*); | ||
1712 | void sqlite3GenerateRowDelete(sqlite3*, Vdbe*, Table*, int, int); | ||
1713 | void sqlite3GenerateRowIndexDelete(Vdbe*, Table*, int, char*); | ||
1714 | void sqlite3GenerateIndexKey(Vdbe*, Index*, int); | ||
1715 | void sqlite3GenerateConstraintChecks(Parse*,Table*,int,char*,int,int,int,int); | ||
1716 | void sqlite3CompleteInsertion(Parse*, Table*, int, char*, int, int, int, int); | ||
1717 | void sqlite3OpenTableAndIndices(Parse*, Table*, int, int); | ||
1718 | void sqlite3BeginWriteOperation(Parse*, int, int); | ||
1719 | Expr *sqlite3ExprDup(sqlite3*,Expr*); | ||
1720 | void sqlite3TokenCopy(sqlite3*,Token*, Token*); | ||
1721 | ExprList *sqlite3ExprListDup(sqlite3*,ExprList*); | ||
1722 | SrcList *sqlite3SrcListDup(sqlite3*,SrcList*); | ||
1723 | IdList *sqlite3IdListDup(sqlite3*,IdList*); | ||
1724 | Select *sqlite3SelectDup(sqlite3*,Select*); | ||
1725 | FuncDef *sqlite3FindFunction(sqlite3*,const char*,int,int,u8,int); | ||
1726 | void sqlite3RegisterBuiltinFunctions(sqlite3*); | ||
1727 | void sqlite3RegisterDateTimeFunctions(sqlite3*); | ||
1728 | int sqlite3SafetyOn(sqlite3*); | ||
1729 | int sqlite3SafetyOff(sqlite3*); | ||
1730 | int sqlite3SafetyCheck(sqlite3*); | ||
1731 | void sqlite3ChangeCookie(sqlite3*, Vdbe*, int); | ||
1732 | |||
1733 | #ifndef SQLITE_OMIT_TRIGGER | ||
1734 | void sqlite3BeginTrigger(Parse*, Token*,Token*,int,int,IdList*,SrcList*, | ||
1735 | Expr*,int, int); | ||
1736 | void sqlite3FinishTrigger(Parse*, TriggerStep*, Token*); | ||
1737 | void sqlite3DropTrigger(Parse*, SrcList*, int); | ||
1738 | void sqlite3DropTriggerPtr(Parse*, Trigger*); | ||
1739 | int sqlite3TriggersExist(Parse*, Table*, int, ExprList*); | ||
1740 | int sqlite3CodeRowTrigger(Parse*, int, ExprList*, int, Table *, int, int, | ||
1741 | int, int); | ||
1742 | void sqliteViewTriggers(Parse*, Table*, Expr*, int, ExprList*); | ||
1743 | void sqlite3DeleteTriggerStep(TriggerStep*); | ||
1744 | TriggerStep *sqlite3TriggerSelectStep(sqlite3*,Select*); | ||
1745 | TriggerStep *sqlite3TriggerInsertStep(sqlite3*,Token*, IdList*, | ||
1746 | ExprList*,Select*,int); | ||
1747 | TriggerStep *sqlite3TriggerUpdateStep(sqlite3*,Token*,ExprList*, Expr*, int); | ||
1748 | TriggerStep *sqlite3TriggerDeleteStep(sqlite3*,Token*, Expr*); | ||
1749 | void sqlite3DeleteTrigger(Trigger*); | ||
1750 | void sqlite3UnlinkAndDeleteTrigger(sqlite3*,int,const char*); | ||
1751 | #else | ||
1752 | # define sqlite3TriggersExist(A,B,C,D,E,F) 0 | ||
1753 | # define sqlite3DeleteTrigger(A) | ||
1754 | # define sqlite3DropTriggerPtr(A,B) | ||
1755 | # define sqlite3UnlinkAndDeleteTrigger(A,B,C) | ||
1756 | # define sqlite3CodeRowTrigger(A,B,C,D,E,F,G,H,I) 0 | ||
1757 | #endif | ||
1758 | |||
1759 | int sqlite3JoinType(Parse*, Token*, Token*, Token*); | ||
1760 | void sqlite3CreateForeignKey(Parse*, ExprList*, Token*, ExprList*, int); | ||
1761 | void sqlite3DeferForeignKey(Parse*, int); | ||
1762 | #ifndef SQLITE_OMIT_AUTHORIZATION | ||
1763 | void sqlite3AuthRead(Parse*,Expr*,Schema*,SrcList*); | ||
1764 | int sqlite3AuthCheck(Parse*,int, const char*, const char*, const char*); | ||
1765 | void sqlite3AuthContextPush(Parse*, AuthContext*, const char*); | ||
1766 | void sqlite3AuthContextPop(AuthContext*); | ||
1767 | #else | ||
1768 | # define sqlite3AuthRead(a,b,c) | ||
1769 | # define sqlite3AuthCheck(a,b,c,d,e) SQLITE_OK | ||
1770 | # define sqlite3AuthContextPush(a,b,c) | ||
1771 | # define sqlite3AuthContextPop(a) ((void)(a)) | ||
1772 | #endif | ||
1773 | void sqlite3Attach(Parse*, Expr*, Expr*, Expr*); | ||
1774 | void sqlite3Detach(Parse*, Expr*); | ||
1775 | int sqlite3BtreeFactory(const sqlite3 *db, const char *zFilename, | ||
1776 | int omitJournal, int nCache, int flags, Btree **ppBtree); | ||
1777 | int sqlite3FixInit(DbFixer*, Parse*, int, const char*, const Token*); | ||
1778 | int sqlite3FixSrcList(DbFixer*, SrcList*); | ||
1779 | int sqlite3FixSelect(DbFixer*, Select*); | ||
1780 | int sqlite3FixExpr(DbFixer*, Expr*); | ||
1781 | int sqlite3FixExprList(DbFixer*, ExprList*); | ||
1782 | int sqlite3FixTriggerStep(DbFixer*, TriggerStep*); | ||
1783 | int sqlite3AtoF(const char *z, double*); | ||
1784 | char *sqlite3_snprintf(int,char*,const char*,...); | ||
1785 | int sqlite3GetInt32(const char *, int*); | ||
1786 | int sqlite3FitsIn64Bits(const char *); | ||
1787 | int sqlite3Utf16ByteLen(const void *pData, int nChar); | ||
1788 | int sqlite3Utf8CharLen(const char *pData, int nByte); | ||
1789 | int sqlite3Utf8Read(const u8*, const u8*, const u8**); | ||
1790 | int sqlite3PutVarint(unsigned char *, u64); | ||
1791 | int sqlite3GetVarint(const unsigned char *, u64 *); | ||
1792 | int sqlite3GetVarint32(const unsigned char *, u32 *); | ||
1793 | int sqlite3VarintLen(u64 v); | ||
1794 | void sqlite3IndexAffinityStr(Vdbe *, Index *); | ||
1795 | void sqlite3TableAffinityStr(Vdbe *, Table *); | ||
1796 | char sqlite3CompareAffinity(Expr *pExpr, char aff2); | ||
1797 | int sqlite3IndexAffinityOk(Expr *pExpr, char idx_affinity); | ||
1798 | char sqlite3ExprAffinity(Expr *pExpr); | ||
1799 | int sqlite3Atoi64(const char*, i64*); | ||
1800 | void sqlite3Error(sqlite3*, int, const char*,...); | ||
1801 | void *sqlite3HexToBlob(sqlite3*, const char *z); | ||
1802 | int sqlite3TwoPartName(Parse *, Token *, Token *, Token **); | ||
1803 | const char *sqlite3ErrStr(int); | ||
1804 | int sqlite3ReadSchema(Parse *pParse); | ||
1805 | CollSeq *sqlite3FindCollSeq(sqlite3*,u8 enc, const char *,int,int); | ||
1806 | CollSeq *sqlite3LocateCollSeq(Parse *pParse, const char *zName, int nName); | ||
1807 | CollSeq *sqlite3ExprCollSeq(Parse *pParse, Expr *pExpr); | ||
1808 | Expr *sqlite3ExprSetColl(Parse *pParse, Expr *, Token *); | ||
1809 | int sqlite3CheckCollSeq(Parse *, CollSeq *); | ||
1810 | int sqlite3CheckObjectName(Parse *, const char *); | ||
1811 | void sqlite3VdbeSetChanges(sqlite3 *, int); | ||
1812 | |||
1813 | const void *sqlite3ValueText(sqlite3_value*, u8); | ||
1814 | int sqlite3ValueBytes(sqlite3_value*, u8); | ||
1815 | void sqlite3ValueSetStr(sqlite3_value*, int, const void *,u8, | ||
1816 | void(*)(void*)); | ||
1817 | void sqlite3ValueFree(sqlite3_value*); | ||
1818 | sqlite3_value *sqlite3ValueNew(sqlite3 *); | ||
1819 | char *sqlite3Utf16to8(sqlite3 *, const void*, int); | ||
1820 | int sqlite3ValueFromExpr(sqlite3 *, Expr *, u8, u8, sqlite3_value **); | ||
1821 | void sqlite3ValueApplyAffinity(sqlite3_value *, u8, u8); | ||
1822 | #ifndef SQLITE_AMALGAMATION | ||
1823 | extern const unsigned char sqlite3UpperToLower[]; | ||
1824 | #endif | ||
1825 | void sqlite3RootPageMoved(Db*, int, int); | ||
1826 | void sqlite3Reindex(Parse*, Token*, Token*); | ||
1827 | void sqlite3AlterFunctions(sqlite3*); | ||
1828 | void sqlite3AlterRenameTable(Parse*, SrcList*, Token*); | ||
1829 | int sqlite3GetToken(const unsigned char *, int *); | ||
1830 | void sqlite3NestedParse(Parse*, const char*, ...); | ||
1831 | void sqlite3ExpirePreparedStatements(sqlite3*); | ||
1832 | void sqlite3CodeSubselect(Parse *, Expr *); | ||
1833 | int sqlite3SelectResolve(Parse *, Select *, NameContext *); | ||
1834 | void sqlite3ColumnDefault(Vdbe *, Table *, int); | ||
1835 | void sqlite3AlterFinishAddColumn(Parse *, Token *); | ||
1836 | void sqlite3AlterBeginAddColumn(Parse *, SrcList *); | ||
1837 | CollSeq *sqlite3GetCollSeq(sqlite3*, CollSeq *, const char *, int); | ||
1838 | char sqlite3AffinityType(const Token*); | ||
1839 | void sqlite3Analyze(Parse*, Token*, Token*); | ||
1840 | int sqlite3InvokeBusyHandler(BusyHandler*); | ||
1841 | int sqlite3FindDb(sqlite3*, Token*); | ||
1842 | int sqlite3AnalysisLoad(sqlite3*,int iDB); | ||
1843 | void sqlite3DefaultRowEst(Index*); | ||
1844 | void sqlite3RegisterLikeFunctions(sqlite3*, int); | ||
1845 | int sqlite3IsLikeFunction(sqlite3*,Expr*,int*,char*); | ||
1846 | void sqlite3AttachFunctions(sqlite3 *); | ||
1847 | void sqlite3MinimumFileFormat(Parse*, int, int); | ||
1848 | void sqlite3SchemaFree(void *); | ||
1849 | Schema *sqlite3SchemaGet(sqlite3 *, Btree *); | ||
1850 | int sqlite3SchemaToIndex(sqlite3 *db, Schema *); | ||
1851 | KeyInfo *sqlite3IndexKeyinfo(Parse *, Index *); | ||
1852 | int sqlite3CreateFunc(sqlite3 *, const char *, int, int, void *, | ||
1853 | void (*)(sqlite3_context*,int,sqlite3_value **), | ||
1854 | void (*)(sqlite3_context*,int,sqlite3_value **), void (*)(sqlite3_context*)); | ||
1855 | int sqlite3ApiExit(sqlite3 *db, int); | ||
1856 | void sqlite3AbortOtherActiveVdbes(sqlite3 *, Vdbe *); | ||
1857 | int sqlite3OpenTempDatabase(Parse *); | ||
1858 | |||
1859 | |||
1860 | /* | ||
1861 | ** The interface to the LEMON-generated parser | ||
1862 | */ | ||
1863 | void *sqlite3ParserAlloc(void*(*)(size_t)); | ||
1864 | void sqlite3ParserFree(void*, void(*)(void*)); | ||
1865 | void sqlite3Parser(void*, int, Token, Parse*); | ||
1866 | |||
1867 | #ifndef SQLITE_OMIT_LOAD_EXTENSION | ||
1868 | void sqlite3CloseExtensions(sqlite3*); | ||
1869 | int sqlite3AutoLoadExtensions(sqlite3*); | ||
1870 | #else | ||
1871 | # define sqlite3CloseExtensions(X) | ||
1872 | # define sqlite3AutoLoadExtensions(X) SQLITE_OK | ||
1873 | #endif | ||
1874 | |||
1875 | #ifndef SQLITE_OMIT_SHARED_CACHE | ||
1876 | void sqlite3TableLock(Parse *, int, int, u8, const char *); | ||
1877 | #else | ||
1878 | #define sqlite3TableLock(v,w,x,y,z) | ||
1879 | #endif | ||
1880 | |||
1881 | #ifdef SQLITE_TEST | ||
1882 | int sqlite3Utf8To8(unsigned char*); | ||
1883 | #endif | ||
1884 | |||
1885 | /* | ||
1886 | ** The MallocDisallow() and MallocAllow() routines are like asserts. | ||
1887 | ** Call them around a section of code that you do not expect to do | ||
1888 | ** any memory allocation. | ||
1889 | */ | ||
1890 | #ifdef SQLITE_MEMDEBUG | ||
1891 | void sqlite3MallocDisallow(void); | ||
1892 | void sqlite3MallocAllow(void); | ||
1893 | void sqlite3MallocBenignFailure(int); | ||
1894 | void sqlite3MallocEnterBenignBlock(int isBenign); | ||
1895 | void sqlite3MallocLeaveBenignBlock(); | ||
1896 | #else | ||
1897 | # define sqlite3MallocDisallow() | ||
1898 | # define sqlite3MallocAllow() | ||
1899 | # define sqlite3MallocBenignFailure(x) | ||
1900 | # define sqlite3MallocEnterBenignBlock(x); | ||
1901 | # define sqlite3MallocLeaveBenignBlock(); | ||
1902 | #endif | ||
1903 | |||
1904 | |||
1905 | #ifdef SQLITE_OMIT_VIRTUALTABLE | ||
1906 | # define sqlite3VtabClear(X) | ||
1907 | # define sqlite3VtabSync(X,Y) (Y) | ||
1908 | # define sqlite3VtabRollback(X) | ||
1909 | # define sqlite3VtabCommit(X) | ||
1910 | #else | ||
1911 | void sqlite3VtabClear(Table*); | ||
1912 | int sqlite3VtabSync(sqlite3 *db, int rc); | ||
1913 | int sqlite3VtabRollback(sqlite3 *db); | ||
1914 | int sqlite3VtabCommit(sqlite3 *db); | ||
1915 | #endif | ||
1916 | void sqlite3VtabLock(sqlite3_vtab*); | ||
1917 | void sqlite3VtabUnlock(sqlite3*, sqlite3_vtab*); | ||
1918 | void sqlite3VtabBeginParse(Parse*, Token*, Token*, Token*); | ||
1919 | void sqlite3VtabFinishParse(Parse*, Token*); | ||
1920 | void sqlite3VtabArgInit(Parse*); | ||
1921 | void sqlite3VtabArgExtend(Parse*, Token*); | ||
1922 | int sqlite3VtabCallCreate(sqlite3*, int, const char *, char **); | ||
1923 | int sqlite3VtabCallConnect(Parse*, Table*); | ||
1924 | int sqlite3VtabCallDestroy(sqlite3*, int, const char *); | ||
1925 | int sqlite3VtabBegin(sqlite3 *, sqlite3_vtab *); | ||
1926 | FuncDef *sqlite3VtabOverloadFunction(sqlite3 *,FuncDef*, int nArg, Expr*); | ||
1927 | void sqlite3InvalidFunction(sqlite3_context*,int,sqlite3_value**); | ||
1928 | int sqlite3Reprepare(Vdbe*); | ||
1929 | void sqlite3ExprListCheckLength(Parse*, ExprList*, int, const char*); | ||
1930 | CollSeq *sqlite3BinaryCompareCollSeq(Parse *, Expr *, Expr *); | ||
1931 | |||
1932 | #ifdef SQLITE_ENABLE_ATOMIC_WRITE | ||
1933 | int sqlite3JournalOpen(sqlite3_vfs *, const char *, sqlite3_file *, int, int); | ||
1934 | int sqlite3JournalSize(sqlite3_vfs *); | ||
1935 | int sqlite3JournalCreate(sqlite3_file *); | ||
1936 | #else | ||
1937 | #define sqlite3JournalSize(pVfs) ((pVfs)->szOsFile) | ||
1938 | #endif | ||
1939 | |||
1940 | #if defined(SQLITE_TEST) || SQLITE_MAX_EXPR_DEPTH>0 | ||
1941 | void sqlite3ExprSetHeight(Expr *); | ||
1942 | int sqlite3SelectExprHeight(Select *); | ||
1943 | #else | ||
1944 | #define sqlite3ExprSetHeight(x) | ||
1945 | #endif | ||
1946 | |||
1947 | u32 sqlite3Get4byte(const u8*); | ||
1948 | void sqlite3Put4byte(u8*, u32); | ||
1949 | |||
1950 | #ifdef SQLITE_SSE | ||
1951 | #include "sseInt.h" | ||
1952 | #endif | ||
1953 | |||
1954 | #ifdef SQLITE_DEBUG | ||
1955 | void sqlite3ParserTrace(FILE*, char *); | ||
1956 | #endif | ||
1957 | |||
1958 | /* | ||
1959 | ** If the SQLITE_ENABLE IOTRACE exists then the global variable | ||
1960 | ** sqlite3_io_trace is a pointer to a printf-like routine used to | ||
1961 | ** print I/O tracing messages. | ||
1962 | */ | ||
1963 | #ifdef SQLITE_ENABLE_IOTRACE | ||
1964 | # define IOTRACE(A) if( sqlite3_io_trace ){ sqlite3_io_trace A; } | ||
1965 | void sqlite3VdbeIOTraceSql(Vdbe*); | ||
1966 | #else | ||
1967 | # define IOTRACE(A) | ||
1968 | # define sqlite3VdbeIOTraceSql(X) | ||
1969 | #endif | ||
1970 | SQLITE_EXTERN void (*sqlite3_io_trace)(const char*,...); | ||
1971 | |||
1972 | #endif | ||