mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge ibabaev@bk-internal.mysql.com:/home/bk/mysql-5.0
into rurik.mysql.com:/home/igor/mysql-5.0 sql/sql_select.cc: Auto merged
This commit is contained in:
@ -555,3 +555,25 @@ IFNULL(a, 'TEST') COALESCE(b, 'TEST')
|
|||||||
4 TEST
|
4 TEST
|
||||||
TEST TEST
|
TEST TEST
|
||||||
DROP TABLE t1,t2;
|
DROP TABLE t1,t2;
|
||||||
|
CREATE TABLE t1(id int, type char(1));
|
||||||
|
INSERT INTO t1 VALUES
|
||||||
|
(1,"A"),(2,"C"),(3,"A"),(4,"A"),(5,"B"),
|
||||||
|
(6,"B"),(7,"A"),(8,"C"),(9,"A"),(10,"C");
|
||||||
|
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||||
|
SELECT type FROM t1 GROUP BY type WITH ROLLUP;
|
||||||
|
type
|
||||||
|
A
|
||||||
|
B
|
||||||
|
C
|
||||||
|
NULL
|
||||||
|
SELECT type FROM v1 GROUP BY type WITH ROLLUP;
|
||||||
|
type
|
||||||
|
A
|
||||||
|
B
|
||||||
|
C
|
||||||
|
NULL
|
||||||
|
EXPLAIN SELECT type FROM v1 GROUP BY type WITH ROLLUP;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 PRIMARY t1 ALL NULL NULL NULL NULL 10 Using filesort
|
||||||
|
DROP VIEW v1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -1563,7 +1563,7 @@ one 1025,2025,3025
|
|||||||
two 1050,1050
|
two 1050,1050
|
||||||
select col1,group_concat(col2,col3) from v1 group by col1;
|
select col1,group_concat(col2,col3) from v1 group by col1;
|
||||||
col1 group_concat(col2,col3)
|
col1 group_concat(col2,col3)
|
||||||
two 1025,2025,3025
|
one 1025,2025,3025
|
||||||
two 1050,1050
|
two 1050,1050
|
||||||
drop view v1;
|
drop view v1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
@ -250,3 +250,19 @@ SELECT IFNULL(a, 'TEST'), COALESCE(b, 'TEST') FROM t2
|
|||||||
|
|
||||||
DROP TABLE t1,t2;
|
DROP TABLE t1,t2;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Tests for bug #11639: ROLLUP over view executed through filesort
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1(id int, type char(1));
|
||||||
|
INSERT INTO t1 VALUES
|
||||||
|
(1,"A"),(2,"C"),(3,"A"),(4,"A"),(5,"B"),
|
||||||
|
(6,"B"),(7,"A"),(8,"C"),(9,"A"),(10,"C");
|
||||||
|
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||||
|
|
||||||
|
SELECT type FROM t1 GROUP BY type WITH ROLLUP;
|
||||||
|
SELECT type FROM v1 GROUP BY type WITH ROLLUP;
|
||||||
|
EXPLAIN SELECT type FROM v1 GROUP BY type WITH ROLLUP;
|
||||||
|
|
||||||
|
DROP VIEW v1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -1440,7 +1440,10 @@ public:
|
|||||||
:Item_ident(thd, item), result_field(item->result_field), ref(item->ref) {}
|
:Item_ident(thd, item), result_field(item->result_field), ref(item->ref) {}
|
||||||
enum Type type() const { return REF_ITEM; }
|
enum Type type() const { return REF_ITEM; }
|
||||||
bool eq(const Item *item, bool binary_cmp) const
|
bool eq(const Item *item, bool binary_cmp) const
|
||||||
{ return ref && (*ref)->eq(item, binary_cmp); }
|
{
|
||||||
|
Item *it= ((Item *) item)->real_item();
|
||||||
|
return ref && (*ref)->eq(it, binary_cmp);
|
||||||
|
}
|
||||||
double val_real();
|
double val_real();
|
||||||
longlong val_int();
|
longlong val_int();
|
||||||
my_decimal *val_decimal(my_decimal *);
|
my_decimal *val_decimal(my_decimal *);
|
||||||
|
@ -12157,7 +12157,7 @@ count_field_types(TMP_TABLE_PARAM *param, List<Item> &fields,
|
|||||||
param->quick_group=1;
|
param->quick_group=1;
|
||||||
while ((field=li++))
|
while ((field=li++))
|
||||||
{
|
{
|
||||||
Item::Type type=field->type();
|
Item::Type type=field->real_item()->type();
|
||||||
if (type == Item::FIELD_ITEM)
|
if (type == Item::FIELD_ITEM)
|
||||||
param->field_count++;
|
param->field_count++;
|
||||||
else if (type == Item::SUM_FUNC_ITEM)
|
else if (type == Item::SUM_FUNC_ITEM)
|
||||||
@ -12171,7 +12171,7 @@ count_field_types(TMP_TABLE_PARAM *param, List<Item> &fields,
|
|||||||
|
|
||||||
for (uint i=0 ; i < sum_item->arg_count ; i++)
|
for (uint i=0 ; i < sum_item->arg_count ; i++)
|
||||||
{
|
{
|
||||||
if (sum_item->args[0]->type() == Item::FIELD_ITEM)
|
if (sum_item->args[0]->real_item()->type() == Item::FIELD_ITEM)
|
||||||
param->field_count++;
|
param->field_count++;
|
||||||
else
|
else
|
||||||
param->func_count++;
|
param->func_count++;
|
||||||
@ -12418,9 +12418,10 @@ setup_copy_fields(THD *thd, TMP_TABLE_PARAM *param,
|
|||||||
param->copy_funcs.empty();
|
param->copy_funcs.empty();
|
||||||
for (i= 0; (pos= li++); i++)
|
for (i= 0; (pos= li++); i++)
|
||||||
{
|
{
|
||||||
if (pos->type() == Item::FIELD_ITEM)
|
if (pos->real_item()->type() == Item::FIELD_ITEM)
|
||||||
{
|
{
|
||||||
Item_field *item;
|
Item_field *item;
|
||||||
|
pos= pos->real_item();
|
||||||
if (!(item= new Item_field(thd, ((Item_field*) pos))))
|
if (!(item= new Item_field(thd, ((Item_field*) pos))))
|
||||||
goto err;
|
goto err;
|
||||||
pos= item;
|
pos= item;
|
||||||
|
Reference in New Issue
Block a user