OLD | NEW |
1 /* | 1 /* |
2 ** 2008 June 13 | 2 ** 2008 June 13 |
3 ** | 3 ** |
4 ** The author disclaims copyright to this source code. In place of | 4 ** The author disclaims copyright to this source code. In place of |
5 ** a legal notice, here is a blessing: | 5 ** a legal notice, here is a blessing: |
6 ** | 6 ** |
7 ** May you do good and not evil. | 7 ** May you do good and not evil. |
8 ** May you find forgiveness for yourself and forgive others. | 8 ** May you find forgiveness for yourself and forgive others. |
9 ** May you share freely, never taking more than you give. | 9 ** May you share freely, never taking more than you give. |
10 ** | 10 ** |
11 ************************************************************************* | 11 ************************************************************************* |
12 ** | 12 ** |
13 ** This file contains definitions of global variables and contants. | 13 ** This file contains definitions of global variables and contants. |
14 */ | 14 */ |
15 #include "sqliteInt.h" | 15 #include "sqliteInt.h" |
16 | 16 |
17 | |
18 /* An array to map all upper-case characters into their corresponding | 17 /* An array to map all upper-case characters into their corresponding |
19 ** lower-case character. | 18 ** lower-case character. |
20 ** | 19 ** |
21 ** SQLite only considers US-ASCII (or EBCDIC) characters. We do not | 20 ** SQLite only considers US-ASCII (or EBCDIC) characters. We do not |
22 ** handle case conversions for the UTF character set since the tables | 21 ** handle case conversions for the UTF character set since the tables |
23 ** involved are nearly as big or bigger than SQLite itself. | 22 ** involved are nearly as big or bigger than SQLite itself. |
24 */ | 23 */ |
25 const unsigned char sqlite3UpperToLower[] = { | 24 const unsigned char sqlite3UpperToLower[] = { |
26 #ifdef SQLITE_ASCII | 25 #ifdef SQLITE_ASCII |
27 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, | 26 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
63 /* | 62 /* |
64 ** The following 256 byte lookup table is used to support SQLites built-in | 63 ** The following 256 byte lookup table is used to support SQLites built-in |
65 ** equivalents to the following standard library functions: | 64 ** equivalents to the following standard library functions: |
66 ** | 65 ** |
67 ** isspace() 0x01 | 66 ** isspace() 0x01 |
68 ** isalpha() 0x02 | 67 ** isalpha() 0x02 |
69 ** isdigit() 0x04 | 68 ** isdigit() 0x04 |
70 ** isalnum() 0x06 | 69 ** isalnum() 0x06 |
71 ** isxdigit() 0x08 | 70 ** isxdigit() 0x08 |
72 ** toupper() 0x20 | 71 ** toupper() 0x20 |
| 72 ** SQLite identifier character 0x40 |
73 ** | 73 ** |
74 ** Bit 0x20 is set if the mapped character requires translation to upper | 74 ** Bit 0x20 is set if the mapped character requires translation to upper |
75 ** case. i.e. if the character is a lower-case ASCII character. | 75 ** case. i.e. if the character is a lower-case ASCII character. |
76 ** If x is a lower-case ASCII character, then its upper-case equivalent | 76 ** If x is a lower-case ASCII character, then its upper-case equivalent |
77 ** is (x - 0x20). Therefore toupper() can be implemented as: | 77 ** is (x - 0x20). Therefore toupper() can be implemented as: |
78 ** | 78 ** |
79 ** (x & ~(map[x]&0x20)) | 79 ** (x & ~(map[x]&0x20)) |
80 ** | 80 ** |
81 ** Standard function tolower() is implemented using the sqlite3UpperToLower[] | 81 ** Standard function tolower() is implemented using the sqlite3UpperToLower[] |
82 ** array. tolower() is used more often than toupper() by SQLite. | 82 ** array. tolower() is used more often than toupper() by SQLite. |
83 ** | 83 ** |
| 84 ** Bit 0x40 is set if the character non-alphanumeric and can be used in an |
| 85 ** SQLite identifier. Identifiers are alphanumerics, "_", "$", and any |
| 86 ** non-ASCII UTF character. Hence the test for whether or not a character is |
| 87 ** part of an identifier is 0x46. |
| 88 ** |
84 ** SQLite's versions are identical to the standard versions assuming a | 89 ** SQLite's versions are identical to the standard versions assuming a |
85 ** locale of "C". They are implemented as macros in sqliteInt.h. | 90 ** locale of "C". They are implemented as macros in sqliteInt.h. |
86 */ | 91 */ |
87 #ifdef SQLITE_ASCII | 92 #ifdef SQLITE_ASCII |
88 const unsigned char sqlite3CtypeMap[256] = { | 93 const unsigned char sqlite3CtypeMap[256] = { |
89 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 00..07 ........ */ | 94 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 00..07 ........ */ |
90 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, /* 08..0f ........ */ | 95 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, /* 08..0f ........ */ |
91 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 10..17 ........ */ | 96 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 10..17 ........ */ |
92 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 18..1f ........ */ | 97 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 18..1f ........ */ |
93 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 20..27 !"#$%&' */ | 98 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, /* 20..27 !"#$%&' */ |
94 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 28..2f ()*+,-./ */ | 99 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 28..2f ()*+,-./ */ |
95 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, /* 30..37 01234567 */ | 100 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, /* 30..37 01234567 */ |
96 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 38..3f 89:;<=>? */ | 101 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 38..3f 89:;<=>? */ |
97 | 102 |
98 0x00, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x02, /* 40..47 @ABCDEFG */ | 103 0x00, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x02, /* 40..47 @ABCDEFG */ |
99 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, /* 48..4f HIJKLMNO */ | 104 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, /* 48..4f HIJKLMNO */ |
100 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, /* 50..57 PQRSTUVW */ | 105 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, /* 50..57 PQRSTUVW */ |
101 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, /* 58..5f XYZ[\]^_ */ | 106 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x40, /* 58..5f XYZ[\]^_ */ |
102 0x00, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x22, /* 60..67 `abcdefg */ | 107 0x00, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x22, /* 60..67 `abcdefg */ |
103 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, /* 68..6f hijklmno */ | 108 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, /* 68..6f hijklmno */ |
104 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, /* 70..77 pqrstuvw */ | 109 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, /* 70..77 pqrstuvw */ |
105 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, /* 78..7f xyz{|}~. */ | 110 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, /* 78..7f xyz{|}~. */ |
106 | 111 |
107 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 80..87 ........ */ | 112 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* 80..87 ........ */ |
108 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 88..8f ........ */ | 113 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* 88..8f ........ */ |
109 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 90..97 ........ */ | 114 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* 90..97 ........ */ |
110 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 98..9f ........ */ | 115 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* 98..9f ........ */ |
111 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* a0..a7 ........ */ | 116 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* a0..a7 ........ */ |
112 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* a8..af ........ */ | 117 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* a8..af ........ */ |
113 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* b0..b7 ........ */ | 118 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* b0..b7 ........ */ |
114 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* b8..bf ........ */ | 119 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* b8..bf ........ */ |
115 | 120 |
116 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* c0..c7 ........ */ | 121 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* c0..c7 ........ */ |
117 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* c8..cf ........ */ | 122 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* c8..cf ........ */ |
118 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* d0..d7 ........ */ | 123 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* d0..d7 ........ */ |
119 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* d8..df ........ */ | 124 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* d8..df ........ */ |
120 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* e0..e7 ........ */ | 125 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* e0..e7 ........ */ |
121 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* e8..ef ........ */ | 126 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* e8..ef ........ */ |
122 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* f0..f7 ........ */ | 127 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* f0..f7 ........ */ |
123 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* f8..ff ........ */ | 128 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40 /* f8..ff ........ */ |
124 }; | 129 }; |
125 #endif | 130 #endif |
126 | 131 |
127 | 132 |
128 | 133 |
129 /* | 134 /* |
130 ** The following singleton contains the global configuration for | 135 ** The following singleton contains the global configuration for |
131 ** the SQLite library. | 136 ** the SQLite library. |
132 */ | 137 */ |
133 SQLITE_WSD struct Sqlite3Config sqlite3Config = { | 138 SQLITE_WSD struct Sqlite3Config sqlite3Config = { |
(...skipping 18 matching lines...) Expand all Loading... |
152 0, /* mxParserStack */ | 157 0, /* mxParserStack */ |
153 0, /* sharedCacheEnabled */ | 158 0, /* sharedCacheEnabled */ |
154 /* All the rest should always be initialized to zero */ | 159 /* All the rest should always be initialized to zero */ |
155 0, /* isInit */ | 160 0, /* isInit */ |
156 0, /* inProgress */ | 161 0, /* inProgress */ |
157 0, /* isMutexInit */ | 162 0, /* isMutexInit */ |
158 0, /* isMallocInit */ | 163 0, /* isMallocInit */ |
159 0, /* isPCacheInit */ | 164 0, /* isPCacheInit */ |
160 0, /* pInitMutex */ | 165 0, /* pInitMutex */ |
161 0, /* nRefInitMutex */ | 166 0, /* nRefInitMutex */ |
| 167 0, /* xLog */ |
| 168 0, /* pLogArg */ |
162 }; | 169 }; |
163 | 170 |
164 | 171 |
165 /* | 172 /* |
166 ** Hash table for global functions - functions common to all | 173 ** Hash table for global functions - functions common to all |
167 ** database connections. After initialization, this table is | 174 ** database connections. After initialization, this table is |
168 ** read-only. | 175 ** read-only. |
169 */ | 176 */ |
170 SQLITE_WSD FuncDefHash sqlite3GlobalFunctions; | 177 SQLITE_WSD FuncDefHash sqlite3GlobalFunctions; |
171 | 178 |
172 /* | 179 /* |
| 180 ** Constant tokens for values 0 and 1. |
| 181 */ |
| 182 const Token sqlite3IntTokens[] = { |
| 183 { "0", 1 }, |
| 184 { "1", 1 } |
| 185 }; |
| 186 |
| 187 |
| 188 /* |
173 ** The value of the "pending" byte must be 0x40000000 (1 byte past the | 189 ** The value of the "pending" byte must be 0x40000000 (1 byte past the |
174 ** 1-gibabyte boundary) in a compatible database. SQLite never uses | 190 ** 1-gibabyte boundary) in a compatible database. SQLite never uses |
175 ** the database page that contains the pending byte. It never attempts | 191 ** the database page that contains the pending byte. It never attempts |
176 ** to read or write that page. The pending byte page is set assign | 192 ** to read or write that page. The pending byte page is set assign |
177 ** for use by the VFS layers as space for managing file locks. | 193 ** for use by the VFS layers as space for managing file locks. |
178 ** | 194 ** |
179 ** During testing, it is often desirable to move the pending byte to | 195 ** During testing, it is often desirable to move the pending byte to |
180 ** a different position in the file. This allows code that has to | 196 ** a different position in the file. This allows code that has to |
181 ** deal with the pending byte to run on files that are much smaller | 197 ** deal with the pending byte to run on files that are much smaller |
182 ** than 1 GiB. The sqlite3_test_control() interface can be used to | 198 ** than 1 GiB. The sqlite3_test_control() interface can be used to |
183 ** move the pending byte. | 199 ** move the pending byte. |
184 ** | 200 ** |
185 ** IMPORTANT: Changing the pending byte to any value other than | 201 ** IMPORTANT: Changing the pending byte to any value other than |
186 ** 0x40000000 results in an incompatible database file format! | 202 ** 0x40000000 results in an incompatible database file format! |
187 ** Changing the pending byte during operating results in undefined | 203 ** Changing the pending byte during operating results in undefined |
188 ** and dileterious behavior. | 204 ** and dileterious behavior. |
189 */ | 205 */ |
| 206 #ifndef SQLITE_OMIT_WSD |
190 int sqlite3PendingByte = 0x40000000; | 207 int sqlite3PendingByte = 0x40000000; |
| 208 #endif |
| 209 |
| 210 #include "opcodes.h" |
| 211 /* |
| 212 ** Properties of opcodes. The OPFLG_INITIALIZER macro is |
| 213 ** created by mkopcodeh.awk during compilation. Data is obtained |
| 214 ** from the comments following the "case OP_xxxx:" statements in |
| 215 ** the vdbe.c file. |
| 216 */ |
| 217 const unsigned char sqlite3OpcodeProperty[] = OPFLG_INITIALIZER; |
OLD | NEW |