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 1w0TLn-001vyi-2u for pgsql-hackers@arkaria.postgresql.org; Wed, 11 Mar 2026 23:52:28 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w0TLl-00CWiC-0X for pgsql-hackers@arkaria.postgresql.org; Wed, 11 Mar 2026 23:52:25 +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 1w0TLk-00CWi4-2C for pgsql-hackers@lists.postgresql.org; Wed, 11 Mar 2026 23:52:25 +0000 Received: from mail-pl1-x636.google.com ([2607:f8b0:4864:20::636]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w0TLi-00000001giE-0lAj for pgsql-hackers@postgresql.org; Wed, 11 Mar 2026 23:52:23 +0000 Received: by mail-pl1-x636.google.com with SMTP id d9443c01a7336-2ae82df847bso3486245ad.2 for ; Wed, 11 Mar 2026 16:52:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773273141; cv=none; d=google.com; s=arc-20240605; b=B6YvZBDT+u4ZPkcVx4Dc8cr/UU+FnVVOYKlhhewYcqkcGPHyvoqKBgsG+jD8anZ4ny U17jmu0HrxqEr0Y2hjB3kuOb0MNMj9S6JytDcu8j/QRufKrx/sqW2FsOzHuLZUDVxcpS xSrhmL8fIUBMt00JWv4GJM1jZn1TyMBe9EkquQWHYtQxd5telBY3lWJgJ/98gpdqfoPh 2VKkr8/lgYzCxFcWDD3x9FHBKXr20xPNPML0qGBFHpkM0qkROeB6uZTh5WbOZYWYeF0w E0IkGSVwb4A3ZfgPOScH1EDMdmb//UUIEPJ+pW+KmmRdpY1DddMXei9L4e53HmPGkyTp 68eQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:reply-to:in-reply-to:references :mime-version:dkim-signature; bh=fmHg7NC7CYzFYIC2hGySgli4deGj4A633LqlJOazbtE=; fh=OGCP60iK911GBCk9JCklcIMcHlKcIOJcR13cXv7ZxyQ=; b=a4ZqpaZ3SwPIr3WH3JvWtQ5VSC4EDNhtSneZ/ScIDMBLhepZKpWrPNzDGdMvS/+fZi PCkLx5RYGPh05WcTh01uDJESuY+Faeau1RD79/vaNp2DYB5ID8jNtwOWe6xt4nGNGSsW VDW8Wx7T7YQtZKgEa/BGrObLQctMLaAKp7vkB7YHof5G85PljXehfn6TRkkEik9EmyvE 1wHfBmScpejEVLGKCanhfOUCSwc9QFx6rRE1egUH/EsNTMOY8QyDbXSxZRbrvJ9MdHYJ 0f9gI8/HhhesAD/smtklO96gAgLiq1J+4TDRXtI/HqMsHaLo5ylZzJIdMIb16GL3dYZx l3rg==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773273141; x=1773877941; darn=postgresql.org; h=cc:to:subject:message-id:date:from:reply-to:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=fmHg7NC7CYzFYIC2hGySgli4deGj4A633LqlJOazbtE=; b=dhsiWf0dCHNR5JE8K38IE7vSxe8Z9j67KmoH+Yuo9MXlwys7u6Y50RGjzQZsh39wLa yx+PLU1cG/vH+zv9oM9wdXur5FGQnQF4LbFWOCKxiiiS+f8eK3SPL+cR/0ctAMERTiu9 XsPwXEOLEgE1IJ/sT6Jwj203Nx810nG+kUskcJO/QxjrjsinBfZYUW36w2DeZ3NyRSrh qvJWK9GRG2imFfpwDAbcMckrWdRGICsHiJIyq7+Ao8h4daA+U4o9vPMu5ZCi8KzEKxnp Xu6xeRrb8zQAwwcfNf+GjP5a/sEsFDvG6XcoI0if7z8C2ZP7bEEhgLgb/wiL2TCpffxr jpMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773273141; x=1773877941; h=cc:to:subject:message-id:date:from:reply-to:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=fmHg7NC7CYzFYIC2hGySgli4deGj4A633LqlJOazbtE=; b=pQRGfFf6e4CtULLefH8yRBtqFTpSbRAI9iIhqr0MJ19loCIj+Zg+tUwr3vcLkUpIuz 2r8mbW5LMn34JOHAjvjdWhKWYDO5D5JXiKC3RvxXGNGRU/oTeQfHOk3ac3MV2hwnu2xT wPUTO0qpdsydmNFGwe24G4FxxblVhocHVqgTYKYoYBytK7KiRVV4KmdgkIQvhlR+1UFS qJKN5iK0oBORzweTTBzRrO9eOcLXDL+eoLBe6xN5gggnYoM6jg2ghuLTOTZu8gIT6rAl trtwuqdGlM+97jVp2rZf+iBHIZL84S65IQBnPbdGf1sW/uZGofStJ1KPWfs5l7BNAerH aRlg== X-Forwarded-Encrypted: i=1; AJvYcCXq1zpKhfdEIPXtbQw+lCB7XuAEm47/u99vSCtOAn1cYS1hKEWv8s4OsfaHVW+HUFTunvnFPURGjUj8OILX@postgresql.org X-Gm-Message-State: AOJu0YzhS8XXe6DbypZ5Iqod/F+QPeYZ/lYyivJpwlxY1zDugyOqnC/k UuGz03ITWwmcLkYWN6GGReb7sFxZzc2X3gnCsfULjPifK+nNt9g5iJSjWtGZLglJHPljQcEZ/9a KgsmwV9zOyI7mehnR+raTDMld8zxwQYA= X-Gm-Gg: ATEYQzzK7klteGT6y8FoKWdD+/MY9W53x0q+HNs0KIGiaTKteZbCHCZHvEYLl2V1Q9t TniTHfe+A9/kkZp475s1AvVzC4KMJ6337GaPUXbQCDx/xh8Jd8FXXqrjceEz0GjxbSvXImfCkdW KxbvexAxFiL9XV406ZkhupLiBxUjQxP9ck1uv+saHayEVyomZv68ZZzGqxJE+hhGesEraLL4s6b eZ3vjsDY88mqXdcRQpedKzat/vntu8IgSidjlAvfTGWM/97jIx3serYoocvpg2JnDIjCyWTWfOW RzApn0LG3xN9XCh2BMQSRLt9+epBEGlCGzxEr/Y= X-Received: by 2002:a17:903:1a4d:b0:2ae:48e9:8c89 with SMTP id d9443c01a7336-2aeae8d244amr42085755ad.48.1773273140981; Wed, 11 Mar 2026 16:52:20 -0700 (PDT) MIME-Version: 1.0 References: <20260302.094632.1950837561737687899.ishii@postgresql.org> <20260302.141823.129040280886273031.ishii@postgresql.org> In-Reply-To: Reply-To: assam258@gmail.com From: Henson Choi Date: Thu, 12 Mar 2026 08:52:08 +0900 X-Gm-Features: AaiRm51EvdCtzYskVlWTsn-m3Cccf8CAhv5nOG5156oeyohDtKNujehW3GBpH5I Message-ID: Subject: Re: Row pattern recognition To: Zsolt Parragi , Tatsuo Ishii Cc: vik@postgresfriends.org, er@xs4all.nl, jacob.champion@enterprisedb.com, david.g.johnston@gmail.com, peter@eisentraut.org, pgsql-hackers@postgresql.org Content-Type: multipart/mixed; boundary="000000000000a8858c064cc85392" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000a8858c064cc85392 Content-Type: multipart/alternative; boundary="000000000000a8858b064cc85390" --000000000000a8858b064cc85390 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Zsolt, Tatsuo, + foreach_ptr(TargetEntry, te, defineClause) > + (void) coerce_to_boolean(pstate, (Node *) te->expr, "DEFINE"); > > Isn't this incorrect? I think it should update te->expr, as currently > it is possible to construct queries where this produces unexpected > results. Good catch, Zsolt. You're right =E2=80=94 the return value of coerce_to_boolean() must be assigned back to te->expr, otherwise any implicit cast (e.g., a user-defined type with an assignment cast to boolean) is silently discarded. The fix is straightforward: foreach_ptr(TargetEntry, te, defineClause) te->expr =3D (Expr *) coerce_to_boolean(pstate, (Node *) te->expr, "DEFINE"); I've confirmed that your example query produces incorrect results without the fix (the truthyint value is evaluated as-is without the cast) and correct results with it. Patch 13 is attached with the fix and a regression test case based on your example. By the way, thank you for joining the TDE hooks discussion when I was just getting started as a contributor =E2=80=94 that meant a lot. Great work on pg_tde at Percona, and rooting for the extensible SMGR effort as well. Hope it's all going well! Tatsuo, please review when you get a chance. Regards, Henson --000000000000a8858b064cc85390 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Zsolt, Tatsuo,

+ foreach_ptr(Targe= tEntry, te, defineClause)
+ (void) coerce_to_boolean(pstate, (Node *) te->expr, "DEFINE"= );

Isn't this incorrect? I think it should update te->expr, as currentl= y
it is possible to construct queries where this produces unexpected
results.

Good catch, Zsolt. You're right =E2= =80=94 the return value of
coerce_to_boolean() must be assigned back to = te->expr, otherwise
any implicit cast (e.g., a user-defined type with= an assignment
cast to boolean) is silently discarded.

The fix is= straightforward:

=C2=A0 =C2=A0 foreach_ptr(TargetEntry, te, defineC= lause)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 te->expr =3D (Expr *) coerce_to_bo= olean(pstate, (Node *) te->expr, "DEFINE");

I've co= nfirmed that your example query produces incorrect results
without the f= ix (the truthyint value is evaluated as-is without
the cast) and correct= results with it.

Patch 13 is attached with the fix and a regression= test case based
on your example.

By the way, thank you for joini= ng the TDE hooks discussion when
I was just getting started as a contrib= utor =E2=80=94 that meant a lot.
Great work on pg_tde at Percona, and ro= oting for the extensible
SMGR effort as well. Hope it's all going we= ll!

Tatsuo, please review when you get a chance.

Regards,
= Henson
=C2=A0
--000000000000a8858b064cc85390-- --000000000000a8858c064cc85392 Content-Type: text/plain; charset="US-ASCII"; name="0013-fix-define-boolean-coercion.txt" Content-Disposition: attachment; filename="0013-fix-define-boolean-coercion.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmmoy4ii0 RnJvbSBlNDdmYjhhMTE5Y2IyMzU2NjVhOWUxMjhjOGMxODcxODM2YWZmN2I4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIZW5zb24gQ2hvaSA8YXNzYW0yNThAZ21haWwuY29tPgpEYXRl OiBUaHUsIDEyIE1hciAyMDI2IDA4OjQxOjIxICswOTAwClN1YmplY3Q6IFtQQVRDSF0gRml4IGNv ZXJjZV90b19ib29sZWFuIHJlc3VsdCBub3QgYXBwbGllZCBpbiBERUZJTkUgY2xhdXNlCgotLS0K IHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9ycHIuYyAgICAgICAgIHwgIDIgKy0KIHNyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvcnByX2Jhc2Uub3V0IHwgMzMgKysrKysrKysrKysrKysrKysrKysr KysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Jwcl9iYXNlLnNxbCAgICAgIHwgMjkgKysrKysr KysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA2MyBpbnNlcnRpb25zKCspLCAxIGRl bGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3Jwci5jIGIv c3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3Jwci5jCmluZGV4IGRmZjkxZTQzOWQyLi5lNTc0YjY5 ZDliNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3Jwci5jCisrKyBiL3Ny Yy9iYWNrZW5kL3BhcnNlci9wYXJzZV9ycHIuYwpAQCAtMzkyLDcgKzM5Miw3IEBAIHRyYW5zZm9y bURlZmluZUNsYXVzZShQYXJzZVN0YXRlICpwc3RhdGUsIFdpbmRvd0NsYXVzZSAqd2MsIFdpbmRv d0RlZiAqd2luZGVmLAogCSAqIGV4cHJlc3Npb24uCiAJICovCiAJZm9yZWFjaF9wdHIoVGFyZ2V0 RW50cnksIHRlLCBkZWZpbmVDbGF1c2UpCi0JCSh2b2lkKSBjb2VyY2VfdG9fYm9vbGVhbihwc3Rh dGUsIChOb2RlICopIHRlLT5leHByLCAiREVGSU5FIik7CisJCXRlLT5leHByID0gKEV4cHIgKikg Y29lcmNlX3RvX2Jvb2xlYW4ocHN0YXRlLCAoTm9kZSAqKSB0ZS0+ZXhwciwgIkRFRklORSIpOwog CiAJLyogbWFyayBjb2x1bW4gb3JpZ2lucyAqLwogCW1hcmtUYXJnZXRMaXN0T3JpZ2lucyhwc3Rh dGUsIGRlZmluZUNsYXVzZSk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3Jwcl9iYXNlLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnByX2Jhc2Uub3V0Cmlu ZGV4IGZmZDBmOGVkOWYxLi43OTMxYWQwN2Q3ZCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9ycHJfYmFzZS5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9y cHJfYmFzZS5vdXQKQEAgLTI4NSw2ICsyODUsMzkgQEAgT1JERVIgQlkgaWQ7CiAgIDIgfCAgIDAK ICgyIHJvd3MpCiAKKy0tIEltcGxpY2l0IGNhc3QgdG8gYm9vbGVhbiB2aWEgY3VzdG9tIHR5cGUK K0NSRUFURSBUWVBFIHRydXRoeWludCBBUyAodiBpbnQpOworQ1JFQVRFIEZVTkNUSU9OIHRydXRo eWludF90b19ib29sKHRydXRoeWludCkgUkVUVVJOUyBib29sZWFuIEFTICQkCisgIFNFTEVDVCAo JDEpLnYgPD4gMDsKKyQkIExBTkdVQUdFIFNRTCBJTU1VVEFCTEUgU1RSSUNUOworQ1JFQVRFIENB U1QgKHRydXRoeWludCBBUyBib29sZWFuKQorICBXSVRIIEZVTkNUSU9OIHRydXRoeWludF90b19i b29sKHRydXRoeWludCkKKyAgQVMgQVNTSUdOTUVOVDsKK0NSRUFURSBUQUJMRSBycHJfY29lcmNl IChpZCBpbnQsIHZhbCB0cnV0aHlpbnQpOworSU5TRVJUIElOVE8gcnByX2NvZXJjZSBWQUxVRVMg KDEsIFJPVygxKSksICgyLCBST1coMCkpLCAoMywgUk9XKDUpKSwgKDQsIFJPVygwKSk7CitTRUxF Q1QgaWQsIHZhbCwgY250CitGUk9NIChTRUxFQ1QgaWQsIHZhbCwKKyAgICAgICAgICAgICBDT1VO VCgqKSBPVkVSIHcgQVMgY250CisgICAgICBGUk9NIHJwcl9jb2VyY2UKKyAgICAgIFdJTkRPVyB3 IEFTICgKKyAgICAgICAgICBPUkRFUiBCWSBpZAorICAgICAgICAgIFJPV1MgQkVUV0VFTiBDVVJS RU5UIFJPVyBBTkQgVU5CT1VOREVEIEZPTExPV0lORworICAgICAgICAgIFBBVFRFUk4gKEErKQor ICAgICAgICAgIERFRklORSBBIEFTIHZhbAorICAgICAgKQorKSBzIE9SREVSIEJZIGlkOworIGlk IHwgdmFsIHwgY250IAorLS0tLSstLS0tLSstLS0tLQorICAxIHwgKDEpIHwgICAxCisgIDIgfCAo MCkgfCAgIDAKKyAgMyB8ICg1KSB8ICAgMQorICA0IHwgKDApIHwgICAwCisoNCByb3dzKQorCitE Uk9QIFRBQkxFIHJwcl9jb2VyY2U7CitEUk9QIENBU1QgKHRydXRoeWludCBBUyBib29sZWFuKTsK K0RST1AgRlVOQ1RJT04gdHJ1dGh5aW50X3RvX2Jvb2wodHJ1dGh5aW50KTsKK0RST1AgVFlQRSB0 cnV0aHlpbnQ7CiBEUk9QIFRBQkxFIHJwcl9ib29sOwogLS0gQ29tcGxleCBleHByZXNzaW9ucwog Q1JFQVRFIFRBQkxFIHJwcl9jb21wbGV4IChpZCBJTlQsIHZhbDEgSU5ULCB2YWwyIElOVCk7CmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9ycHJfYmFzZS5zcWwgYi9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9ycHJfYmFzZS5zcWwKaW5kZXggM2Q2Y2EyYmMyYTIuLmY4ODE1YzczNzZhIDEw MDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9ycHJfYmFzZS5zcWwKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9zcWwvcnByX2Jhc2Uuc3FsCkBAIC0yMzEsNiArMjMxLDM1IEBAIFdJTkRPVyB3 IEFTICgKICkKIE9SREVSIEJZIGlkOwogCistLSBJbXBsaWNpdCBjYXN0IHRvIGJvb2xlYW4gdmlh IGN1c3RvbSB0eXBlCitDUkVBVEUgVFlQRSB0cnV0aHlpbnQgQVMgKHYgaW50KTsKK0NSRUFURSBG VU5DVElPTiB0cnV0aHlpbnRfdG9fYm9vbCh0cnV0aHlpbnQpIFJFVFVSTlMgYm9vbGVhbiBBUyAk JAorICBTRUxFQ1QgKCQxKS52IDw+IDA7CiskJCBMQU5HVUFHRSBTUUwgSU1NVVRBQkxFIFNUUklD VDsKK0NSRUFURSBDQVNUICh0cnV0aHlpbnQgQVMgYm9vbGVhbikKKyAgV0lUSCBGVU5DVElPTiB0 cnV0aHlpbnRfdG9fYm9vbCh0cnV0aHlpbnQpCisgIEFTIEFTU0lHTk1FTlQ7CisKK0NSRUFURSBU QUJMRSBycHJfY29lcmNlIChpZCBpbnQsIHZhbCB0cnV0aHlpbnQpOworSU5TRVJUIElOVE8gcnBy X2NvZXJjZSBWQUxVRVMgKDEsIFJPVygxKSksICgyLCBST1coMCkpLCAoMywgUk9XKDUpKSwgKDQs IFJPVygwKSk7CisKK1NFTEVDVCBpZCwgdmFsLCBjbnQKK0ZST00gKFNFTEVDVCBpZCwgdmFsLAor ICAgICAgICAgICAgIENPVU5UKCopIE9WRVIgdyBBUyBjbnQKKyAgICAgIEZST00gcnByX2NvZXJj ZQorICAgICAgV0lORE9XIHcgQVMgKAorICAgICAgICAgIE9SREVSIEJZIGlkCisgICAgICAgICAg Uk9XUyBCRVRXRUVOIENVUlJFTlQgUk9XIEFORCBVTkJPVU5ERUQgRk9MTE9XSU5HCisgICAgICAg ICAgUEFUVEVSTiAoQSspCisgICAgICAgICAgREVGSU5FIEEgQVMgdmFsCisgICAgICApCispIHMg T1JERVIgQlkgaWQ7CisKK0RST1AgVEFCTEUgcnByX2NvZXJjZTsKK0RST1AgQ0FTVCAodHJ1dGh5 aW50IEFTIGJvb2xlYW4pOworRFJPUCBGVU5DVElPTiB0cnV0aHlpbnRfdG9fYm9vbCh0cnV0aHlp bnQpOworRFJPUCBUWVBFIHRydXRoeWludDsKKwogRFJPUCBUQUJMRSBycHJfYm9vbDsKIAogLS0g Q29tcGxleCBleHByZXNzaW9ucwotLSAKMi41MC4xIChBcHBsZSBHaXQtMTU1KQoK --000000000000a8858c064cc85392--