Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:46638 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 8571 invoked from network); 11 Jan 2010 17:23:23 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 11 Jan 2010 17:23:23 -0000 Authentication-Results: pb1.pair.com smtp.mail=andrey@mysql.com; spf=permerror; sender-id=unknown Authentication-Results: pb1.pair.com header.from=Andrey.Hristov@Sun.COM; sender-id=unknown Received-SPF: error (pb1.pair.com: domain mysql.com from 192.18.6.24 cause and error) X-PHP-List-Original-Sender: andrey@mysql.com X-Host-Fingerprint: 192.18.6.24 gmp-eb-inf-2.sun.com Solaris 10 (beta) Received: from [192.18.6.24] ([192.18.6.24:33563] helo=gmp-eb-inf-2.sun.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 44/33-26332-98E5B4B4 for ; Mon, 11 Jan 2010 12:23:22 -0500 Received: from fe-emea-09.sun.com (gmp-eb-lb-1-fe1.eu.sun.com [192.18.6.7] (may be forged)) by gmp-eb-inf-2.sun.com (8.13.7+Sun/8.12.9) with ESMTP id o0BHNITB015906 for ; Mon, 11 Jan 2010 17:23:19 GMT MIME-version: 1.0 Content-transfer-encoding: 7BIT Content-type: text/plain; CHARSET=US-ASCII; format=flowed Received: from conversion-daemon.fe-emea-09.sun.com by fe-emea-09.sun.com (Sun Java(tm) System Messaging Server 7u2-7.04 64bit (built Jul 2 2009)) id <0KW300200EQHYD00@fe-emea-09.sun.com> for internals@lists.php.net; Mon, 11 Jan 2010 17:22:53 +0000 (GMT) Received: from [192.168.1.127] (g228005056.adsl.alicedsl.de [92.228.5.56]) by fe-emea-09.sun.com (Sun Java(tm) System Messaging Server 7u2-7.04 64bit (built Jul 2 2009)) with ESMTPSA id <0KW3002GAEY4HH60@fe-emea-09.sun.com>; Mon, 11 Jan 2010 17:22:53 +0000 (GMT) Date: Mon, 11 Jan 2010 18:22:52 +0100 In-reply-to: <4B4B5C7E.5040305@zend.com> Sender: Andrey.Hristov@Sun.COM To: Jess Portnoy Cc: PHP Developers Mailing List Message-ID: <4B4B5E6C.9070908@mysql.com> 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> User-Agent: Thunderbird 2.0.0.23 (X11/20090817) Subject: Re: [PHP-DEV] [PATCH] Attempt to include ext/mysqlnd/mysqlnd_portability.h when building MySQLi against libmysql From: andrey@mysql.com (Andrey Hristov) 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, >>>>>> >>>>> >>>> >>