Re: [PATCH] Attempt to include ext/mysqlnd/mysqlnd_portability.h when building MySQLi against libmysql
| From: | Jess Portnoy | Date: | Mon, 11 Jan 2010 17:32:23 +0000 |
| Subject: | Re: [PATCH] Attempt to include ext/mysqlnd/mysqlnd_portability.h when building MySQLi against libmysql | ||
| References: | 1 2 3 4 5 6 7 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-46639@lists.php.net to get a copy of this message | ||
I see but assuming mysqlnd is copied, I can still see a problem, in the configure script:
echo "#define $php_def_have_what 1" >> ext/mysqlnd/php_mysqlnd_config.h
When running my configure:
./configure --disable-xml --disable-dom --disable-libxml --disable-simplexml --without-pear --disable-xmlreader --disable-xmlwriter --without-iconv
ext/mysqlnd/php_mysqlnd_config.h is not created and ext/mysqlnd/mysqlnd_portability.h attempts to include that and hence, even if the mysqlnd dir is copied to $PHP_PREFIX/include/php/ext regardless of your configure argument, there will still be a problem with this auto generated header.
May the source be with you,
Best regards,
Jess Portnoy
Andrey Hristov wrote:
Jess Portnoy wrote: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?by specific I mean that mysqlnd introduces them but they are valid for everyone who wants to be able to decode BIT columns sent from the server. Without these macros BIT fields are useless in the client, can't be decoded. Johannes did some change in a recent commit, but I am not sure if all of mysqlnd's headers are installed at make install. This should be the case or no extension that relies on mysqlnd will be able to compile as a module (with phpize).May the source be with you, Best regards, Jess PortnoyBest, AndreyAndrey 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,