Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:46639 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 10156 invoked from network); 11 Jan 2010 17:32:30 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 11 Jan 2010 17:32:30 -0000 Authentication-Results: pb1.pair.com header.from=jess@zend.com; sender-id=pass Authentication-Results: pb1.pair.com smtp.mail=jess@zend.com; spf=pass; sender-id=pass Received-SPF: pass (pb1.pair.com: domain zend.com designates 212.25.124.185 as permitted sender) X-PHP-List-Original-Sender: jess@zend.com X-Host-Fingerprint: 212.25.124.185 il-mr1.zend.com Received: from [212.25.124.185] ([212.25.124.185:48292] helo=il-mr1.zend.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 8F/73-26332-BA06B4B4 for ; Mon, 11 Jan 2010 12:32:30 -0500 Received: from il-gw1.zend.com (unknown [10.1.1.21]) by il-mr1.zend.com (Postfix) with ESMTP id 17C19504AC; Mon, 11 Jan 2010 19:16:36 +0200 (IST) Received: from [10.1.2.102] ([10.1.2.102]) by il-gw1.zend.com with Microsoft SMTPSVC(6.0.3790.3959); Mon, 11 Jan 2010 19:32:24 +0200 Message-ID: <4B4B60A7.5030604@zend.com> Date: Mon, 11 Jan 2010 19:32:23 +0200 User-Agent: Mozilla-Thunderbird 2.0.0.22 (X11/20090706) MIME-Version: 1.0 To: Andrey Hristov CC: PHP Developers Mailing List References: <4B4B53A8.8010300@zend.com> <4B4B5639.1020404@mysql.com> <4B4B5728.20502@zend.com> <4B4B5879.5030809@zend.com> <4B4B596E.7070608@mysql.com> <4B4B5C7E.5040305@zend.com> <4B4B5E6C.9070908@mysql.com> In-Reply-To: <4B4B5E6C.9070908@mysql.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-OriginalArrivalTime: 11 Jan 2010 17:32:24.0803 (UTC) FILETIME=[09CBCB30:01CA92E4] Subject: Re: [PHP-DEV] [PATCH] Attempt to include ext/mysqlnd/mysqlnd_portability.h when building MySQLi against libmysql From: jess@zend.com (Jess Portnoy) 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 Portnoy > > > Best, > Andrey > >> >> >> Andrey Hristov wrote: >>> 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, >>>>>>> >>>>>> >>>>> >>> >