summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <evgen@moonbone.local>2007-05-04 12:27:21 +0400
committerunknown <evgen@moonbone.local>2007-05-04 12:27:21 +0400
commit74c794d0e4a14b6deddc90e74ed718c2f00653df (patch)
tree7c4be5e68bcddc6fe24f6fc58b15a3470c9db8a7
parent8e8ece72eb0530bee9b200d92ba14a143cd1dec9 (diff)
parent1a0e3a285818f0a71cdc7f387a63f7cc72c72972 (diff)
downloadmariadb-git-74c794d0e4a14b6deddc90e74ed718c2f00653df.tar.gz
Merge moonbone.local:/mnt/gentoo64/work/23656-bug-4.1-opt-mysql
into moonbone.local:/mnt/gentoo64/work/23656-bug-5.0-opt-mysql mysql-test/r/cast.result: Auto merged mysql-test/t/cast.test: Auto merged sql/item_func.cc: Manual merge
-rw-r--r--mysql-test/r/cast.result6
-rw-r--r--mysql-test/t/cast.test6
-rw-r--r--sql/item_func.cc6
3 files changed, 16 insertions, 2 deletions
diff --git a/mysql-test/r/cast.result b/mysql-test/r/cast.result
index d8e50128902..454a3766572 100644
--- a/mysql-test/r/cast.result
+++ b/mysql-test/r/cast.result
@@ -351,6 +351,12 @@ DROP TABLE t1;
select isnull(date(NULL)), isnull(cast(NULL as DATE));
isnull(date(NULL)) isnull(cast(NULL as DATE))
1 1
+SELECT CAST(cast('01-01-01' as date) AS UNSIGNED);
+CAST(cast('01-01-01' as date) AS UNSIGNED)
+20010101
+SELECT CAST(cast('01-01-01' as date) AS SIGNED);
+CAST(cast('01-01-01' as date) AS SIGNED)
+20010101
End of 4.1 tests
select cast('1.2' as decimal(3,2));
cast('1.2' as decimal(3,2))
diff --git a/mysql-test/t/cast.test b/mysql-test/t/cast.test
index 502c5781f1f..004ef69182d 100644
--- a/mysql-test/t/cast.test
+++ b/mysql-test/t/cast.test
@@ -182,6 +182,12 @@ DROP TABLE t1;
select isnull(date(NULL)), isnull(cast(NULL as DATE));
+#
+# Bug#23656: Wrong result of CAST from DATE to int
+#
+SELECT CAST(cast('01-01-01' as date) AS UNSIGNED);
+SELECT CAST(cast('01-01-01' as date) AS SIGNED);
+
--echo End of 4.1 tests
diff --git a/sql/item_func.cc b/sql/item_func.cc
index 503b4362e7a..eaef07f0cd6 100644
--- a/sql/item_func.cc
+++ b/sql/item_func.cc
@@ -947,7 +947,8 @@ longlong Item_func_signed::val_int()
longlong value;
int error;
- if (args[0]->cast_to_int_type() != STRING_RESULT)
+ if (args[0]->cast_to_int_type() != STRING_RESULT ||
+ args[0]->result_as_longlong())
{
value= args[0]->val_int();
null_value= args[0]->null_value;
@@ -986,7 +987,8 @@ longlong Item_func_unsigned::val_int()
my_decimal2int(E_DEC_FATAL_ERROR, dec, 1, &value);
return value;
}
- else if (args[0]->cast_to_int_type() != STRING_RESULT)
+ else if (args[0]->cast_to_int_type() != STRING_RESULT ||
+ args[0]->result_as_longlong())
{
value= args[0]->val_int();
null_value= args[0]->null_value;