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 1wBGFJ-000tFm-2C for pgsql-hackers@arkaria.postgresql.org; Fri, 10 Apr 2026 18:06:22 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wBGFH-00DueF-2w for pgsql-hackers@arkaria.postgresql.org; Fri, 10 Apr 2026 18:06:20 +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 1wBGFH-00Due5-1R for pgsql-hackers@lists.postgresql.org; Fri, 10 Apr 2026 18:06:20 +0000 Received: from mail-vs1-xe2f.google.com ([2607:f8b0:4864:20::e2f]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wBGFG-00000000NAn-0jWN for pgsql-hackers@lists.postgresql.org; Fri, 10 Apr 2026 18:06:19 +0000 Received: by mail-vs1-xe2f.google.com with SMTP id ada2fe7eead31-60581b491a0so798644137.3 for ; Fri, 10 Apr 2026 11:06:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775844378; cv=none; d=google.com; s=arc-20240605; b=TMKWL1o+Amk5fa+K3nkWrly8IosiAli11I+rFL+MchzNtbbhA43yJmV0RrJrilNNex sHiD9cemmuKRfKwJuwF9NE/ryHE65imwcX6xd16zmmG51q/DX9UYNP8FmxJSOnJlUV4D AOODPQ0l4ifIAtS1BVsGN0yAR+uMX7vOMn3xBFB4uALyyMannMlEUVZK4WuMxCPP5N6J /fubPX3Rg+873/NsSP3AXmtkJVUpOr+FQbAUp/O0fhod1Y6M+gmZZ5WtiqwmCTF9+jKq aVQ1aweoc9Qlslvn8tKt+i2PUiDTZ0VszJ1Ihjw1+jP8P9uMPv9GfRXC4DePAEYPknP6 w1Fg== 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:in-reply-to:references :mime-version:dkim-signature; bh=ZsxBfBlMV7tkbqd34GPGiaCLcZPOD6rOhlXj/qPfeIs=; fh=U3Qh24i1saGPbAZlGeoTA7UDYyNs0NIR4u1bfrWLCwc=; b=MAcavP1DbapYjlXK+ln6TWV8kARt03QCu8Lwk0GTaVrWbbNsf1fYaV4n01E7ZGdkbV c03Jtd0R414L8JWuevu7sGypmpSPFG05gstkjrQa5I5Y2IvyiAn0NI5HF0cnhiBZJlGF PdZpjiwGwYknz1h4LGSYSUnIaqNmdwvLU8oCvTSdOK5eFosT/UlD+YH9V10M1m9a6ca/ TXN3n02sHAUli+pC/qJzgw1sDpDSmznRdTspBx6ySosQwgnWRZW54RlUYEBdQpekCLIn Fd4CAwfKk7VXvYf4KgW63tVwhOAe6n4ry9vIrpR+1k0EPtQU+ribxWhvXtxkqxAYTLo5 BP+g==; darn=lists.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=20251104; t=1775844378; x=1776449178; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=ZsxBfBlMV7tkbqd34GPGiaCLcZPOD6rOhlXj/qPfeIs=; b=sYy6Qud1neG24XBh5UwKD0vKDG5qeLlQNB0i0+3k0Q6+dz+nA9w/O+9nId7s10rqPk rXCS8qoQ3HoRqU6uxwuexmNdYx+i4OucOxzmc/1z86EypAdTe2VXrIkV1liZMhFksLxL yPQa//InIcIJ/0u9ASn1FmhhDB5uEd2l8oCeE7PGtdyeSEoKl9pzfrxXUQDJsSxp7AKq a9cmdqW4tK+JHvWlOVnQVR4TV9yQAanYKdNKHqkpktMDqyo6MetQRGaq/vMPG0ADMsWY HRVCBPSLLRpqcopIfhrNza98nPhdPzXgoKWqTxVXVOzfK3KToDbe/Wk9YF/b3ldw/W3J HzsA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775844378; x=1776449178; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=ZsxBfBlMV7tkbqd34GPGiaCLcZPOD6rOhlXj/qPfeIs=; b=rtb2ccsZjXVG3ULvoOjk7JIEsPV/A2NcDsor8fV21wjGpFDmmmSrlmB+ZLqlUp4ZLC ZZdcY/CmKYugrJMsIZpDGD8bcNe0Bd1k8NR5FBpz+/l/1slt8uvqsUy4S6HD/5Q6EJ2x MegOdWmay5yKiWFDNkY+h+gQdu2o4IvY3SbO1s4xE/6bYQ6hfbtUAnKmCRZ4cgUNgGMj EHHl+cZMs3ud2UzYSgK1J4JzyD3jpNvKWqYtcKTSOYAs1vKPhHZbu87uy3wM49akjmQ3 hrxlBB8WJjRibehFjmkhF/z0xY3mFnj1dAXjY87p5NN6ll/+BWaythnPtiNyUqUm5HMf diSg== X-Gm-Message-State: AOJu0Yy2FZMygHSQT2VjPgwVs6i65m+M3x74pnJLEDybLkjvze4WppN2 3RpyQa73h+TpYeNQnK77IpnlO6X5FMuMZOXcPV/563MMQuKQQ6h8R8+jW1Ahxo7nePF3iUwSX1G WpLceko9lVXATOB2Gfnh/rcTdz8frSFw= X-Gm-Gg: AeBDievw598igLDEjDSww8++4SG4BDkxotaWtGBmZPInXg/McymG0TnaS0oabq8FsQq wTKMOSyIZLYrdWQ41BRxIJ0+UG5m9K2WugM5YGhrfgSrSwNyYWBaELqWWz6Zi+J5UtuXEFgE5pZ YQ5XW7eSmaR4a3j0zKJk3ll20lYkimkmzwOGBpGvdZU0Vd9eTWmJX+6cSed/xLqWpzWzE0iMICS A32jzmb5vhswR99op/H4/ovOJCcDGSrNjaDG2doICzpoQqO0fOCw7fsfx6ao6kxre7fWDYaphdK yNkisqs= X-Received: by 2002:a05:6102:6e89:b0:605:271c:b66c with SMTP id ada2fe7eead31-609fedc7c19mr1790579137.10.1775844377728; Fri, 10 Apr 2026 11:06:17 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: SATYANARAYANA NARLAPURAM Date: Fri, 10 Apr 2026 11:06:05 -0700 X-Gm-Features: AQROBzBfLf8G5cIxBvOyFZlfQNPIzwMcd3XVQwKb6Wu2C49Pcip39mIsGM67YpA Message-ID: Subject: Re: Bug: Missing collation assignment for GRAPH_TABLE COLUMNS expressions To: Ashutosh Bapat Cc: PostgreSQL Hackers , Peter Eisentraut Content-Type: multipart/mixed; boundary="0000000000004fbe51064f1efd66" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000004fbe51064f1efd66 Content-Type: multipart/alternative; boundary="0000000000004fbe50064f1efd64" --0000000000004fbe50064f1efd64 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Ashutosh, On Fri, Apr 10, 2026 at 9:25=E2=80=AFAM Ashutosh Bapat wrote: > Hi Satya, > Thanks for the report and patch. > > On Fri, Apr 10, 2026 at 9:12=E2=80=AFPM SATYANARAYANA NARLAPURAM > wrote: > > > > Hi hackers, > > > > GRAPH_TABLE COLUMNS expressions that involve collation-dependent > functions or operators fail with: > > > > ERROR: could not determine which collation to use for upper() functio= n > > HINT: Use the COLLATE clause to set the collation explicitly. > > > > Setup: > > > > CREATE TABLE vtx (id int PRIMARY KEY, name text); > > CREATE TABLE edg (id int PRIMARY KEY, > > src int REFERENCES vtx(id), > > dst int REFERENCES vtx(id)); > > INSERT INTO vtx VALUES (1,'Alice'),(2,'Bob'),(3,'Carol'); > > INSERT INTO edg VALUES (1,1,2),(2,2,3); > > > > CREATE PROPERTY GRAPH g > > VERTEX TABLES (vtx KEY (id)) > > EDGE TABLES (edg KEY (id) > > SOURCE KEY (src) REFERENCES vtx (id) > > DESTINATION KEY (dst) REFERENCES vtx (id)); > > > > postgres=3D# SELECT * FROM GRAPH_TABLE (g > > MATCH (a IS vtx)-[e IS edg]->(b IS vtx) COLUMNS (upper(a.name) AS > src_upper)); > > ERROR: could not determine which collation to use for upper() function > > HINT: Use the COLLATE clause to set the collation explicitly. > > > > > > In transformRangeGraphTable(), the COLUMNS transformation loop calls > transformExpr() > > on each column expression but omits the subsequent > assign_expr_collations() call. Both > > WHERE clause transformation sites in parse_graphtable.c correctly > include it. > > > > Attached a patch to fix this. > > I think the fix is in the right direction. It's better to call > assign_expr_collation only once on all the columns at the end of loop > of rgt->columns, just like assign_expr_collation is called on all the > conditions in WHERE clause once Addressed this in v2 patch. > > Good to see tests also included in the patch. Do we need all three > queries? Also those queries should be placed near the section "-- test > collation specified in the expression" and add a query for explicit > collation in COLUMNs expression. > Removed two tests and moved the test. Explicit collate test already exists. Thanks, Satya --0000000000004fbe50064f1efd64 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Ashutosh,

On Fri,= Apr 10, 2026 at 9:25=E2=80=AFAM Ashutosh Bapat <ashutosh.bapat.oss@gmail.com> wrote:
Hi Satya,
Thanks for the report and patch.

On Fri, Apr 10, 2026 at 9:12=E2=80=AFPM SATYANARAYANA NARLAPURAM
<satyanar= lapuram@gmail.com> wrote:
>
> Hi hackers,
>
> GRAPH_TABLE COLUMNS expressions that involve collation-dependent funct= ions or operators fail with:
>
>=C2=A0 =C2=A0ERROR: could not determine which collation to use for uppe= r() function
>=C2=A0 =C2=A0HINT: Use the COLLATE clause to set the collation explicit= ly.
>
> Setup:
>
>=C2=A0 =C2=A0CREATE TABLE vtx (id int PRIMARY KEY, name text);
>=C2=A0 =C2=A0CREATE TABLE edg (id int PRIMARY KEY,
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0src int REFERENCES vtx(id),
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0dst int REFERENCES vtx(id));
>=C2=A0 =C2=A0INSERT INTO vtx VALUES (1,'Alice'),(2,'Bob'= ;),(3,'Carol');
>=C2=A0 =C2=A0INSERT INTO edg VALUES (1,1,2),(2,2,3);
>
>=C2=A0 =C2=A0CREATE PROPERTY GRAPH g
>=C2=A0 =C2=A0 =C2=A0VERTEX TABLES (vtx KEY (id))
>=C2=A0 =C2=A0 =C2=A0EDGE TABLES (edg KEY (id)
>=C2=A0 =C2=A0 =C2=A0 =C2=A0SOURCE KEY (src) REFERENCES vtx (id)
>=C2=A0 =C2=A0 =C2=A0 =C2=A0DESTINATION KEY (dst) REFERENCES vtx (id));<= br> >
> postgres=3D# SELECT * FROM GRAPH_TABLE (g
>=C2=A0 =C2=A0MATCH (a IS vtx)-[e IS edg]->(b IS vtx) COLUMNS (upper(= a.name) = AS src_upper));
> ERROR:=C2=A0 could not determine which collation to use for upper() fu= nction
> HINT:=C2=A0 Use the COLLATE clause to set the collation explicitly. >
>
> In transformRangeGraphTable(), the COLUMNS transformation loop calls t= ransformExpr()
> on each column expression but omits the subsequent assign_expr_collati= ons() call.=C2=A0 Both
> WHERE clause transformation sites in parse_graphtable.c correctly incl= ude it.
>
> Attached a patch to fix this.

I think the fix is in the right direction. It's better to call
assign_expr_collation only once on all the columns at the end of loop
of rgt->columns, just like assign_expr_collation is called on all the conditions in WHERE clause once

Addressed t= his in v2 patch.
=C2=A0
=C2=A0
Good to see tests also included in the patch. Do we need all three
queries? Also those queries should be placed near the section "-- test=
collation specified in the expression" and add a query for explicit collation in COLUMNs expression.

Remove= d two tests and moved the test. Explicit collate test already exists.
=
=C2=A0
Thanks,
Satya
--0000000000004fbe50064f1efd64-- --0000000000004fbe51064f1efd66 Content-Type: application/octet-stream; name="v2-0001-fix-graph-table-columns-collation.patch" Content-Disposition: attachment; filename="v2-0001-fix-graph-table-columns-collation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnt7vmq50 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9jbGF1c2UuYyBiL3NyYy9iYWNr ZW5kL3BhcnNlci9wYXJzZV9jbGF1c2UuYwppbmRleCA5NjdlZWE0NC4uMmYxMmVkMzYgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9jbGF1c2UuYworKysgYi9zcmMvYmFja2Vu ZC9wYXJzZXIvcGFyc2VfY2xhdXNlLmMKQEAgLTEwMDMsNiArMTAwMywxMiBAQCB0cmFuc2Zvcm1S YW5nZUdyYXBoVGFibGUoUGFyc2VTdGF0ZSAqcHN0YXRlLCBSYW5nZUdyYXBoVGFibGUgKnJndCkK IAkJY29sdW1ucyA9IGxhcHBlbmQoY29sdW1ucywgdGUpOwogCX0KIAorCS8qCisJICogQXNzaWdu IGNvbGxhdGlvbnMgdG8gY29sdW1uIGV4cHJlc3Npb25zLCBqdXN0IGFzIHdlIGRvIGZvciB0aGUg V0hFUkUKKwkgKiBjbGF1c2UgaW4gdHJhbnNmb3JtR3JhcGhQYXR0ZXJuKCkuCisJICovCisJYXNz aWduX2V4cHJfY29sbGF0aW9ucyhwc3RhdGUsIChOb2RlICopIGNvbHVtbnMpOworCiAJdGFibGVf Y2xvc2UocmVsLCBOb0xvY2spOwogCiAJcHN0YXRlLT5wX2dyYXBoX3RhYmxlX3BzdGF0ZSA9IE5V TEw7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2dyYXBoX3RhYmxlLm91 dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ3JhcGhfdGFibGUub3V0CmluZGV4IGI1Nzll M2RmLi4wYTg0YzdlYiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ncmFw aF90YWJsZS5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ncmFwaF90YWJsZS5v dXQKQEAgLTY3OSw2ICs2NzksMjMgQEAgU0VMRUNUICogRlJPTSBHUkFQSF9UQUJMRSAoZzEgTUFU Q0ggKGEpLVtiXS0+KGEpLVtiXS0+KGEpIENPTFVNTlMgKGEudm5hbWUgQVMgc2UKICB2MzMgIHwg ZTMzMQogKDEgcm93KQogCistLSB0ZXN0IGNvbGxhdGlvbiBhc3NpZ25tZW50IGZvciBDT0xVTU5T IGV4cHJlc3Npb25zCitTRUxFQ1QgKiBGUk9NIEdSQVBIX1RBQkxFIChnMSBNQVRDSCAoc3JjKS0+ KGRlc3QpIENPTFVNTlMgKHVwcGVyKHNyYy52bmFtZSkgQVMgdSkpIE9SREVSIEJZIHU7CisgIHUg IAorLS0tLS0KKyBWMTEKKyBWMTEKKyBWMTEKKyBWMTIKKyBWMTMKKyBWMjEKKyBWMjIKKyBWMjMK KyBWMzIKKyBWMzMKKyBWMzMKKygxMSByb3dzKQorCiAtLSBwcm9wZXJ0eSBncmFwaCB3aXRoIHNv bWUgb2YgdGhlIGVsZW1lbnRzLCBsYWJlbHMgYW5kIHByb3BlcnRpZXMgc2FtZSBhcyB0aGUKIC0t IHByZXZpb3VzIG9uZS4gVGVzdCB3aGV0aGVyIGNvbXBvbmVudHMgZnJvbSB0aGUgc3BlY2lmaWVk IHByb3BlcnR5IGdyYXBoIGFyZQogLS0gdXNlZC4gQWxzbyB0ZXN0IGV4cGxpY2l0IGNvbGxhdGlv biBzcGVjaWZpY2F0aW9uIGluIHByb3BlcnR5LgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVz cy9zcWwvZ3JhcGhfdGFibGUuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ3JhcGhfdGFibGUu c3FsCmluZGV4IDRmZjk4ODE3Li5mZmI3Y2JlNiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9zcWwvZ3JhcGhfdGFibGUuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2dyYXBoX3Rh YmxlLnNxbApAQCAtNDAwLDYgKzQwMCw4IEBAIFNFTEVDVCAqIEZST00gR1JBUEhfVEFCTEUgKGcx IE1BVENIIChhKS1bYl0tPihhKS1bYl0tPihhKSBDT0xVTU5TIChhLnZuYW1lIEFTIHNlCiBTRUxF Q1QgKiBGUk9NIEdSQVBIX1RBQkxFIChnMSBNQVRDSCAoYSktW2IgSVMgZWwyIFdIRVJFIGIuZW5h bWUgPiAnRTMzMScgQ09MTEFURSAiQyJdLT4oYSktW2JdLT4oYSkgQ09MVU1OUyAoYS52bmFtZSBB UyBzZWxmLCBiLmVuYW1lIEFTIGxvb3BfbmFtZSkpOwogU0VMRUNUICogRlJPTSBHUkFQSF9UQUJM RSAoZzEgTUFUQ0ggKGEpLVtiXS0+KGEpLVtiXS0+KGEpIFdIRVJFIGIuZW5hbWUgPiAnRTMzMScg Q09MTEFURSAiQyIgQ09MVU1OUyAoYS52bmFtZSBBUyBzZWxmLCBiLmVuYW1lIEFTIGxvb3BfbmFt ZSkpOwogU0VMRUNUICogRlJPTSBHUkFQSF9UQUJMRSAoZzEgTUFUQ0ggKGEpLVtiXS0+KGEpLVti XS0+KGEpIENPTFVNTlMgKGEudm5hbWUgQVMgc2VsZiwgYi5lbmFtZSBBUyBsb29wX25hbWUpKSBX SEVSRSBsb29wX25hbWUgPiAnRTMzMScgQ09MTEFURSAiQyI7CistLSB0ZXN0IGNvbGxhdGlvbiBh c3NpZ25tZW50IGZvciBDT0xVTU5TIGV4cHJlc3Npb25zCitTRUxFQ1QgKiBGUk9NIEdSQVBIX1RB QkxFIChnMSBNQVRDSCAoc3JjKS0+KGRlc3QpIENPTFVNTlMgKHVwcGVyKHNyYy52bmFtZSkgQVMg dSkpIE9SREVSIEJZIHU7CiAKIC0tIHByb3BlcnR5IGdyYXBoIHdpdGggc29tZSBvZiB0aGUgZWxl bWVudHMsIGxhYmVscyBhbmQgcHJvcGVydGllcyBzYW1lIGFzIHRoZQogLS0gcHJldmlvdXMgb25l LiBUZXN0IHdoZXRoZXIgY29tcG9uZW50cyBmcm9tIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgZ3Jh cGggYXJlCg== --0000000000004fbe51064f1efd66--