Re: [PATCH] Attempt to include ext/mysqlnd/mysqlnd_portability.h when building MySQLi against libmysql

From: Date: Mon, 11 Jan 2010 17:01:34 +0000
Subject: Re: [PATCH] Attempt to include ext/mysqlnd/mysqlnd_portability.h when building MySQLi against libmysql
References: 1 2 3 4  Groups: php.internals 
Request: Send a blank email to internals+get-46635@lists.php.net to get a copy of this message
Jess Portnoy wrote:
Reason is MYSQL_VERSION_ID is defined here: ext/mysqlnd/mysqlnd_libmysql_compat.h:#define
MYSQL_VERSION_ID               MYSQLND_VERSION_ID
And then, included here: ext/mysqli/mysqli_mysqlnd.h:#include "ext/mysqlnd/mysqlnd_libmysql_compat.h" Same is done with MySQL and PDO_MYSQL. May the source be with you, Best regards, Jess Portnoy
MYSQL_VERSION_ID is also defined by libmysql/MySQL server. Only if you use pre-5.0 libmysql headers this should not compile. the bit_xxxx macros are specific to mysqlnd, not exposed by libmysql. Andrey
Jess Portnoy wrote:
Hi Andrey, Yes, it compiled just fine with my patch. Even loaded :) May the source be with you, Best regards, Jess Portnoy Andrey Hristov wrote:
Hi Jess, does it compile after that, because I guess it doesn't. We use some macros from that header file to be able to handle bit types correctly in mysqli, when libmysql is used. #if MYSQL_VERSION_ID > 50002
      if (mysql_fetch_field_direct(result, i)->type == MYSQL_TYPE_BIT) {
        my_ulonglong llval;
        char tmp[22];
        switch (field_len[i]) {
          case 8:llval = (my_ulonglong)  bit_uint8korr(row[i]);break;
          case 7:llval = (my_ulonglong)  bit_uint7korr(row[i]);break;
          case 6:llval = (my_ulonglong)  bit_uint6korr(row[i]);break;
          case 5:llval = (my_ulonglong)  bit_uint5korr(row[i]);break;
          case 4:llval = (my_ulonglong)  bit_uint4korr(row[i]);break;
          case 3:llval = (my_ulonglong)  bit_uint3korr(row[i]);break;
          case 2:llval = (my_ulonglong)  bit_uint2korr(row[i]);break;
          case 1:llval = (my_ulonglong)  uint1korr(row[i]);break;
        }
.... #endif Best, Andrey Jess Portnoy wrote:
Hello all, My configure command is as follows: ./configure --disable-xml --disable-dom --disable-libxml --disable-simplexml --without-pear --disable-xmlreader --disable-xmlwriter --without-iconv I then archive the result and use it to build various PHP extensions, among which MySQLi. Since I did not configure with mysqlnd, I do not have ext/mysqlnd copied onto $PHP_PREFIX/include/php/ext, causing this following code to fail compilation: #include "ext/mysqlnd/mysqlnd_portability.h" Attached is a suggested patch for php-5.3.1/ext/mysqli/mysqli.c and php-5.3.1/ext/mysqli/mysqli_api.c, basically: +#ifdef MYSQLI_USE_MYSQLND #include "ext/mysqlnd/mysqlnd_portability.h" +#endif Thanks in advance,


« previous php.internals (#46635) next »