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 */
28static 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 */
68static 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. */
83static 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 */
98static 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. */
114static 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 */
129static 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). */
293static 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}
467int 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
473int 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}
479int sqlite3_keyword_count(void){ return SQLITE_N_KEYWORD; }
480int sqlite3_keyword_check(const char *zName, int nName){
481 return TK_ID!=sqlite3KeywordCode((const u8*)zName, nName);
482}
483