Re: [PATCH] Attempt to include ext/mysqlnd/mysqlnd_portability.h when building MySQLi against libmysql
| From: | Jess Portnoy | Date: | Mon, 11 Jan 2010 17:14:38 +0000 |
| Subject: | Re: [PATCH] Attempt to include ext/mysqlnd/mysqlnd_portability.h when building MySQLi against libmysql | ||
| References: | 1 2 3 4 5 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-46636@lists.php.net to get a copy of this message | ||
Hi Andrey,
I understand. If the the bit_xxxx macros are specific to mysqlnd then perhaps their usage should also be protected by an #ifdef MYSQLI_USE_MYSQLND?
May the source be with you,
Best regards,
Jess Portnoy
Andrey Hristov wrote:
Jess Portnoy wrote:Reason is MYSQL_VERSION_ID is defined here: ext/mysqlnd/mysqlnd_libmysql_compat.h:#defineMYSQL_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. AndreyMYSQL_VERSION_ID MYSQLND_VERSION_IDAnd 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 PortnoyJess 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 > 50002if (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,