summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorram@gw.mysql.r18.ru <>2004-08-12 14:59:33 +0500
committerram@gw.mysql.r18.ru <>2004-08-12 14:59:33 +0500
commit494a3b05593235089daf7a0585ab209c4f74b412 (patch)
treec02c37bce637b20c345a089da05d7f0c145e94ff /sql
parent259bce85b4497048c5348091052bf5c9c33a591b (diff)
parent955e869d7cdb71e536017e5f70101dd975f06ba3 (diff)
downloadmariadb-git-494a3b05593235089daf7a0585ab209c4f74b412.tar.gz
Merge rkalimullin@bk-internal.mysql.com:/home/bk/mysql-4.0
into gw.mysql.r18.ru:/usr/home/ram/work/4.0.b4898
Diffstat (limited to 'sql')
-rw-r--r--sql/sql_acl.cc18
1 files changed, 13 insertions, 5 deletions
diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc
index 4af6f407b57..58d0fe9a7fa 100644
--- a/sql/sql_acl.cc
+++ b/sql/sql_acl.cc
@@ -460,22 +460,30 @@ static ulong get_sort(uint count,...)
va_start(args,count);
ulong sort=0;
+ /* Should not use this function with more than 4 arguments for compare. */
+ DBUG_ASSERT(count <= 4);
+
while (count--)
{
- char *str=va_arg(args,char*);
- uint chars=0,wild=0;
+ char *start, *str= va_arg(args,char*);
+ uint chars= 0;
+ uint wild_pos= 0; /* first wildcard position */
- if (str)
+ if (start= str)
{
for (; *str ; str++)
{
if (*str == wild_many || *str == wild_one || *str == wild_prefix)
- wild++;
+ {
+ wild_pos= str - start + 1;
+ break;
+ }
else
chars++;
}
}
- sort= (sort << 8) + (wild ? 1 : chars ? 2 : 0);
+ sort= (sort << 8) + (wild_pos ? (wild_pos > 127 ? 127 : wild_pos) :
+ (chars ? 128 : 0));
}
va_end(args);
return sort;