Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
83e8b709
Commit
83e8b709
authored
Apr 28, 2007
by
kaa@polly.local
Browse files
Options
Browse Files
Download
Plain Diff
Merge polly.local:/home/kaa/src/maint/bug24912/my51-bug24912
into polly.local:/home/kaa/src/maint/mysql-5.1-maint
parents
65dbbb9f
a45b654e
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
207 additions
and
57 deletions
+207
-57
mysql-test/r/func_math.result
mysql-test/r/func_math.result
+90
-5
mysql-test/r/type_newdecimal.result
mysql-test/r/type_newdecimal.result
+1
-1
mysql-test/t/func_math.test
mysql-test/t/func_math.test
+34
-5
sql/item_func.cc
sql/item_func.cc
+78
-37
sql/item_func.h
sql/item_func.h
+1
-7
sql/item_strfunc.cc
sql/item_strfunc.cc
+1
-1
sql/mysql_priv.h
sql/mysql_priv.h
+2
-1
No files found.
mysql-test/r/func_math.result
View file @
83e8b709
...
...
@@ -155,9 +155,6 @@ select format(col2,6) from t1 where col1=7;
format(col2,6)
1,234,567,890,123,456.123450
drop table t1;
select round(150, 2);
round(150, 2)
150.00
select ceil(0.09);
ceil(0.09)
1
...
...
@@ -168,11 +165,11 @@ create table t1 select round(1, 6);
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`round(1, 6)`
decimal(7,6) NOT NULL DEFAULT '0.00000
0'
`round(1, 6)`
int(1) NOT NULL DEFAULT '
0'
) ENGINE=MyISAM DEFAULT CHARSET=latin1
select * from t1;
round(1, 6)
1
.000000
1
drop table t1;
select abs(-2) * -2;
abs(-2) * -2
...
...
@@ -285,3 +282,91 @@ format(t2.f2-t2.f1+1,0)
10,000
drop table t1, t2;
set names default;
select cast(-2 as unsigned), 18446744073709551614, -2;
cast(-2 as unsigned) 18446744073709551614 -2
18446744073709551614 18446744073709551614 -2
select abs(cast(-2 as unsigned)), abs(18446744073709551614), abs(-2);
abs(cast(-2 as unsigned)) abs(18446744073709551614) abs(-2)
18446744073709551614 18446744073709551614 2
select ceiling(cast(-2 as unsigned)), ceiling(18446744073709551614), ceiling(-2);
ceiling(cast(-2 as unsigned)) ceiling(18446744073709551614) ceiling(-2)
18446744073709551614 18446744073709551614 -2
select floor(cast(-2 as unsigned)), floor(18446744073709551614), floor(-2);
floor(cast(-2 as unsigned)) floor(18446744073709551614) floor(-2)
18446744073709551614 18446744073709551614 -2
select format(cast(-2 as unsigned), 2), format(18446744073709551614, 2), format(-2, 2);
format(cast(-2 as unsigned), 2) format(18446744073709551614, 2) format(-2, 2)
18,446,744,073,709,551,614.00 18,446,744,073,709,551,614.00 -2.00
select sqrt(cast(-2 as unsigned)), sqrt(18446744073709551614), sqrt(-2);
sqrt(cast(-2 as unsigned)) sqrt(18446744073709551614) sqrt(-2)
4294967296 4294967296 NULL
select round(cast(-2 as unsigned), 1), round(18446744073709551614, 1), round(-2, 1);
round(cast(-2 as unsigned), 1) round(18446744073709551614, 1) round(-2, 1)
18446744073709551614 18446744073709551614 -2
select round(4, cast(-2 as unsigned)), round(4, 18446744073709551614), round(4, -2);
round(4, cast(-2 as unsigned)) round(4, 18446744073709551614) round(4, -2)
4 4 0
select truncate(cast(-2 as unsigned), 1), truncate(18446744073709551614, 1), truncate(-2, 1);
truncate(cast(-2 as unsigned), 1) truncate(18446744073709551614, 1) truncate(-2, 1)
18446744073709551614 18446744073709551614 -2
select truncate(4, cast(-2 as unsigned)), truncate(4, 18446744073709551614), truncate(4, -2);
truncate(4, cast(-2 as unsigned)) truncate(4, 18446744073709551614) truncate(4, -2)
4 4 0
select round(10000000000000000000, -19), truncate(10000000000000000000, -19);
round(10000000000000000000, -19) truncate(10000000000000000000, -19)
10000000000000000000 10000000000000000000
select round(1e0, -309), truncate(1e0, -309);
round(1e0, -309) truncate(1e0, -309)
0 0
select round(1e1,308), truncate(1e1, 308);
round(1e1,308) truncate(1e1, 308)
10 10
select round(1e1, 2147483648), truncate(1e1, 2147483648);
round(1e1, 2147483648) truncate(1e1, 2147483648)
10 10
select round(1.1e1, 4294967295), truncate(1.1e1, 4294967295);
round(1.1e1, 4294967295) truncate(1.1e1, 4294967295)
11 11
select round(1.12e1, 4294967296), truncate(1.12e1, 4294967296);
round(1.12e1, 4294967296) truncate(1.12e1, 4294967296)
11.2 11.2
select round(1.5, 2147483640), truncate(1.5, 2147483640);
round(1.5, 2147483640) truncate(1.5, 2147483640)
1.500000000000000000000000000000 1.500000000000000000000000000000
select round(1.5, -2147483649), round(1.5, 2147483648);
round(1.5, -2147483649) round(1.5, 2147483648)
0 1.500000000000000000000000000000
select truncate(1.5, -2147483649), truncate(1.5, 2147483648);
truncate(1.5, -2147483649) truncate(1.5, 2147483648)
0 1.500000000000000000000000000000
select round(1.5, -4294967296), round(1.5, 4294967296);
round(1.5, -4294967296) round(1.5, 4294967296)
0 1.500000000000000000000000000000
select truncate(1.5, -4294967296), truncate(1.5, 4294967296);
truncate(1.5, -4294967296) truncate(1.5, 4294967296)
0 1.500000000000000000000000000000
select round(1.5, -9223372036854775808), round(1.5, 9223372036854775808);
round(1.5, -9223372036854775808) round(1.5, 9223372036854775808)
0 1.500000000000000000000000000000
select truncate(1.5, -9223372036854775808), truncate(1.5, 9223372036854775808);
truncate(1.5, -9223372036854775808) truncate(1.5, 9223372036854775808)
0 1.500000000000000000000000000000
select round(1.5, 18446744073709551615), truncate(1.5, 18446744073709551615);
round(1.5, 18446744073709551615) truncate(1.5, 18446744073709551615)
1.500000000000000000000000000000 1.500000000000000000000000000000
select round(18446744073709551614, -1), truncate(18446744073709551614, -1);
round(18446744073709551614, -1) truncate(18446744073709551614, -1)
18446744073709551610 18446744073709551610
select round(4, -4294967200), truncate(4, -4294967200);
round(4, -4294967200) truncate(4, -4294967200)
0 0
select mod(cast(-2 as unsigned), 3), mod(18446744073709551614, 3), mod(-2, 3);
mod(cast(-2 as unsigned), 3) mod(18446744073709551614, 3) mod(-2, 3)
2 2 -2
select mod(5, cast(-2 as unsigned)), mod(5, 18446744073709551614), mod(5, -2);
mod(5, cast(-2 as unsigned)) mod(5, 18446744073709551614) mod(5, -2)
5 5 1
select pow(cast(-2 as unsigned), 5), pow(18446744073709551614, 5), pow(-2, 5);
pow(cast(-2 as unsigned), 5) pow(18446744073709551614, 5) pow(-2, 5)
2.1359870359209e+96 2.1359870359209e+96 -32
End of 5.0 tests
mysql-test/r/type_newdecimal.result
View file @
83e8b709
...
...
@@ -763,7 +763,7 @@ truncate(99999999999999999999999999999999999999,31)
99999999999999999999999999999999999999.000000000000000000000000000000
select truncate(99.999999999999999999999999999999999999,31);
truncate(99.999999999999999999999999999999999999,31)
100.000000000000000000000000000000
99.999999999999999999999999999999
select truncate(99999999999999999999999999999999999999,-31);
truncate(99999999999999999999999999999999999999,-31)
99999990000000000000000000000000000000
...
...
mysql-test/t/func_math.test
View file @
83e8b709
...
...
@@ -87,11 +87,6 @@ select format(col2,6) from t1 where col1=7;
drop
table
t1
;
#
# Bug #10083 (round doesn't increase decimals)
#
select
round
(
150
,
2
);
#
# Bug @10632 (Ceiling function returns wrong answer)
#
...
...
@@ -196,3 +191,37 @@ select format(t2.f2-t2.f1+1,0) from t1,t2
where
t1
.
f2
=
t2
.
f3
order
by
t1
.
f1
;
drop
table
t1
,
t2
;
set
names
default
;
# Bug 24912 -- misc functions have trouble with unsigned
select
cast
(
-
2
as
unsigned
),
18446744073709551614
,
-
2
;
select
abs
(
cast
(
-
2
as
unsigned
)),
abs
(
18446744073709551614
),
abs
(
-
2
);
select
ceiling
(
cast
(
-
2
as
unsigned
)),
ceiling
(
18446744073709551614
),
ceiling
(
-
2
);
select
floor
(
cast
(
-
2
as
unsigned
)),
floor
(
18446744073709551614
),
floor
(
-
2
);
select
format
(
cast
(
-
2
as
unsigned
),
2
),
format
(
18446744073709551614
,
2
),
format
(
-
2
,
2
);
select
sqrt
(
cast
(
-
2
as
unsigned
)),
sqrt
(
18446744073709551614
),
sqrt
(
-
2
);
select
round
(
cast
(
-
2
as
unsigned
),
1
),
round
(
18446744073709551614
,
1
),
round
(
-
2
,
1
);
select
round
(
4
,
cast
(
-
2
as
unsigned
)),
round
(
4
,
18446744073709551614
),
round
(
4
,
-
2
);
select
truncate
(
cast
(
-
2
as
unsigned
),
1
),
truncate
(
18446744073709551614
,
1
),
truncate
(
-
2
,
1
);
select
truncate
(
4
,
cast
(
-
2
as
unsigned
)),
truncate
(
4
,
18446744073709551614
),
truncate
(
4
,
-
2
);
select
round
(
10000000000000000000
,
-
19
),
truncate
(
10000000000000000000
,
-
19
);
select
round
(
1
e0
,
-
309
),
truncate
(
1
e0
,
-
309
);
select
round
(
1
e1
,
308
),
truncate
(
1
e1
,
308
);
select
round
(
1
e1
,
2147483648
),
truncate
(
1
e1
,
2147483648
);
select
round
(
1.1e1
,
4294967295
),
truncate
(
1.1e1
,
4294967295
);
select
round
(
1.12e1
,
4294967296
),
truncate
(
1.12e1
,
4294967296
);
select
round
(
1.5
,
2147483640
),
truncate
(
1.5
,
2147483640
);
select
round
(
1.5
,
-
2147483649
),
round
(
1.5
,
2147483648
);
select
truncate
(
1.5
,
-
2147483649
),
truncate
(
1.5
,
2147483648
);
select
round
(
1.5
,
-
4294967296
),
round
(
1.5
,
4294967296
);
select
truncate
(
1.5
,
-
4294967296
),
truncate
(
1.5
,
4294967296
);
select
round
(
1.5
,
-
9223372036854775808
),
round
(
1.5
,
9223372036854775808
);
select
truncate
(
1.5
,
-
9223372036854775808
),
truncate
(
1.5
,
9223372036854775808
);
select
round
(
1.5
,
18446744073709551615
),
truncate
(
1.5
,
18446744073709551615
);
select
round
(
18446744073709551614
,
-
1
),
truncate
(
18446744073709551614
,
-
1
);
select
round
(
4
,
-
4294967200
),
truncate
(
4
,
-
4294967200
);
select
mod
(
cast
(
-
2
as
unsigned
),
3
),
mod
(
18446744073709551614
,
3
),
mod
(
-
2
,
3
);
select
mod
(
5
,
cast
(
-
2
as
unsigned
)),
mod
(
5
,
18446744073709551614
),
mod
(
5
,
-
2
);
select
pow
(
cast
(
-
2
as
unsigned
),
5
),
pow
(
18446744073709551614
,
5
),
pow
(
-
2
,
5
);
--
echo
End
of
5.0
tests
sql/item_func.cc
View file @
83e8b709
...
...
@@ -620,6 +620,14 @@ Item *Item_func::get_tmp_table_item(THD *thd)
return
copy_or_same
(
thd
);
}
double
Item_int_func
::
val_real
()
{
DBUG_ASSERT
(
fixed
==
1
);
return
unsigned_flag
?
(
double
)
((
ulonglong
)
val_int
())
:
(
double
)
val_int
();
}
String
*
Item_int_func
::
val_str
(
String
*
str
)
{
DBUG_ASSERT
(
fixed
==
1
);
...
...
@@ -802,7 +810,10 @@ double Item_func_numhybrid::val_real()
return
result
;
}
case
INT_RESULT
:
return
(
double
)
int_op
();
{
longlong
result
=
int_op
();
return
unsigned_flag
?
(
double
)
((
ulonglong
)
result
)
:
(
double
)
result
;
}
case
REAL_RESULT
:
return
real_op
();
case
STRING_RESULT
:
...
...
@@ -1362,6 +1373,8 @@ longlong Item_func_mod::int_op()
DBUG_ASSERT
(
fixed
==
1
);
longlong
value
=
args
[
0
]
->
val_int
();
longlong
val2
=
args
[
1
]
->
val_int
();
longlong
result
;
if
((
null_value
=
args
[
0
]
->
null_value
||
args
[
1
]
->
null_value
))
return
0
;
/* purecov: inspected */
if
(
val2
==
0
)
...
...
@@ -1371,9 +1384,13 @@ longlong Item_func_mod::int_op()
}
if
(
args
[
0
]
->
unsigned_flag
)
return
((
ulonglong
)
value
)
%
val2
;
result
=
args
[
1
]
->
unsigned_flag
?
((
ulonglong
)
value
)
%
((
ulonglong
)
val2
)
:
((
ulonglong
)
value
)
%
val2
;
else
result
=
args
[
1
]
->
unsigned_flag
?
value
%
((
ulonglong
)
val2
)
:
value
%
val2
;
return
value
%
val2
;
return
result
;
}
double
Item_func_mod
::
real_op
()
...
...
@@ -1428,6 +1445,7 @@ void Item_func_mod::fix_length_and_dec()
{
Item_num_op
::
fix_length_and_dec
();
maybe_null
=
1
;
unsigned_flag
=
args
[
0
]
->
unsigned_flag
;
}
...
...
@@ -1506,8 +1524,9 @@ double Item_func_abs::real_op()
longlong
Item_func_abs
::
int_op
()
{
longlong
value
=
args
[
0
]
->
val_int
();
null_value
=
args
[
0
]
->
null_value
;
return
value
>=
0
?
value
:
-
value
;
if
((
null_value
=
args
[
0
]
->
null_value
))
return
0
;
return
(
value
>=
0
)
||
unsigned_flag
?
value
:
-
value
;
}
...
...
@@ -1528,6 +1547,7 @@ my_decimal *Item_func_abs::decimal_op(my_decimal *decimal_value)
void
Item_func_abs
::
fix_length_and_dec
()
{
Item_func_num1
::
fix_length_and_dec
();
unsigned_flag
=
args
[
0
]
->
unsigned_flag
;
}
...
...
@@ -1902,6 +1922,10 @@ my_decimal *Item_func_floor::decimal_op(my_decimal *decimal_value)
void
Item_func_round
::
fix_length_and_dec
()
{
int
decimals_to_set
;
longlong
val1
;
bool
val1_unsigned
;
unsigned_flag
=
args
[
0
]
->
unsigned_flag
;
if
(
!
args
[
1
]
->
const_item
())
{
...
...
@@ -1911,7 +1935,13 @@ void Item_func_round::fix_length_and_dec()
return
;
}
int
decimals_to_set
=
max
((
int
)
args
[
1
]
->
val_int
(),
0
);
val1
=
args
[
1
]
->
val_int
();
val1_unsigned
=
args
[
1
]
->
unsigned_flag
;
if
(
val1
<
0
)
decimals_to_set
=
val1_unsigned
?
INT_MAX
:
0
;
else
decimals_to_set
=
(
val1
>
INT_MAX
)
?
INT_MAX
:
(
int
)
val1
;
if
(
args
[
0
]
->
decimals
==
NOT_FIXED_DEC
)
{
max_length
=
args
[
0
]
->
max_length
;
...
...
@@ -1928,10 +1958,9 @@ void Item_func_round::fix_length_and_dec()
max_length
=
float_length
(
decimals
);
break
;
case
INT_RESULT
:
if
(
!
decimals_to_set
&&
(
truncate
||
(
args
[
0
]
->
decimal_precision
()
<
DECIMAL_LONGLONG_DIGITS
)))
if
((
!
decimals_to_set
&&
truncate
)
||
(
args
[
0
]
->
decimal_precision
()
<
DECIMAL_LONGLONG_DIGITS
))
{
int
length_can_increase
=
test
(
!
truncate
&&
(
args
[
1
]
->
val_int
()
<
0
)
);
int
length_can_increase
=
test
(
!
truncate
&&
(
val1
<
0
)
&&
!
val1_unsigned
);
max_length
=
args
[
0
]
->
max_length
+
length_can_increase
;
/* Here we can keep INT_RESULT */
hybrid_type
=
INT_RESULT
;
...
...
@@ -1957,10 +1986,12 @@ void Item_func_round::fix_length_and_dec()
}
}
double
my_double_round
(
double
value
,
int
dec
,
bool
truncate
)
double
my_double_round
(
double
value
,
longlong
dec
,
bool
dec_unsigned
,
bool
truncate
)
{
double
tmp
;
uint
abs_dec
=
abs
(
dec
);
bool
dec_negative
=
(
dec
<
0
)
&&
!
dec_unsigned
;
ulonglong
abs_dec
=
dec_negative
?
-
dec
:
dec
;
/*
tmp2 is here to avoid return the value with 80 bit precision
This will fix that the test round(0.1,1) = round(0.1,1) is true
...
...
@@ -1970,7 +2001,11 @@ double my_double_round(double value, int dec, bool truncate)
tmp
=
(
abs_dec
<
array_elements
(
log_10
)
?
log_10
[
abs_dec
]
:
pow
(
10.0
,(
double
)
abs_dec
));
if
(
truncate
)
if
(
dec_negative
&&
isinf
(
tmp
))
tmp2
=
0
;
else
if
(
!
dec_negative
&&
isinf
(
value
*
tmp
))
tmp2
=
value
;
else
if
(
truncate
)
{
if
(
value
>=
0
)
tmp2
=
dec
<
0
?
floor
(
value
/
tmp
)
*
tmp
:
floor
(
value
*
tmp
)
/
tmp
;
...
...
@@ -1986,24 +2021,35 @@ double my_double_round(double value, int dec, bool truncate)
double
Item_func_round
::
real_op
()
{
double
value
=
args
[
0
]
->
val_real
();
int
dec
=
(
int
)
args
[
1
]
->
val_int
();
if
(
!
(
null_value
=
args
[
0
]
->
null_value
||
args
[
1
]
->
null_value
))
return
my_double_round
(
value
,
dec
,
truncate
);
return
my_double_round
(
value
,
args
[
1
]
->
val_int
(),
args
[
1
]
->
unsigned_flag
,
truncate
);
return
0.0
;
}
/*
Rounds a given value to a power of 10 specified as the 'to' argument,
avoiding overflows when the value is close to the ulonglong range boundary.
*/
static
inline
ulonglong
my_unsigned_round
(
ulonglong
value
,
ulonglong
to
)
{
ulonglong
tmp
=
value
/
to
*
to
;
return
(
value
-
tmp
<
(
to
>>
1
))
?
tmp
:
tmp
+
to
;
}
longlong
Item_func_round
::
int_op
()
{
longlong
value
=
args
[
0
]
->
val_int
();
int
dec
=
(
int
)
args
[
1
]
->
val_int
();
longlong
dec
=
args
[
1
]
->
val_int
();
decimals
=
0
;
u
int
abs_dec
;
u
longlong
abs_dec
;
if
((
null_value
=
args
[
0
]
->
null_value
||
args
[
1
]
->
null_value
))
return
0
;
if
(
dec
>=
0
)
if
(
(
dec
>=
0
)
||
args
[
1
]
->
unsigned_flag
)
return
value
;
// integer have not digits after point
abs_dec
=
-
dec
;
...
...
@@ -2015,21 +2061,12 @@ longlong Item_func_round::int_op()
tmp
=
log_10_int
[
abs_dec
];
if
(
truncate
)
{
if
(
unsigned_flag
)
value
=
(
ulonglong
(
value
)
/
tmp
)
*
tmp
;
else
value
=
(
value
/
tmp
)
*
tmp
;
}
value
=
(
unsigned_flag
)
?
((
ulonglong
)
value
/
tmp
)
*
tmp
:
(
value
/
tmp
)
*
tmp
;
else
{
if
(
unsigned_flag
)
value
=
((
ulonglong
(
value
)
+
(
tmp
>>
1
))
/
tmp
)
*
tmp
;
else
if
(
value
>=
0
)
value
=
((
value
+
(
tmp
>>
1
))
/
tmp
)
*
tmp
;
else
value
=
((
value
-
(
tmp
>>
1
))
/
tmp
)
*
tmp
;
}
value
=
(
unsigned_flag
||
value
>=
0
)
?
my_unsigned_round
((
ulonglong
)
value
,
tmp
)
:
-
my_unsigned_round
((
ulonglong
)
-
value
,
tmp
);
return
value
;
}
...
...
@@ -2037,14 +2074,18 @@ longlong Item_func_round::int_op()
my_decimal
*
Item_func_round
::
decimal_op
(
my_decimal
*
decimal_value
)
{
my_decimal
val
,
*
value
=
args
[
0
]
->
val_decimal
(
&
val
);
int
dec
=
(
int
)
args
[
1
]
->
val_int
();
if
(
dec
>
0
)
longlong
dec
=
args
[
1
]
->
val_int
();
if
(
dec
>
0
||
(
dec
<
0
&&
args
[
1
]
->
unsigned_flag
)
)
{
decimals
=
min
(
dec
,
DECIMAL_MAX_SCALE
);
// to get correct output
dec
=
min
((
ulonglong
)
dec
,
DECIMAL_MAX_SCALE
);
decimals
=
dec
;
// to get correct output
}
else
if
(
dec
<
INT_MIN
)
dec
=
INT_MIN
;
if
(
!
(
null_value
=
(
args
[
0
]
->
null_value
||
args
[
1
]
->
null_value
||
my_decimal_round
(
E_DEC_FATAL_ERROR
,
value
,
dec
,
truncate
,
decimal_value
)
>
1
)))
my_decimal_round
(
E_DEC_FATAL_ERROR
,
value
,
dec
,
truncate
,
decimal_value
)
>
1
)))
return
decimal_value
;
return
0
;
}
...
...
sql/item_func.h
View file @
83e8b709
...
...
@@ -280,7 +280,7 @@ class Item_int_func :public Item_func
{
max_length
=
21
;
}
Item_int_func
(
List
<
Item
>
&
list
)
:
Item_func
(
list
)
{
max_length
=
21
;
}
Item_int_func
(
THD
*
thd
,
Item_int_func
*
item
)
:
Item_func
(
thd
,
item
)
{}
double
val_real
()
{
DBUG_ASSERT
(
fixed
==
1
);
return
(
double
)
val_int
();
}
double
val_real
()
;
String
*
val_str
(
String
*
str
);
enum
Item_result
result_type
()
const
{
return
INT_RESULT
;
}
void
fix_length_and_dec
()
{}
...
...
@@ -305,12 +305,6 @@ class Item_func_signed :public Item_int_func
public:
Item_func_signed
(
Item
*
a
)
:
Item_int_func
(
a
)
{}
const
char
*
func_name
()
const
{
return
"cast_as_signed"
;
}
double
val_real
()
{
double
tmp
=
args
[
0
]
->
val_real
();
null_value
=
args
[
0
]
->
null_value
;
return
tmp
;
}
longlong
val_int
();
longlong
val_int_from_str
(
int
*
error
);
void
fix_length_and_dec
()
...
...
sql/item_strfunc.cc
View file @
83e8b709
...
...
@@ -2028,7 +2028,7 @@ String *Item_func_format::val_str(String *str)
double
nr
=
args
[
0
]
->
val_real
();
if
((
null_value
=
args
[
0
]
->
null_value
))
return
0
;
/* purecov: inspected */
nr
=
my_double_round
(
nr
,
dec
,
FALSE
);
nr
=
my_double_round
(
nr
,
(
longlong
)
dec
,
FALSE
,
FALSE
);
/* Here default_charset() is right as this is not an automatic conversion */
str
->
set_real
(
nr
,
dec
,
default_charset
());
if
(
isnan
(
nr
))
...
...
sql/mysql_priv.h
View file @
83e8b709
...
...
@@ -1890,7 +1890,8 @@ ha_rows filesort(THD *thd, TABLE *form,struct st_sort_field *sortorder,
ha_rows
*
examined_rows
);
void
filesort_free_buffers
(
TABLE
*
table
,
bool
full
);
void
change_double_for_sort
(
double
nr
,
byte
*
to
);
double
my_double_round
(
double
value
,
int
dec
,
bool
truncate
);
double
my_double_round
(
double
value
,
longlong
dec
,
bool
dec_unsigned
,
bool
truncate
);
int
get_quick_record
(
SQL_SELECT
*
select
);
int
calc_weekday
(
long
daynr
,
bool
sunday_first_day_of_week
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment