Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vkcV5-000C5K-0G for pgsql-hackers@arkaria.postgresql.org; Tue, 27 Jan 2026 06:24:32 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vkcV3-00C8f2-1H for pgsql-hackers@arkaria.postgresql.org; Tue, 27 Jan 2026 06:24:29 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vkamE-00Bx7I-0B for pgsql-hackers@lists.postgresql.org; Tue, 27 Jan 2026 04:34:06 +0000 Received: from mail.postgrespro.ru ([93.174.132.70]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vkam9-002VOd-18 for pgsql-hackers@lists.postgresql.org; Tue, 27 Jan 2026 04:34:05 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1769488439; bh=39nyXNkWQY6+96YSRp6xtA3DqjEyC06SyC76EAiDlBA=; h=Date:From:To:Subject:Message-ID:From; b=kwwDFKVsyQ3B6UwuYRkiq/q0z0IsYqC5Mml5KwhnDxr3pNNmxzKrfskV8nQQIzw3h TwAdQc/CskVdDRjtv1KmeSET19FL5EwkG9jwLjH9Q4LUwBAgLw2oHzP+2JsVG9l33c 1AJgmizzYxjGYSobdh1bReya6Rm2UkpBise5hOWphA7+5HZ9xQCwKPB+mK/5P0gyAz mYONB29W6EYmHv1hX9z1L5BJ1mtWkafoo+wtz2rYdn5brh2eqGSMKjmAC/+jdgMdSs SxmqbGJnVyBxXsPxkObuFUfgS28OgijMhdBY5WIWJ5Cl15DmwshWcKFXURDYL93diJ f7sOK8VCq8/GQ== Received: from mail.l.postgrespro.ru (webmail-slave-mstn.l.postgrespro.ru [192.168.2.28]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (Client did not present a certificate) (Authenticated sender: p.gilev@postgrespro.ru) by mail.postgrespro.ru (Postfix/587) with ESMTPSA id 0FFFA606A4 for ; Tue, 27 Jan 2026 07:33:59 +0300 (MSK) MIME-Version: 1.0 Date: Tue, 27 Jan 2026 11:33:59 +0700 From: p.gilev@postgrespro.ru To: pgsql-hackers@lists.postgresql.org Subject: Make T_CoalesceExpr executable on a foreign server Message-ID: X-Sender: p.gilev@postgrespro.ru Content-Type: multipart/mixed; boundary="=_e5d15360e6c3984decfe3fb3245ce77c" X-KSMG-AntiPhishing: NotDetected X-KSMG-AntiSpam-Interceptor-Info: not scanned X-KSMG-AntiSpam-Status: not scanned, disabled by settings X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 2.1.0.7854, bases: 2026/01/27 03:48:00 #28155198 X-KSMG-AntiVirus-Status: NotDetected, skipped X-KSMG-LinksScanning: not scanned, disabled by settings X-KSMG-Message-Action: skipped X-KSMG-Rule-ID: 1 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_e5d15360e6c3984decfe3fb3245ce77c Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Hello. Currently, T_CoalesceExpr is not executable on the foreign server. This functionality could be useful and the fix appears to be straightforward. The proposed modification extends foreign_expr_walker to handle T_CoalesceExpr node, deparseCoalesceExpr is added to deparseExpr. A test case for COALESCE is also included. Regards, Pavel --=_e5d15360e6c3984decfe3fb3245ce77c Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=coalesce.patch Content-Disposition: attachment; filename=coalesce.patch; size=4791 ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2RlcGFyc2UuYyBiL2NvbnRyaWIvcG9z dGdyZXNfZmR3L2RlcGFyc2UuYwppbmRleCBlYmUyYzNhNTk2YS4uYzVmODI4YTY1NzUgMTAwNjQ0 Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2RlcGFyc2UuYworKysgYi9jb250cmliL3Bvc3Rn cmVzX2Zkdy9kZXBhcnNlLmMKQEAgLTE5MCw2ICsxOTAsNyBAQCBzdGF0aWMgdm9pZCBkZXBhcnNl UmFuZ2VUYmxSZWYoU3RyaW5nSW5mbyBidWYsIFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCSAg IEluZGV4IGlnbm9yZV9yZWwsIExpc3QgKippZ25vcmVfY29uZHMsCiAJCQkJCQkJICAgTGlzdCAq KmFkZGl0aW9uYWxfY29uZHMsIExpc3QgKipwYXJhbXNfbGlzdCk7CiBzdGF0aWMgdm9pZCBkZXBh cnNlQWdncmVmKEFnZ3JlZiAqbm9kZSwgZGVwYXJzZV9leHByX2N4dCAqY29udGV4dCk7CitzdGF0 aWMgdm9pZCBkZXBhcnNlQ29hbGVzY2VFeHByKENvYWxlc2NlRXhwciAqbm9kZSwgZGVwYXJzZV9l eHByX2N4dCAqY29udGV4dCk7CiBzdGF0aWMgdm9pZCBhcHBlbmRHcm91cEJ5Q2xhdXNlKExpc3Qg KnRsaXN0LCBkZXBhcnNlX2V4cHJfY3h0ICpjb250ZXh0KTsKIHN0YXRpYyB2b2lkIGFwcGVuZE9y ZGVyQnlTdWZmaXgoT2lkIHNvcnRvcCwgT2lkIHNvcnRjb2x0eXBlLCBib29sIG51bGxzX2ZpcnN0 LAogCQkJCQkJCQlkZXBhcnNlX2V4cHJfY3h0ICpjb250ZXh0KTsKQEAgLTEwMzQsNiArMTAzNSwz MyBAQCBmb3JlaWduX2V4cHJfd2Fsa2VyKE5vZGUgKm5vZGUsCiAJCQkJCXN0YXRlID0gRkRXX0NP TExBVEVfVU5TQUZFOwogCQkJfQogCQkJYnJlYWs7CisJCWNhc2UgVF9Db2FsZXNjZUV4cHI6CisJ CQl7CisJCQkJQ29hbGVzY2VFeHByICpjcyA9IChDb2FsZXNjZUV4cHIgKikgbm9kZTsKKworCQkJ CWlmICghZm9yZWlnbl9leHByX3dhbGtlcigoTm9kZSAqKSBjcy0+YXJncywKKwkJCQkJCQkJCQkg Z2xvYl9jeHQsICZpbm5lcl9jeHQsIGNhc2VfYXJnX2N4dCkpCisJCQkJCXJldHVybiBmYWxzZTsK KworCQkJCWNvbGxhdGlvbiA9IGNzLT5jb2FsZXNjZWNvbGxpZDsKKworCQkJCS8qCisJCQkJICog RGV0ZWN0IHdoZXRoZXIgbm9kZSBpcyBpbnRyb2R1Y2luZyBhIGNvbGxhdGlvbiBub3QgZGVyaXZl ZAorCQkJCSAqIGZyb20gYSBmb3JlaWduIFZhci4gIChJZiBzbywgd2UganVzdCBtYXJrIGl0IHVu c2FmZSBmb3Igbm93CisJCQkJICogcmF0aGVyIHRoYW4gaW1tZWRpYXRlbHkgcmV0dXJuaW5nIGZh bHNlLCBzaW5jZSB0aGUgcGFyZW50CisJCQkJICogbm9kZSBtaWdodCBub3QgY2FyZS4pCisJCQkJ ICovCisJCQkJaWYgKGNvbGxhdGlvbiA9PSBJbnZhbGlkT2lkKQorCQkJCQlzdGF0ZSA9IEZEV19D T0xMQVRFX05PTkU7CisJCQkJZWxzZSBpZiAoaW5uZXJfY3h0LnN0YXRlID09IEZEV19DT0xMQVRF X1NBRkUgJiYKKwkJCQkJCSBjb2xsYXRpb24gPT0gaW5uZXJfY3h0LmNvbGxhdGlvbikKKwkJCQkJ c3RhdGUgPSBGRFdfQ09MTEFURV9TQUZFOworCQkJCWVsc2UgaWYgKGNvbGxhdGlvbiA9PSBERUZB VUxUX0NPTExBVElPTl9PSUQpCisJCQkJCXN0YXRlID0gRkRXX0NPTExBVEVfTk9ORTsKKwkJCQll bHNlCisJCQkJCXN0YXRlID0gRkRXX0NPTExBVEVfVU5TQUZFOworCQkJfQorCQkJYnJlYWs7CiAJ CWRlZmF1bHQ6CiAKIAkJCS8qCkBAIC0yOTYxLDYgKzI5ODksOSBAQCBkZXBhcnNlRXhwcihFeHBy ICpub2RlLCBkZXBhcnNlX2V4cHJfY3h0ICpjb250ZXh0KQogCQljYXNlIFRfQXJyYXlFeHByOgog CQkJZGVwYXJzZUFycmF5RXhwcigoQXJyYXlFeHByICopIG5vZGUsIGNvbnRleHQpOwogCQkJYnJl YWs7CisJCWNhc2UgVF9Db2FsZXNjZUV4cHI6CisJCQlkZXBhcnNlQ29hbGVzY2VFeHByKChDb2Fs ZXNjZUV4cHIgKikgbm9kZSwgY29udGV4dCk7CisJCQlicmVhazsKIAkJY2FzZSBUX0FnZ3JlZjoK IAkJCWRlcGFyc2VBZ2dyZWYoKEFnZ3JlZiAqKSBub2RlLCBjb250ZXh0KTsKIAkJCWJyZWFrOwpA QCAtMzc5NCw2ICszODI1LDI5IEBAIGRlcGFyc2VBZ2dyZWYoQWdncmVmICpub2RlLCBkZXBhcnNl X2V4cHJfY3h0ICpjb250ZXh0KQogCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJyknKTsKIH0K IAorLyoKKyAqIERlcGFyc2UgQ09BTEVTQ0Ugbm9kZS4KKyAqLworc3RhdGljIHZvaWQKK2RlcGFy c2VDb2FsZXNjZUV4cHIoQ29hbGVzY2VFeHByICpub2RlLCBkZXBhcnNlX2V4cHJfY3h0ICpjb250 ZXh0KQoreworCVN0cmluZ0luZm8JYnVmID0gY29udGV4dC0+YnVmOworCWJvb2wJCWZpcnN0Owor CUxpc3RDZWxsICAgKmFyZzsKKworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiQ09BTEVT Q0UoIik7CisKKwlmaXJzdCA9IHRydWU7CisJZm9yZWFjaChhcmcsIG5vZGUtPmFyZ3MpCisJewor CQlpZiAoIWZpcnN0KQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIsICIpOworCQlk ZXBhcnNlRXhwcigoRXhwciAqKSBsZmlyc3QoYXJnKSwgY29udGV4dCk7CisJCWZpcnN0ID0gZmFs c2U7CisJfQorCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiKSIpOworfQorCiAvKgogICog QXBwZW5kIE9SREVSIEJZIHdpdGhpbiBhZ2dyZWdhdGUgZnVuY3Rpb24uCiAgKi8KZGlmZiAtLWdp dCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQgYi9jb250 cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CmluZGV4IDYwNjY1MTBj N2MwLi5hODhiNTk5OTM3NSAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0 ZWQvcG9zdGdyZXNfZmR3Lm91dAorKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9w b3N0Z3Jlc19mZHcub3V0CkBAIC03MzksNiArNzM5LDE0IEBAIEVYUExBSU4gKFZFUkJPU0UsIENP U1RTIE9GRikgU0VMRUNUICogRlJPTSBmdDEgdDEgV0hFUkUgYzggPSAnZm9vJzsgIC0tIGNhbid0 IGJlCiAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgIkMgMSIsIGMyLCBjMywgYzQsIGM1LCBjNiwgYzcs IGM4IEZST00gIlMgMSIuIlQgMSIKICg0IHJvd3MpCiAKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RT IE9GRikgU0VMRUNUICogRlJPTSBmdDEgdDEgV0hFUkUgY29hbGVzY2UoYzMsICdOVUxMJykgPD4g J05VTEwnIE9SREVSIEJZIGMxOyAtLSBUX0NvYWxlc2NlRXhwcgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBGb3JlaWduIFNjYW4gb24gcHVibGljLmZ0MSB0MQorICAgT3V0cHV0OiBj MSwgYzIsIGMzLCBjNCwgYzUsIGM2LCBjNywgYzgKKyAgIFJlbW90ZSBTUUw6IFNFTEVDVCAiQyAx IiwgYzIsIGMzLCBjNCwgYzUsIGM2LCBjNywgYzggRlJPTSAiUyAxIi4iVCAxIiBXSEVSRSAoKENP QUxFU0NFKGMzLCAnTlVMTCc6OnRleHQpIDw+ICdOVUxMJzo6dGV4dCkpIE9SREVSIEJZICJDIDEi IEFTQyBOVUxMUyBMQVNUCisoMyByb3dzKQorCiAtLSBwYXJhbWV0ZXJpemVkIHJlbW90ZSBwYXRo IGZvciBmb3JlaWduIHRhYmxlCiBFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCiAgIFNFTEVD VCAqIEZST00gIlMgMSIuIlQgMSIgYSwgZnQyIGIgV0hFUkUgYS4iQyAxIiA9IDQ3IEFORCBiLmMx ID0gYS5jMjsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19m ZHcuc3FsIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwKaW5kZXgg NGY3YWIyZWQwYWMuLmY3YmZhZGJiYTgyIDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zk dy9zcWwvcG9zdGdyZXNfZmR3LnNxbAorKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9z dGdyZXNfZmR3LnNxbApAQCAtMzQ1LDYgKzM0NSw3IEBAIEVYUExBSU4gKFZFUkJPU0UsIENPU1RT IE9GRikgU0VMRUNUICogRlJPTSBmdDEgdDEgV0hFUkUgYzEgPSBBTlkoQVJSQVlbYzIsIDEsIGMx CiBFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gZnQxIHQxIFdIRVJF IGMxID0gKEFSUkFZW2MxLGMyLDNdKVsxXTsgLS0gU3Vic2NyaXB0aW5nUmVmCiBFWFBMQUlOIChW RVJCT1NFLCBDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gZnQxIHQxIFdIRVJFIGM2ID0gRSdmb28n J3NcXGJhcic7ICAtLSBjaGVjayBzcGVjaWFsIGNoYXJzCiBFWFBMQUlOIChWRVJCT1NFLCBDT1NU UyBPRkYpIFNFTEVDVCAqIEZST00gZnQxIHQxIFdIRVJFIGM4ID0gJ2Zvbyc7ICAtLSBjYW4ndCBi ZSBzZW50IHRvIHJlbW90ZQorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgKiBG Uk9NIGZ0MSB0MSBXSEVSRSBjb2FsZXNjZShjMywgJ05VTEwnKSA8PiAnTlVMTCcgT1JERVIgQlkg YzE7IC0tIFRfQ29hbGVzY2VFeHByCiAtLSBwYXJhbWV0ZXJpemVkIHJlbW90ZSBwYXRoIGZvciBm b3JlaWduIHRhYmxlCiBFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCiAgIFNFTEVDVCAqIEZS T00gIlMgMSIuIlQgMSIgYSwgZnQyIGIgV0hFUkUgYS4iQyAxIiA9IDQ3IEFORCBiLmMxID0gYS5j MjsK --=_e5d15360e6c3984decfe3fb3245ce77c--