diff options
author | bar@gw.udmsearch.izhnet.ru <> | 2002-03-20 17:33:10 +0400 |
---|---|---|
committer | bar@gw.udmsearch.izhnet.ru <> | 2002-03-20 17:33:10 +0400 |
commit | 823d4da78bf9b0cea78c9020f88e460721744a9e (patch) | |
tree | 83f5ae844a0db05cd4aa9d8fb0eedee36a4588ea /sql/filesort.cc | |
parent | 5da75998cd2f21b85b26363d7aabe2ba1ca7cd98 (diff) | |
download | mariadb-git-823d4da78bf9b0cea78c9020f88e460721744a9e.tar.gz |
Fix for crash in the case of non-string fields
Diffstat (limited to 'sql/filesort.cc')
-rw-r--r-- | sql/filesort.cc | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/sql/filesort.cc b/sql/filesort.cc index 54bd0543886..69279040643 100644 --- a/sql/filesort.cc +++ b/sql/filesort.cc @@ -925,10 +925,13 @@ sortlength(SORT_FIELD *sortorder, uint s_length) { sortorder->length=sortorder->field->pack_length(); #ifdef USE_STRCOLL - // BAR TODO: need checking that it is really Field_str based class - CHARSET_INFO *cs=((Field_str*)(sortorder->field))->charset(); - if (use_strcoll(cs) && !sortorder->field->binary()) - sortorder->length= sortorder->length*cs->strxfrm_multiply; + if (!sortorder->field->binary()) + { + // BAR TODO: need checking that it is really Field_str based class + CHARSET_INFO *cs=((Field_str*)(sortorder->field))->charset(); + if (use_strcoll(cs)) + sortorder->length= sortorder->length*cs->strxfrm_multiply; + } #endif } if (sortorder->field->maybe_null()) @@ -937,15 +940,19 @@ sortlength(SORT_FIELD *sortorder, uint s_length) else { #ifdef USE_STRCOLL - // BAR TODO: need checking that it is really Field_str based class - CHARSET_INFO *cs=((Field_str*)(sortorder->field))->charset(); + #endif switch ((sortorder->result_type=sortorder->item->result_type())) { case STRING_RESULT: sortorder->length=sortorder->item->max_length; #ifdef USE_STRCOLL - if (use_strcoll(cs) && !sortorder->item->binary) - sortorder->length= sortorder->length*cs->strxfrm_multiply; + if (!sortorder->item->binary) + { + // BAR TODO: need checking that it is really Field_str based class + CHARSET_INFO *cs=((Field_str*)(sortorder->field))->charset(); + if (use_strcoll(cs)) + sortorder->length= sortorder->length*cs->strxfrm_multiply; + } #endif break; case INT_RESULT: |