Re: [PATCH] Resolve unknown-type literals in GRAPH_TABLE COLUMNS

Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>

From: Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>
To: SATYANARAYANA NARLAPURAM <satyanarlapuram@gmail.com>
Cc: Junwang Zhao <zhjwpku@gmail.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2026-04-29T14:09:41Z
Lists: pgsql-hackers

Attachments

On Mon, Apr 27, 2026 at 11:34 AM SATYANARAYANA NARLAPURAM
<satyanarlapuram@gmail.com> wrote:
>
> Hi,
>
> On Sun, Apr 26, 2026 at 8:10 AM Junwang Zhao <zhjwpku@gmail.com> wrote:
>>
>> Hi SATYANARAYANA,
>>
>> On Sun, Apr 26, 2026 at 3:53 AM SATYANARAYANA NARLAPURAM
>> <satyanarlapuram@gmail.com> wrote:
>> >
>> > Hi hackers,
>> >
>> > transformRangeGraphTable() calls transformExpr() and
>> > assign_list_collations() for COLUMNS expressions but missed calling
>> > resolveTargetListUnknowns(). As a result, literals such as 'val1'
>> > in a COLUMNS clause retained type "unknown", causing failures with
>> > ORDER BY, UNION, and output conversions.
>> >
>> > Fix by calling resolveTargetListUnknowns() on the columns target
>> > list right after assign_list_collations(), similar to SELECT target lists in
>> > transformSelectStmt().
>> >
>> > Attached a patch to fix this, which also includes test cases to reproduce.
>>
>> I can reproduce this and the patch fixes it.
>>
>> One question: why is resolveTargetListUnknowns called after
>> assign_list_collations?
>>
>> I'm asking because in transformSelectStmt, resolveTargetListUnknowns
>> is invoked before assign_query_collations. It might not matter, but keeping
>> the order consistent would be good for readers.
>
>
> Updated the patch. It should be before.

Do we really need a test for ORDER BY on a literal column? I replaced
all the test queries with a single one which covers all the scenarios
covered by those queries.

The patch needed to consider pstate->p_resolve_unknowns. Unknown
literals are not resolved as text always. See the test query.

--
Best Wishes,
Ashutosh Bapat

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Resolve unknown-type literals in GRAPH_TABLE COLUMNS