AryaWu/sqlite
0
1/***** This file contains automatically generated code ******2**3** The code in this file has been automatically generated by4**5** sqlite/tool/mkkeywordhash.c6**7** The code in this file implements a function that determines whether8** or not a given identifier is really an SQL keyword. The same thing9** might be implemented more directly using a hand-written hash table.10** But by using this automatically generated code, the size of the code11** is substantially reduced. This is important for embedded applications12** 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]==081** 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[148] = {0,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[148] = {0,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 of113** the text for the i-th keyword. */114static const unsigned short int aKWOffset[148] = {0,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[148] = {0,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: INSERT163** 1: IS164** 2: ROLLBACK TRIGGER165** 3: IMMEDIATE166** 4: PARTITION167** 5: TEMP168** 6:169** 7:170** 8: VALUES WITHOUT171** 9:172** 10: MATCH173** 11: NOTHING174** 12:175** 13: OF176** 14: TIES IGNORE177** 15: PLAN178** 16: INSTEAD INDEXED179** 17:180** 18: TRANSACTION RIGHT181** 19: WHEN182** 20: SET HAVING183** 21: MATERIALIZED IF184** 22: ROWS185** 23: SELECT186** 24:187** 25:188** 26: VACUUM SAVEPOINT189** 27:190** 28: LIKE UNION VIRTUAL REFERENCES191** 29: RESTRICT192** 30:193** 31: THEN REGEXP194** 32: TO195** 33:196** 34: BEFORE197** 35:198** 36:199** 37: FOLLOWING COLLATE CASCADE200** 38: CREATE201** 39:202** 40: CASE REINDEX203** 41: EACH204** 42:205** 43: QUERY206** 44: AND ADD207** 45: PRIMARY ANALYZE208** 46:209** 47: ROW ASC DETACH210** 48: CURRENT_TIME CURRENT_DATE211** 49:212** 50:213** 51: EXCLUSIVE TEMPORARY214** 52:215** 53: DEFERRED216** 54: DEFERRABLE217** 55:218** 56: DATABASE219** 57:220** 58: DELETE VIEW GENERATED221** 59: ATTACH222** 60: END223** 61: EXCLUDE224** 62: ESCAPE DESC225** 63: GLOB226** 64: WINDOW ELSE227** 65: COLUMN228** 66: FIRST229** 67:230** 68: GROUPS ALL231** 69: DISTINCT DROP KEY232** 70: BETWEEN233** 71: INITIALLY234** 72: BEGIN235** 73: FILTER CHECK ACTION236** 74: GROUP INDEX237** 75:238** 76: EXISTS DEFAULT239** 77:240** 78: FOR CURRENT_TIMESTAMP241** 79: EXCEPT242** 80:243** 81: CROSS244** 82:245** 83:246** 84:247** 85: CAST248** 86: FOREIGN AUTOINCREMENT249** 87: COMMIT250** 88: CURRENT AFTER ALTER251** 89: FULL FAIL CONFLICT252** 90: EXPLAIN253** 91: CONSTRAINT254** 92: FROM ALWAYS255** 93:256** 94: ABORT257** 95:258** 96: AS DO259** 97: REPLACE WITH RELEASE260** 98: BY RENAME261** 99: RANGE RAISE262** 100: OTHERS263** 101: USING NULLS264** 102: PRAGMA265** 103: JOIN ISNULL OFFSET266** 104: NOT267** 105: OR LAST LEFT268** 106: LIMIT269** 107:270** 108:271** 109: IN272** 110: INTO273** 111: OVER RECURSIVE274** 112: ORDER OUTER275** 113:276** 114: INTERSECT UNBOUNDED277** 115:278** 116:279** 117: RETURNING ON280** 118:281** 119: WHERE282** 120: NO INNER283** 121: NULL284** 122:285** 123: TABLE286** 124: NATURAL NOTNULL287** 125: PRECEDING288** 126: UPDATE UNIQUE289*/290/* Check to see if z[0..n-1] is a keyword. If it is, write the291** parser symbol code for that keyword into *pType. Always292** return the integer n (the length of the token). */293static i64 keywordCode(const char *z, i64 n, int *pType){294 i64 i, j;295 const char *zKW;296 assert( n>=2 );297 i = ((charMap(z[0])*4) ^ (charMap(z[n-1])*3) ^ n*1) % 127;298 for(i=(int)aKWHash[i]; i>0; i=aKWNext[i]){299 if( aKWLen[i]!=n ) continue;300 zKW = &zKWText[aKWOffset[i]];301#ifdef SQLITE_ASCII302 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#endif307#ifdef SQLITE_EBCDIC308 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#endif313 if( j<n ) continue;314 testcase( i==1 ); /* REINDEX */315 testcase( i==2 ); /* INDEXED */316 testcase( i==3 ); /* INDEX */317 testcase( i==4 ); /* DESC */318 testcase( i==5 ); /* ESCAPE */319 testcase( i==6 ); /* EACH */320 testcase( i==7 ); /* CHECK */321 testcase( i==8 ); /* KEY */322 testcase( i==9 ); /* BEFORE */323 testcase( i==10 ); /* FOREIGN */324 testcase( i==11 ); /* FOR */325 testcase( i==12 ); /* IGNORE */326 testcase( i==13 ); /* REGEXP */327 testcase( i==14 ); /* EXPLAIN */328 testcase( i==15 ); /* INSTEAD */329 testcase( i==16 ); /* ADD */330 testcase( i==17 ); /* DATABASE */331 testcase( i==18 ); /* AS */332 testcase( i==19 ); /* SELECT */333 testcase( i==20 ); /* TABLE */334 testcase( i==21 ); /* LEFT */335 testcase( i==22 ); /* THEN */336 testcase( i==23 ); /* END */337 testcase( i==24 ); /* DEFERRABLE */338 testcase( i==25 ); /* ELSE */339 testcase( i==26 ); /* EXCLUDE */340 testcase( i==27 ); /* DELETE */341 testcase( i==28 ); /* TEMPORARY */342 testcase( i==29 ); /* TEMP */343 testcase( i==30 ); /* OR */344 testcase( i==31 ); /* ISNULL */345 testcase( i==32 ); /* NULLS */346 testcase( i==33 ); /* SAVEPOINT */347 testcase( i==34 ); /* INTERSECT */348 testcase( i==35 ); /* TIES */349 testcase( i==36 ); /* NOTNULL */350 testcase( i==37 ); /* NOT */351 testcase( i==38 ); /* NO */352 testcase( i==39 ); /* NULL */353 testcase( i==40 ); /* LIKE */354 testcase( i==41 ); /* EXCEPT */355 testcase( i==42 ); /* TRANSACTION */356 testcase( i==43 ); /* ACTION */357 testcase( i==44 ); /* ON */358 testcase( i==45 ); /* NATURAL */359 testcase( i==46 ); /* ALTER */360 testcase( i==47 ); /* RAISE */361 testcase( i==48 ); /* EXCLUSIVE */362 testcase( i==49 ); /* EXISTS */363 testcase( i==50 ); /* CONSTRAINT */364 testcase( i==51 ); /* INTO */365 testcase( i==52 ); /* OFFSET */366 testcase( i==53 ); /* OF */367 testcase( i==54 ); /* SET */368 testcase( i==55 ); /* TRIGGER */369 testcase( i==56 ); /* RANGE */370 testcase( i==57 ); /* GENERATED */371 testcase( i==58 ); /* DETACH */372 testcase( i==59 ); /* HAVING */373 testcase( i==60 ); /* GLOB */374 testcase( i==61 ); /* BEGIN */375 testcase( i==62 ); /* INNER */376 testcase( i==63 ); /* REFERENCES */377 testcase( i==64 ); /* UNIQUE */378 testcase( i==65 ); /* QUERY */379 testcase( i==66 ); /* WITHOUT */380 testcase( i==67 ); /* WITH */381 testcase( i==68 ); /* OUTER */382 testcase( i==69 ); /* RELEASE */383 testcase( i==70 ); /* ATTACH */384 testcase( i==71 ); /* BETWEEN */385 testcase( i==72 ); /* NOTHING */386 testcase( i==73 ); /* GROUPS */387 testcase( i==74 ); /* GROUP */388 testcase( i==75 ); /* CASCADE */389 testcase( i==76 ); /* ASC */390 testcase( i==77 ); /* DEFAULT */391 testcase( i==78 ); /* CASE */392 testcase( i==79 ); /* COLLATE */393 testcase( i==80 ); /* CREATE */394 testcase( i==81 ); /* CURRENT_DATE */395 testcase( i==82 ); /* IMMEDIATE */396 testcase( i==83 ); /* JOIN */397 testcase( i==84 ); /* INSERT */398 testcase( i==85 ); /* MATCH */399 testcase( i==86 ); /* PLAN */400 testcase( i==87 ); /* ANALYZE */401 testcase( i==88 ); /* PRAGMA */402 testcase( i==89 ); /* MATERIALIZED */403 testcase( i==90 ); /* DEFERRED */404 testcase( i==91 ); /* DISTINCT */405 testcase( i==92 ); /* IS */406 testcase( i==93 ); /* UPDATE */407 testcase( i==94 ); /* VALUES */408 testcase( i==95 ); /* VIRTUAL */409 testcase( i==96 ); /* ALWAYS */410 testcase( i==97 ); /* WHEN */411 testcase( i==98 ); /* WHERE */412 testcase( i==99 ); /* RECURSIVE */413 testcase( i==100 ); /* ABORT */414 testcase( i==101 ); /* AFTER */415 testcase( i==102 ); /* RENAME */416 testcase( i==103 ); /* AND */417 testcase( i==104 ); /* DROP */418 testcase( i==105 ); /* PARTITION */419 testcase( i==106 ); /* AUTOINCREMENT */420 testcase( i==107 ); /* TO */421 testcase( i==108 ); /* IN */422 testcase( i==109 ); /* CAST */423 testcase( i==110 ); /* COLUMN */424 testcase( i==111 ); /* COMMIT */425 testcase( i==112 ); /* CONFLICT */426 testcase( i==113 ); /* CROSS */427 testcase( i==114 ); /* CURRENT_TIMESTAMP */428 testcase( i==115 ); /* CURRENT_TIME */429 testcase( i==116 ); /* CURRENT */430 testcase( i==117 ); /* PRECEDING */431 testcase( i==118 ); /* FAIL */432 testcase( i==119 ); /* LAST */433 testcase( i==120 ); /* FILTER */434 testcase( i==121 ); /* REPLACE */435 testcase( i==122 ); /* FIRST */436 testcase( i==123 ); /* FOLLOWING */437 testcase( i==124 ); /* FROM */438 testcase( i==125 ); /* FULL */439 testcase( i==126 ); /* LIMIT */440 testcase( i==127 ); /* IF */441 testcase( i==128 ); /* ORDER */442 testcase( i==129 ); /* RESTRICT */443 testcase( i==130 ); /* OTHERS */444 testcase( i==131 ); /* OVER */445 testcase( i==132 ); /* RETURNING */446 testcase( i==133 ); /* RIGHT */447 testcase( i==134 ); /* ROLLBACK */448 testcase( i==135 ); /* ROWS */449 testcase( i==136 ); /* ROW */450 testcase( i==137 ); /* UNBOUNDED */451 testcase( i==138 ); /* UNION */452 testcase( i==139 ); /* USING */453 testcase( i==140 ); /* VACUUM */454 testcase( i==141 ); /* VIEW */455 testcase( i==142 ); /* WINDOW */456 testcase( i==143 ); /* DO */457 testcase( i==144 ); /* BY */458 testcase( i==145 ); /* INITIALLY */459 testcase( i==146 ); /* ALL */460 testcase( i==147 ); /* PRIMARY */461 *pType = aKWCode[i];462 break;463 }464 return n;465}466int sqlite3KeywordCode(const unsigned char *z, int n){467 int id = TK_ID;468 if( n>=2 ) keywordCode((char*)z, n, &id);469 return id;470}471#define SQLITE_N_KEYWORD 147472int sqlite3_keyword_name(int i,const char **pzName,int *pnName){473 if( i<0 || i>=SQLITE_N_KEYWORD ) return SQLITE_ERROR;474 i++;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 