diff options
author | unknown <bar@mysql.com> | 2004-10-05 21:22:14 +0500 |
---|---|---|
committer | unknown <bar@mysql.com> | 2004-10-05 21:22:14 +0500 |
commit | 70a3abf259e95326703d2bad0cd19101d7ff5b7e (patch) | |
tree | 1e19609d836eac67b738b690a50f2fc5c9c243fd /sql | |
parent | 48ff8f4ddbb79d7e99e8782e55ecc65cda800142 (diff) | |
download | mariadb-git-70a3abf259e95326703d2bad0cd19101d7ff5b7e.tar.gz |
Bug #5832 SELECT doesn't return records in some cases
Diffstat (limited to 'sql')
-rw-r--r-- | sql/field.cc | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/sql/field.cc b/sql/field.cc index eaa1ca2bcca..8c75bd2d4b5 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -5077,6 +5077,11 @@ void Field_blob::get_key_image(char *buff,uint length, } #endif /*HAVE_SPATIAL*/ + get_ptr(&blob); + uint char_length= length / cs->mbmaxlen; + char_length= my_charpos(cs, blob, blob + length, char_length); + set_if_smaller(length, char_length); + if ((uint32) length > blob_length) { /* @@ -5087,7 +5092,6 @@ void Field_blob::get_key_image(char *buff,uint length, length=(uint) blob_length; } int2store(buff,length); - get_ptr(&blob); memcpy(buff+HA_KEY_BLOB_LENGTH, blob, length); } @@ -5103,6 +5107,10 @@ int Field_blob::key_cmp(const byte *key_ptr, uint max_key_length) char *blob1; uint blob_length=get_length(ptr); memcpy_fixed(&blob1,ptr+packlength,sizeof(char*)); + CHARSET_INFO *cs= charset(); + uint char_length= max_key_length / cs->mbmaxlen; + char_length= my_charpos(cs, blob1, blob1+blob_length, char_length); + set_if_smaller(blob_length, char_length); return Field_blob::cmp(blob1,min(blob_length, max_key_length), (char*) key_ptr+HA_KEY_BLOB_LENGTH, uint2korr(key_ptr)); |