diff options
author | monty@hundin.mysql.fi <> | 2001-11-22 13:50:50 +0200 |
---|---|---|
committer | monty@hundin.mysql.fi <> | 2001-11-22 13:50:50 +0200 |
commit | 9209210d30e5bd29f4df30f208f6e91cee3e089b (patch) | |
tree | 8c1d3e9b787e1017fce3c9e905b829557889f97a /sql/sql_string.cc | |
parent | c6b3afe2d743fd75a96debea3adc591f1ef47faa (diff) | |
download | mariadb-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.cc | 31 |
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 |