CoolFace
Modelpublic

AryaWu/sqlite

sourceHugging Faceupdated 9mo agoView on Hugging Face
0likes
keywordhash.h483 linesDownload Raw Back to root
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