xref: /aosp_15_r20/external/perfetto/src/trace_processor/perfetto_sql/grammar/perfettosql_keywordhash.h (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
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