[Pkg-mysql-commits] r1179 - in trunk/debian: . patches

Norbert Tretkowski nobse at alioth.debian.org
Thu Mar 20 17:48:15 UTC 2008


tags 32202 pending
tags 471737 pending
thanks

Author: nobse
Date: 2008-03-20 17:48:15 +0000 (Thu, 20 Mar 2008)
New Revision: 1179

Added:
   trunk/debian/patches/56_fix_order_by.dpatch
Modified:
   trunk/debian/changelog
   trunk/debian/patches/00list
Log:
Fix ORDER BY not working with GROUP BY.

Modified: trunk/debian/changelog
===================================================================
--- trunk/debian/changelog	2008-03-16 08:55:17 UTC (rev 1178)
+++ trunk/debian/changelog	2008-03-20 17:48:15 UTC (rev 1179)
@@ -13,10 +13,12 @@
   * Change the testsuite results to contain a tab and not a space for Sphinx.
 
   [ Norbert Tretkowski ]
+  * New patch 56_fix_order_by.dpatch from Ubuntu to fix ORDER BY not working
+    with GROUP BY. (closes: #471737, mysql: #32202)
   * Add note about filename extensions in the /etc/mysql/conf.d directory in
     my.cnf. (closes: #461759)
 
- -- Norbert Tretkowski <nobse at debian.org>  Sun, 16 Mar 2008 09:53:59 +0100
+ -- Norbert Tretkowski <nobse at debian.org>  Thu, 20 Mar 2008 18:39:56 +0100
 
 mysql-dfsg-5.0 (5.0.51a-3) unstable; urgency=low
 

Modified: trunk/debian/patches/00list
===================================================================
--- trunk/debian/patches/00list	2008-03-16 08:55:17 UTC (rev 1178)
+++ trunk/debian/patches/00list	2008-03-20 17:48:15 UTC (rev 1179)
@@ -12,6 +12,7 @@
 53_integer-gcc-4.2.dpatch
 54_ssl-client-support.dpatch
 55_testsuite-2008.dpatch
+56_fix_order_by.dpatch
 #60_raise-max-keylength.dpatch
 86_PATH_MAX.dpatch
 88_sphinx_se.dpatch

Added: trunk/debian/patches/56_fix_order_by.dpatch
===================================================================
--- trunk/debian/patches/56_fix_order_by.dpatch	                        (rev 0)
+++ trunk/debian/patches/56_fix_order_by.dpatch	2008-03-20 17:48:15 UTC (rev 1179)
@@ -0,0 +1,147 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 56_fix_order_by.dpatch by Jamie Strandboge <jamie at ubuntu.com>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: No description.
+
+ at DPATCH@
+diff -urNad mysql-dfsg-5.0-5.0.51a~/mysql-test/r/group_by.result mysql-dfsg-5.0-5.0.51a/mysql-test/r/group_by.result
+--- mysql-dfsg-5.0-5.0.51a~/mysql-test/r/group_by.result	2008-01-11 10:23:35.000000000 -0500
++++ mysql-dfsg-5.0-5.0.51a/mysql-test/r/group_by.result	2008-03-19 16:18:19.000000000 -0400
+@@ -1113,3 +1113,68 @@
+ 3	1
+ 3	2
+ DROP TABLE t1;
++CREATE TABLE t1(
++id INT AUTO_INCREMENT PRIMARY KEY, 
++c1 INT NOT NULL, 
++c2 INT NOT NULL,
++UNIQUE KEY (c2,c1));
++INSERT INTO t1(c1,c2) VALUES (5,1), (4,1), (3,5), (2,3), (1,3);
++SELECT * FROM t1 ORDER BY c1;
++id	c1	c2
++5	1	3
++4	2	3
++3	3	5
++2	4	1
++1	5	1
++SELECT * FROM t1 GROUP BY id ORDER BY c1;
++id	c1	c2
++5	1	3
++4	2	3
++3	3	5
++2	4	1
++1	5	1
++SELECT * FROM t1 GROUP BY id ORDER BY id DESC;
++id	c1	c2
++5	1	3
++4	2	3
++3	3	5
++2	4	1
++1	5	1
++SELECT * FROM t1 GROUP BY c2 ,c1, id ORDER BY c2, c1;
++id	c1	c2
++2	4	1
++1	5	1
++5	1	3
++4	2	3
++3	3	5
++SELECT * FROM t1 GROUP BY c2, c1, id ORDER BY c2 DESC, c1;
++id	c1	c2
++3	3	5
++5	1	3
++4	2	3
++2	4	1
++1	5	1
++SELECT * FROM t1 GROUP BY c2, c1, id ORDER BY c2 DESC, c1 DESC;
++id	c1	c2
++3	3	5
++4	2	3
++5	1	3
++1	5	1
++2	4	1
++SELECT * FROM t1 GROUP BY c2  ORDER BY c2, c1;
++id	c1	c2
++1	5	1
++4	2	3
++3	3	5
++SELECT * FROM t1 GROUP BY c2  ORDER BY c2 DESC, c1;
++id	c1	c2
++3	3	5
++4	2	3
++1	5	1
++SELECT * FROM t1 GROUP BY c2  ORDER BY c2 DESC, c1 DESC;
++id	c1	c2
++3	3	5
++4	2	3
++1	5	1
++DROP TABLE t1;
++End of 5.0 tests
+diff -urNad mysql-dfsg-5.0-5.0.51a~/mysql-test/t/group_by.test mysql-dfsg-5.0-5.0.51a/mysql-test/t/group_by.test
+--- mysql-dfsg-5.0-5.0.51a~/mysql-test/t/group_by.test	2008-01-11 10:23:11.000000000 -0500
++++ mysql-dfsg-5.0-5.0.51a/mysql-test/t/group_by.test	2008-03-19 16:18:19.000000000 -0400
+@@ -815,3 +815,38 @@
+ SELECT c,b   FROM t1 GROUP BY c,b;
+ 
+ DROP TABLE t1;
++
++#
++# Bug #32202: ORDER BY not working with GROUP BY
++#
++
++CREATE TABLE t1(
++  id INT AUTO_INCREMENT PRIMARY KEY, 
++  c1 INT NOT NULL, 
++  c2 INT NOT NULL,
++  UNIQUE KEY (c2,c1));
++
++INSERT INTO t1(c1,c2) VALUES (5,1), (4,1), (3,5), (2,3), (1,3);
++
++# Show that the test cases from the bug report pass
++SELECT * FROM t1 ORDER BY c1;
++SELECT * FROM t1 GROUP BY id ORDER BY c1;
++
++# Show that DESC is handled correctly
++SELECT * FROM t1 GROUP BY id ORDER BY id DESC;
++
++# Show that results are correctly ordered when ORDER BY fields
++# are a subset of GROUP BY ones
++SELECT * FROM t1 GROUP BY c2 ,c1, id ORDER BY c2, c1;
++SELECT * FROM t1 GROUP BY c2, c1, id ORDER BY c2 DESC, c1;
++SELECT * FROM t1 GROUP BY c2, c1, id ORDER BY c2 DESC, c1 DESC;
++
++# Show that results are correctly ordered when GROUP BY fields
++# are a subset of ORDER BY ones
++SELECT * FROM t1 GROUP BY c2  ORDER BY c2, c1;
++SELECT * FROM t1 GROUP BY c2  ORDER BY c2 DESC, c1;
++SELECT * FROM t1 GROUP BY c2  ORDER BY c2 DESC, c1 DESC;
++
++DROP TABLE t1;
++
++--echo End of 5.0 tests
+diff -urNad mysql-dfsg-5.0-5.0.51a~/sql/sql_select.cc mysql-dfsg-5.0-5.0.51a/sql/sql_select.cc
+--- mysql-dfsg-5.0-5.0.51a~/sql/sql_select.cc	2008-03-19 16:18:01.000000000 -0400
++++ mysql-dfsg-5.0-5.0.51a/sql/sql_select.cc	2008-03-19 16:18:19.000000000 -0400
+@@ -1065,10 +1065,19 @@
+         We have found that grouping can be removed since groups correspond to
+         only one row anyway, but we still have to guarantee correct result
+         order. The line below effectively rewrites the query from GROUP BY
+-        <fields> to ORDER BY <fields>. One exception is if skip_sort_order is
+-        set (see above), then we can simply skip GROUP BY.
++        <fields> to ORDER BY <fields>. There are two exceptions:
++        - if skip_sort_order is set (see above), then we can simply skip
++          GROUP BY;
++        - we can only rewrite ORDER BY if the ORDER BY fields are 'compatible'
++          with the GROUP BY ones, i.e. either one is a prefix of another.
++          We only check if the ORDER BY is a prefix of GROUP BY. In this case
++          test_if_subpart() copies the ASC/DESC attributes from the original
++          ORDER BY fields.
++          If GROUP BY is a prefix of ORDER BY, then it is safe to leave
++          'order' as is.
+        */
+-      order= skip_sort_order ? 0 : group_list;
++      if (!order || test_if_subpart(group_list, order))
++          order= skip_sort_order ? 0 : group_list;
+       group_list= 0;
+       group= 0;
+     }




More information about the Pkg-mysql-commits mailing list