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