Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:46977 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 10666 invoked from network); 10 Feb 2010 17:12:51 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 10 Feb 2010 17:12:51 -0000 Authentication-Results: pb1.pair.com smtp.mail=ewgraf@gmail.com; spf=pass; sender-id=pass Authentication-Results: pb1.pair.com header.from=ewgraf@gmail.com; sender-id=pass; domainkeys=bad Received-SPF: pass (pb1.pair.com: domain gmail.com designates 209.85.220.224 as permitted sender) DomainKey-Status: bad X-DomainKeys: Ecelerity dk_validate implementing draft-delany-domainkeys-base-01 X-PHP-List-Original-Sender: ewgraf@gmail.com X-Host-Fingerprint: 209.85.220.224 mail-fx0-f224.google.com Received: from [209.85.220.224] ([209.85.220.224:59250] helo=mail-fx0-f224.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 6E/42-19537-119E27B4 for ; Wed, 10 Feb 2010 12:12:50 -0500 Received: by fxm24 with SMTP id 24so236924fxm.23 for ; Wed, 10 Feb 2010 09:12:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:cc:content-type; bh=XtTGG+VNTU4Jw1Ce/QHL1gVDLB4KOjK24msgiRghFIw=; b=Jm4Hj86u0RYBxsuG+fFQq8hmQje88laYy+rr+cDn3Kp7IwbR9ErRDH8s4gFWvgVNnh JwxWt6Wvsz5qkVf3q64tWxp7d28x5fBsPUmxj4sB+6NbwhWNYL4VgtnJVEwt+RDSVVko jm2ijWPUq23llgDWgNp3dU6j/CQu+aJELhJrM= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=afaQTKMLvo8/BsDSTieUddGFscWT8YjMj3Rb7gL90P08781kJI+U17kTEC3BWehFOc 1Y79ipJ6+cEx8FCIgmY5QylnGsep/b0i0H1o9itxUbMfI/OXRmJpAwFoqdUt9KNUu093 iNoaQWKd6F1DOEQSu7AMpyZGWlnmNZ5xjxG0Y= MIME-Version: 1.0 Received: by 10.216.89.137 with SMTP id c9mr7580wef.228.1265821966840; Wed, 10 Feb 2010 09:12:46 -0800 (PST) In-Reply-To: References: <1265723806.2988.193.camel@guybrush> <1265729924.2988.408.camel@guybrush> Date: Wed, 10 Feb 2010 22:12:46 +0500 Message-ID: To: Pierre Joye Cc: internals@lists.php.net Content-Type: multipart/mixed; boundary=0016e6d9714faeb4d9047f4224b9 Subject: Re: [PHP-DEV] PATCH for bug #47199 From: ewgraf@gmail.com (Sokolov Evgeniy) --0016e6d9714faeb4d9047f4224b9 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Oups. Haven't noticed the attachment. I will try to attach the file again. 2010/2/10 Sokolov Evgeniy : > No problem. I will remember for the future > > 2010/2/10 Pierre Joye : >> Can you attach the patch instead of copying it in your post? Simply >> name it mypatch.txt (.txt is important for the list). >> >> 2010/2/10 Sokolov Evgeniy : >>> Thank you very much. This patch is passed, also as other patches from >>> this extension. It's time for choose next bug :) >>> >>> >>> >>> Index: ext/pgsql/tests/bug47199.phpt >>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D >>> --- ext/pgsql/tests/bug47199.phpt =A0 =A0 =A0 (revision 0) >>> +++ ext/pgsql/tests/bug47199.phpt =A0 =A0 =A0 (revision 0) >>> @@ -0,0 +1,23 @@ >>> +--TEST-- >>> +Bug #47199 =A0pg_delete fails on NULL >>> +--SKIPIF-- >>> +>> +require_once('skipif.inc'); >>> +?> >>> +--FILE-- >>> +>> + >>> +require_once('config.inc'); >>> + >>> +$dbh =3D @pg_connect($conn_str); >>> +$tbl_name =3D 'test_47199'; >>> +@pg_query("DROP TABLE $tbl_name"); >>> +pg_query("CREATE TABLE $tbl_name (null_field INT, not_null_field INT)"= ); >>> +print(pg_delete($dbh, $tbl_name, array('null_field' =3D> NULL, >>> 'not_null_field' =3D> 2),PGSQL_DML_STRING)); >>> +@pg_query("DROP TABLE $tbl_name"); >>> +pg_close($dbh); >>> +echo PHP_EOL."Done".PHP_EOL; >>> +?> >>> +--EXPECTF-- >>> +DELETE FROM %s WHERE null_field IS NULL AND not_null_field=3D2; >>> +Done >>> Index: ext/pgsql/pgsql.c >>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D >>> --- ext/pgsql/pgsql.c =A0 (revision 294790) >>> +++ ext/pgsql/pgsql.c =A0 (working copy) >>> @@ -5523,7 +5523,7 @@ >>> =A0} >>> =A0/* }}} */ >>> >>> -static inline int build_assignment_string(smart_str *querystr, >>> HashTable *ht, const char *pad, int pad_len TSRMLS_DC) >>> +static inline int build_assignment_string(smart_str *querystr, >>> HashTable *ht, int where_cond, const char *pad, int pad_len TSRMLS_DC) >>> =A0{ >>> =A0 =A0 =A0 HashPosition pos; >>> =A0 =A0 =A0 uint fld_len; >>> @@ -5542,8 +5542,13 @@ >>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return -1; >>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 } >>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 smart_str_appendl(querystr, fld, fld_len - = 1); >>> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 smart_str_appendc(querystr, '=3D'); >>> >>> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (where_cond && Z_TYPE_PP(val) =3D=3D I= S_STRING && >>> !strcmp(Z_STRVAL_PP(val), "NULL")) { >>> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 smart_str_appends(queryst= r, " IS "); >>> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 } else { >>> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 smart_str_appendc(queryst= r, '=3D'); >>> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 } >>> + >>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 switch(Z_TYPE_PP(val)) { >>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 case IS_STRING: >>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 smart_str_a= ppendl(querystr, >>> Z_STRVAL_PP(val), Z_STRLEN_PP(val)); >>> @@ -5604,12 +5609,12 @@ >>> =A0 =A0 =A0 smart_str_appends(&querystr, table); >>> =A0 =A0 =A0 smart_str_appends(&querystr, " SET "); >>> >>> - =A0 =A0 =A0 if (build_assignment_string(&querystr, Z_ARRVAL_P(var_arr= ay), ",", 1 >>> TSRMLS_CC)) >>> + =A0 =A0 =A0 if (build_assignment_string(&querystr, Z_ARRVAL_P(var_arr= ay), 0, >>> ",", 1 TSRMLS_CC)) >>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 goto cleanup; >>> >>> =A0 =A0 =A0 smart_str_appends(&querystr, " WHERE "); >>> >>> - =A0 =A0 =A0 if (build_assignment_string(&querystr, Z_ARRVAL_P(ids_arr= ay), " AND >>> ", sizeof(" AND ")-1 TSRMLS_CC)) >>> + =A0 =A0 =A0 if (build_assignment_string(&querystr, Z_ARRVAL_P(ids_arr= ay), 1, " >>> AND ", sizeof(" AND ")-1 TSRMLS_CC)) >>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 goto cleanup; >>> >>> =A0 =A0 =A0 smart_str_appendc(&querystr, ';'); >>> @@ -5705,7 +5710,7 @@ >>> =A0 =A0 =A0 smart_str_appends(&querystr, table); >>> =A0 =A0 =A0 smart_str_appends(&querystr, " WHERE "); >>> >>> - =A0 =A0 =A0 if (build_assignment_string(&querystr, Z_ARRVAL_P(ids_arr= ay), " AND >>> ", sizeof(" AND ")-1 TSRMLS_CC)) >>> + =A0 =A0 =A0 if (build_assignment_string(&querystr, Z_ARRVAL_P(ids_arr= ay), 1, " >>> AND ", sizeof(" AND ")-1 TSRMLS_CC)) >>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 goto cleanup; >>> >>> =A0 =A0 =A0 smart_str_appendc(&querystr, ';'); >>> @@ -5841,7 +5846,7 @@ >>> =A0 =A0 =A0 smart_str_appends(&querystr, table); >>> =A0 =A0 =A0 smart_str_appends(&querystr, " WHERE "); >>> >>> - =A0 =A0 =A0 if (build_assignment_string(&querystr, Z_ARRVAL_P(ids_arr= ay), " AND >>> ", sizeof(" AND ")-1 TSRMLS_CC)) >>> + =A0 =A0 =A0 if (build_assignment_string(&querystr, Z_ARRVAL_P(ids_arr= ay), 1, " >>> AND ", sizeof(" AND ")-1 TSRMLS_CC)) >>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 goto cleanup; >>> >>> =A0 =A0 =A0 smart_str_appendc(&querystr, ';'); >>> >>> >>> >>> >>> 2010/2/9 Johannes Schl=FCter : >>>> Hi, >>>> >>>> On Tue, 2010-02-09 at 20:11 +0500, Sokolov Evgeniy wrote: >>>>> > did you really run this test and was it successful? - doesn't lookl= ike >>>>> > for me. >>>>> I just run "php tests/27_bug47199.phpt" and check the result output. >>>>> Is this correct way? >>>> >>>> The easy way to run it using the test Framework is by executing >>>> >>>> =A0 make test TESTS=3Dtests/27_bug47199.phpt >>>> >>>> from your build directory which will prepare some environment things a= nd >>>> then run run-tests.php from PHP's source directory which has the >>>> implementation of our test system, you can also run it directly to hav= e >>>> more ocntrol. See README.TESTING in the php-src root folder and >>>> http://qa.php.net/write-test.php for more details on the test system. >>>> >>>> If you run your test it will tell you it failed as you're tests EXPECT= F >>>> section has to look something like this: >>>> >>>> --EXPECTF-- >>>> DELETE FROM %s WHERE null_field IS NULL AND not_null_field=3D2; >>>> Done >>>> >>>> Mind the %s place holder there! >>>> >>>>> > And please also add a link to the patch to the bug report >>>>> Can it be link on pastebin.org? For example http://pastebin.org/88880 >>>> >>>> I don't know how persistent these pastebins are, >>>> http://news.php.net/php.internals/46965 might be an alternative link >>>> though :-) >>>> >>>> johannes >>> >>> >>> best regards >>> >>> -- >>> PHP Internals - PHP Runtime Development Mailing List >>> To unsubscribe, visit: http://www.php.net/unsub.php >>> >>> >> >> >> >> -- >> Pierre >> >> @pierrejoye | http://blog.thepimp.net | http://www.libgd.org best regards --0016e6d9714faeb4d9047f4224b9 Content-Type: text/plain; charset=US-ASCII; name="mypatch.txt" Content-Disposition: attachment; filename="mypatch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g5idnen61 SW5kZXg6IGV4dC9wZ3NxbC90ZXN0cy9idWc0NzE5OS5waHB0Cj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGV4dC9w Z3NxbC90ZXN0cy9idWc0NzE5OS5waHB0CShyZXZpc2lvbiAwKQorKysgZXh0L3Bnc3FsL3Rlc3Rz L2J1ZzQ3MTk5LnBocHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjMgQEAKKy0tVEVTVC0tCitC dWcgIzQ3MTk5ICBwZ19kZWxldGUgZmFpbHMgb24gTlVMTAorLS1TS0lQSUYtLQorPD9waHAgCity ZXF1aXJlX29uY2UoJ3NraXBpZi5pbmMnKTsKKz8+CistLUZJTEUtLQorPD9waHAKKworcmVxdWly ZV9vbmNlKCdjb25maWcuaW5jJyk7CisKKyRkYmggPSBAcGdfY29ubmVjdCgkY29ubl9zdHIpOwor JHRibF9uYW1lID0gJ3Rlc3RfNDcxOTknOworQHBnX3F1ZXJ5KCJEUk9QIFRBQkxFICR0YmxfbmFt ZSIpOworcGdfcXVlcnkoIkNSRUFURSBUQUJMRSAkdGJsX25hbWUgKG51bGxfZmllbGQgSU5ULCBu b3RfbnVsbF9maWVsZCBJTlQpIik7CitwcmludChwZ19kZWxldGUoJGRiaCwgJHRibF9uYW1lLCBh cnJheSgnbnVsbF9maWVsZCcgPT4gTlVMTCwgJ25vdF9udWxsX2ZpZWxkJyA9PiAyKSxQR1NRTF9E TUxfU1RSSU5HKSk7CitAcGdfcXVlcnkoIkRST1AgVEFCTEUgJHRibF9uYW1lIik7CitwZ19jbG9z ZSgkZGJoKTsKK2VjaG8gUEhQX0VPTC4iRG9uZSIuUEhQX0VPTDsKKz8+CistLUVYUEVDVEYtLQor REVMRVRFIEZST00gJXMgV0hFUkUgbnVsbF9maWVsZCBJUyBOVUxMIEFORCBub3RfbnVsbF9maWVs ZD0yOworRG9uZQpJbmRleDogZXh0L3Bnc3FsL3Bnc3FsLmMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZXh0L3Bn c3FsL3Bnc3FsLmMJKHJldmlzaW9uIDI5NDc5MCkKKysrIGV4dC9wZ3NxbC9wZ3NxbC5jCSh3b3Jr aW5nIGNvcHkpCkBAIC01NTIzLDcgKzU1MjMsNyBAQAogfQogLyogfX19ICovCiAKLXN0YXRpYyBp bmxpbmUgaW50IGJ1aWxkX2Fzc2lnbm1lbnRfc3RyaW5nKHNtYXJ0X3N0ciAqcXVlcnlzdHIsIEhh c2hUYWJsZSAqaHQsIGNvbnN0IGNoYXIgKnBhZCwgaW50IHBhZF9sZW4gVFNSTUxTX0RDKQorc3Rh dGljIGlubGluZSBpbnQgYnVpbGRfYXNzaWdubWVudF9zdHJpbmcoc21hcnRfc3RyICpxdWVyeXN0 ciwgSGFzaFRhYmxlICpodCwgaW50IHdoZXJlX2NvbmQsIGNvbnN0IGNoYXIgKnBhZCwgaW50IHBh ZF9sZW4gVFNSTUxTX0RDKQogewogCUhhc2hQb3NpdGlvbiBwb3M7CiAJdWludCBmbGRfbGVuOwpA QCAtNTU0Miw4ICs1NTQyLDEzIEBACiAJCQlyZXR1cm4gLTE7CiAJCX0KIAkJc21hcnRfc3RyX2Fw cGVuZGwocXVlcnlzdHIsIGZsZCwgZmxkX2xlbiAtIDEpOwotCQlzbWFydF9zdHJfYXBwZW5kYyhx dWVyeXN0ciwgJz0nKTsKIAkJCisJCWlmICh3aGVyZV9jb25kICYmIFpfVFlQRV9QUCh2YWwpID09 IElTX1NUUklORyAmJiAhc3RyY21wKFpfU1RSVkFMX1BQKHZhbCksICJOVUxMIikpIHsKKwkJCXNt YXJ0X3N0cl9hcHBlbmRzKHF1ZXJ5c3RyLCAiIElTICIpOworCQl9IGVsc2UgeworCQkJc21hcnRf c3RyX2FwcGVuZGMocXVlcnlzdHIsICc9Jyk7CisJCX0KKwkJCiAJCXN3aXRjaChaX1RZUEVfUFAo dmFsKSkgewogCQkJY2FzZSBJU19TVFJJTkc6CiAJCQkJc21hcnRfc3RyX2FwcGVuZGwocXVlcnlz dHIsIFpfU1RSVkFMX1BQKHZhbCksIFpfU1RSTEVOX1BQKHZhbCkpOwpAQCAtNTYwNCwxMiArNTYw OSwxMiBAQAogCXNtYXJ0X3N0cl9hcHBlbmRzKCZxdWVyeXN0ciwgdGFibGUpOwogCXNtYXJ0X3N0 cl9hcHBlbmRzKCZxdWVyeXN0ciwgIiBTRVQgIik7CiAKLQlpZiAoYnVpbGRfYXNzaWdubWVudF9z dHJpbmcoJnF1ZXJ5c3RyLCBaX0FSUlZBTF9QKHZhcl9hcnJheSksICIsIiwgMSBUU1JNTFNfQ0Mp KQorCWlmIChidWlsZF9hc3NpZ25tZW50X3N0cmluZygmcXVlcnlzdHIsIFpfQVJSVkFMX1AodmFy X2FycmF5KSwgMCwgIiwiLCAxIFRTUk1MU19DQykpCiAJCWdvdG8gY2xlYW51cDsKIAkKIAlzbWFy dF9zdHJfYXBwZW5kcygmcXVlcnlzdHIsICIgV0hFUkUgIik7CiAJCi0JaWYgKGJ1aWxkX2Fzc2ln bm1lbnRfc3RyaW5nKCZxdWVyeXN0ciwgWl9BUlJWQUxfUChpZHNfYXJyYXkpLCAiIEFORCAiLCBz aXplb2YoIiBBTkQgIiktMSBUU1JNTFNfQ0MpKQorCWlmIChidWlsZF9hc3NpZ25tZW50X3N0cmlu ZygmcXVlcnlzdHIsIFpfQVJSVkFMX1AoaWRzX2FycmF5KSwgMSwgIiBBTkQgIiwgc2l6ZW9mKCIg QU5EICIpLTEgVFNSTUxTX0NDKSkKIAkJZ290byBjbGVhbnVwOwogCiAJc21hcnRfc3RyX2FwcGVu ZGMoJnF1ZXJ5c3RyLCAnOycpOwkKQEAgLTU3MDUsNyArNTcxMCw3IEBACiAJc21hcnRfc3RyX2Fw cGVuZHMoJnF1ZXJ5c3RyLCB0YWJsZSk7CiAJc21hcnRfc3RyX2FwcGVuZHMoJnF1ZXJ5c3RyLCAi IFdIRVJFICIpOwogCi0JaWYgKGJ1aWxkX2Fzc2lnbm1lbnRfc3RyaW5nKCZxdWVyeXN0ciwgWl9B UlJWQUxfUChpZHNfYXJyYXkpLCAiIEFORCAiLCBzaXplb2YoIiBBTkQgIiktMSBUU1JNTFNfQ0Mp KQorCWlmIChidWlsZF9hc3NpZ25tZW50X3N0cmluZygmcXVlcnlzdHIsIFpfQVJSVkFMX1AoaWRz X2FycmF5KSwgMSwgIiBBTkQgIiwgc2l6ZW9mKCIgQU5EICIpLTEgVFNSTUxTX0NDKSkKIAkJZ290 byBjbGVhbnVwOwogCiAJc21hcnRfc3RyX2FwcGVuZGMoJnF1ZXJ5c3RyLCAnOycpOwpAQCAtNTg0 MSw3ICs1ODQ2LDcgQEAKIAlzbWFydF9zdHJfYXBwZW5kcygmcXVlcnlzdHIsIHRhYmxlKTsKIAlz bWFydF9zdHJfYXBwZW5kcygmcXVlcnlzdHIsICIgV0hFUkUgIik7CiAKLQlpZiAoYnVpbGRfYXNz aWdubWVudF9zdHJpbmcoJnF1ZXJ5c3RyLCBaX0FSUlZBTF9QKGlkc19hcnJheSksICIgQU5EICIs IHNpemVvZigiIEFORCAiKS0xIFRTUk1MU19DQykpCisJaWYgKGJ1aWxkX2Fzc2lnbm1lbnRfc3Ry aW5nKCZxdWVyeXN0ciwgWl9BUlJWQUxfUChpZHNfYXJyYXkpLCAxLCAiIEFORCAiLCBzaXplb2Yo IiBBTkQgIiktMSBUU1JNTFNfQ0MpKQogCQlnb3RvIGNsZWFudXA7CiAKIAlzbWFydF9zdHJfYXBw ZW5kYygmcXVlcnlzdHIsICc7Jyk7Cg== --0016e6d9714faeb4d9047f4224b9--