Update of /cvsroot/monetdb/sql/src/common
In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv13960/src/common

Modified Files:
        sql_keyword.mx sql_string.mx 
Log Message:
Added toUpper and avoided name clash. Added all upper case versions
to the symbol table. This accomodates most use cases, if we fail
to find then we re-cast. Savings around 1% on micro-test of Fabian.


U sql_keyword.mx
Index: sql_keyword.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/common/sql_keyword.mx,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- sql_keyword.mx      10 Oct 2008 08:58:34 -0000      1.12
+++ sql_keyword.mx      22 Oct 2008 07:10:12 -0000      1.13
@@ -54,7 +54,17 @@
        int bucket = keyword_key(k = toLower(k), &len) & HASH_MASK;
 
        kw->keyword = k;
+       kw->len = len;
+       kw->token = token;
+       kw->next = keywords[bucket];
+       keywords[bucket] = kw;
 
+/* insert both lower case and upper case to cope
+   with most usage patterns */
+
+       kw = NEW(keyword);
+       bucket = keyword_key(k = toUpper(k), &len) & HASH_MASK;
+       kw->keyword = k;
        kw->len = len;
        kw->token = token;
        kw->next = keywords[bucket];
@@ -65,7 +75,7 @@
 find_keyword(char *text)
 {
        int len = 0;
-       int bucket = keyword_key(mkLower(text), &len) & HASH_MASK;
+       int bucket = keyword_key(text, &len) & HASH_MASK;
        keyword *k = keywords[bucket];
 
        while (k) {
@@ -74,6 +84,15 @@
 
                k = k->next;
        }
+       /* see if recasting works */
+       bucket = keyword_key(mkLower(text), &len) & HASH_MASK;
+       k = keywords[bucket];
+       while (k) {
+               if (len == k->len && strcmp(k->keyword, text) == 0)
+                       return k;
+
+               k = k->next;
+       }
        return NULL;
 }
 

U sql_string.mx
Index: sql_string.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/common/sql_string.mx,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -d -r1.18 -r1.19
--- sql_string.mx       10 Oct 2008 08:58:46 -0000      1.18
+++ sql_string.mx       22 Oct 2008 07:10:12 -0000      1.19
@@ -31,6 +31,7 @@
 
 extern char *mkLower(char *v);
 extern char *toLower(const char *v);
+extern char *toUpper(const char *v);
 extern char *strconcat(const char *s1, const char *s2);
 extern char *strip_extra_zeros(char *v);
 extern char *sql2str(char *s);
@@ -66,6 +67,18 @@
 }
 
 char *
+mkUpper(char *s)
+{
+       char *r = s;
+
+       while (*s) {
+               *s = (char) toupper(*s);
+               s++;
+       }
+       return r;
+}
+
+char *
 toLower(const char *s)
 {
        char *r = _strdup(s);
@@ -73,6 +86,14 @@
        return mkLower(r);
 }
 
+char *
+toUpper(const char *s)
+{
+       char *r = _strdup(s);
+
+       return mkUpper(r);
+}
+
 /* concat s1,s2 into a new result string */
 char *
 strconcat(const char *s1, const char *s2)


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Monetdb-sql-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-sql-checkins

Reply via email to