summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <igor@rurik.mysql.com>2006-09-29 11:36:27 -0700
committerunknown <igor@rurik.mysql.com>2006-09-29 11:36:27 -0700
commitf66945aadb88bc66efebdd5333e7baf8acf0fe30 (patch)
tree09106c2af35d65c519afb9dc8a33a06334a467b4
parentd1da520f9bc4366547d1b64f8a55e77a77127d61 (diff)
parent1643d0c5ed59826a03b294e38719012b3508c2eb (diff)
downloadmariadb-git-f66945aadb88bc66efebdd5333e7baf8acf0fe30.tar.gz
Merge ibabaev@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into rurik.mysql.com:/home/igor/mysql-5.0-opt mysql-test/r/select.result: Manual merge mysql-test/t/select.test: Manual merge
-rw-r--r--mysql-test/r/select.result6
-rw-r--r--mysql-test/t/select.test8
-rw-r--r--sql/sql_select.cc12
3 files changed, 26 insertions, 0 deletions
diff --git a/mysql-test/r/select.result b/mysql-test/r/select.result
index 34b2a93e39b..9c35e1963e6 100644
--- a/mysql-test/r/select.result
+++ b/mysql-test/r/select.result
@@ -3517,6 +3517,12 @@ 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;
CREATE TABLE t1 (pk varchar(10) PRIMARY KEY, fk varchar(16));
CREATE TABLE t2 (pk varchar(16) PRIMARY KEY, fk varchar(10));
INSERT INTO t1 VALUES
diff --git a/mysql-test/t/select.test b/mysql-test/t/select.test
index 861b9160644..166b709f9b6 100644
--- a/mysql-test/t/select.test
+++ b/mysql-test/t/select.test
@@ -2999,6 +2999,14 @@ SELECT * FROM t1 LEFT JOIN t2 ON t2.b=t1.a INNER JOIN t3 ON t3.d=t1.id
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;
# Bug #22735: no equality propagation for BETWEEN and IN with STRING arguments
#
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) +