[odb-users] another test from odb-tests-2.1.1 fails with mariadb-5.5.28a

Hugo.Mildenberger at web.de Hugo.Mildenberger at web.de
Wed Feb 6 09:01:00 EST 2013


Hi Boris


 Boris Kolpackov <boris at codesynthesis.com> wrote:

 > > A minimal test case would be useful for a upstream bug report anyway.
 > 
 > The test case is attached.
 
I did not receive any attachment.
 

 > Ah, I didn't realize they re-implemented the client library. That would
 > explain all the test failures.

No. Your post regarding this issue overlapped with an intermediate post 
I sent when I discovered what happened. In case it did not reach you, here 
it is again:

   I'm sorry, but this result was a false positive. The patch set actually does 
   not fix the MariaDB problem. After a system reboot the original error reappeared, 
   affecting both tests in boost/mysql/date-time and qt/mysql/date-time. The 
   fix (and other symptoms) were obviously caused by the MariaDB native client 
   library which somehow survived it's deletion. Except for a caching issue 
   I have no idea why this happened. 

The native client is a separate project. I used the bzr development version in a 
hitherto fruitless attempt to isolate the reason for the datetime issue. And tried
that only days after I had sent the first report regarding the datetime issue to
the odb mailing list.


 > > By the way, I've observed that within the structure "st_mysql_time" the
 > > field "time_type" is also not initialized by odb. Although the 
 > > documentation officially states that callers of mysql_stmt_bind_param
 > > may leave this field unassigned, one can not know if all developers 
 > > who eventually become involved will remember this statement.
 > 
 > Where do you see this? The only documentation for MYSQL_TIME that I
 > know is here:
 > 
 > http://dev.mysql.com/doc/refman/5.5/en/c-api-prepared-statement-data-structures.html
 > 
 > And it doesn't say anything about time_type (nor st_mysql_time, for
 > that matter).

I also can't find it for the moment. Maybe it was from sources ?

mariadb-5.5.28a/mariadb-5.5.28a/libmysql.c:

 2740     Binding dates and times.
 2741       For binding dates and times prepared statements API provides
 2742       clients with MYSQL_TIME structure. A pointer to instance of this
 2743       structure should be assigned to MYSQL_BIND::buffer whenever
 2744       MYSQL_TYPE_TIME, MYSQL_TYPE_DATE, MYSQL_TYPE_DATETIME typecodes
 2745       are used.  When typecode is MYSQL_TYPE_TIME, only members
 2746       'hour', 'minute', 'second' and 'neg' (is time offset negative)
 2747       are used. These members only will be sent to the server.
 2748       MYSQL_TYPE_DATE implies use of 'year', 'month', 'day', 'neg'.
 2749       MYSQL_TYPE_DATETIME utilizes both parts of MYSQL_TIME structure.
 2750       You don't have to set MYSQL_TIME::time_type member: it's not
 2751       used when sending data to the server, typecode information is
 2752       enough.  'second_part' member can hold microsecond precision of
 2753       time value, but now it's only supported on protocol level: you
 2754       can't store microsecond in a column, or use in temporal
 2755       calculations. However, if you send a time value with microsecond
 2756       part for 'SELECT ?', statement, you'll get it back unchanged
 2757       from the server.
 2758 
 2759     Data conversion.
 2760       If conversion from host language type to data representation,
 2761       corresponding to SQL type, is required it's done on the server.
 2762       Data truncation is possible when conversion is lossy. For
 2763       example, if you supply MYSQL_TYPE_DATETIME value out of valid
 2764       SQL type TIMESTAMP range, the same conversion will be applied as
 2765       if this value would have been sent as string in the old
 2766       protocol.  TODO: document how the server will behave in case of
 2767       truncation/data loss. 




Hugo



More information about the odb-users mailing list