Index: third_party/sqlite/src/tool/mkkeywordhash.c |
diff --git a/third_party/sqlite/src/tool/mkkeywordhash.c b/third_party/sqlite/src/tool/mkkeywordhash.c |
index 721611f5a36ce8e00b1a106348a17b9dff532c92..003ed7d66eff0debe8492e6c2fed5ca758b8f6ea 100644 |
--- a/third_party/sqlite/src/tool/mkkeywordhash.c |
+++ b/third_party/sqlite/src/tool/mkkeywordhash.c |
@@ -277,27 +277,8 @@ static Keyword aKeywordTable[] = { |
/* Number of keywords */ |
static int nKeyword = (sizeof(aKeywordTable)/sizeof(aKeywordTable[0])); |
-/* An array to map all upper-case characters into their corresponding |
-** lower-case character. |
-*/ |
-const unsigned char sqlite3UpperToLower[] = { |
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, |
- 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, |
- 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, |
- 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 97, 98, 99,100,101,102,103, |
- 104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121, |
- 122, 91, 92, 93, 94, 95, 96, 97, 98, 99,100,101,102,103,104,105,106,107, |
- 108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125, |
- 126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, |
- 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161, |
- 162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179, |
- 180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197, |
- 198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215, |
- 216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233, |
- 234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251, |
- 252,253,254,255 |
-}; |
-#define UpperToLower sqlite3UpperToLower |
+/* Map all alphabetic characters into the same case */ |
+#define charMap(X) (0x20|(X)) |
/* |
** Comparision function for two Keyword records |
@@ -372,8 +353,8 @@ int main(int argc, char **argv){ |
assert( p->len<sizeof(p->zOrigName) ); |
memcpy(p->zOrigName, p->zName, p->len+1); |
totalLen += p->len; |
- p->hash = (UpperToLower[(int)p->zName[0]]*4) ^ |
- (UpperToLower[(int)p->zName[p->len-1]]*3) ^ p->len; |
+ p->hash = (charMap(p->zName[0])*4) ^ |
+ (charMap(p->zName[p->len-1])*3) ^ (p->len*1); |
p->id = i+1; |
} |
@@ -481,7 +462,7 @@ int main(int argc, char **argv){ |
/* Begin generating code */ |
printf("%s", zHdr); |
printf("/* Hash score: %d */\n", bestCount); |
- printf("static int keywordCode(const char *z, int n){\n"); |
+ printf("static int keywordCode(const char *z, int n, int *pType){\n"); |
printf(" /* zText[] encodes %d bytes of keywords in %d bytes */\n", |
totalLen + nKeyword, nChar+1 ); |
for(i=j=k=0; i<nKeyword; i++){ |
@@ -585,24 +566,27 @@ int main(int argc, char **argv){ |
printf("%s };\n", j==0 ? "" : "\n"); |
printf(" int h, i;\n"); |
- printf(" if( n<2 ) return TK_ID;\n"); |
- printf(" h = ((charMap(z[0])*4) ^\n" |
- " (charMap(z[n-1])*3) ^\n" |
- " n) %% %d;\n", bestSize); |
- printf(" for(i=((int)aHash[h])-1; i>=0; i=((int)aNext[i])-1){\n"); |
- printf(" if( aLen[i]==n &&" |
- " sqlite3StrNICmp(&zText[aOffset[i]],z,n)==0 ){\n"); |
+ printf(" if( n>=2 ){\n"); |
+ printf(" h = ((charMap(z[0])*4) ^ (charMap(z[n-1])*3) ^ n) %% %d;\n", |
+ bestSize); |
+ printf(" for(i=((int)aHash[h])-1; i>=0; i=((int)aNext[i])-1){\n"); |
+ printf(" if( aLen[i]==n &&" |
+ " sqlite3StrNICmp(&zText[aOffset[i]],z,n)==0 ){\n"); |
for(i=0; i<nKeyword; i++){ |
- printf(" testcase( i==%d ); /* %s */\n", |
+ printf(" testcase( i==%d ); /* %s */\n", |
i, aKeywordTable[i].zOrigName); |
} |
- printf(" return aCode[i];\n"); |
+ printf(" *pType = aCode[i];\n"); |
+ printf(" break;\n"); |
+ printf(" }\n"); |
printf(" }\n"); |
printf(" }\n"); |
- printf(" return TK_ID;\n"); |
+ printf(" return n;\n"); |
printf("}\n"); |
printf("int sqlite3KeywordCode(const unsigned char *z, int n){\n"); |
- printf(" return keywordCode((char*)z, n);\n"); |
+ printf(" int id = TK_ID;\n"); |
+ printf(" keywordCode((char*)z, n, &id);\n"); |
+ printf(" return id;\n"); |
printf("}\n"); |
printf("#define SQLITE_N_KEYWORD %d\n", nKeyword); |