[odb-users] mariadb hello example assertion failure with VS2017

Feiyun Wang feiyunw at yahoo.com
Thu Jun 14 23:36:22 EDT 2018


Hi,

It caused an assertion failure when using mariadb for the hello example with VS2017:````Assertion failed: opt_mode != ::odb::mysql::details::cli::unknown_mode::skip, file G:\prj\odb\libodb-mariadb-vs2017dbg\odb\mysql\details\options.cxx, line 841````
This assertion came from file libodb-mariadb-vs2017dbg\odb\mysql\details\options.cxx:````      bool options::      _parse (::odb::mysql::details::cli::scanner& s,              ::odb::mysql::details::cli::unknown_mode opt_mode,              ::odb::mysql::details::cli::unknown_mode arg_mode)      {        // Can't skip combined flags (--no-combined-flags).        //        assert (opt_mode != ::odb::mysql::details::cli::unknown_mode::skip); // --> this line````
called by the options constructor in the same file:````      options::      options (::odb::mysql::details::cli::scanner& s,               ::odb::mysql::details::cli::unknown_mode opt,               ::odb::mysql::details::cli::unknown_mode arg)      : user_ (),        user_specified_ (false),        password_ (),        password_specified_ (false),        database_ (),        database_specified_ (false),        host_ (),        host_specified_ (false),        port_ (0),        port_specified_ (false),        socket_ (),        socket_specified_ (false),        options_file_ (),        options_file_specified_ (false)      {        _parse (s, opt, arg); // --> this line      }````
called by libodb-mysql\odb\mysql\database.cxx:````    database::    database (int& argc,              char* argv[],              bool erase,              const string& charset,              unsigned long client_flags,              transfer_ptr<connection_factory> factory)        : odb::database (id_mysql),          passwd_ (0),          socket_ (0),          charset_ (charset),          client_flags_ (client_flags),          factory_ (factory.transfer ())    {      using namespace details;
      try      {        cli::argv_file_scanner scan (argc, argv, "--options-file", erase);        options ops (scan, cli::unknown_mode::skip, cli::unknown_mode::skip); // --> this line````
called by odb-examples\hello\database.hxx:````inline std::auto_ptr<odb::database>create_database (int& argc, char* argv[])....#if defined(DATABASE_MYSQL)  auto_ptr<database> db (new odb::mysql::database (argc, argv)); // --> this line````
called by odb-examples\hello\driver.cxx:````intmain (int argc, char* argv[]){  try  {    auto_ptr<database> db (create_database (argc, argv)); // --> this line````
The Call stack:````odb-mysql-2.5.0-b.8.6e5a6b4e4e38.dll!odb::mysql::details::options::_parse(odb::mysql::details::cli::scanner & s, odb::mysql::details::cli::unknown_mode opt_mode, odb::mysql::details::cli::unknown_mode arg_mode) Line 841 at g:\prj\odb\libodb-mariadb-vs2017dbg\odb\mysql\details\options.cxx(841)odb-mysql-2.5.0-b.8.6e5a6b4e4e38.dll!odb::mysql::details::options::options(odb::mysql::details::cli::scanner & s, odb::mysql::details::cli::unknown_mode opt, odb::mysql::details::cli::unknown_mode arg) Line 744 at g:\prj\odb\libodb-mariadb-vs2017dbg\odb\mysql\details\options.cxx(744)odb-mysql-2.5.0-b.8.6e5a6b4e4e38.dll!odb::mysql::database::database(int & argc, char * * argv, bool erase, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & charset, unsigned long client_flags, odb::details::transfer_ptr<odb::mysql::connection_factory> factory) Line 195 at g:\prj\odb\libodb-mysql\odb\mysql\database.cxx(195)hello.exe!create_database(int & argc, char * * argv) Line 62 at g:\prj\odb\odb-examples\hello\database.hxx(62)hello.exe!main(int argc, char * * argv) Line 23 at g:\prj\odb\odb-examples\hello\driver.cxx(23)````
The script that I used to build the supporting tools and libraries:````set PATH=C:\build2\bin;%PATH%ECHO ===== Installing libcutl-vs2017mkdir libcutl-vs2017b config.cxx=cl config.cc.coptions="/O2" config.install.root=C:\build2 "configure(libcutl/@libcutl-vs2017/)"cd libcutl-vs2017/b installcd ..ECHO ===== Installing cli-vs2017mkdir cli-vs2017b config.cxx=cl config.cc.coptions="/O2" config.import.libcutl=libcutl-vs2017/ config.install.root=C:\build2 "configure(cli/@cli-vs2017/)"cd cli-vs2017b installcd ..ECHO ===== Installing libodb-vs2017dbgmkdir libodb-vs2017dbgb config.cxx=cl config.cc.coptions="/Od /MDd /Zi" config.cc.loptions=/DEBUG config.install.root="install/libodb-vs2017dbg/" "configure(libodb/@libodb-vs2017dbg/)"cd libodb-vs2017dbgb installcd ..ECHO ===== Installing libmariadb-vs2017dbgmkdir libmariadb-vs2017dbgb config.cxx=cl config.cc.coptions="/Od /MDd /Zi /wd4819" config.cc.loptions=/DEBUG config.install.root="install/libmariadb-vs2017dbg/" "configure(libmariadb/@libmariadb-vs2017dbg/)"cd libmariadb-vs2017dbgb installcd ..ECHO ===== Installing libodb-mariadb-vs2017dbgmkdir libodb-mariadb-vs2017dbgcd libodb-mysqlgit checkout -f mariadb --cd ..b config.cxx=cl config.cc.coptions="/Od /MDd /Zi" config.cc.loptions=/DEBUG config.cli=C:\build2\bin\cli.exe config.import.libmariadb=libmariadb-vs2017dbg/ config.import.libodb=libodb-vs2017dbg/ config.install.root="install/libodb-mariadb-vs2017dbg/" "configure(libodb-mysql/@libodb-mariadb-vs2017dbg/)"cd libodb-mariadb-vs2017dbgb installcd ..````
The mariadb branch I created in the local libodb-mysql git repo has only one patch:````From 6e5a6b4e4e38ccf0ffab35b82d5def5ab6c4f08a Mon Sep 17 00:00:00 2001From: Feiyun Wang <feiyunw at yahoo.com>Date: Mon, 21 May 2018 22:50:52 +0800Subject: [PATCH] Change manifest and odb/mysql/buildfile to use mariadb instead of mysql.
--- manifest            | 2 +- odb/mysql/buildfile | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/manifest b/manifestindex 2ac85c9..f205882 100644--- a/manifest+++ b/manifest@@ -17,5 +17,5 @@ requires: c++11 depends: * build2 >= 0.7.0- depends: * bpkg >= 0.7.0- #depends: libmysqlclient ^5.0.3 | libmariadb ^10.2.2-depends: libmysqlclient ^5.0.3+depends: libmariadb ^10.2.2 depends: libodb [2.5.0-b.8.1 2.5.0-b.9)diff --git a/odb/mysql/buildfile b/odb/mysql/buildfileindex 8822fee..bf912e1 100644--- a/odb/mysql/buildfile+++ b/odb/mysql/buildfile@@ -2,8 +2,8 @@ # copyright : Copyright (c) 2009-2018 Code Synthesis Tools CC # license   : GNU GPL v2; see accompanying LICENSE file -client_lib = 'mysql'-#client_lib = 'mariadb'+#client_lib = 'mysql'+client_lib = 'mariadb'  import int_libs = libodb%lib{odb} -- 2.17.1.windows.2
````
which is sitting on the revision:````Revision: 70840fd64af1777cf13457cc5167b93ab1b9dae6Author: Karen Arutyunov <karen at codesynthesis.com>Date: 2018/6/2 1:41:53Message:Remove target/scope irregularity workarounds````
b.exe and cli.exe versions:````g:\prj\odb>c:\build2\bin\b.exe --versionbuild2 0.8.0-a.0.e4a3a97bc76elibbutl 0.8.0-a.0.22dcb13424c3host x86_64-microsoft-win32-msvc14.1Copyright (c) 2014-2018 Code Synthesis LtdThis is free software released under the MIT license.
g:\prj\odb>c:\build2\bin\cli.exe --versionCLI (command line interface compiler) 1.2.0-b.1.2ac46907b487Copyright (c) 2009-2018 Code Synthesis Tools CCThis is free software; see the source for copying conditions. There is NOwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.````
And hello.vcxproj PreprocessorDefinitions:````  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">...      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DATABASE_MYSQL;LIBODB_BUILD2;LIBODB_SHARED;LIBODB_MYSQL_BUILD2;LIBODB_MYSQL_MARIADB;LIBODB_MYSQL_SHARED;%(PreprocessorDefinitions)</PreprocessorDefinitions>...  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">...      <PreprocessorDefinitions>NDEBUG;_CONSOLE;DATABASE_MYSQL;LIBODB_BUILD2;LIBODB_SHARED;LIBODB_MYSQL_BUILD2;LIBODB_MYSQL_MARIADB;LIBODB_MYSQL_SHARED;%(PreprocessorDefinitions)</PreprocessorDefinitions>````
It looks like the assertion code is generated by cli\cli\source.cxx (line 949).I also built a release version, but with the same assertion failure finally.
Sincerely,Feiyun Wang


More information about the odb-users mailing list