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