From: Martin Gallwey Date: December 4 2009 2:31pm Subject: Re: Template query change from v2 to v3 List-Archive: http://lists.mysql.com/plusplus/8803 Message-Id: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="29444707-2132471205-1259936793=:32134" --29444707-2132471205-1259936793=:32134 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; FORMAT=flowed Content-ID: Whoops, sorry, I hadn't read this mail: http://lists.mysql.com/plusplus/6423 So my additional test cases weren't accurate as they contained the all important 'q' after the templated parameter. >> You're welcome to continue working on this, but you'll have to take care of >> the single-string-parameter case to have the patch accepted. > > I'm pretty sure it works - the patch does more than just revert 1446 - it > also protects the execute/use/store cases where the user supplies a full > query with it's length by checking to see if it needs to do template > substitution first. > > If there is a test case I've missed, I'd be interested to know what it is. There is a test case I had missed, which is the same as the previous ones but without the 'q', ie: mysqlpp::Query query = con.query (); query << "update stock set num = 587 where item = %0:ap_serial"; query.parse(); query.template_defaults["ap_serial"] = "'Good Irish Cabbage'"; mysqlpp::SimpleResult result = query.execute(); assert ( result.rows() == 0 ); I've modified my patch to revert the fix applied in revision 1446 and changed the fix so that the zero argument versions of execute/store/use (previously unchanged in this patch) were also protected by the 'processing_' flag. This protects us from the double substitution described in the mail referenced above. Cheers, Martin --29444707-2132471205-1259936793=:32134 Content-Type: TEXT/X-DIFF; NAME=latest.patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: ATTACHMENT; FILENAME=latest.patch ZGlmZiAtTmF1ciBteXNxbCsrLTMuMC45L2xpYi9xdWVyeS5jcHAgcGF0Y2hl ZC1teXNxbCsrLTMuMC45L2xpYi9xdWVyeS5jcHANCi0tLSBteXNxbCsrLTMu MC45L2xpYi9xdWVyeS5jcHAJMjAwOS0wMi0wNCAyMTo0NTozNy4wMDAwMDAw MDAgKzAwMDANCisrKyBwYXRjaGVkLW15c3FsKystMy4wLjkvbGliL3F1ZXJ5 LmNwcAkyMDA5LTEyLTA0IDE0OjI0OjQ1LjAwMDAwMDAwMCArMDAwMA0KQEAg LTE2OCw2ICsxNjgsMTQgQEANCiB9DQogDQogDQorU2ltcGxlUmVzdWx0IA0K K1F1ZXJ5OjpleGVjdXRlKCkgDQoreyANCisJQXV0b0ZsYWc8PiBhZih0ZW1w bGF0ZV9kZWZhdWx0cy5wcm9jZXNzaW5nXyk7DQorCXJldHVybiBleGVjdXRl KHN0cih0ZW1wbGF0ZV9kZWZhdWx0cykpOyANCit9DQorDQorDQogU2ltcGxl UmVzdWx0DQogUXVlcnk6OmV4ZWN1dGUoU1FMUXVlcnlQYXJtcyYgcCkNCiB7 DQpAQCAtMTc5LDcgKzE4Nyw3IEBADQogU2ltcGxlUmVzdWx0DQogUXVlcnk6 OmV4ZWN1dGUoY29uc3QgU1FMVHlwZUFkYXB0ZXImIHMpDQogew0KLQlpZiAo KHBhcnNlX2VsZW1zXy5zaXplKCkgPT0gMikgJiYgIXRlbXBsYXRlX2RlZmF1 bHRzLnByb2Nlc3NpbmdfKSB7DQorCWlmICggIXBhcnNlX2VsZW1zXy5lbXB0 eSgpICYmICF0ZW1wbGF0ZV9kZWZhdWx0cy5wcm9jZXNzaW5nXykgew0KIAkJ Ly8gV2UncmUgYSB0ZW1wbGF0ZSBxdWVyeSBhbmQgdGhpcyBpc24ndCBhIHJl Y3Vyc2l2ZSBjYWxsLCBzbw0KIAkJLy8gdGFrZSBzIHRvIGJlIGEgbG9uZSBw YXJhbWV0ZXIgZm9yIHRoZSBxdWVyeS4gIFdlIHdpbGwgY29tZQ0KIAkJLy8g YmFjayBpbiBoZXJlIHdpdGggYSBjb21wbGV0ZWQgcXVlcnksIGJ1dCB0aGUg cHJvY2Vzc2luZ18NCkBAIC0xOTcsNiArMjA1LDE0IEBADQogU2ltcGxlUmVz dWx0DQogUXVlcnk6OmV4ZWN1dGUoY29uc3QgY2hhciogc3RyLCBzaXplX3Qg bGVuKQ0KIHsNCisJaWYgKCFwYXJzZV9lbGVtc18uZW1wdHkoKSAmJiAhdGVt cGxhdGVfZGVmYXVsdHMucHJvY2Vzc2luZ18pIHsNCisJCS8vIFdlJ3JlIGEg dGVtcGxhdGUgcXVlcnkgYW5kIHRoaXMgaXNuJ3QgYSByZWN1cnNpdmUgY2Fs bCwgc28NCisJCS8vIHRha2UgcyB0byBiZSBhIGxvbmUgcGFyYW1ldGVyIGZv ciB0aGUgcXVlcnkuICBXZSB3aWxsIGNvbWUNCisJCS8vIGJhY2sgaW4gaGVy ZSB3aXRoIGEgY29tcGxldGVkIHF1ZXJ5LCBidXQgdGhlIHByb2Nlc3Npbmdf DQorCQkvLyBmbGFnIHdpbGwgYmUgc2V0LCBhbGxvd2luZyB1cyB0byBhdm9p ZCBhbiBpbmZpbml0ZSBsb29wLg0KKwkJQXV0b0ZsYWc8PiBhZih0ZW1wbGF0 ZV9kZWZhdWx0cy5wcm9jZXNzaW5nXyk7DQorCQlyZXR1cm4gZXhlY3V0ZShT UUxRdWVyeVBhcm1zKCkgPDwgc3RyIDw8IGxlbiApOw0KKwl9DQogCWlmICgo Y29wYWNldGljXyA9IGNvbm5fLT5kcml2ZXIoKS0+ZXhlY3V0ZShzdHIsIGxl bikpID09IHRydWUpIHsNCiAJCWlmIChwYXJzZV9lbGVtc18uc2l6ZSgpID09 IDApIHsNCiAJCQkvLyBOb3QgYSB0ZW1wbGF0ZSBxdWVyeSwgc28gYXV0by1y ZXNldA0KQEAgLTQ1OSw2ICs0NzUsMTQgQEANCiB9DQogDQogDQorU3RvcmVR dWVyeVJlc3VsdCANCitRdWVyeTo6c3RvcmUoKSANCit7IA0KKwlBdXRvRmxh Zzw+IGFmKHRlbXBsYXRlX2RlZmF1bHRzLnByb2Nlc3NpbmdfKTsNCisJcmV0 dXJuIHN0b3JlKHN0cih0ZW1wbGF0ZV9kZWZhdWx0cykpOyANCit9DQorDQor DQogU3RvcmVRdWVyeVJlc3VsdA0KIFF1ZXJ5OjpzdG9yZShTUUxRdWVyeVBh cm1zJiBwKQ0KIHsNCkBAIC00NzAsNyArNDk0LDcgQEANCiBTdG9yZVF1ZXJ5 UmVzdWx0DQogUXVlcnk6OnN0b3JlKGNvbnN0IFNRTFR5cGVBZGFwdGVyJiBz KQ0KIHsNCi0JaWYgKChwYXJzZV9lbGVtc18uc2l6ZSgpID09IDIpICYmICF0 ZW1wbGF0ZV9kZWZhdWx0cy5wcm9jZXNzaW5nXykgew0KKwlpZiAoIXBhcnNl X2VsZW1zXy5lbXB0eSgpICYmICF0ZW1wbGF0ZV9kZWZhdWx0cy5wcm9jZXNz aW5nXykgew0KIAkJLy8gV2UncmUgYSB0ZW1wbGF0ZSBxdWVyeSBhbmQgdGhp cyBpc24ndCBhIHJlY3Vyc2l2ZSBjYWxsLCBzbw0KIAkJLy8gdGFrZSBzIHRv IGJlIGEgbG9uZSBwYXJhbWV0ZXIgZm9yIHRoZSBxdWVyeS4gIFdlIHdpbGwg Y29tZQ0KIAkJLy8gYmFjayBpbiBoZXJlIHdpdGggYSBjb21wbGV0ZWQgcXVl cnksIGJ1dCB0aGUgcHJvY2Vzc2luZ18NCkBAIC00ODgsNiArNTEyLDE0IEBA DQogU3RvcmVRdWVyeVJlc3VsdA0KIFF1ZXJ5OjpzdG9yZShjb25zdCBjaGFy KiBzdHIsIHNpemVfdCBsZW4pDQogew0KKwlpZiAoIXBhcnNlX2VsZW1zXy5l bXB0eSgpICYmICF0ZW1wbGF0ZV9kZWZhdWx0cy5wcm9jZXNzaW5nXykgew0K KwkJLy8gV2UncmUgYSB0ZW1wbGF0ZSBxdWVyeSBhbmQgdGhpcyBpc24ndCBh IHJlY3Vyc2l2ZSBjYWxsLCBzbw0KKwkJLy8gdGFrZSBzIHRvIGJlIGEgbG9u ZSBwYXJhbWV0ZXIgZm9yIHRoZSBxdWVyeS4gIFdlIHdpbGwgY29tZQ0KKwkJ Ly8gYmFjayBpbiBoZXJlIHdpdGggYSBjb21wbGV0ZWQgcXVlcnksIGJ1dCB0 aGUgcHJvY2Vzc2luZ18NCisJCS8vIGZsYWcgd2lsbCBiZSBzZXQsIGFsbG93 aW5nIHVzIHRvIGF2b2lkIGFuIGluZmluaXRlIGxvb3AuDQorCQlBdXRvRmxh Zzw+IGFmKHRlbXBsYXRlX2RlZmF1bHRzLnByb2Nlc3NpbmdfKTsNCisJCXJl dHVybiBzdG9yZShTUUxRdWVyeVBhcm1zKCkgPDwgc3RyIDw8IGxlbiApOw0K Kwl9DQogCU1ZU1FMX1JFUyogcmVzID0gMDsNCiAJaWYgKChjb3BhY2V0aWNf ID0gY29ubl8tPmRyaXZlcigpLT5leGVjdXRlKHN0ciwgbGVuKSkgPT0gdHJ1 ZSkgew0KIAkJcmVzID0gY29ubl8tPmRyaXZlcigpLT5zdG9yZV9yZXN1bHQo KTsNCkBAIC01ODAsNiArNjEyLDE0IEBADQogfQ0KIA0KIA0KK1VzZVF1ZXJ5 UmVzdWx0IA0KK1F1ZXJ5Ojp1c2UoKSANCit7IA0KKwlBdXRvRmxhZzw+IGFm KHRlbXBsYXRlX2RlZmF1bHRzLnByb2Nlc3NpbmdfKTsNCisJcmV0dXJuIHVz ZShzdHIodGVtcGxhdGVfZGVmYXVsdHMpKTsgDQorfQ0KKw0KKw0KIFVzZVF1 ZXJ5UmVzdWx0DQogUXVlcnk6OnVzZShTUUxRdWVyeVBhcm1zJiBwKQ0KIHsN CkBAIC01OTEsNyArNjMxLDcgQEANCiBVc2VRdWVyeVJlc3VsdA0KIFF1ZXJ5 Ojp1c2UoY29uc3QgU1FMVHlwZUFkYXB0ZXImIHMpDQogew0KLQlpZiAoKHBh cnNlX2VsZW1zXy5zaXplKCkgPT0gMikgJiYgIXRlbXBsYXRlX2RlZmF1bHRz LnByb2Nlc3NpbmdfKSB7DQorCWlmICghcGFyc2VfZWxlbXNfLmVtcHR5KCkg ICYmICF0ZW1wbGF0ZV9kZWZhdWx0cy5wcm9jZXNzaW5nXykgew0KIAkJLy8g V2UncmUgYSB0ZW1wbGF0ZSBxdWVyeSBhbmQgdGhpcyBpc24ndCBhIHJlY3Vy c2l2ZSBjYWxsLCBzbw0KIAkJLy8gdGFrZSBzIHRvIGJlIGEgbG9uZSBwYXJh bWV0ZXIgZm9yIHRoZSBxdWVyeS4gIFdlIHdpbGwgY29tZQ0KIAkJLy8gYmFj ayBpbiBoZXJlIHdpdGggYSBjb21wbGV0ZWQgcXVlcnksIGJ1dCB0aGUgcHJv Y2Vzc2luZ18NCkBAIC02MDksNiArNjQ5LDE0IEBADQogVXNlUXVlcnlSZXN1 bHQNCiBRdWVyeTo6dXNlKGNvbnN0IGNoYXIqIHN0ciwgc2l6ZV90IGxlbikN CiB7DQorCWlmICghcGFyc2VfZWxlbXNfLmVtcHR5KCkgJiYgIXRlbXBsYXRl X2RlZmF1bHRzLnByb2Nlc3NpbmdfKSB7DQorCQkvLyBXZSdyZSBhIHRlbXBs YXRlIHF1ZXJ5IGFuZCB0aGlzIGlzbid0IGEgcmVjdXJzaXZlIGNhbGwsIHNv DQorCQkvLyB0YWtlIHMgdG8gYmUgYSBsb25lIHBhcmFtZXRlciBmb3IgdGhl IHF1ZXJ5LiAgV2Ugd2lsbCBjb21lDQorCQkvLyBiYWNrIGluIGhlcmUgd2l0 aCBhIGNvbXBsZXRlZCBxdWVyeSwgYnV0IHRoZSBwcm9jZXNzaW5nXw0KKwkJ Ly8gZmxhZyB3aWxsIGJlIHNldCwgYWxsb3dpbmcgdXMgdG8gYXZvaWQgYW4g aW5maW5pdGUgbG9vcC4NCisJCUF1dG9GbGFnPD4gYWYodGVtcGxhdGVfZGVm YXVsdHMucHJvY2Vzc2luZ18pOw0KKwkJcmV0dXJuIHVzZShTUUxRdWVyeVBh cm1zKCkgPDwgc3RyIDw8IGxlbiApOw0KKwl9DQogCU1ZU1FMX1JFUyogcmVz ID0gMDsNCiAJaWYgKChjb3BhY2V0aWNfID0gY29ubl8tPmRyaXZlcigpLT5l eGVjdXRlKHN0ciwgbGVuKSkgPT0gdHJ1ZSkgew0KIAkJcmVzID0gY29ubl8t PmRyaXZlcigpLT51c2VfcmVzdWx0KCk7DQpkaWZmIC1OYXVyIG15c3FsKyst My4wLjkvbGliL3F1ZXJ5LmggcGF0Y2hlZC1teXNxbCsrLTMuMC45L2xpYi9x dWVyeS5oDQotLS0gbXlzcWwrKy0zLjAuOS9saWIvcXVlcnkuaAkyMDA5LTAy LTA0IDIxOjQ1OjM3LjAwMDAwMDAwMCArMDAwMA0KKysrIHBhdGNoZWQtbXlz cWwrKy0zLjAuOS9saWIvcXVlcnkuaAkyMDA5LTEyLTA0IDE0OjIyOjEwLjAw MDAwMDAwMCArMDAwMA0KQEAgLTMzOSw3ICszMzksNyBAQA0KIAkvLy8gXHJl dHVybiBTaW1wbGVSZXN1bHQgc3RhdHVzIGluZm9ybWF0aW9uIGFib3V0IHRo ZSBxdWVyeQ0KIAkvLy8NCiAJLy8vIFxzYSBleGVjKCksIHN0b3JlKCksIHN0 b3JlaW4oKSwgYW5kIHVzZSgpDQotCVNpbXBsZVJlc3VsdCBleGVjdXRlKCkg eyByZXR1cm4gZXhlY3V0ZShzdHIodGVtcGxhdGVfZGVmYXVsdHMpKTsgfQ0K KwlTaW1wbGVSZXN1bHQgZXhlY3V0ZSgpOyANCiANCiAJLy8vIFxicmllZiBF eGVjdXRlIHRlbXBsYXRlIHF1ZXJ5IHVzaW5nIGdpdmVuIHBhcmFtZXRlcnMu DQogCS8vLw0KQEAgLTQwMCw3ICs0MDAsNyBAQA0KIAkvLy8gXHJldHVybiBV c2VRdWVyeVJlc3VsdCBvYmplY3QgdGhhdCBjYW4gd2FsayB0aHJvdWdoIHJl c3VsdCBzZXQgc2VyaWFsbHkNCiAJLy8vDQogCS8vLyBcc2EgZXhlYygpLCBl eGVjdXRlKCksIHN0b3JlKCkgYW5kIHN0b3JlaW4oKQ0KLQlVc2VRdWVyeVJl c3VsdCB1c2UoKSB7IHJldHVybiB1c2Uoc3RyKHRlbXBsYXRlX2RlZmF1bHRz KSk7IH0NCisJVXNlUXVlcnlSZXN1bHQgdXNlKCk7DQogDQogCS8vLyBcYnJp ZWYgRXhlY3V0ZSBhIHRlbXBsYXRlIHF1ZXJ5IHRoYXQgY2FuIHJldHVybiBy b3dzLCB3aXRoDQogCS8vLyBhY2Nlc3MgdG8gdGhlIHJvd3MgaW4gc2VxdWVu Y2UNCkBAIC00NjQsNyArNDY0LDcgQEANCiAJLy8vIFxyZXR1cm4gU3RvcmVR dWVyeVJlc3VsdCBvYmplY3QgY29udGFpbmluZyBlbnRpcmUgcmVzdWx0IHNl dA0KIAkvLy8NCiAJLy8vIFxzYSBleGVjKCksIGV4ZWN1dGUoKSwgc3RvcmVp bigpLCBhbmQgdXNlKCkNCi0JU3RvcmVRdWVyeVJlc3VsdCBzdG9yZSgpIHsg cmV0dXJuIHN0b3JlKHN0cih0ZW1wbGF0ZV9kZWZhdWx0cykpOyB9DQorCVN0 b3JlUXVlcnlSZXN1bHQgc3RvcmUoKTsNCiANCiAJLy8vIFxicmllZiBTdG9y ZSByZXN1bHRzIGZyb20gYSB0ZW1wbGF0ZSBxdWVyeSB1c2luZyBnaXZlbiBw YXJhbWV0ZXJzLg0KIAkvLy8NCmRpZmYgLU5hdXIgbXlzcWwrKy0zLjAuOS9l eGFtcGxlcy90cXVlcnkxLmNwcCBwYXRjaGVkLW15c3FsKystMy4wLjkvZXhh bXBsZXMvdHF1ZXJ5MS5jcHANCi0tLSBteXNxbCsrLTMuMC45L2V4YW1wbGVz L3RxdWVyeTEuY3BwCTIwMDktMDItMDQgMjE6NDU6MzYuMDAwMDAwMDAwICsw MDAwDQorKysgcGF0Y2hlZC1teXNxbCsrLTMuMC45L2V4YW1wbGVzL3RxdWVy eTEuY3BwCTIwMDktMTItMDQgMTQ6MjQ6NTguMDAwMDAwMDAwICswMDAwDQpA QCAtNDUsMTUgKzQ1LDM3IEBADQogCQkvLyBFc3RhYmxpc2ggdGhlIGNvbm5l Y3Rpb24gdG8gdGhlIGRhdGFiYXNlIHNlcnZlci4NCiAJCW15c3FscHA6OkNv bm5lY3Rpb24gY29uKGRiLCBzZXJ2ZXIsIHVzZXIsIHBhc3MpOw0KIA0KKwkJ bXlzcWxwcDo6UXVlcnkgcXVlcnkgPSBjb24ucXVlcnkgKCk7DQorCQlxdWVy eSA8PCAidXBkYXRlIHN0b2NrIHNldCBudW0gPSA1ODcgd2hlcmUgaXRlbSA9 ICUwOmFwX3NlcmlhbCI7DQorCQlxdWVyeS5wYXJzZSgpOw0KKwkJcXVlcnku dGVtcGxhdGVfZGVmYXVsdHNbImFwX3NlcmlhbCJdID0gIidHb29kIElyaXNo IENhYmJhZ2UnIjsNCisJCW15c3FscHA6OlNpbXBsZVJlc3VsdCByZXN1bHQg PSBxdWVyeS5leGVjdXRlKCk7DQorCQlhc3NlcnQgKCByZXN1bHQucm93cygp ID09IDAgKTsNCisNCisJCXF1ZXJ5LnJlc2V0KCk7DQorCQlxdWVyeSA8PCAi dXBkYXRlIHN0b2NrIHNldCBudW0gPSA1ODcgd2hlcmUgaXRlbSA9ICdHb29k IElyaXNoIENhYmJhZ2UnIjsNCisJCXF1ZXJ5LnBhcnNlKCk7DQorCQlyZXN1 bHQgPSBxdWVyeS5leGVjdXRlKCk7DQorCQlhc3NlcnQgKCByZXN1bHQucm93 cygpID09IDAgKTsNCisNCisJCXF1ZXJ5LnJlc2V0KCk7DQorCQlyZXN1bHQg PSBxdWVyeS5leGVjdXRlKCAidXBkYXRlIHN0b2NrIHNldCBudW0gPSA1ODcg d2hlcmUgaXRlbSA9ICdHb29kIElyaXNoIENhYmJhZ2UnIiApOw0KKwkJYXNz ZXJ0ICggcmVzdWx0LnJvd3MoKSA9PSAwICk7DQorDQorCQlxdWVyeSA8PCAi dXBkYXRlIHN0b2NrIHNldCBudW0gPSA1ODcgd2hlcmUgaXRlbSA9ICUwOmFw X3NlcmlhbCI7DQorCQlxdWVyeS5wYXJzZSgpOw0KKwkJcmVzdWx0ID0gcXVl cnkuZXhlY3V0ZSggIidHb29kIElyaXNoIENhYmJhZ2UnIiApOw0KKwkJYXNz ZXJ0ICggcmVzdWx0LnJvd3MoKSA9PSAwICk7DQorDQogCQkvLyBCdWlsZCBh IHRlbXBsYXRlIHF1ZXJ5IHRvIHJldHJpZXZlIGEgc3RvY2sgaXRlbSBnaXZl biBieQ0KIAkJLy8gaXRlbSBuYW1lLg0KLQkJbXlzcWxwcDo6UXVlcnkgcXVl cnkgPSBjb24ucXVlcnkoDQotCQkJCSJzZWxlY3QgKiBmcm9tIHN0b2NrIHdo ZXJlIGl0ZW0gPSAlMHEiKTsNCisJCXF1ZXJ5LnJlc2V0KCk7DQorCQlxdWVy eSA8PCAic2VsZWN0ICogZnJvbSBzdG9jayB3aGVyZSBpdGVtID0gJTBxIG9y IGRlc2NyaXB0aW9uIGxpa2UgJyUlJTAlJScgb3Igd2VpZ2h0ID4gJTEiOw0K IAkJcXVlcnkucGFyc2UoKTsNCiANCiAJCS8vIFJldHJpZXZlIGFuIGl0ZW0g YWRkZWQgYnkgcmVzZXRkYjsgaXQgd29uJ3QgYmUgdGhlcmUgaWYNCiAJCS8v IHRxdWVyeSogb3Igc3NxbHMzIGlzIHJ1biBzaW5jZSByZXNldGRiLg0KLQkJ bXlzcWxwcDo6U3RvcmVRdWVyeVJlc3VsdCByZXMxID0gcXVlcnkuc3RvcmUo Ik7DvHJuYmVyZ2VyIEJyYXRzIik7DQorCQlteXNxbHBwOjpTdG9yZVF1ZXJ5 UmVzdWx0IHJlczEgPSBxdWVyeS5zdG9yZSgiTsO8cm5iZXJnZXIgQnJhdHMi LCAxNTApOw0KIAkJaWYgKHJlczEuZW1wdHkoKSkgew0KIAkJCXRocm93IG15 c3FscHA6OkJhZFF1ZXJ5KCJVVEYtOCBicmF0d3Vyc3QgaXRlbSBub3QgZm91 bmQgaW4gIg0KIAkJCQkJInRhYmxlLCBydW4gcmVzZXRkYiIpOw0K --29444707-2132471205-1259936793=:32134--