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,





--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to