diff options
author | unknown <bar@gw.udmsearch.izhnet.ru> | 2002-03-20 17:33:10 +0400 |
---|---|---|
committer | unknown <bar@gw.udmsearch.izhnet.ru> | 2002-03-20 17:33:10 +0400 |
commit | bbde41e9f79b7461da9795bd9ccb9fb314ff5ada (patch) | |
tree | 83f5ae844a0db05cd4aa9d8fb0eedee36a4588ea /sql | |
parent | 474e64081b971eae55ae7db834a9ea582f74bad3 (diff) | |
download | mariadb-git-bbde41e9f79b7461da9795bd9ccb9fb314ff5ada.tar.gz |
Fix for crash in the case of non-string fields
Diffstat (limited to 'sql')
-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: |