summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <monty@hundin.mysql.fi>2002-06-10 13:33:25 +0300
committerunknown <monty@hundin.mysql.fi>2002-06-10 13:33:25 +0300
commit45e0cd61290d8c11edb9f6bbb5cc753bff35ccec (patch)
treeda77e35875e5ea4fe29bf0d97a53ab041b985667
parent3a395a994a3d1f5d38e16e7b4781297692114cfc (diff)
downloadmariadb-git-45e0cd61290d8c11edb9f6bbb5cc753bff35ccec.tar.gz
Fixed bug in SQL_CALC_FOUND_ROWS + LIMIT
Docs/manual.texi: Changelog mysql-test/r/select_found.result: Test of FOUND_ROWS() bug fix mysql-test/t/select_found.test: Test of FOUND_ROWS() bug fix
-rw-r--r--Docs/manual.texi2
-rw-r--r--mysql-test/r/select_found.result18
-rw-r--r--mysql-test/t/select_found.test17
-rw-r--r--sql/sql_select.cc16
4 files changed, 50 insertions, 3 deletions
diff --git a/Docs/manual.texi b/Docs/manual.texi
index cb15cdb5c6c..c82d5e3f91e 100644
--- a/Docs/manual.texi
+++ b/Docs/manual.texi
@@ -49402,6 +49402,8 @@ if the first @code{SELECT} has this option and if there is global @code{LIMIT}
for the entire statement. For the moment, this requires using parentheses for
individual @code{SELECT} queries within the statement.
@item
+Fixed bug in @code{SQL_CALC_FOUND_ROWS} and LIMIT.
+@item
Don't give an error for @code{CREATE TABLE ...(... VARCHAR(0))}.
@item
Fixed @code{SIGINT} and @code{SIGQUIT} problems in @file{mysql.cc} on Linux
diff --git a/mysql-test/r/select_found.result b/mysql-test/r/select_found.result
index 3d2f2154b37..1c2cd7da894 100644
--- a/mysql-test/r/select_found.result
+++ b/mysql-test/r/select_found.result
@@ -66,7 +66,7 @@ a
2
select FOUND_ROWS();
FOUND_ROWS()
-5
+3
drop table t1;
CREATE TABLE t1 (
`id` smallint(5) unsigned NOT NULL auto_increment,
@@ -153,3 +153,19 @@ SELECT FOUND_ROWS();
FOUND_ROWS()
199
drop table t1,t2;
+CREATE TABLE `t1` (
+`titre` char(80) NOT NULL default '',
+`numeropost` mediumint(8) unsigned NOT NULL auto_increment,
+`maxnumrep` int(10) unsigned NOT NULL default '0',
+PRIMARY KEY (`numeropost`),
+KEY `maxnumrep` (`maxnumrep`)
+) TYPE=MyISAM ROW_FORMAT=FIXED;
+INSERT INTO t1 (titre,maxnumrep) VALUES
+('test1','1'),('test2','2'),('test3','3');
+SELECT SQL_CALC_FOUND_ROWS titre,numeropost,maxnumrep FROM t1 WHERE numeropost IN (1,2) ORDER BY maxnumrep DESC LIMIT 0, 1;
+titre numeropost maxnumrep
+test2 2 2
+SELECT FOUND_ROWS();
+FOUND_ROWS()
+2
+drop table t1;
diff --git a/mysql-test/t/select_found.test b/mysql-test/t/select_found.test
index c95d46b166c..0a483c860cb 100644
--- a/mysql-test/t/select_found.test
+++ b/mysql-test/t/select_found.test
@@ -68,3 +68,20 @@ SELECT SQL_CALC_FOUND_ROWS DISTINCT email FROM t2 LEFT JOIN t1 ON kid = t2.id W
SELECT FOUND_ROWS();
drop table t1,t2;
+
+#
+# Test bug when using range optimization
+#
+
+CREATE TABLE `t1` (
+ `titre` char(80) NOT NULL default '',
+ `numeropost` mediumint(8) unsigned NOT NULL auto_increment,
+ `maxnumrep` int(10) unsigned NOT NULL default '0',
+ PRIMARY KEY (`numeropost`),
+ KEY `maxnumrep` (`maxnumrep`)
+) TYPE=MyISAM ROW_FORMAT=FIXED;
+INSERT INTO t1 (titre,maxnumrep) VALUES
+('test1','1'),('test2','2'),('test3','3');
+SELECT SQL_CALC_FOUND_ROWS titre,numeropost,maxnumrep FROM t1 WHERE numeropost IN (1,2) ORDER BY maxnumrep DESC LIMIT 0, 1;
+SELECT FOUND_ROWS();
+drop table t1;
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index 7f194b85ab8..315211f63c5 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -4900,12 +4900,24 @@ end_send(JOIN *join, JOIN_TAB *join_tab __attribute__((unused)),
JOIN_TAB *jt=join->join_tab;
if ((join->tables == 1) && !join->tmp_table && !join->sort_and_group
&& !join->send_group_parts && !join->having && !jt->select_cond &&
+ !(jt->select && jt->select->quick) &&
!(jt->table->file->table_flags() & HA_NOT_EXACT_COUNT))
{
/* Join over all rows in table; Return number of found rows */
+ TABLE *table=jt->table;
+
join->select_options ^= OPTION_FOUND_ROWS;
- jt->table->file->info(HA_STATUS_VARIABLE);
- join->send_records = jt->table->file->records;
+ if (table->record_pointers ||
+ (table->io_cache && my_b_inited(table->io_cache)))
+ {
+ /* Using filesort */
+ join->send_records= table->found_records;
+ }
+ else
+ {
+ table->file->info(HA_STATUS_VARIABLE);
+ join->send_records = table->file->records;
+ }
}
else
{