1 | /***** This file contains automatically generated code ****** |
2 | ** |
3 | ** The code in this file has been automatically generated by |
4 | ** |
5 | ** sqlite/tool/mkkeywordhash.c |
6 | ** |
7 | ** The code in this file implements a function that determines whether |
8 | ** or not a given identifier is really an SQL keyword. The same thing |
9 | ** might be implemented more directly using a hand-written hash table. |
10 | ** But by using this automatically generated code, the size of the code |
11 | ** is substantially reduced. This is important for embedded applications |
12 | ** on platforms with limited memory. |
13 | */ |
14 | /* Hash score: 231 */ |
15 | /* zKWText[] encodes 1007 bytes of keyword text in 667 bytes */ |
16 | /* REINDEXEDESCAPEACHECKEYBEFOREIGNOREGEXPLAINSTEADDATABASELECT */ |
17 | /* ABLEFTHENDEFERRABLELSEXCLUDELETEMPORARYISNULLSAVEPOINTERSECT */ |
18 | /* IESNOTNULLIKEXCEPTRANSACTIONATURALTERAISEXCLUSIVEXISTS */ |
19 | /* CONSTRAINTOFFSETRIGGERANGENERATEDETACHAVINGLOBEGINNEREFERENCES */ |
20 | /* UNIQUERYWITHOUTERELEASEATTACHBETWEENOTHINGROUPSCASCADEFAULT */ |
21 | /* CASECOLLATECREATECURRENT_DATEIMMEDIATEJOINSERTMATCHPLANALYZE */ |
22 | /* PRAGMATERIALIZEDEFERREDISTINCTUPDATEVALUESVIRTUALWAYSWHENWHERE */ |
23 | /* CURSIVEABORTAFTERENAMEANDROPARTITIONAUTOINCREMENTCASTCOLUMN */ |
24 | /* COMMITCONFLICTCROSSCURRENT_TIMESTAMPRECEDINGFAILASTFILTER */ |
25 | /* EPLACEFIRSTFOLLOWINGFROMFULLIMITIFORDERESTRICTOTHERSOVER */ |
26 | /* ETURNINGRIGHTROLLBACKROWSUNBOUNDEDUNIONUSINGVACUUMVIEWINDOWBY */ |
27 | /* INITIALLYPRIMARY */ |
28 | static const char zKWText[666] = { |
29 | 'R','E','I','N','D','E','X','E','D','E','S','C','A','P','E','A','C','H', |
30 | 'E','C','K','E','Y','B','E','F','O','R','E','I','G','N','O','R','E','G', |
31 | 'E','X','P','L','A','I','N','S','T','E','A','D','D','A','T','A','B','A', |
32 | 'S','E','L','E','C','T','A','B','L','E','F','T','H','E','N','D','E','F', |
33 | 'E','R','R','A','B','L','E','L','S','E','X','C','L','U','D','E','L','E', |
34 | 'T','E','M','P','O','R','A','R','Y','I','S','N','U','L','L','S','A','V', |
35 | 'E','P','O','I','N','T','E','R','S','E','C','T','I','E','S','N','O','T', |
36 | 'N','U','L','L','I','K','E','X','C','E','P','T','R','A','N','S','A','C', |
37 | 'T','I','O','N','A','T','U','R','A','L','T','E','R','A','I','S','E','X', |
38 | 'C','L','U','S','I','V','E','X','I','S','T','S','C','O','N','S','T','R', |
39 | 'A','I','N','T','O','F','F','S','E','T','R','I','G','G','E','R','A','N', |
40 | 'G','E','N','E','R','A','T','E','D','E','T','A','C','H','A','V','I','N', |
41 | 'G','L','O','B','E','G','I','N','N','E','R','E','F','E','R','E','N','C', |
42 | 'E','S','U','N','I','Q','U','E','R','Y','W','I','T','H','O','U','T','E', |
43 | 'R','E','L','E','A','S','E','A','T','T','A','C','H','B','E','T','W','E', |
44 | 'E','N','O','T','H','I','N','G','R','O','U','P','S','C','A','S','C','A', |
45 | 'D','E','F','A','U','L','T','C','A','S','E','C','O','L','L','A','T','E', |
46 | 'C','R','E','A','T','E','C','U','R','R','E','N','T','_','D','A','T','E', |
47 | 'I','M','M','E','D','I','A','T','E','J','O','I','N','S','E','R','T','M', |
48 | 'A','T','C','H','P','L','A','N','A','L','Y','Z','E','P','R','A','G','M', |
49 | 'A','T','E','R','I','A','L','I','Z','E','D','E','F','E','R','R','E','D', |
50 | 'I','S','T','I','N','C','T','U','P','D','A','T','E','V','A','L','U','E', |
51 | 'S','V','I','R','T','U','A','L','W','A','Y','S','W','H','E','N','W','H', |
52 | 'E','R','E','C','U','R','S','I','V','E','A','B','O','R','T','A','F','T', |
53 | 'E','R','E','N','A','M','E','A','N','D','R','O','P','A','R','T','I','T', |
54 | 'I','O','N','A','U','T','O','I','N','C','R','E','M','E','N','T','C','A', |
55 | 'S','T','C','O','L','U','M','N','C','O','M','M','I','T','C','O','N','F', |
56 | 'L','I','C','T','C','R','O','S','S','C','U','R','R','E','N','T','_','T', |
57 | 'I','M','E','S','T','A','M','P','R','E','C','E','D','I','N','G','F','A', |
58 | 'I','L','A','S','T','F','I','L','T','E','R','E','P','L','A','C','E','F', |
59 | 'I','R','S','T','F','O','L','L','O','W','I','N','G','F','R','O','M','F', |
60 | 'U','L','L','I','M','I','T','I','F','O','R','D','E','R','E','S','T','R', |
61 | 'I','C','T','O','T','H','E','R','S','O','V','E','R','E','T','U','R','N', |
62 | 'I','N','G','R','I','G','H','T','R','O','L','L','B','A','C','K','R','O', |
63 | 'W','S','U','N','B','O','U','N','D','E','D','U','N','I','O','N','U','S', |
64 | 'I','N','G','V','A','C','U','U','M','V','I','E','W','I','N','D','O','W', |
65 | 'B','Y','I','N','I','T','I','A','L','L','Y','P','R','I','M','A','R','Y', |
66 | }; |
67 | /* aKWHash[i] is the hash value for the i-th keyword */ |
68 | static const unsigned char aKWHash[127] = { |
69 | 84, 92, 134, 82, 105, 29, 0, 0, 94, 0, 85, 72, 0, |
70 | 53, 35, 86, 15, 0, 42, 97, 54, 89, 135, 19, 0, 0, |
71 | 140, 0, 40, 129, 0, 22, 107, 0, 9, 0, 0, 123, 80, |
72 | 0, 78, 6, 0, 65, 103, 147, 0, 136, 115, 0, 0, 48, |
73 | 0, 90, 24, 0, 17, 0, 27, 70, 23, 26, 5, 60, 142, |
74 | 110, 122, 0, 73, 91, 71, 145, 61, 120, 74, 0, 49, 0, |
75 | 11, 41, 0, 113, 0, 0, 0, 109, 10, 111, 116, 125, 14, |
76 | 50, 124, 0, 100, 0, 18, 121, 144, 56, 130, 139, 88, 83, |
77 | 37, 30, 126, 0, 0, 108, 51, 131, 128, 0, 34, 0, 0, |
78 | 132, 0, 98, 38, 39, 0, 20, 45, 117, 93, |
79 | }; |
80 | /* aKWNext[] forms the hash collision chain. If aKWHash[i]==0 |
81 | ** then the i-th keyword has no more hash collisions. Otherwise, |
82 | ** the next keyword with the same hash is aKWHash[i]-1. */ |
83 | static const unsigned char aKWNext[147] = { |
84 | 0, 0, 0, 0, 4, 0, 43, 0, 0, 106, 114, 0, 0, |
85 | 0, 2, 0, 0, 143, 0, 0, 0, 13, 0, 0, 0, 0, |
86 | 141, 0, 0, 119, 52, 0, 0, 137, 12, 0, 0, 62, 0, |
87 | 138, 0, 133, 0, 0, 36, 0, 0, 28, 77, 0, 0, 0, |
88 | 0, 59, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
89 | 0, 69, 0, 0, 0, 0, 0, 146, 3, 0, 58, 0, 1, |
90 | 75, 0, 0, 0, 31, 0, 0, 0, 0, 0, 127, 0, 104, |
91 | 0, 64, 66, 63, 0, 0, 0, 0, 0, 46, 0, 16, 8, |
92 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 101, 0, |
93 | 112, 21, 7, 67, 0, 79, 96, 118, 0, 0, 68, 0, 0, |
94 | 99, 44, 0, 55, 0, 76, 0, 95, 32, 33, 57, 25, 0, |
95 | 102, 0, 0, 87, |
96 | }; |
97 | /* aKWLen[i] is the length (in bytes) of the i-th keyword */ |
98 | static const unsigned char aKWLen[147] = { |
99 | 7, 7, 5, 4, 6, 4, 5, 3, 6, 7, 3, 6, 6, |
100 | 7, 7, 3, 8, 2, 6, 5, 4, 4, 3, 10, 4, 7, |
101 | 6, 9, 4, 2, 6, 5, 9, 9, 4, 7, 3, 2, 4, |
102 | 4, 6, 11, 6, 2, 7, 5, 5, 9, 6, 10, 4, 6, |
103 | 2, 3, 7, 5, 9, 6, 6, 4, 5, 5, 10, 6, 5, |
104 | 7, 4, 5, 7, 6, 7, 7, 6, 5, 7, 3, 7, 4, |
105 | 7, 6, 12, 9, 4, 6, 5, 4, 7, 6, 12, 8, 8, |
106 | 2, 6, 6, 7, 6, 4, 5, 9, 5, 5, 6, 3, 4, |
107 | 9, 13, 2, 2, 4, 6, 6, 8, 5, 17, 12, 7, 9, |
108 | 4, 4, 6, 7, 5, 9, 4, 4, 5, 2, 5, 8, 6, |
109 | 4, 9, 5, 8, 4, 3, 9, 5, 5, 6, 4, 6, 2, |
110 | 2, 9, 3, 7, |
111 | }; |
112 | /* aKWOffset[i] is the index into zKWText[] of the start of |
113 | ** the text for the i-th keyword. */ |
114 | static const unsigned short int aKWOffset[147] = { |
115 | 0, 2, 2, 8, 9, 14, 16, 20, 23, 25, 25, 29, 33, |
116 | 36, 41, 46, 48, 53, 54, 59, 62, 65, 67, 69, 78, 81, |
117 | 86, 90, 90, 94, 99, 101, 105, 111, 119, 123, 123, 123, 126, |
118 | 129, 132, 137, 142, 146, 147, 152, 156, 160, 168, 174, 181, 184, |
119 | 184, 187, 189, 195, 198, 206, 211, 216, 219, 222, 226, 236, 239, |
120 | 244, 244, 248, 252, 259, 265, 271, 277, 277, 283, 284, 288, 295, |
121 | 299, 306, 312, 324, 333, 335, 341, 346, 348, 355, 359, 370, 377, |
122 | 378, 385, 391, 397, 402, 408, 412, 415, 424, 429, 433, 439, 441, |
123 | 444, 453, 455, 457, 466, 470, 476, 482, 490, 495, 495, 495, 511, |
124 | 520, 523, 527, 532, 539, 544, 553, 557, 560, 565, 567, 571, 579, |
125 | 585, 588, 597, 602, 610, 610, 614, 623, 628, 633, 639, 642, 645, |
126 | 648, 650, 655, 659, |
127 | }; |
128 | /* aKWCode[i] is the parser symbol code for the i-th keyword */ |
129 | static const unsigned char aKWCode[147] = { |
130 | TK_REINDEX, TK_INDEXED, TK_INDEX, TK_DESC, TK_ESCAPE, |
131 | TK_EACH, TK_CHECK, TK_KEY, TK_BEFORE, TK_FOREIGN, |
132 | TK_FOR, TK_IGNORE, TK_LIKE_KW, TK_EXPLAIN, TK_INSTEAD, |
133 | TK_ADD, TK_DATABASE, TK_AS, TK_SELECT, TK_TABLE, |
134 | TK_JOIN_KW, TK_THEN, TK_END, TK_DEFERRABLE, TK_ELSE, |
135 | TK_EXCLUDE, TK_DELETE, TK_TEMP, TK_TEMP, TK_OR, |
136 | TK_ISNULL, TK_NULLS, TK_SAVEPOINT, TK_INTERSECT, TK_TIES, |
137 | TK_NOTNULL, TK_NOT, TK_NO, TK_NULL, TK_LIKE_KW, |
138 | TK_EXCEPT, TK_TRANSACTION,TK_ACTION, TK_ON, TK_JOIN_KW, |
139 | TK_ALTER, TK_RAISE, TK_EXCLUSIVE, TK_EXISTS, TK_CONSTRAINT, |
140 | TK_INTO, TK_OFFSET, TK_OF, TK_SET, TK_TRIGGER, |
141 | TK_RANGE, TK_GENERATED, TK_DETACH, TK_HAVING, TK_LIKE_KW, |
142 | TK_BEGIN, TK_JOIN_KW, TK_REFERENCES, TK_UNIQUE, TK_QUERY, |
143 | TK_WITHOUT, TK_WITH, TK_JOIN_KW, TK_RELEASE, TK_ATTACH, |
144 | TK_BETWEEN, TK_NOTHING, TK_GROUPS, TK_GROUP, TK_CASCADE, |
145 | TK_ASC, TK_DEFAULT, TK_CASE, TK_COLLATE, TK_CREATE, |
146 | TK_CTIME_KW, TK_IMMEDIATE, TK_JOIN, TK_INSERT, TK_MATCH, |
147 | TK_PLAN, TK_ANALYZE, TK_PRAGMA, TK_MATERIALIZED, TK_DEFERRED, |
148 | TK_DISTINCT, TK_IS, TK_UPDATE, TK_VALUES, TK_VIRTUAL, |
149 | TK_ALWAYS, TK_WHEN, TK_WHERE, TK_RECURSIVE, TK_ABORT, |
150 | TK_AFTER, TK_RENAME, TK_AND, TK_DROP, TK_PARTITION, |
151 | TK_AUTOINCR, TK_TO, TK_IN, TK_CAST, TK_COLUMNKW, |
152 | TK_COMMIT, TK_CONFLICT, TK_JOIN_KW, TK_CTIME_KW, TK_CTIME_KW, |
153 | TK_CURRENT, TK_PRECEDING, TK_FAIL, TK_LAST, TK_FILTER, |
154 | TK_REPLACE, TK_FIRST, TK_FOLLOWING, TK_FROM, TK_JOIN_KW, |
155 | TK_LIMIT, TK_IF, TK_ORDER, TK_RESTRICT, TK_OTHERS, |
156 | TK_OVER, TK_RETURNING, TK_JOIN_KW, TK_ROLLBACK, TK_ROWS, |
157 | TK_ROW, TK_UNBOUNDED, TK_UNION, TK_USING, TK_VACUUM, |
158 | TK_VIEW, TK_WINDOW, TK_DO, TK_BY, TK_INITIALLY, |
159 | TK_ALL, TK_PRIMARY, |
160 | }; |
161 | /* Hash table decoded: |
162 | ** 0: INSERT |
163 | ** 1: IS |
164 | ** 2: ROLLBACK TRIGGER |
165 | ** 3: IMMEDIATE |
166 | ** 4: PARTITION |
167 | ** 5: TEMP |
168 | ** 6: |
169 | ** 7: |
170 | ** 8: VALUES WITHOUT |
171 | ** 9: |
172 | ** 10: MATCH |
173 | ** 11: NOTHING |
174 | ** 12: |
175 | ** 13: OF |
176 | ** 14: TIES IGNORE |
177 | ** 15: PLAN |
178 | ** 16: INSTEAD INDEXED |
179 | ** 17: |
180 | ** 18: TRANSACTION RIGHT |
181 | ** 19: WHEN |
182 | ** 20: SET HAVING |
183 | ** 21: MATERIALIZED IF |
184 | ** 22: ROWS |
185 | ** 23: SELECT |
186 | ** 24: |
187 | ** 25: |
188 | ** 26: VACUUM SAVEPOINT |
189 | ** 27: |
190 | ** 28: LIKE UNION VIRTUAL REFERENCES |
191 | ** 29: RESTRICT |
192 | ** 30: |
193 | ** 31: THEN REGEXP |
194 | ** 32: TO |
195 | ** 33: |
196 | ** 34: BEFORE |
197 | ** 35: |
198 | ** 36: |
199 | ** 37: FOLLOWING COLLATE CASCADE |
200 | ** 38: CREATE |
201 | ** 39: |
202 | ** 40: CASE REINDEX |
203 | ** 41: EACH |
204 | ** 42: |
205 | ** 43: QUERY |
206 | ** 44: AND ADD |
207 | ** 45: PRIMARY ANALYZE |
208 | ** 46: |
209 | ** 47: ROW ASC DETACH |
210 | ** 48: CURRENT_TIME CURRENT_DATE |
211 | ** 49: |
212 | ** 50: |
213 | ** 51: EXCLUSIVE TEMPORARY |
214 | ** 52: |
215 | ** 53: DEFERRED |
216 | ** 54: DEFERRABLE |
217 | ** 55: |
218 | ** 56: DATABASE |
219 | ** 57: |
220 | ** 58: DELETE VIEW GENERATED |
221 | ** 59: ATTACH |
222 | ** 60: END |
223 | ** 61: EXCLUDE |
224 | ** 62: ESCAPE DESC |
225 | ** 63: GLOB |
226 | ** 64: WINDOW ELSE |
227 | ** 65: COLUMN |
228 | ** 66: FIRST |
229 | ** 67: |
230 | ** 68: GROUPS ALL |
231 | ** 69: DISTINCT DROP KEY |
232 | ** 70: BETWEEN |
233 | ** 71: INITIALLY |
234 | ** 72: BEGIN |
235 | ** 73: FILTER CHECK ACTION |
236 | ** 74: GROUP INDEX |
237 | ** 75: |
238 | ** 76: EXISTS DEFAULT |
239 | ** 77: |
240 | ** 78: FOR CURRENT_TIMESTAMP |
241 | ** 79: EXCEPT |
242 | ** 80: |
243 | ** 81: CROSS |
244 | ** 82: |
245 | ** 83: |
246 | ** 84: |
247 | ** 85: CAST |
248 | ** 86: FOREIGN AUTOINCREMENT |
249 | ** 87: COMMIT |
250 | ** 88: CURRENT AFTER ALTER |
251 | ** 89: FULL FAIL CONFLICT |
252 | ** 90: EXPLAIN |
253 | ** 91: CONSTRAINT |
254 | ** 92: FROM ALWAYS |
255 | ** 93: |
256 | ** 94: ABORT |
257 | ** 95: |
258 | ** 96: AS DO |
259 | ** 97: REPLACE WITH RELEASE |
260 | ** 98: BY RENAME |
261 | ** 99: RANGE RAISE |
262 | ** 100: OTHERS |
263 | ** 101: USING NULLS |
264 | ** 102: PRAGMA |
265 | ** 103: JOIN ISNULL OFFSET |
266 | ** 104: NOT |
267 | ** 105: OR LAST LEFT |
268 | ** 106: LIMIT |
269 | ** 107: |
270 | ** 108: |
271 | ** 109: IN |
272 | ** 110: INTO |
273 | ** 111: OVER RECURSIVE |
274 | ** 112: ORDER OUTER |
275 | ** 113: |
276 | ** 114: INTERSECT UNBOUNDED |
277 | ** 115: |
278 | ** 116: |
279 | ** 117: RETURNING ON |
280 | ** 118: |
281 | ** 119: WHERE |
282 | ** 120: NO INNER |
283 | ** 121: NULL |
284 | ** 122: |
285 | ** 123: TABLE |
286 | ** 124: NATURAL NOTNULL |
287 | ** 125: PRECEDING |
288 | ** 126: UPDATE UNIQUE |
289 | */ |
290 | /* Check to see if z[0..n-1] is a keyword. If it is, write the |
291 | ** parser symbol code for that keyword into *pType. Always |
292 | ** return the integer n (the length of the token). */ |
293 | static int keywordCode(const char *z, int n, int *pType){ |
294 | int i, j; |
295 | const char *zKW; |
296 | if( n>=2 ){ |
297 | i = ((charMap(z[0])*4) ^ (charMap(z[n-1])*3) ^ n*1) % 127; |
298 | for(i=((int)aKWHash[i])-1; i>=0; i=((int)aKWNext[i])-1){ |
299 | if( aKWLen[i]!=n ) continue; |
300 | zKW = &zKWText[aKWOffset[i]]; |
301 | #ifdef SQLITE_ASCII |
302 | if( (z[0]&~0x20)!=zKW[0] ) continue; |
303 | if( (z[1]&~0x20)!=zKW[1] ) continue; |
304 | j = 2; |
305 | while( j<n && (z[j]&~0x20)==zKW[j] ){ j++; } |
306 | #endif |
307 | #ifdef SQLITE_EBCDIC |
308 | if( toupper(z[0])!=zKW[0] ) continue; |
309 | if( toupper(z[1])!=zKW[1] ) continue; |
310 | j = 2; |
311 | while( j<n && toupper(z[j])==zKW[j] ){ j++; } |
312 | #endif |
313 | if( j<n ) continue; |
314 | testcase( i==0 ); /* REINDEX */ |
315 | testcase( i==1 ); /* INDEXED */ |
316 | testcase( i==2 ); /* INDEX */ |
317 | testcase( i==3 ); /* DESC */ |
318 | testcase( i==4 ); /* ESCAPE */ |
319 | testcase( i==5 ); /* EACH */ |
320 | testcase( i==6 ); /* CHECK */ |
321 | testcase( i==7 ); /* KEY */ |
322 | testcase( i==8 ); /* BEFORE */ |
323 | testcase( i==9 ); /* FOREIGN */ |
324 | testcase( i==10 ); /* FOR */ |
325 | testcase( i==11 ); /* IGNORE */ |
326 | testcase( i==12 ); /* REGEXP */ |
327 | testcase( i==13 ); /* EXPLAIN */ |
328 | testcase( i==14 ); /* INSTEAD */ |
329 | testcase( i==15 ); /* ADD */ |
330 | testcase( i==16 ); /* DATABASE */ |
331 | testcase( i==17 ); /* AS */ |
332 | testcase( i==18 ); /* SELECT */ |
333 | testcase( i==19 ); /* TABLE */ |
334 | testcase( i==20 ); /* LEFT */ |
335 | testcase( i==21 ); /* THEN */ |
336 | testcase( i==22 ); /* END */ |
337 | testcase( i==23 ); /* DEFERRABLE */ |
338 | testcase( i==24 ); /* ELSE */ |
339 | testcase( i==25 ); /* EXCLUDE */ |
340 | testcase( i==26 ); /* DELETE */ |
341 | testcase( i==27 ); /* TEMPORARY */ |
342 | testcase( i==28 ); /* TEMP */ |
343 | testcase( i==29 ); /* OR */ |
344 | testcase( i==30 ); /* ISNULL */ |
345 | testcase( i==31 ); /* NULLS */ |
346 | testcase( i==32 ); /* SAVEPOINT */ |
347 | testcase( i==33 ); /* INTERSECT */ |
348 | testcase( i==34 ); /* TIES */ |
349 | testcase( i==35 ); /* NOTNULL */ |
350 | testcase( i==36 ); /* NOT */ |
351 | testcase( i==37 ); /* NO */ |
352 | testcase( i==38 ); /* NULL */ |
353 | testcase( i==39 ); /* LIKE */ |
354 | testcase( i==40 ); /* EXCEPT */ |
355 | testcase( i==41 ); /* TRANSACTION */ |
356 | testcase( i==42 ); /* ACTION */ |
357 | testcase( i==43 ); /* ON */ |
358 | testcase( i==44 ); /* NATURAL */ |
359 | testcase( i==45 ); /* ALTER */ |
360 | testcase( i==46 ); /* RAISE */ |
361 | testcase( i==47 ); /* EXCLUSIVE */ |
362 | testcase( i==48 ); /* EXISTS */ |
363 | testcase( i==49 ); /* CONSTRAINT */ |
364 | testcase( i==50 ); /* INTO */ |
365 | testcase( i==51 ); /* OFFSET */ |
366 | testcase( i==52 ); /* OF */ |
367 | testcase( i==53 ); /* SET */ |
368 | testcase( i==54 ); /* TRIGGER */ |
369 | testcase( i==55 ); /* RANGE */ |
370 | testcase( i==56 ); /* GENERATED */ |
371 | testcase( i==57 ); /* DETACH */ |
372 | testcase( i==58 ); /* HAVING */ |
373 | testcase( i==59 ); /* GLOB */ |
374 | testcase( i==60 ); /* BEGIN */ |
375 | testcase( i==61 ); /* INNER */ |
376 | testcase( i==62 ); /* REFERENCES */ |
377 | testcase( i==63 ); /* UNIQUE */ |
378 | testcase( i==64 ); /* QUERY */ |
379 | testcase( i==65 ); /* WITHOUT */ |
380 | testcase( i==66 ); /* WITH */ |
381 | testcase( i==67 ); /* OUTER */ |
382 | testcase( i==68 ); /* RELEASE */ |
383 | testcase( i==69 ); /* ATTACH */ |
384 | testcase( i==70 ); /* BETWEEN */ |
385 | testcase( i==71 ); /* NOTHING */ |
386 | testcase( i==72 ); /* GROUPS */ |
387 | testcase( i==73 ); /* GROUP */ |
388 | testcase( i==74 ); /* CASCADE */ |
389 | testcase( i==75 ); /* ASC */ |
390 | testcase( i==76 ); /* DEFAULT */ |
391 | testcase( i==77 ); /* CASE */ |
392 | testcase( i==78 ); /* COLLATE */ |
393 | testcase( i==79 ); /* CREATE */ |
394 | testcase( i==80 ); /* CURRENT_DATE */ |
395 | testcase( i==81 ); /* IMMEDIATE */ |
396 | testcase( i==82 ); /* JOIN */ |
397 | testcase( i==83 ); /* INSERT */ |
398 | testcase( i==84 ); /* MATCH */ |
399 | testcase( i==85 ); /* PLAN */ |
400 | testcase( i==86 ); /* ANALYZE */ |
401 | testcase( i==87 ); /* PRAGMA */ |
402 | testcase( i==88 ); /* MATERIALIZED */ |
403 | testcase( i==89 ); /* DEFERRED */ |
404 | testcase( i==90 ); /* DISTINCT */ |
405 | testcase( i==91 ); /* IS */ |
406 | testcase( i==92 ); /* UPDATE */ |
407 | testcase( i==93 ); /* VALUES */ |
408 | testcase( i==94 ); /* VIRTUAL */ |
409 | testcase( i==95 ); /* ALWAYS */ |
410 | testcase( i==96 ); /* WHEN */ |
411 | testcase( i==97 ); /* WHERE */ |
412 | testcase( i==98 ); /* RECURSIVE */ |
413 | testcase( i==99 ); /* ABORT */ |
414 | testcase( i==100 ); /* AFTER */ |
415 | testcase( i==101 ); /* RENAME */ |
416 | testcase( i==102 ); /* AND */ |
417 | testcase( i==103 ); /* DROP */ |
418 | testcase( i==104 ); /* PARTITION */ |
419 | testcase( i==105 ); /* AUTOINCREMENT */ |
420 | testcase( i==106 ); /* TO */ |
421 | testcase( i==107 ); /* IN */ |
422 | testcase( i==108 ); /* CAST */ |
423 | testcase( i==109 ); /* COLUMN */ |
424 | testcase( i==110 ); /* COMMIT */ |
425 | testcase( i==111 ); /* CONFLICT */ |
426 | testcase( i==112 ); /* CROSS */ |
427 | testcase( i==113 ); /* CURRENT_TIMESTAMP */ |
428 | testcase( i==114 ); /* CURRENT_TIME */ |
429 | testcase( i==115 ); /* CURRENT */ |
430 | testcase( i==116 ); /* PRECEDING */ |
431 | testcase( i==117 ); /* FAIL */ |
432 | testcase( i==118 ); /* LAST */ |
433 | testcase( i==119 ); /* FILTER */ |
434 | testcase( i==120 ); /* REPLACE */ |
435 | testcase( i==121 ); /* FIRST */ |
436 | testcase( i==122 ); /* FOLLOWING */ |
437 | testcase( i==123 ); /* FROM */ |
438 | testcase( i==124 ); /* FULL */ |
439 | testcase( i==125 ); /* LIMIT */ |
440 | testcase( i==126 ); /* IF */ |
441 | testcase( i==127 ); /* ORDER */ |
442 | testcase( i==128 ); /* RESTRICT */ |
443 | testcase( i==129 ); /* OTHERS */ |
444 | testcase( i==130 ); /* OVER */ |
445 | testcase( i==131 ); /* RETURNING */ |
446 | testcase( i==132 ); /* RIGHT */ |
447 | testcase( i==133 ); /* ROLLBACK */ |
448 | testcase( i==134 ); /* ROWS */ |
449 | testcase( i==135 ); /* ROW */ |
450 | testcase( i==136 ); /* UNBOUNDED */ |
451 | testcase( i==137 ); /* UNION */ |
452 | testcase( i==138 ); /* USING */ |
453 | testcase( i==139 ); /* VACUUM */ |
454 | testcase( i==140 ); /* VIEW */ |
455 | testcase( i==141 ); /* WINDOW */ |
456 | testcase( i==142 ); /* DO */ |
457 | testcase( i==143 ); /* BY */ |
458 | testcase( i==144 ); /* INITIALLY */ |
459 | testcase( i==145 ); /* ALL */ |
460 | testcase( i==146 ); /* PRIMARY */ |
461 | *pType = aKWCode[i]; |
462 | break; |
463 | } |
464 | } |
465 | return n; |
466 | } |
467 | int sqlite3KeywordCode(const unsigned char *z, int n){ |
468 | int id = TK_ID; |
469 | keywordCode((char*)z, n, &id); |
470 | return id; |
471 | } |
472 | #define SQLITE_N_KEYWORD 147 |
473 | int sqlite3_keyword_name(int i,const char **pzName,int *pnName){ |
474 | if( i<0 || i>=SQLITE_N_KEYWORD ) return SQLITE_ERROR; |
475 | *pzName = zKWText + aKWOffset[i]; |
476 | *pnName = aKWLen[i]; |
477 | return SQLITE_OK; |
478 | } |
479 | int sqlite3_keyword_count(void){ return SQLITE_N_KEYWORD; } |
480 | int sqlite3_keyword_check(const char *zName, int nName){ |
481 | return TK_ID!=sqlite3KeywordCode((const u8*)zName, nName); |
482 | } |
483 | |