diff options
author | unknown <evgen@moonbone.local> | 2006-09-29 21:22:47 +0400 |
---|---|---|
committer | unknown <evgen@moonbone.local> | 2006-09-29 21:22:47 +0400 |
commit | 1643d0c5ed59826a03b294e38719012b3508c2eb (patch) | |
tree | ea9bff3484a50b8a8e24715abafb4cc559d1ae1c | |
parent | 04bf9cc7c6f17d9c6ab14a7521c1ab1708f50993 (diff) | |
parent | 4fd71723915fa9859599d6e8b71c29d5f0a6c38d (diff) | |
download | mariadb-git-1643d0c5ed59826a03b294e38719012b3508c2eb.tar.gz |
Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into moonbone.local:/work/20503-bug-5.0-mysql
sql/sql_select.cc:
Auto merged
-rw-r--r-- | mysql-test/r/select.result | 6 | ||||
-rw-r--r-- | mysql-test/t/select.test | 11 | ||||
-rw-r--r-- | sql/sql_select.cc | 12 |
3 files changed, 28 insertions, 1 deletions
diff --git a/mysql-test/r/select.result b/mysql-test/r/select.result index 0c62d3f570f..350a05a13c8 100644 --- a/mysql-test/r/select.result +++ b/mysql-test/r/select.result @@ -3517,3 +3517,9 @@ id a b c d e 2 NULL NULL NULL 2 40 2 NULL NULL NULL 2 50 DROP TABLE t1,t2,t3; +create table t1 (c1 varchar(1), c2 int, c3 int, c4 int, c5 int, c6 int, +c7 int, c8 int, c9 int, fulltext key (`c1`)); +select distinct match (`c1`) against ('z') , c2, c3, c4,c5, c6,c7, c8 +from t1 where c9=1 order by c2, c2; +match (`c1`) against ('z') c2 c3 c4 c5 c6 c7 c8 +drop table t1; diff --git a/mysql-test/t/select.test b/mysql-test/t/select.test index 36b3749b4d7..0686f670edf 100644 --- a/mysql-test/t/select.test +++ b/mysql-test/t/select.test @@ -2996,5 +2996,14 @@ SELECT * FROM t1 LEFT JOIN t2 ON t2.b=t1.a INNER JOIN t3 ON t3.d=t1.id SELECT * FROM t1 LEFT JOIN t2 ON t2.b=t1.a INNER JOIN t3 ON t3.d=t1.id WHERE t1.id=2; - DROP TABLE t1,t2,t3; + +# +# Bug#20503: Server crash due to the ORDER clause isn't taken into account +# while space allocation +# +create table t1 (c1 varchar(1), c2 int, c3 int, c4 int, c5 int, c6 int, +c7 int, c8 int, c9 int, fulltext key (`c1`)); +select distinct match (`c1`) against ('z') , c2, c3, c4,c5, c6,c7, c8 + from t1 where c9=1 order by c2, c2; +drop table t1; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index b328d9162d5..b814bd1d565 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -13513,7 +13513,19 @@ bool JOIN::alloc_func_list() disctinct->group_by optimization */ if (select_distinct) + { group_parts+= fields_list.elements; + /* + If the ORDER clause is specified then it's possible that + it also will be optimized, so reserve space for it too + */ + if (order) + { + ORDER *ord; + for (ord= order; ord; ord= ord->next) + group_parts++; + } + } /* This must use calloc() as rollup_make_fields depends on this */ sum_funcs= (Item_sum**) thd->calloc(sizeof(Item_sum**) * (func_count+1) + |