Commit d3db70de authored by unknown's avatar unknown
Browse files

Merge rurik.mysql.com:/home/igor/dev/mysql-4.0-0

into rurik.mysql.com:/home/igor/dev/mysql-4.1-0


mysql-test/r/select_found.result:
  Auto merged
mysql-test/t/select_found.test:
  Auto merged
sql/sql_select.cc:
  Auto merged
parents c695ccd2 25c2d1ad
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -246,3 +246,11 @@ SELECT FOUND_ROWS();
FOUND_ROWS()
0
DROP TABLE t1;
CREATE TABLE t1 (a int, b int);
INSERT INTO t1 VALUES (1,2), (1,3), (1,4), (1,5);
SELECT SQL_CALC_FOUND_ROWS DISTINCT 'a' FROM t1 GROUP BY b LIMIT 2;
a
a
SELECT FOUND_ROWS();
FOUND_ROWS()
1
+9 −0
Original line number Diff line number Diff line
@@ -166,3 +166,12 @@ INSERT INTO t1 VALUES (0), (0), (1), (2);
SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a = 0 GROUP BY a HAVING a > 10;
SELECT FOUND_ROWS();
DROP TABLE t1;

#
# Bug #7945: group by + distinct with constant expression + limit 
#

CREATE TABLE t1 (a int, b int);
INSERT INTO t1 VALUES (1,2), (1,3), (1,4), (1,5);
SELECT SQL_CALC_FOUND_ROWS DISTINCT 'a' FROM t1 GROUP BY b LIMIT 2;
SELECT FOUND_ROWS();
+10 −3
Original line number Diff line number Diff line
@@ -2828,9 +2828,15 @@ find_best(JOIN *join,table_map rest_tables,uint idx,double record_count,
		    x = used key parts (1 <= x <= c)
		  */
		  double rec_per_key;
#if 0
		  if (!(rec_per_key=(double)
			keyinfo->rec_per_key[keyinfo->key_parts-1]))
		    rec_per_key=(double) s->records/rec+1;
#else
                  rec_per_key= keyinfo->rec_per_key[keyinfo->key_parts-1] ?
		    (double) keyinfo->rec_per_key[keyinfo->key_parts-1] :
		    (double) s->records/rec+1;   
#endif

		  if (!s->records)
		    tmp=0;
@@ -7480,13 +7486,14 @@ remove_duplicates(JOIN *join, TABLE *entry,List<Item> &fields, Item *having)
      field_count++;
  }

  if (!field_count)
  {						// only const items
  if (!field_count && !(join->select_options & OPTION_FOUND_ROWS)) 
  {                    // only const items with no OPTION_FOUND_ROWS
    join->unit->select_limit_cnt= 1;		// Only send first row
    DBUG_RETURN(0);
  }
  Field **first_field=entry->field+entry->fields - field_count;
  offset=entry->field[entry->fields - field_count]->offset();
  offset= field_count ? 
          entry->field[entry->fields - field_count]->offset() : 0;
  reclength=entry->reclength-offset;

  free_io_cache(entry);				// Safety