Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:43773 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 48213 invoked from network); 26 Apr 2009 05:00:29 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 26 Apr 2009 05:00:29 -0000 Received: from [127.0.0.1] ([127.0.0.1:5564]) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ECSTREAM id 8A/7D-63007-C6AE3F94 for ; Sun, 26 Apr 2009 01:00:28 -0400 Authentication-Results: pb1.pair.com header.from=schwern@pobox.com; sender-id=pass Authentication-Results: pb1.pair.com smtp.mail=schwern@pobox.com; spf=pass; sender-id=pass Received-SPF: pass (pb1.pair.com: domain pobox.com designates 207.106.133.19 as permitted sender) X-PHP-List-Original-Sender: schwern@pobox.com X-Host-Fingerprint: 207.106.133.19 a-sasl-fastnet.sasl.smtp.pobox.com Solaris 10 (beta) Received: from [207.106.133.19] ([207.106.133.19:52566] helo=sasl.smtp.pobox.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id B3/6D-63007-F38E3F94 for ; Sun, 26 Apr 2009 00:51:15 -0400 Received: from localhost.localdomain (unknown [127.0.0.1]) by a-sasl-fastnet.sasl.smtp.pobox.com (Postfix) with ESMTP id A049BAD120; Sun, 26 Apr 2009 00:51:08 -0400 (EDT) Received: from [10.23.42.2] (unknown [69.64.236.3]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by a-sasl-fastnet.sasl.smtp.pobox.com (Postfix) with ESMTPSA id E6AEFAD11F; Sun, 26 Apr 2009 00:51:03 -0400 (EDT) Message-ID: <49F3E835.6060009@pobox.com> Date: Sat, 25 Apr 2009 21:51:01 -0700 User-Agent: Thunderbird 2.0.0.21 (Macintosh/20090302) MIME-Version: 1.0 To: internals@lists.php.net, Georg Richter , Andrey Hristov X-Enigmail-Version: 0.95.7 Content-Type: multipart/mixed; boundary="------------090902010303010609090907" X-Pobox-Relay-ID: DB87C354-321D-11DE-AE98-C121C5FC92D5-02258300!a-sasl-fastnet.pobox.com Subject: [PATCH] mysqli #35203 / #48065 Eliminate special case for calling procedures in mysqli From: schwern@pobox.com (Michael G Schwern) --------------090902010303010609090907 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit This is a patch against 5.2.9 to fix mysqli::query so a user can call stored procedures the same as they do any other statement. No more multi_query() and next_result() work arounds necessary to avoid a "Commands out of sync" error. I note this has been rejected several times in the tracker as not being a bug. I feel its a clear encapsulation violation making the user special case a query just because it's calling a stored procedure. Aside from just being very inconvenient, some API wrappers around mysqli, Drupal 6 for example, leave the user with no way to get at mysqli::multi_query(). Anyhow, here's a complete patch with a test. The technique and code is lifted from Perl's DBD::mysql driver, which you can see here as mysql_st_free_result_sets() http://cpansearch.perl.org/src/CAPTTOFU/DBD-mysql-4.011/dbdimp.c Before each query it frees any results still hanging around on the connection, which is essentially what a user has to do. I'm not really a C programmer so I left most of the code as is, do/while loop and all. I'm not sure how mysqli normally handles errors so I just went with a printf() and return trusting that you'll fix that up. It causes test 057 to fail because that test deliberately generates an out of sync error, which my code diligently prints. So that should go away with fixed error handling. Thanks, Schwern -- THIS I COMMAND! --------------090902010303010609090907 Content-Type: application/aegis-patch; name="0001-Fix-for-bug-48065-so-stored-procedures-don-t-cause.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename*0="0001-Fix-for-bug-48065-so-stored-procedures-don-t-cause.patc"; filename*1="h" RnJvbSBkM2E4MTA4OTU4NjZhMDIwNzk0MDM1YTIwZTQwYzg0ZDkyZjg1ODQ1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNaWNoYWVsIEcuIFNjaHdlcm4gPHNjaHdlcm5AcG9i b3guY29tPgpEYXRlOiBTYXQsIDI1IEFwciAyMDA5IDIxOjQ3OjMwIC0wNzAwClN1YmplY3Q6 IFtQQVRDSF0gRml4IGZvciBidWcgIzQ4MDY1IHNvIHN0b3JlZCBwcm9jZWR1cmVzIGRvbid0 IGNhdXNlIGFuIG91dCBvZiBzeW5jIGVycm9yLgoKLS0tCiBleHQvbXlzcWxpL215c3FsaS5j ICAgICAgICAgICAgfCAgIDQyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogZXh0 L215c3FsaS9teXNxbGlfbm9uYXBpLmMgICAgIHwgICAgMiArCiBleHQvbXlzcWxpL3Rlc3Rz L2J1ZzQ4MDY1LnBocHQgfCAgIDU2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgMTAwIGluc2VydGlvbnMoKyksIDAgZGVsZXRp b25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZXh0L215c3FsaS90ZXN0cy9idWc0ODA2NS5w aHB0CgpkaWZmIC0tZ2l0IGEvZXh0L215c3FsaS9teXNxbGkuYyBiL2V4dC9teXNxbGkvbXlz cWxpLmMKaW5kZXggOTI1MmNkNi4uODc3YzdiMCAxMDA2NDQKLS0tIGEvZXh0L215c3FsaS9t eXNxbGkuYworKysgYi9leHQvbXlzcWxpL215c3FsaS5jCkBAIC0xMTk3LDYgKzExOTcsNDgg QEAgdm9pZCBwaHBfbG9jYWxfaW5maWxlX2VuZCh2b2lkICpwdHIpCiB9CiAvKiB9fX0gKi8K IAorLyogQ2xlYW4gdXAgc2luZ2xlIG9yIG11bHRpcGxlIHJlc3VsdCBzZXRzIGxlZnQgb24g dGhlIGNvbm5lY3Rpb24KKyAqIGJlZm9yZSBkb2luZyBhIG5ldyBxdWVyeQorICoKKyAqIExp ZnRlZCBmcm9tIERCRDo6bXlzcWwgYXMgYSBzb2x1dGlvbiB0byBCVUcgIzQ4MDY1CisgKgor ICogUmV0dXJuczogMSBvaworICogICAgICAgICAgMCBlcnJvcgorICovCitpbnQgbXlzcWxp X2ZyZWVfcmVzdWx0X3NldHMoTVlTUUwgKmNvbm4pIHsKKwlNWVNRTF9SRVMJKnJlc3VsdCA9 IE5VTEw7CisJaW50CQkJbmV4dF9yZXN1bHRfcmM9IC0xOworCisJZG8KKwl7CisJCWlmIChu ZXh0X3Jlc3VsdF9yYyA9PSAwKQorCQl7CisJCQlpZiAoIShyZXN1bHQgPSBteXNxbF91c2Vf cmVzdWx0KGNvbm4pKSkKKwkJCXsKKwkJCQkvKiBDaGVjayBmb3IgcG9zc2libGUgZXJyb3Ig Ki8KKwkJCQlpZiAobXlzcWxfZmllbGRfY291bnQoY29ubikpCisJCQkJeworCQkJCQlwcmlu dGYoIm15c3FsX2ZpZWxkX2NvdW50KCkgZmFpbGVkLCBlcnJubzogJWQsIGVycm9yOiAlcyIs IG15c3FsX2Vycm5vKGNvbm4pLCBteXNxbF9lcnJvcihjb25uKSk7CisJCQkJCXJldHVybiAw OworCQkJCX0KKwkJCX0KKwkJfQorCQlpZiAocmVzdWx0KQorCQl7CisJCQlteXNxbF9mcmVl X3Jlc3VsdChyZXN1bHQpOworCQkJcmVzdWx0ID0gTlVMTDsKKwkJfQorCX0gd2hpbGUgKChu ZXh0X3Jlc3VsdF9yYz1teXNxbF9uZXh0X3Jlc3VsdChjb25uKSk9PTApOworCisJaWYoIG5l eHRfcmVzdWx0X3JjID4gMCApIHsKKwkJcHJpbnRmKCJteXNxbF9uZXh0X3Jlc3VsdCgpIGZh aWxlZCwgZXJybm86ICVkLCBlcnJvcjogJXMiLCBteXNxbF9lcnJubyhjb25uKSwgbXlzcWxf ZXJyb3IoY29ubikpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworCiAv KgogICogTG9jYWwgdmFyaWFibGVzOgogICogdGFiLXdpZHRoOiA0CmRpZmYgLS1naXQgYS9l eHQvbXlzcWxpL215c3FsaV9ub25hcGkuYyBiL2V4dC9teXNxbGkvbXlzcWxpX25vbmFwaS5j CmluZGV4IGFlOGI5ZTYuLjdlZGQ1OTUgMTAwNjQ0Ci0tLSBhL2V4dC9teXNxbGkvbXlzcWxp X25vbmFwaS5jCisrKyBiL2V4dC9teXNxbGkvbXlzcWxpX25vbmFwaS5jCkBAIC0yNTYsNiAr MjU2LDggQEAgUEhQX0ZVTkNUSU9OKG15c3FsaV9xdWVyeSkKIAogCU1ZU1FMSV9ESVNBQkxF X01ROwogCisJbXlzcWxpX2ZyZWVfcmVzdWx0X3NldHMobXlzcWwtPm15c3FsKTsKKwogCWlm IChteXNxbF9yZWFsX3F1ZXJ5KG15c3FsLT5teXNxbCwgcXVlcnksIHF1ZXJ5X2xlbikpIHsK IAkJTVlTUUxJX1JFUE9SVF9NWVNRTF9FUlJPUihteXNxbC0+bXlzcWwpOwogCQlSRVRVUk5f RkFMU0U7CmRpZmYgLS1naXQgYS9leHQvbXlzcWxpL3Rlc3RzL2J1ZzQ4MDY1LnBocHQgYi9l eHQvbXlzcWxpL3Rlc3RzL2J1ZzQ4MDY1LnBocHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uMjg1MjViYwotLS0gL2Rldi9udWxsCisrKyBiL2V4dC9teXNxbGkvdGVz dHMvYnVnNDgwNjUucGhwdApAQCAtMCwwICsxLDU2IEBACistLVRFU1QtLQorQnVnICM0ODA2 NSBteXNxbGk6OnF1ZXJ5IG5lZWRzIGhhbmQgaG9sZGluZyBmb3IgY2FsbGVkIHByb2NlZHVy ZXMKKy0tRklMRS0tCis8P3BocAorZnVuY3Rpb24gc3RtdCgpIHsKKyAgICByZXR1cm4gInNl bGVjdCAxIjsKK30KKworZnVuY3Rpb24gc2V0dXBfZGF0YWJhc2UoKSB7CisgICAgJG15c3Fs aSA9IGNvbm5lY3Rpb24oKTsKKworICAgICRzcWwgPSBzdG10KCk7CisgICAgJG15c3FsaS0+ cXVlcnkoIkRST1AgUFJPQ0VEVVJFIElGIEVYSVNUUyB0ZXN0X2J1ZyIpOworICAgICRteXNx bGktPnF1ZXJ5KCIKK0NSRUFURSBQUk9DRURVUkUgdGVzdF9idWcoKQorQkVHSU4KKyAgICAk c3FsOworRU5ECisiKTsKKworICAgIGlmKCAkbXlzcWxpLT5lcnJvciApIHsKKyAgICAgICAg cHJpbnQgJG15c3FsaS0+ZXJyb3I7CisgICAgfQorfQorCisKK2Z1bmN0aW9uIGNvbm5lY3Rp b24oKSB7CisgICAgaW5jbHVkZSAiY29ubmVjdC5pbmMiOworICAgIHJldHVybiBuZXcgbXlz cWxpKCRob3N0LCAkdXNlciwgJHBhc3N3ZCwgInRlc3QiKTsKK30KKworCitmdW5jdGlvbiB0 ZXN0X2RvdWJsZV9xdWVyeSgkcXVlcnkpIHsKKyAgICAkbXlzcWxpID0gY29ubmVjdGlvbigp OworCisgICAgaWYoICEkbXlzcWxpLT5xdWVyeSgkcXVlcnkpICkKKyAgICAgICAgcHJpbnRm KCJGaXJzdCBxdWVyeSBGQUlMRUQ6ICVzXG4iLCAkbXlzcWxpLT5lcnJvcik7CisKKyAgICBp ZiggISRteXNxbGktPnF1ZXJ5KCRxdWVyeSkgKQorICAgICAgICBwcmludGYoIlNlY29uZCBx dWVyeSBGQUlMRUQ6ICVzXG4iLCAkbXlzcWxpLT5lcnJvcik7CisKKyAgICBwcmludGYoIm9r IC0gJHF1ZXJ5XG4iKTsKK30KKworCitzZXR1cF9kYXRhYmFzZSgpOworCisvKiBUaGVzZSBz aG91bGQgd29yayB0aGUgc2FtZSwgdGhleSBkb24ndCAqLwordGVzdF9kb3VibGVfcXVlcnko ImNhbGwgdGVzdF9idWciKTsKK3Rlc3RfZG91YmxlX3F1ZXJ5KHN0bXQoKSk7CisKKz8+CisK Ky0tRVhQRUNURi0tCitvayAtIGNhbGwgdGVzdF9idWcKK29rIC0gc2VsZWN0IDEKLS0gCjEu Ni4yLjEKCg== --------------090902010303010609090907--