[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
Tue Feb 5 12:37:44 EST 2013


 Boris Kolpackov <boris at codesynthesis.com> wrote:

 > I reviewed the code involved one more time and I might have found
 > something that could cause this. Can you try these patches and
 > let me know if they help?
 > 
 > Boost: http://scm.codesynthesis.com/?p=odb/libodb-boost.git;a=patch;h=fa7c954409d6fa27440d965797f14c6c01397aee
 > Qt:    http://scm.codesynthesis.com/?p=odb/libodb-qt.git;a=patch;h=4503191a037be58e769613281f90efa5310e547e
 > 
 > If that doesn't help, then I will try to create a minimal test using
 > the C API that reproduces this issue.

Well, apparently the patch set fixed it. I say apparently because I'm not completely sure 
about it, in turn because some Gentoo maintainers sometimes smuggle in small patches without 
bumping the ebuild revision number. When reinstalling a package, a new patch set can be 
loaded from a remote server in the background. I haven't yet checked all the details here, 
but I've reinstalled MariaDB-5.5.28a.

A minimal test case would be useful for a upstream bug report anyway. 

This error did also not occur when using the new MariaDB native client without yet having 
applied this patch set. 

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.


But now comes the next failed test (with mmariadb-5.5.28a):

   make[2]: Entering directory `/var/tmp/portage/dev-db/odb-2.1.1/work/
        odb-tests-2.1.1-mysql/mysql/truncation'
   ./driver --options-file ../../db.options
   driver: driver.cxx:78: int main(int, char**): Assertion `o->str_ == long_str' failed.
   ./../../tester: line 39:  8281 Aborted (core dumped) 
   ./driver --options-file "$top_builddir/ db.options" > test.out 
   FAIL: ../../tester
   ============================================
   1 of 1 test failed
   Please report to odb-users at codesynthesis.com
   ============================================
   make[2]: *** [check-TESTS] Fehler 1
   make[2]: Leaving directory `/var/tmp/portage/dev-db/odb-2.1.1/work/odb-tests-2.1.1-mysql/mysql/truncation' 


As far as I remember, exactly this error previously also happened with the MariaDB native client.
I've now put a trace statement in driver.cxx, just before the assertion:

  o->str_:'cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
           cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
           cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
           ccccQp���@E�6'
  long_str:'cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
            ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
            ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
            cccccccccccccccccccccccccccccccccccccccccccccc'

The wrong part starts after offset 0+256. When changing the length of long_str from 300 to 256, 
this subtest runs ok. Setting length to 257, the test again fails. 

When having commented out this subtest, the assertion  (o->str_ == longer_str) failed, and after that 
(p->vec_ == o.vec_) did not evaluate to true.

Kind regards

Hugo



More information about the odb-users mailing list