Thread: BUG #14202: pg_trgm: % uses incorrect comparison of similarity with the limit
BUG #14202: pg_trgm: % uses incorrect comparison of similarity with the limit
From
contact@gregnavis.com
Date:
VGhlIGZvbGxvd2luZyBidWcgaGFzIGJlZW4gbG9nZ2VkIG9uIHRoZSB3ZWJz aXRlOgoKQnVnIHJlZmVyZW5jZTogICAgICAxNDIwMgpMb2dnZWQgYnk6ICAg ICAgICAgIEdyZWcgTmF2aXMKRW1haWwgYWRkcmVzczogICAgICBjb250YWN0 QGdyZWduYXZpcy5jb20KUG9zdGdyZVNRTCB2ZXJzaW9uOiA5LjZiZXRhMQpP cGVyYXRpbmcgc3lzdGVtOiAgIEZlZG9yYSAyMyAoTGludXggNC41LjYtMjAw LmZjMjMueDg2XzY0KQpEZXNjcmlwdGlvbjogICAgICAgIAoKIyBTdW1tYXJ5 DQoNCkR1ZSB0byBhIGJ1ZyBndHJnbV9jb25zaXN0ZW50LCB1c2luZyBhIEdp U1Qgb3IgR0lOIHRyaWdyYW0gaW5kZXggY2FuIHJldHVybgpleHRyYW5lb3Vz IHJvd3Mgd2hvc2UgdHJpZ3JhbS1zaW1pbGFyaXR5IHdhcyBiZWxvdyBzZXRf bGltaXQoKS4NCg0KIyBWZXJzaW9uIHRlc3RlZA0KDQpQb3N0Z3JlU1FMIEdp dCBjb21taXQ6IDRkNDhhZGMNCg0KJCBnY2MgLS12ZXJzaW9uDQpnY2MgKEdD QykgNS4zLjEgMjAxNjA0MDYgKFJlZCBIYXQgNS4zLjEtNikNCkNvcHlyaWdo dCAoQykgMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NClRo aXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlp bmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PDQp3YXJyYW50eTsgbm90IGV2 ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIKUFVSUE9TRS4NCg0KJCB1bmFtZSAtYQ0KTGludXggbG9jYWxob3N0 LmxvY2FsZG9tYWluIDQuNS42LTIwMC5mYzIzLng4Nl82NCAjMSBTTVAgV2Vk IEp1biAxIDIxOjI4OjIwClVUQyAyMDE2IHg4Nl82NCB4ODZfNjQgeDg2XzY0 IEdOVS9MaW51eA0KDQojIEhvdyB0byByZXByb2R1Y2UNCg0KU2F2ZSB0aGUg YmVsb3cgdG8gdHJnbV9idWcuc3FsOg0KDQotLSBDbGVhbiB1cCBhZnRlciBw cmV2aW91cyBydW4uDQpEUk9QIFRBQkxFIElGIEVYSVNUUyByZXN0YXVyYW50 czsNCkRST1AgRVhURU5TSU9OIElGIEVYSVNUUyBwZ190cmdtIENBU0NBREU7 DQoNCi0tIENyZWF0ZSB0aGUgdGFibGUuDQpDUkVBVEUgRVhURU5TSU9OIHBn X3RyZ207DQpDUkVBVEUgVEFCTEUgcmVzdGF1cmFudHMoY2l0eSBWQVJDSEFS KDI1NSkgTk9UIE5VTEwpOw0KQ1JFQVRFIElOREVYIHJlc3RhdXJhbnRzX29u X2NpdHlfaWR4IE9OIHJlc3RhdXJhbnRzIFVTSU5HIGdpc3QoY2l0eQpnaXN0 X3RyZ21fb3BzKTsNCg0KLS0gSW5zZXJ0IDEwMDAwIHJvd3MgdG8gdHJpZ2dl ciBpbmRleCB1c2UuDQpJTlNFUlQgSU5UTyByZXN0YXVyYW50cyBTRUxFQ1Qg J1dhcnNhdycgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMDApOw0KSU5T RVJUIElOVE8gcmVzdGF1cmFudHMgU0VMRUNUICdTemN6ZWNpbicgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMDApOw0KDQotLSBTaW1pbGFyaXR5IG9m IHRoZSB0d28gbmFtZXMgKGZvciByZWZlcmVuY2UpLg0KU0VMRUNUIHNpbWls YXJpdHkoJ1N6Y3plY2luJywgJ1dhcnNhdycpOw0KDQotLSBTZXQgdGhlIGxp bWl0IHRvIDAuMy4gT25seSBXYXJzYXcgaXMgcmV0dXJuZWQgKGFzIGl0IHNo b3VsZCkuDQpTRUxFQ1Qgc2V0X2xpbWl0KDAuMyk7DQpTRUxFQ1QgRElTVElO Q1QgY2l0eSwgc2ltaWxhcml0eShjaXR5LCAnV2Fyc2F3JyksIHNob3dfbGlt aXQoKSBGUk9NCnJlc3RhdXJhbnRzIFdIRVJFIGNpdHkgJSAnV2Fyc2F3JzsN Cg0KLS0gUmFpc2UgdGhlIGxpbWl0IHRvIDAuNS4gTm93IF9ib3RoXyBXYXJz YXcgYW5kIFN6Y3plY2luIGFyZSByZXR1cm5lZC4NClNFTEVDVCBzZXRfbGlt aXQoMC41KTsNClNFTEVDVCBESVNUSU5DVCBjaXR5LCBzaW1pbGFyaXR5KGNp dHksICdXYXJzYXcnKSwgc2hvd19saW1pdCgpIEZST00KcmVzdGF1cmFudHMg V0hFUkUgY2l0eSAlICdXYXJzYXcnOw0KDQphbmQgcnVuICJwc3FsIC1mIHRy Z21fYnVnLnNxbCIuDQoNCiMgUmVzdWx0cw0KDQpUaGUgc2NyaXB0IHJldHVy bnMgdGhlIHJpZ2h0IHJlc3VsdCB3aGVuIHRoZSB0aHJlc2hvbGQgaXMgc2V0 IHRvIDAuMzoNCg0KICBjaXR5ICB8IHNpbWlsYXJpdHkgfCBzaG93X2xpbWl0 IA0KLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQ0KIFdhcnNh dyB8ICAgICAgICAgIDEgfCAgICAgICAgMC4zDQooMSByb3cpDQoNCkhvd2V2 ZXIsIGl0IHJldHVybnMgX2JvdGggY2l0aWVzIGFmdGVyIHJpc2luZyB0aGUg dGhyZXNob2xkIHRvIDAuNV86DQoNCiAgIGNpdHkgICB8IHNpbWlsYXJpdHkg fCBzaG93X2xpbWl0IA0KLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tDQogU3pjemVjaW4gfCAgICAgICAgICAwIHwgICAgICAgIDAuNQ0K IFdhcnNhdyAgIHwgICAgICAgICAgMSB8ICAgICAgICAwLjUNCg0KIyBSb290 IGNhdXNlDQoNClRoZSByb290IGNhdXNlIGlzIHRoaXMgbGluZSBpbiBjb250 cmliL3BnX3RyZ20vdHJnbV9naXN0LmM6DQoNCi8qIHN0cmFuZ2UgYnVnIGF0 IGZyZWVic2QgNS4yLjEgYW5kIGdjYyAzLjMuMyAqLw0KcmVzID0gKCooaW50 ICopICZ0bXBzbWwgPT0gKihpbnQgKikgJm5saW1pdCB8fCB0bXBzbWwgPiBu bGltaXQpOw0KDQpubGltaXQgaXMgb2YgdHlwZSBkb3VibGUuIHRtcHNtbCBp cyBvZiB0eXBlIGZsb2F0NC4gT24gbXkgc3lzdGVtCnNpemVvZihmbG9hdDQp ID09IDQgYW5kIHNpemVvZihkb3VibGUpID09IDguIEFmdGVyIGFkZGluZzoN Cg0KcHJpbnRmKCJ0bXBzbWwgPSAlZiB0bXBzbWw6aW50ID0gJWkgbmxpbWl0 ID0gJWYgbmxpbWl0OmludCA9ICVpIHJlcyA9ICVpXG4iLAp0bXBzbWwsICoo aW50ICopJnRtcHNtbCwgbmxpbWl0LCAqKGludCAqKSZubGltaXQsIHJlcyk7 DQoNCmFmdGVyIHRoZSBvZmZlbmRpbmcgbGluZSBJIGNhbiBzZWUgdGhlIGZv bGxvd2luZyBvdXRwdXQgKGFmdGVyIHBhc3NpbmcKdGhyb3VnaCAic29ydCB8 IHVuaXEiKToNCg0KdG1wc21sID0gMC4wMDAwMDAgdG1wc21sOmludCA9IDAg bmxpbWl0ID0gMC4zMDAwMDAgbmxpbWl0OmludCA9IDg1ODk5MzQ1OQpyZXMg PSAwDQp0bXBzbWwgPSAwLjAwMDAwMCB0bXBzbWw6aW50ID0gMCBubGltaXQg PSAwLjUwMDAwMCBubGltaXQ6aW50ID0gMCByZXMgPSAxDQp0bXBzbWwgPSAx LjAwMDAwMCB0bXBzbWw6aW50ID0gMTA2NTM1MzIxNiBubGltaXQgPSAwLjMw MDAwMCBubGltaXQ6aW50ID0KODU4OTkzNDU5IHJlcyA9IDENCnRtcHNtbCA9 IDEuMDAwMDAwIHRtcHNtbDppbnQgPSAxMDY1MzUzMjE2IG5saW1pdCA9IDAu NTAwMDAwIG5saW1pdDppbnQgPSAwCnJlcyA9IDENCg0KT24gbGluZSAyLCB3 ZSBjYW4gc2VlIHRoYXQgbmxpbWl0ID0gMC41IHdhcyBjb252ZXJ0ZWQgdG8g MCB3aGljaCB0cmlnZ2VyZWQKdGhlIGVycm9yLg0KDQojIFBvc3NpYmxlIGZp eA0KDQpJZiB3ZSdyZSBva2F5IHdpdGggYWJhbmRvbmluZyB0aGUgYnVnIHdv cmstYXJvdW5kIGZvciBGcmVlQlNEIDUuMi4xIC8gZ2NjCjMuMy4zIHRoZW4g SSBzdWdnZXN0IHJlcGxhY2luZw0KDQpyZXMgPSAoKihpbnQgKikgJnRtcHNt bCA9PSAqKGludCAqKSAmbmxpbWl0IHx8IHRtcHNtbCA+IG5saW1pdCk7DQoN CndpdGgNCg0KcmVzID0gdG1wc21sID49IG5saW1pdDsNCg0KVGhpcyByZXNv bHZlcyB0aGUgaXNzdWUuDQoKCg==
Re: BUG #14202: pg_trgm: % uses incorrect comparison of similarity with the limit
From
Tom Lane
Date:
contact@gregnavis.com writes: > Due to a bug gtrgm_consistent, using a GiST or GIN trigram index can return > extraneous rows whose trigram-similarity was below set_limit(). > ... > The root cause is this line in contrib/pg_trgm/trgm_gist.c: > /* strange bug at freebsd 5.2.1 and gcc 3.3.3 */ > res = (*(int *) &tmpsml == *(int *) &nlimit || tmpsml > nlimit); > nlimit is of type double. tmpsml is of type float4. Ugh, yeah, that's completely broken now isn't it. I suspect that changing tmpsml to double would be enough to get around the alleged gcc bug and let us write the comparison naturally, ie the whole thing was likely an artifact of using float4. Will try it that way. Thanks for the report! regards, tom lane