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 1w8OB8-000U1y-0Q for pgsql-hackers@arkaria.postgresql.org; Thu, 02 Apr 2026 19:58:10 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w8OB6-007wJP-34 for pgsql-hackers@arkaria.postgresql.org; Thu, 02 Apr 2026 19:58:09 +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 1w8OB6-007wJH-1o for pgsql-hackers@lists.postgresql.org; Thu, 02 Apr 2026 19:58:09 +0000 Received: from mail-ed1-x52d.google.com ([2a00:1450:4864:20::52d]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w8OB5-00000000EnI-0j1k for pgsql-hackers@lists.postgresql.org; Thu, 02 Apr 2026 19:58:08 +0000 Received: by mail-ed1-x52d.google.com with SMTP id 4fb4d7f45d1cf-66e378615daso486884a12.1 for ; Thu, 02 Apr 2026 12:58:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775159886; cv=none; d=google.com; s=arc-20240605; b=MvZKkEVQeYFJpowY+vRJVRjrBA7KqmqaGENAzFDgv0YgoCt12sRQY5p8gjTvUSXlUa Vb477R+KKCqSMxUBN0SFJ5Lqdtz5azKCd8E1nX8MdRYFNLrhLCC2TaE+7TCGNksot+hp tNBwLhcljIqaFhJS+pKduPGHgzQohmTWr6H6GCxPgbFCMZ3KRoalbZb4ZnkmtdrU2Xl7 Dk4oBWpTrh3oy6z7UuKjWqPEYLmCI5Hr9u1+jyfiGs4EbBH/kFccQHWmgdF4r3GNLe6e H0BLivv7I1l1RKWOy4+t05xGIljVs98bz9bMxiQLICqeppp7YSpjg9UsT5VhQeuNcFAd Oi4Q== 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=0fW0VYM/cPCXhv/cucipNBgQfBGx4pIsifAkcGKHdGI=; fh=xC6rCV+iFO5L4lZY+DFOUaVPa/3MVyMy768wV1xxBZ8=; b=GJKNVsidjqHFo7aY+5/C2p7qWd5NVM5R7tQ08eLUMftThkWQmUFW0YrQn+0HoyGgB5 8m+3zPLV8MTO4VcDCNliAipJoF2Ga9Rj77HBbrLsJVUXjx3e9PYDWS9pI5XJcG/vh75n GurtusD3O6BpYbRJTQwGPtGks/l4SpVJnql/ptXvq2dOSVmoE9PsUHMD+6hC0IdVPLIP gL9qjuvlU5ROHBthvPHo9TRh3LXeoNVEdFAKj6Z7xwM8Fyo6zboRYRLZ39XzEuUDvHsY ieuRsBI/d7Tnlmn1HFTba+Nx2bbyLULWULIBC7fXtSWD8dxBTcjyNWZMqKh4pUmeF5r3 46SQ==; 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=1775159886; x=1775764686; 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=0fW0VYM/cPCXhv/cucipNBgQfBGx4pIsifAkcGKHdGI=; b=KjUnu5J9WnisWozu6LynejjckjwT5Dbuw1zuBRw+XTDvlk55GM8x1cjBlSf64wxM4Q OB3YMyYc5vlgnjwVPM8WiNFUKF1HY1SPgoAS3yMESpJgV1V04VCtNCNzfwuluVyV8hSw 9pioABRfnCdpFYhjRsU/6QtffkxiT6T941fZ8Q0hYjWYL7Ih4L2txNFlTcPFF2YLDNXI b7fKHhOQBEkfeTjAw3cu9jhAoYRgOHi6+NPZ+2IXyUwyaZ9kmYtTpKrFzIjp586u6oDF yFRNOOvmXZP2++7h4/r4c7bV157MlgXGjQ9SrROFpCCPTJtyuPbcDr43+wSumQ6QfmBx EJow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775159886; x=1775764686; 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=0fW0VYM/cPCXhv/cucipNBgQfBGx4pIsifAkcGKHdGI=; b=rzgUJhPsu5/jSpmrVwN5EIB8E9vzYP1mzDHKHiZW9BLv/wMEHwpfH85FSYw3EPTAAX kvXFqHXeYBwc6Hlel1DDZG0PuhVTuUhdAQpzF01Zh4MY2k7jHR0vCteeNL8EewZdQvVo YkQNQvSEDKGrnP8JYazdyLU0Z+tqVgpNvOlOwSQNbShvEqVwHbUb/NycA4KOwN/VkjP3 UeJCsyZwI6BbwJNRqUeKjRamUICBkfFVPxww/2HDgh3WQRYFx3RYtniqoq6ajVrjdVi9 DtoRu4CMfm/4Yo0dRgEHBxCmKm1KXvlHHY1MLzhwps6vjcqMMllry19ue9svKNWcxiHh O6bA== X-Forwarded-Encrypted: i=1; AJvYcCUdNXSzVi7EGSJDwOqXkkjh3SQAExNh3igaQDILmuyvmSpO8Aj0YEuK0hfxEtnpfvO81uP0x0iPU5R52fZt@lists.postgresql.org X-Gm-Message-State: AOJu0YzkpWbZA2IEqg5SHgpTd7TGeEv/wOQiCDz/DiArqT2XBKStxqkv iHVnS1/m5xOGTvutAfUQcBEDWGrmJB+0sPvHnw7pjeJ0uDlbOxifb8ZRSGj4mhXhpC3i1eY7sLe lArAD8WnVfI3jRHdSC8jEt8YZjYO0Xuw= X-Gm-Gg: AeBDietJkIRhZOCwlJs641HqrKPKiAcr7OJhROZm/Zx8w37wXAP82QoMuhq2eiW4azg dGMAYT6EAtmqskBziqQUSsla+kXglggAu1H80sN96GOtgXEsGgSHc/4w+OoTDMO57tA7HytVkUC Qp7DrlaJP3NrWTX3Y3RUH0OA724eOIDM0llKUNtKHDKDkJEvt6uSIN1GdaaeEfTDgjS3A5uDlSW mdBSO+QFhLnFLgMzhmdIzpnH+Ugg+gDEC9jMVMvGmtdRAZc1dwkEWblMvWOabSJYc6I3fNMpLmy LnwwqkKUGLN2Kawvets6kNKfI1WYCVZ40WKbAp0l8gj+KH16QdQbCkS2YjBBj25oLjxerZ+GQqF OAWBk0ifL/P3d3y9wubiAQELqh6sMhfg9wbJ7PjUOehc6IQ5Cr0KWQ5FTTO27XeJWeGciuZQBX8 ZvpmxIoLAkoX3cZtA= X-Received: by 2002:a05:6402:1e89:b0:66b:f527:c69d with SMTP id 4fb4d7f45d1cf-66e3f3d1676mr188546a12.8.1775159885623; Thu, 02 Apr 2026 12:58:05 -0700 (PDT) MIME-Version: 1.0 References: <202510210803.3b3vfvygxtjl@alvherre.pgsql> <3DC56A6A-9525-4C05-B45A-9A135A66BC34@justatheory.com> <931F201B-FF38-486E-BDEE-DF9692A01E1D@justatheory.com> <1eb15091-660d-477b-acda-b61d00bc9ffb@dunslane.net> <278cb771-6008-44e5-8eaa-9d4acdb56c79@dunslane.net> <9E9B3C10-7535-4704-A04A-DF5D32C43DBE@justatheory.com> <34758556-D3D0-42C3-9A1B-CBF64336ADBC@justatheory.com> <88a392fd-d732-45a7-bcfc-291258849fbe@dunslane.net> In-Reply-To: <88a392fd-d732-45a7-bcfc-291258849fbe@dunslane.net> From: Florents Tselai Date: Thu, 2 Apr 2026 22:57:28 +0300 X-Gm-Features: AQROBzA0saiEO6jre7ag3S6WXDtOTrdmXvc0vfQ_jC_yQ5xXdXpr55nu3XYBfYQ Message-ID: Subject: Re: PATCH: jsonpath string methods: lower, upper, initcap, l/r/btrim, replace, split_part To: Andrew Dunstan Cc: "David E. Wheeler" , pgsql-hackers , Chao Li , =?UTF-8?Q?=C3=81lvaro_Herrera?= , Tom Lane , Peter Eisentraut , Robert Haas , Alexander Korotkov , jian he Content-Type: multipart/alternative; boundary="00000000000066f4a9064e7f9e0a" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000066f4a9064e7f9e0a Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Apr 2, 2026 at 10:21=E2=80=AFPM Andrew Dunstan wrote: > > On 2026-03-28 Sa 11:58 AM, David E. Wheeler wrote: > > On Mar 28, 2026, at 11:02, Andrew Dunstan wrote: > > > The key_name production is what allows a keyword to also be used as an ob= ject key in $.keyname syntax. The trim keywords (ltrim, rtrim, btrim) were = added there, so $.ltrim as a key works. But $.lower, > $.upper, $.initcap, $.replace, and $.split_part as keys would all break. > > Ooh, right. It has been so long since I looked at this stuff that I forgo= t. Thanks for the reminder. > > > There are tests added for it. > > And for this! > > > > > Committed. > Boom! Thanks so much for this. --00000000000066f4a9064e7f9e0a Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable



<= div class=3D"gmail_quote gmail_quote_container">
On Thu, Apr 2, 2026 at 10:21=E2=80=AFPM Andrew Dunstan <andrew@dunslane.net> wrote:
=20 =20 =20


On 2026-03-28 Sa 11:58 AM, David E. Wheeler wrote:
On Mar 28, 2026, at 11:02, Andrew Dunstan <andrew@dunslane.net> wrote:

The key_name production is what allows a keyword to also be us=
ed as an object key in $.keyname syntax. The trim keywords (ltrim, rtrim, b=
trim) were added there, so $.ltrim as a key works. But $.lower,
$.upper, $.initcap, $.replace, and $.split_part as keys would all break.
Ooh, right. It has been so long since I looked at this stuff tha=
t I forgot. Thanks for the reminder.

There are tests added for it.
And for this!



Committed.

Boom! Thanks so much for this.= =C2=A0
--00000000000066f4a9064e7f9e0a--