Commit aa788dce authored by unknown's avatar unknown
Browse files

Merge mysql.com:/home/bkroot/mysql-4.1-rpl

into  mysql.com:/home/bk/MERGE/mysql-4.1-merge

parents a6a93d6f dc62ff55
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -264,6 +264,9 @@ cast(repeat('1',20) as signed)
-7335632962598440505
Warnings:
Warning	1105	Cast to signed converted positive out-of-range integer to it's negative complement
select cast(19999999999999999999 as unsigned);
cast(19999999999999999999 as unsigned)
18446744073709551615
select cast(1.0e+300 as signed int);
cast(1.0e+300 as signed int)
9223372036854775807
+7 −7
Original line number Diff line number Diff line
@@ -340,7 +340,7 @@ set @precision=10000000000;
select rand(), 
cast(rand(10)*@precision as unsigned integer) from t1;
rand()	cast(rand(10)*@precision as unsigned integer)
-	6570515219
-	6570515220
-	1282061302
-	6698761160
-	9647622201
@@ -351,23 +351,23 @@ prepare stmt from
set @var=1;
execute stmt using @var;
rand()	cast(rand(10)*@precision as unsigned integer)	cast(rand(?)*@precision as unsigned integer)
-	6570515219	-
-	6570515220	-
-	1282061302	-
-	6698761160	-
-	9647622201	-
set @var=2;
execute stmt using @var;
rand()	cast(rand(10)*@precision as unsigned integer)	cast(rand(?)*@precision as unsigned integer)
-	6570515219	6555866465
-	1282061302	1223466192
-	6698761160	6449731873
-	6570515220	6555866465
-	1282061302	1223466193
-	6698761160	6449731874
-	9647622201	8578261098
set @var=3;
execute stmt using @var;
rand()	cast(rand(10)*@precision as unsigned integer)	cast(rand(?)*@precision as unsigned integer)
-	6570515219	9057697559
-	6570515220	9057697560
-	1282061302	3730790581
-	6698761160	1480860534
-	6698761160	1480860535
-	9647622201	6211931236
drop table t1;
deallocate prepare stmt;
+6 −0
Original line number Diff line number Diff line
@@ -147,6 +147,12 @@ select cast(concat('184467440','73709551615') as signed);
select cast(repeat('1',20) as unsigned);
select cast(repeat('1',20) as signed);

#
# Bug#8663 cant use bgint unsigned as input to cast
#
select cast(19999999999999999999 as unsigned);


#
# Bug #13344: cast of large decimal to signed int not handled correctly
#
+2 −0
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ DROP TABLE IF EXISTS t1, t2;

CREATE TABLE t1 (id INTEGER, grp TINYINT, id_rev INTEGER);

--disable_warnings
--disable_query_log
SET @rnd_max= 2147483647;
let $1 = 1000;
@@ -43,6 +44,7 @@ INSERT INTO t1 (id, grp, id_rev) SELECT id, grp, id_rev FROM t2;
INSERT INTO t2 (id, grp, id_rev) SELECT id, grp, id_rev FROM t1;
DROP TABLE t2;
--enable_query_log
--enable_warnings

SELECT COUNT(*) FROM t1;

+20 −0
Original line number Diff line number Diff line
@@ -508,6 +508,26 @@ longlong Item_func_unsigned::val_int()
  longlong value;
  int error;

  if (args[0]->result_type() == REAL_RESULT)
  {
    double dvalue= args[0]->val();
    if ((null_value= args[0]->null_value))
      return 0;
    if (dvalue <= (double) LONGLONG_MIN)
    {
      return LONGLONG_MIN;
    }
    if (dvalue >= (double) (ulonglong) ULONGLONG_MAX)
    {
      return (longlong) ULONGLONG_MAX;
    }
    if (dvalue >= (double) (ulonglong) LONGLONG_MAX)
    {
      return (ulonglong) (dvalue + (dvalue > 0 ? 0.5 : -0.5));
    }
    return (longlong)  (dvalue + (dvalue > 0 ? 0.5 : -0.5));
  }

  if (args[0]->cast_to_int_type() != STRING_RESULT)
  {
    value= args[0]->val_int();