summaryrefslogtreecommitdiff
path: root/sql/sql_string.cc
diff options
context:
space:
mode:
authormonty@hundin.mysql.fi <>2001-11-22 13:50:50 +0200
committermonty@hundin.mysql.fi <>2001-11-22 13:50:50 +0200
commit9209210d30e5bd29f4df30f208f6e91cee3e089b (patch)
tree8c1d3e9b787e1017fce3c9e905b829557889f97a /sql/sql_string.cc
parentc6b3afe2d743fd75a96debea3adc591f1ef47faa (diff)
downloadmariadb-git-9209210d30e5bd29f4df30f208f6e91cee3e089b.tar.gz
Fix bug when repairing compressed MyISAM files
LOCATE() is now case sensitive
Diffstat (limited to 'sql/sql_string.cc')
-rw-r--r--sql/sql_string.cc31
1 files changed, 31 insertions, 0 deletions
diff --git a/sql/sql_string.cc b/sql/sql_string.cc
index 046346c1e03..beefa09b54b 100644
--- a/sql/sql_string.cc
+++ b/sql/sql_string.cc
@@ -362,6 +362,37 @@ skipp:
return -1;
}
+/*
+ Search after a string without regarding to case
+ This needs to be replaced when we have character sets per string
+*/
+
+int String::strstr_case(const String &s,uint32 offset)
+{
+ if (s.length()+offset <= str_length)
+ {
+ if (!s.length())
+ return ((int) offset); // Empty string is always found
+
+ register const char *str = Ptr+offset;
+ register const char *search=s.ptr();
+ const char *end=Ptr+str_length-s.length()+1;
+ const char *search_end=s.ptr()+s.length();
+skipp:
+ while (str != end)
+ {
+ if (my_sort_order[*str++] == my_sort_order[*search])
+ {
+ register char *i,*j;
+ i=(char*) str; j=(char*) search+1;
+ while (j != search_end)
+ if (my_sort_order[*i++] != my_sort_order[*j++]) goto skipp;
+ return (int) (str-Ptr) -1;
+ }
+ }
+ }
+ return -1;
+}
/*
** Search string from end. Offset is offset to the end of string