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