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