mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 14:33:32 +03:00 
			
		
		
		
	Fix for BUG#11821: Make Item_type_holder be able to work with MIN(field),
MAX(field).
This commit is contained in:
		@@ -2721,3 +2721,9 @@ SELECT s.ip, count( e.itemid ) FROM `t1` e JOIN t2 s ON s.sessionid = e.sessioni
 | 
				
			|||||||
ip	count( e.itemid )
 | 
					ip	count( e.itemid )
 | 
				
			||||||
10.10.10.1	1
 | 
					10.10.10.1	1
 | 
				
			||||||
drop tables t1,t2;
 | 
					drop tables t1,t2;
 | 
				
			||||||
 | 
					create table t1 (fld enum('0','1'));
 | 
				
			||||||
 | 
					insert into t1 values ('1');
 | 
				
			||||||
 | 
					select * from (select max(fld) from t1) as foo;
 | 
				
			||||||
 | 
					max(fld)
 | 
				
			||||||
 | 
					1
 | 
				
			||||||
 | 
					drop table t1;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1746,3 +1746,11 @@ CREATE TABLE `t2` (
 | 
				
			|||||||
INSERT INTO `t2` VALUES (1, 1, 1, '10.10.10.1');
 | 
					INSERT INTO `t2` VALUES (1, 1, 1, '10.10.10.1');
 | 
				
			||||||
SELECT s.ip, count( e.itemid ) FROM `t1` e JOIN t2 s ON s.sessionid = e.sessionid WHERE e.sessionid = ( SELECT sessionid FROM t2 ORDER BY sessionid DESC LIMIT 1 ) GROUP BY s.ip HAVING count( e.itemid ) >0 LIMIT 0 , 30;
 | 
					SELECT s.ip, count( e.itemid ) FROM `t1` e JOIN t2 s ON s.sessionid = e.sessionid WHERE e.sessionid = ( SELECT sessionid FROM t2 ORDER BY sessionid DESC LIMIT 1 ) GROUP BY s.ip HAVING count( e.itemid ) >0 LIMIT 0 , 30;
 | 
				
			||||||
drop tables t1,t2;
 | 
					drop tables t1,t2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# BUG#11821 : Select from subselect using aggregate function on an enum
 | 
				
			||||||
 | 
					# segfaults:
 | 
				
			||||||
 | 
					create table t1 (fld enum('0','1'));
 | 
				
			||||||
 | 
					insert into t1 values ('1');
 | 
				
			||||||
 | 
					select * from (select max(fld) from t1) as foo;
 | 
				
			||||||
 | 
					drop table t1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3121,9 +3121,13 @@ void Item_type_holder::get_full_info(Item *item)
 | 
				
			|||||||
  if (fld_type == MYSQL_TYPE_ENUM ||
 | 
					  if (fld_type == MYSQL_TYPE_ENUM ||
 | 
				
			||||||
      fld_type == MYSQL_TYPE_SET)
 | 
					      fld_type == MYSQL_TYPE_SET)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
 | 
					    if (item->type() == Item::SUM_FUNC_ITEM &&
 | 
				
			||||||
 | 
					        (((Item_sum*)item)->sum_func() == Item_sum::MAX_FUNC ||
 | 
				
			||||||
 | 
					         ((Item_sum*)item)->sum_func() == Item_sum::MIN_FUNC))
 | 
				
			||||||
 | 
					      item = ((Item_sum*)item)->args[0];
 | 
				
			||||||
    /*
 | 
					    /*
 | 
				
			||||||
      We can have enum/set type after merging only if we have one enum/set
 | 
					      We can have enum/set type after merging only if we have one enum|set
 | 
				
			||||||
      field and number of NULL fields
 | 
					      field (or MIN|MAX(enum|set field)) and number of NULL fields
 | 
				
			||||||
    */
 | 
					    */
 | 
				
			||||||
    DBUG_ASSERT((enum_set_typelib &&
 | 
					    DBUG_ASSERT((enum_set_typelib &&
 | 
				
			||||||
                 get_real_type(item) == MYSQL_TYPE_NULL) ||
 | 
					                 get_real_type(item) == MYSQL_TYPE_NULL) ||
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user