| Index: third_party/sqlite/sqlite-src-3100200/tool/mkkeywordhash.c
|
| diff --git a/third_party/sqlite/src/tool/mkkeywordhash.c b/third_party/sqlite/sqlite-src-3100200/tool/mkkeywordhash.c
|
| similarity index 91%
|
| copy from third_party/sqlite/src/tool/mkkeywordhash.c
|
| copy to third_party/sqlite/sqlite-src-3100200/tool/mkkeywordhash.c
|
| index 721611f5a36ce8e00b1a106348a17b9dff532c92..003ed7d66eff0debe8492e6c2fed5ca758b8f6ea 100644
|
| --- a/third_party/sqlite/src/tool/mkkeywordhash.c
|
| +++ b/third_party/sqlite/sqlite-src-3100200/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);
|
|
|
|
|