Commit 6fc62a8e authored by gshchepa/uchum@gleb.loc's avatar gshchepa/uchum@gleb.loc

Merge gleb.loc:/home/uchum/work/bk/5.0-opt

into  gleb.loc:/home/uchum/work/bk/5.1-opt
parents e6a478de dac7ce2d
...@@ -362,6 +362,32 @@ cast(-19999999999999999999 as signed) ...@@ -362,6 +362,32 @@ cast(-19999999999999999999 as signed)
-9223372036854775808 -9223372036854775808
Warnings: Warnings:
Error 1292 Truncated incorrect DECIMAL value: '' Error 1292 Truncated incorrect DECIMAL value: ''
select -9223372036854775808;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
def -9223372036854775808 8 20 20 N 32897 0 63
-9223372036854775808
-9223372036854775808
select -(9223372036854775808);
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
def -(9223372036854775808) 8 20 20 N 32897 0 63
-(9223372036854775808)
-9223372036854775808
select -((9223372036854775808));
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
def -((9223372036854775808)) 8 20 20 N 32897 0 63
-((9223372036854775808))
-9223372036854775808
select -(-(9223372036854775808));
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
def -(-(9223372036854775808)) 246 21 19 N 129 0 63
-(-(9223372036854775808))
9223372036854775808
select --9223372036854775808, ---9223372036854775808, ----9223372036854775808;
--9223372036854775808 ---9223372036854775808 ----9223372036854775808
9223372036854775808 -9223372036854775808 9223372036854775808
select -(-9223372036854775808), -(-(-9223372036854775808));
-(-9223372036854775808) -(-(-9223372036854775808))
9223372036854775808 -9223372036854775808
create table t1 select -9223372036854775808 bi; create table t1 select -9223372036854775808 bi;
describe t1; describe t1;
Field Type Null Key Default Extra Field Type Null Key Default Extra
......
...@@ -2394,4 +2394,80 @@ C ...@@ -2394,4 +2394,80 @@ C
2707236321 2707236321
DROP TABLE t1, t2; DROP TABLE t1, t2;
DROP VIEW v1; DROP VIEW v1;
SELECT LOCATE('foo', NULL) FROM DUAL;
LOCATE('foo', NULL)
NULL
SELECT LOCATE(NULL, 'o') FROM DUAL;
LOCATE(NULL, 'o')
NULL
SELECT LOCATE(NULL, NULL) FROM DUAL;
LOCATE(NULL, NULL)
NULL
SELECT LOCATE('foo', NULL) IS NULL FROM DUAL;
LOCATE('foo', NULL) IS NULL
1
SELECT LOCATE(NULL, 'o') IS NULL FROM DUAL;
LOCATE(NULL, 'o') IS NULL
1
SELECT LOCATE(NULL, NULL) IS NULL FROM DUAL;
LOCATE(NULL, NULL) IS NULL
1
SELECT ISNULL(LOCATE('foo', NULL)) FROM DUAL;
ISNULL(LOCATE('foo', NULL))
1
SELECT ISNULL(LOCATE(NULL, 'o')) FROM DUAL;
ISNULL(LOCATE(NULL, 'o'))
1
SELECT ISNULL(LOCATE(NULL, NULL)) FROM DUAL;
ISNULL(LOCATE(NULL, NULL))
1
SELECT LOCATE('foo', NULL) <=> NULL FROM DUAL;
LOCATE('foo', NULL) <=> NULL
1
SELECT LOCATE(NULL, 'o') <=> NULL FROM DUAL;
LOCATE(NULL, 'o') <=> NULL
1
SELECT LOCATE(NULL, NULL) <=> NULL FROM DUAL;
LOCATE(NULL, NULL) <=> NULL
1
CREATE TABLE t1 (id int NOT NULL PRIMARY KEY, a varchar(10), p varchar(10));
INSERT INTO t1 VALUES (1, 'foo', 'o');
INSERT INTO t1 VALUES (2, 'foo', NULL);
INSERT INTO t1 VALUES (3, NULL, 'o');
INSERT INTO t1 VALUES (4, NULL, NULL);
SELECT id, LOCATE(a,p) FROM t1;
id LOCATE(a,p)
1 0
2 NULL
3 NULL
4 NULL
SELECT id, LOCATE(a,p) IS NULL FROM t1;
id LOCATE(a,p) IS NULL
1 0
2 1
3 1
4 1
SELECT id, ISNULL(LOCATE(a,p)) FROM t1;
id ISNULL(LOCATE(a,p))
1 0
2 1
3 1
4 1
SELECT id, LOCATE(a,p) <=> NULL FROM t1;
id LOCATE(a,p) <=> NULL
1 0
2 1
3 1
4 1
SELECT id FROM t1 WHERE LOCATE(a,p) IS NULL;
id
2
3
4
SELECT id FROM t1 WHERE LOCATE(a,p) <=> NULL;
id
2
3
4
DROP TABLE t1;
End of 5.0 tests End of 5.0 tests
...@@ -295,6 +295,22 @@ drop table t1; ...@@ -295,6 +295,22 @@ drop table t1;
select cast(19999999999999999999 as signed); select cast(19999999999999999999 as signed);
select cast(-19999999999999999999 as signed); select cast(-19999999999999999999 as signed);
#
# Bug #28625: -9223372036854775808 doesn't fit in BIGINT.
#
# PS protocol gives different metadata for `Max length' column
--disable_ps_protocol
--enable_metadata
select -9223372036854775808;
select -(9223372036854775808);
select -((9223372036854775808));
select -(-(9223372036854775808));
--disable_metadata
--endble_ps_protocol
select --9223372036854775808, ---9223372036854775808, ----9223372036854775808;
select -(-9223372036854775808), -(-(-9223372036854775808));
# Bug #28005 Partitions: can't use -9223372036854775808 # Bug #28005 Partitions: can't use -9223372036854775808
create table t1 select -9223372036854775808 bi; create table t1 select -9223372036854775808 bi;
describe t1; describe t1;
......
...@@ -1183,4 +1183,37 @@ SELECT * FROM (SELECT * FROM v1) x; ...@@ -1183,4 +1183,37 @@ SELECT * FROM (SELECT * FROM v1) x;
DROP TABLE t1, t2; DROP TABLE t1, t2;
DROP VIEW v1; DROP VIEW v1;
#
# Bug #27932: LOCATE with argument evaluated to NULL
#
SELECT LOCATE('foo', NULL) FROM DUAL;
SELECT LOCATE(NULL, 'o') FROM DUAL;
SELECT LOCATE(NULL, NULL) FROM DUAL;
SELECT LOCATE('foo', NULL) IS NULL FROM DUAL;
SELECT LOCATE(NULL, 'o') IS NULL FROM DUAL;
SELECT LOCATE(NULL, NULL) IS NULL FROM DUAL;
SELECT ISNULL(LOCATE('foo', NULL)) FROM DUAL;
SELECT ISNULL(LOCATE(NULL, 'o')) FROM DUAL;
SELECT ISNULL(LOCATE(NULL, NULL)) FROM DUAL;
SELECT LOCATE('foo', NULL) <=> NULL FROM DUAL;
SELECT LOCATE(NULL, 'o') <=> NULL FROM DUAL;
SELECT LOCATE(NULL, NULL) <=> NULL FROM DUAL;
CREATE TABLE t1 (id int NOT NULL PRIMARY KEY, a varchar(10), p varchar(10));
INSERT INTO t1 VALUES (1, 'foo', 'o');
INSERT INTO t1 VALUES (2, 'foo', NULL);
INSERT INTO t1 VALUES (3, NULL, 'o');
INSERT INTO t1 VALUES (4, NULL, NULL);
SELECT id, LOCATE(a,p) FROM t1;
SELECT id, LOCATE(a,p) IS NULL FROM t1;
SELECT id, ISNULL(LOCATE(a,p)) FROM t1;
SELECT id, LOCATE(a,p) <=> NULL FROM t1;
SELECT id FROM t1 WHERE LOCATE(a,p) IS NULL;
SELECT id FROM t1 WHERE LOCATE(a,p) <=> NULL;
DROP TABLE t1;
--echo End of 5.0 tests --echo End of 5.0 tests
...@@ -1520,9 +1520,12 @@ void Item_func_neg::fix_length_and_dec() ...@@ -1520,9 +1520,12 @@ void Item_func_neg::fix_length_and_dec()
Use val() to get value as arg_type doesn't mean that item is Use val() to get value as arg_type doesn't mean that item is
Item_int or Item_real due to existence of Item_param. Item_int or Item_real due to existence of Item_param.
*/ */
if (hybrid_type == INT_RESULT && if (hybrid_type == INT_RESULT && args[0]->const_item())
args[0]->type() == INT_ITEM && {
((ulonglong) args[0]->val_int() > (ulonglong) LONGLONG_MIN)) longlong val= args[0]->val_int();
if ((ulonglong) val >= (ulonglong) LONGLONG_MIN &&
((ulonglong) val != (ulonglong) LONGLONG_MIN ||
args[0]->type() != INT_ITEM))
{ {
/* /*
Ensure that result is converted to DECIMAL, as longlong can't hold Ensure that result is converted to DECIMAL, as longlong can't hold
...@@ -1531,6 +1534,7 @@ void Item_func_neg::fix_length_and_dec() ...@@ -1531,6 +1534,7 @@ void Item_func_neg::fix_length_and_dec()
hybrid_type= DECIMAL_RESULT; hybrid_type= DECIMAL_RESULT;
DBUG_PRINT("info", ("Type changed: DECIMAL_RESULT")); DBUG_PRINT("info", ("Type changed: DECIMAL_RESULT"));
} }
}
unsigned_flag= 0; unsigned_flag= 0;
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
...@@ -2499,7 +2503,6 @@ longlong Item_func_coercibility::val_int() ...@@ -2499,7 +2503,6 @@ longlong Item_func_coercibility::val_int()
void Item_func_locate::fix_length_and_dec() void Item_func_locate::fix_length_and_dec()
{ {
maybe_null= 0;
max_length= MY_INT32_NUM_DECIMAL_DIGITS; max_length= MY_INT32_NUM_DECIMAL_DIGITS;
agg_arg_charsets(cmp_collation, args, 2, MY_COLL_CMP_CONV, 1); agg_arg_charsets(cmp_collation, args, 2, MY_COLL_CMP_CONV, 1);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment