mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
Merge pilot.blaudden:/home/msvensson/mysql/mysql-4.1
into pilot.blaudden:/home/msvensson/mysql/mysql-4.1-maint
This commit is contained in:
commit
f194cbe62a
4 changed files with 140 additions and 0 deletions
|
@ -879,3 +879,87 @@ ERROR 23000: Column 'val' in order clause is ambiguous
|
|||
SELECT p.a AS val, q.a AS val FROM t1 p, t1 q ORDER BY val > 1;
|
||||
ERROR 23000: Column 'val' in order clause is ambiguous
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (a int);
|
||||
INSERT INTO t1 VALUES (3), (2), (4), (1);
|
||||
SELECT a, IF(a IN (2,3), a, a+10) FROM t1
|
||||
ORDER BY IF(a IN (2,3), a, a+10);
|
||||
a IF(a IN (2,3), a, a+10)
|
||||
2 2
|
||||
3 3
|
||||
1 11
|
||||
4 14
|
||||
SELECT a, IF(a NOT IN (2,3), a, a+10) FROM t1
|
||||
ORDER BY IF(a NOT IN (2,3), a, a+10);
|
||||
a IF(a NOT IN (2,3), a, a+10)
|
||||
1 1
|
||||
4 4
|
||||
2 12
|
||||
3 13
|
||||
SELECT a, IF(a IN (2,3), a, a+10) FROM t1
|
||||
ORDER BY IF(a NOT IN (2,3), a, a+10);
|
||||
a IF(a IN (2,3), a, a+10)
|
||||
1 11
|
||||
4 14
|
||||
2 2
|
||||
3 3
|
||||
SELECT a, IF(a BETWEEN 2 AND 3, a, a+10) FROM t1
|
||||
ORDER BY IF(a BETWEEN 2 AND 3, a, a+10);
|
||||
a IF(a BETWEEN 2 AND 3, a, a+10)
|
||||
2 2
|
||||
3 3
|
||||
1 11
|
||||
4 14
|
||||
SELECT a, IF(a NOT BETWEEN 2 AND 3, a, a+10) FROM t1
|
||||
ORDER BY IF(a NOT BETWEEN 2 AND 3, a, a+10);
|
||||
a IF(a NOT BETWEEN 2 AND 3, a, a+10)
|
||||
1 1
|
||||
4 4
|
||||
2 12
|
||||
3 13
|
||||
SELECT a, IF(a BETWEEN 2 AND 3, a, a+10) FROM t1
|
||||
ORDER BY IF(a NOT BETWEEN 2 AND 3, a, a+10);
|
||||
a IF(a BETWEEN 2 AND 3, a, a+10)
|
||||
1 11
|
||||
4 14
|
||||
2 2
|
||||
3 3
|
||||
SELECT IF(a IN (1,2), a, '') as x1, IF(a NOT IN (1,2), a, '') as x2
|
||||
FROM t1 GROUP BY x1, x2;
|
||||
x1 x2
|
||||
3
|
||||
4
|
||||
1
|
||||
2
|
||||
SELECT IF(a IN (1,2), a, '') as x1, IF(a NOT IN (1,2), a, '') as x2
|
||||
FROM t1 GROUP BY x1, IF(a NOT IN (1,2), a, '');
|
||||
x1 x2
|
||||
3
|
||||
4
|
||||
1
|
||||
2
|
||||
SELECT a, a IN (1,2) FROM t1 ORDER BY a IN (1,2);
|
||||
a a IN (1,2)
|
||||
3 0
|
||||
4 0
|
||||
2 1
|
||||
1 1
|
||||
SELECT a FROM t1 ORDER BY a IN (1,2);
|
||||
a
|
||||
3
|
||||
4
|
||||
2
|
||||
1
|
||||
SELECT a+10 FROM t1 ORDER BY a IN (1,2);
|
||||
a+10
|
||||
13
|
||||
14
|
||||
12
|
||||
11
|
||||
SELECT a, IF(a IN (1,2), a, a+10) FROM t1
|
||||
ORDER BY IF(a IN (3,4), a, a+10);
|
||||
a IF(a IN (1,2), a, a+10)
|
||||
3 13
|
||||
4 14
|
||||
1 1
|
||||
2 2
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -619,4 +619,39 @@ SELECT p.a AS val, q.a AS val FROM t1 p, t1 q ORDER BY val > 1;
|
|||
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug #27532: ORDER/GROUP BY expressions with IN/BETWEEN and NOT IN/BETWEEN
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (a int);
|
||||
INSERT INTO t1 VALUES (3), (2), (4), (1);
|
||||
|
||||
SELECT a, IF(a IN (2,3), a, a+10) FROM t1
|
||||
ORDER BY IF(a IN (2,3), a, a+10);
|
||||
SELECT a, IF(a NOT IN (2,3), a, a+10) FROM t1
|
||||
ORDER BY IF(a NOT IN (2,3), a, a+10);
|
||||
SELECT a, IF(a IN (2,3), a, a+10) FROM t1
|
||||
ORDER BY IF(a NOT IN (2,3), a, a+10);
|
||||
|
||||
SELECT a, IF(a BETWEEN 2 AND 3, a, a+10) FROM t1
|
||||
ORDER BY IF(a BETWEEN 2 AND 3, a, a+10);
|
||||
SELECT a, IF(a NOT BETWEEN 2 AND 3, a, a+10) FROM t1
|
||||
ORDER BY IF(a NOT BETWEEN 2 AND 3, a, a+10);
|
||||
SELECT a, IF(a BETWEEN 2 AND 3, a, a+10) FROM t1
|
||||
ORDER BY IF(a NOT BETWEEN 2 AND 3, a, a+10);
|
||||
|
||||
SELECT IF(a IN (1,2), a, '') as x1, IF(a NOT IN (1,2), a, '') as x2
|
||||
FROM t1 GROUP BY x1, x2;
|
||||
SELECT IF(a IN (1,2), a, '') as x1, IF(a NOT IN (1,2), a, '') as x2
|
||||
FROM t1 GROUP BY x1, IF(a NOT IN (1,2), a, '');
|
||||
|
||||
# The remaining queries are for better coverage
|
||||
SELECT a, a IN (1,2) FROM t1 ORDER BY a IN (1,2);
|
||||
SELECT a FROM t1 ORDER BY a IN (1,2);
|
||||
SELECT a+10 FROM t1 ORDER BY a IN (1,2);
|
||||
SELECT a, IF(a IN (1,2), a, a+10) FROM t1
|
||||
ORDER BY IF(a IN (3,4), a, a+10);
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
# End of 4.1 tests
|
||||
|
|
|
@ -838,6 +838,26 @@ longlong Item_func_strcmp::val_int()
|
|||
}
|
||||
|
||||
|
||||
bool Item_func_opt_neg::eq(const Item *item, bool binary_cmp) const
|
||||
{
|
||||
/* Assume we don't have rtti */
|
||||
if (this == item)
|
||||
return 1;
|
||||
if (item->type() != FUNC_ITEM)
|
||||
return 0;
|
||||
Item_func *item_func=(Item_func*) item;
|
||||
if (arg_count != item_func->arg_count ||
|
||||
functype() != item_func->functype())
|
||||
return 0;
|
||||
if (negated != ((Item_func_opt_neg *) item_func)->negated)
|
||||
return 0;
|
||||
for (uint i=0; i < arg_count ; i++)
|
||||
if (!args[i]->eq(item_func->arguments()[i], binary_cmp))
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
void Item_func_interval::fix_length_and_dec()
|
||||
{
|
||||
if (row->cols() > 8)
|
||||
|
|
|
@ -405,6 +405,7 @@ public:
|
|||
negated= !negated;
|
||||
return this;
|
||||
}
|
||||
bool eq(const Item *item, bool binary_cmp) const;
|
||||
};
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue