Re: queryId constant squashing does not support prepared statements

From: Sami Imseih <samimseih(at)gmail(dot)com>
To: Michael Paquier <michael(at)paquier(dot)xyz>
Cc: Dmitry Dolgov <9erthalion6(at)gmail(dot)com>, Álvaro Herrera <alvherre(at)kurilemu(dot)de>, Junwang Zhao <zhjwpku(at)gmail(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: queryId constant squashing does not support prepared statements
Date: 2025-05-24 14:35:24
Message-ID: CAA5RZ0s8xpDmMxSsG=L05q2TooV9RfYCiUn5jnLG66dpbozonA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

> In v17, we are a bit smarter with the numbering, with a normalization
> giving the following, starting at $1:
> select where $5 in ($1, $2, $3) and $6 = $4
>
> So your argument about the $n parameters is kind of true, but I think
> the numbering logic in v17 to start at $1 is a less-confusing result.
> I would imagine that the squashed logic should give the following
> result on HEAD in this case if we want a maximum of consistency with
> the squashing of the IN elements taken into account:
> select where $3 in ($1 /*, ... */) and $4 = $2
>
> Starting the count of the parameters at $4 would be strange.

yeah, I think the correct answer is we need to handle 2 cases.

1. If we don't have a squashed list, then we just do what we do now.

2. If we have 1 or more squashed lists, then we can't guarantee
the $n parameter as was supplied by the user and we simply rename
the $n starting from 1.

therefore, a user supplied query like this:
```
select where $5 in ($1, $2, $3) and $6 = $4 and 1 = 2
```

will be normalized to:
```
select where $1 in ($2 /*...*/) and $3 = $4 and $5 = $6
```

To accomplish this, we will need to track the locations of
external parameters to support the 2nd case, because we need
to re-write the original location of the parameter with
the new value. I played around with this this morning and
it works as I described above. Any concerns with the
behavior described above?

--
Sami

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message David E. Wheeler 2025-05-24 16:08:18 Re: PATCH: jsonpath string methods: lower, upper, initcap, l/r/btrim, replace, split_part
Previous Message Dmitry Dolgov 2025-05-24 14:34:37 Re: I/O worker and ConfigReload