summaryrefslogtreecommitdiff
path: root/sql/filesort.cc
diff options
context:
space:
mode:
authorbar@gw.udmsearch.izhnet.ru <>2002-03-20 17:33:10 +0400
committerbar@gw.udmsearch.izhnet.ru <>2002-03-20 17:33:10 +0400
commit823d4da78bf9b0cea78c9020f88e460721744a9e (patch)
tree83f5ae844a0db05cd4aa9d8fb0eedee36a4588ea /sql/filesort.cc
parent5da75998cd2f21b85b26363d7aabe2ba1ca7cd98 (diff)
downloadmariadb-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.cc23
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: