Commit ad04b7f6 authored by monty@hundin.mysql.fi's avatar monty@hundin.mysql.fi
Browse files

Fixed bug in SQL_CALC_FOUND_ROWS + LIMIT

parent 2c274c64
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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
+17 −1
Original line number Diff line number Diff line
@@ -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;
+17 −0
Original line number Diff line number Diff line
@@ -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;
+14 −2
Original line number Diff line number Diff line
@@ -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 
	{