|
1 /***** This file contains automatically generated code ****** |
|
2 ** |
|
3 ** The code in this file has been automatically generated by |
|
4 ** |
|
5 ** $Header: /sqlite/sqlite/tool/mkkeywordhash.c,v 1.31 2007/07/30 18:26:20 rse Exp $ |
|
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: 157 */ |
|
15 static int keywordCode(const char *z, int n){ |
|
16 /* zText[] encodes 767 bytes of keywords in 519 bytes */ |
|
17 static const char zText[519] = |
|
18 "BEFOREIGNOREGEXPLAINSTEADDESCAPEACHECKEYCONSTRAINTERSECTABLEFT" |
|
19 "HENDATABASELECTRANSACTIONATURALTERAISELSEXCEPTRIGGEREFERENCES" |
|
20 "UNIQUERYATTACHAVINGROUPDATEMPORARYBEGINNEREINDEXCLUSIVEXISTSBETWEEN" |
|
21 "OTNULLIKECASCADEFERRABLECASECOLLATECREATECURRENT_DATEDELETEDETACH" |
|
22 "IMMEDIATEJOINSERTMATCHPLANALYZEPRAGMABORTVALUESWHENWHERENAMEAFTER" |
|
23 "EPLACEANDEFAULTAUTOINCREMENTCASTCOLUMNCOMMITCONFLICTCROSSCURRENT_TIMESTAMP" |
|
24 "RIMARYDEFERREDISTINCTDROPFAILIMITFROMFULLGLOBYIFINTOFFSETISNULL" |
|
25 "ORDERESTRICTOUTERIGHTROLLBACKROWUNIONUSINGVACUUMVIEWINITIALLY" |
|
26 ; |
|
27 static const unsigned char aHash[127] = { |
|
28 63, 90, 108, 61, 0, 38, 0, 0, 69, 0, 64, 0, 0, |
|
29 101, 4, 65, 7, 0, 107, 70, 102, 98, 0, 22, 0, 0, |
|
30 112, 0, 110, 105, 0, 18, 78, 0, 1, 0, 0, 56, 57, |
|
31 0, 55, 11, 0, 33, 75, 87, 0, 109, 86, 0, 0, 45, |
|
32 0, 88, 54, 0, 20, 0, 113, 34, 19, 0, 10, 96, 28, |
|
33 81, 0, 0, 115, 91, 47, 114, 41, 12, 44, 0, 76, 0, |
|
34 85, 29, 0, 84, 0, 0, 0, 80, 77, 82, 73, 95, 6, |
|
35 14, 94, 0, 68, 0, 21, 74, 97, 27, 0, 111, 67, 103, |
|
36 49, 40, 93, 0, 0, 79, 99, 0, 106, 0, 15, 0, 0, |
|
37 24, 0, 71, 42, 50, 0, 16, 48, 0, 37, |
|
38 }; |
|
39 static const unsigned char aNext[115] = { |
|
40 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, |
|
41 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, |
|
42 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, |
|
43 17, 0, 0, 0, 36, 39, 0, 0, 25, 0, 0, 31, 0, |
|
44 0, 0, 43, 52, 0, 0, 0, 53, 0, 0, 0, 0, 0, |
|
45 0, 0, 0, 0, 0, 0, 0, 26, 0, 8, 46, 2, 0, |
|
46 0, 0, 0, 0, 0, 0, 3, 58, 66, 0, 13, 0, 89, |
|
47 83, 0, 0, 92, 0, 72, 0, 0, 62, 0, 35, 100, 0, |
|
48 0, 104, 23, 30, 60, 51, 0, 0, 59, 0, 0, |
|
49 }; |
|
50 static const unsigned char aLen[115] = { |
|
51 6, 7, 3, 6, 6, 7, 7, 3, 4, 6, 4, 5, 3, |
|
52 10, 9, 5, 4, 4, 3, 8, 2, 6, 11, 2, 7, 5, |
|
53 5, 4, 6, 7, 10, 6, 5, 6, 6, 5, 6, 4, 9, |
|
54 2, 5, 5, 7, 5, 9, 6, 7, 7, 3, 4, 4, 7, |
|
55 3, 10, 4, 7, 6, 12, 6, 6, 9, 4, 6, 5, 4, |
|
56 7, 6, 5, 6, 4, 5, 6, 5, 7, 3, 7, 13, 2, |
|
57 2, 4, 6, 6, 8, 5, 17, 12, 7, 8, 8, 2, 4, |
|
58 4, 5, 4, 4, 4, 2, 2, 4, 6, 2, 3, 6, 5, |
|
59 8, 5, 5, 8, 3, 5, 5, 6, 4, 9, 3, |
|
60 }; |
|
61 static const unsigned short int aOffset[115] = { |
|
62 0, 2, 2, 6, 10, 13, 18, 23, 25, 26, 31, 33, 37, |
|
63 40, 47, 55, 58, 61, 63, 65, 70, 71, 76, 85, 86, 91, |
|
64 95, 99, 102, 107, 113, 123, 126, 131, 136, 141, 144, 148, 148, |
|
65 152, 157, 160, 164, 166, 169, 177, 183, 189, 189, 192, 195, 199, |
|
66 200, 204, 214, 218, 225, 231, 243, 249, 255, 264, 266, 272, 277, |
|
67 279, 286, 291, 296, 302, 306, 309, 315, 319, 326, 328, 335, 337, |
|
68 339, 348, 352, 358, 364, 372, 377, 377, 393, 400, 407, 408, 415, |
|
69 419, 422, 427, 431, 435, 438, 440, 442, 445, 445, 448, 451, 457, |
|
70 461, 469, 473, 478, 486, 489, 494, 499, 505, 509, 514, |
|
71 }; |
|
72 static const unsigned char aCode[115] = { |
|
73 TK_BEFORE, TK_FOREIGN, TK_FOR, TK_IGNORE, TK_LIKE_KW, |
|
74 TK_EXPLAIN, TK_INSTEAD, TK_ADD, TK_DESC, TK_ESCAPE, |
|
75 TK_EACH, TK_CHECK, TK_KEY, TK_CONSTRAINT, TK_INTERSECT, |
|
76 TK_TABLE, TK_JOIN_KW, TK_THEN, TK_END, TK_DATABASE, |
|
77 TK_AS, TK_SELECT, TK_TRANSACTION,TK_ON, TK_JOIN_KW, |
|
78 TK_ALTER, TK_RAISE, TK_ELSE, TK_EXCEPT, TK_TRIGGER, |
|
79 TK_REFERENCES, TK_UNIQUE, TK_QUERY, TK_ATTACH, TK_HAVING, |
|
80 TK_GROUP, TK_UPDATE, TK_TEMP, TK_TEMP, TK_OR, |
|
81 TK_BEGIN, TK_JOIN_KW, TK_REINDEX, TK_INDEX, TK_EXCLUSIVE, |
|
82 TK_EXISTS, TK_BETWEEN, TK_NOTNULL, TK_NOT, TK_NULL, |
|
83 TK_LIKE_KW, TK_CASCADE, TK_ASC, TK_DEFERRABLE, TK_CASE, |
|
84 TK_COLLATE, TK_CREATE, TK_CTIME_KW, TK_DELETE, TK_DETACH, |
|
85 TK_IMMEDIATE, TK_JOIN, TK_INSERT, TK_MATCH, TK_PLAN, |
|
86 TK_ANALYZE, TK_PRAGMA, TK_ABORT, TK_VALUES, TK_WHEN, |
|
87 TK_WHERE, TK_RENAME, TK_AFTER, TK_REPLACE, TK_AND, |
|
88 TK_DEFAULT, TK_AUTOINCR, TK_TO, TK_IN, TK_CAST, |
|
89 TK_COLUMNKW, TK_COMMIT, TK_CONFLICT, TK_JOIN_KW, TK_CTIME_KW, |
|
90 TK_CTIME_KW, TK_PRIMARY, TK_DEFERRED, TK_DISTINCT, TK_IS, |
|
91 TK_DROP, TK_FAIL, TK_LIMIT, TK_FROM, TK_JOIN_KW, |
|
92 TK_LIKE_KW, TK_BY, TK_IF, TK_INTO, TK_OFFSET, |
|
93 TK_OF, TK_SET, TK_ISNULL, TK_ORDER, TK_RESTRICT, |
|
94 TK_JOIN_KW, TK_JOIN_KW, TK_ROLLBACK, TK_ROW, TK_UNION, |
|
95 TK_USING, TK_VACUUM, TK_VIEW, TK_INITIALLY, TK_ALL, |
|
96 }; |
|
97 int h, i; |
|
98 if( n<2 ) return TK_ID; |
|
99 h = ((charMap(z[0])*4) ^ |
|
100 (charMap(z[n-1])*3) ^ |
|
101 n) % 127; |
|
102 for(i=((int)aHash[h])-1; i>=0; i=((int)aNext[i])-1){ |
|
103 if( aLen[i]==n && sqlite3StrNICmp(&zText[aOffset[i]],z,n)==0 ){ |
|
104 return aCode[i]; |
|
105 } |
|
106 } |
|
107 return TK_ID; |
|
108 } |
|
109 int sqlite3KeywordCode(const unsigned char *z, int n){ |
|
110 return keywordCode((char*)z, n); |
|
111 } |