← Back to team overview

maria-developers team mailing list archive

MariaDB test question (main.cast)


I have downloaded, built and tested MariaDB 5.3.2 Beta on HP-UX 11.31
and I get two test failures, I have a question about one of tests that
I was hoping someone could help me with.

The main.cast test fails and the problem is with this part of the test:

select cast(cast(20010203101112.1 as double) as datetime(1));

It is converting the string "20010203101112.1" to a double value and then
converting the double value to a date.  The test expects "2001-02-03
10:11:12.1" to be output but I am getting  "2001-02-03 10:11:12.0".
I think the problem is with the conversion into floating point.  When I
use gdb to break sql at double_to_datetime, on HP-UX the value I have is
20010203101112.098, on Linux I see 20010203101112.102.  Neither value
is completely correct because 20010203101112.1 cannot be represented
exactly as an IEEE floating point value.

So I have two questions.  Where did the string get converted into a
floating point value?  I couldn't find where this is happening, I assume
it is using strtod or something but breaking on that function didn't
do anything.  Secondly, given that 20010203101112.1 cannot be represented
exactly as a double precision floating point value, is this a valid test?

FYI: The other failure I get is main.cast, this test is trying to check
for a stack overflow before it happens but IA64 HP-UX  has two stacks, a
register stack and a user data stack.  In this test case the recursion of
p_ere and p_ere_exp wind up using only the register stack because all the
local variables and arguments are  stored in registers.  The stack check
in check_stack_overrun is checking the user stack which doesn't overflow
(or even change) and so we eventually die with a register stack overflow.
There is a way to check the register stack on IA64 HP-UX, but it would
require using IA64 assembly language so it may not be worth doing.

Steve Ellcey

Follow ups