ECPG: inconsistent behavior with the document in “GET/SET DESCRIPTOR.”
Masashi Kamura (Fujitsu) <kamura.masashi@fujitsu.com>
From: "Masashi Kamura (Fujitsu)" <kamura.masashi@fujitsu.com>
To: "pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>
Date: 2026-03-11T09:49:46Z
Lists: pgsql-hackers
Attachments
- 0001-ECPG-Reject-multiple-headers-in-GET-SET-DESCRIPTOR-a.patch (application/octet-stream) patch 0001
Hi,
While using ECPG and its SQL descriptor, I found an inconsistency
between the document and the actual behavior.
According to the manual, it states that multiple header items can be specified.
https://www.postgresql.org/docs/current/ecpg-sql-get-descriptor.html
```
GET DESCRIPTOR descriptor_name :cvariable = descriptor_header_item [, ... ]
GET DESCRIPTOR descriptor_name VALUE column_number :cvariable = descriptor_item [, ... ]
```
So following embedded SQL should be accepted.
Actually, the compiler says OK.
However, the output source cannot be compiled.
Embedded SQL:
```
EXEC SQL GET DESCRIPTOR d :desc_count1 = count, :desc_count2 = count;
```
Precompiled result:
```
{ ECPGget_desc_header(__LINE__, "d", &(desc_count2desc_count1));
```
Reported error by the compiler:
```
bytea.pgc: In function 'main':
bytea.pgc:123:48: error: 'desc_count2desc_count1' undeclared (first use in this function)
123 | exec sql get descriptor d :desc_count1 = count, :desc_count2 = count;
| ^~~~~~~~~~~~~~~~~~~~~~
bytea.pgc:123:48: note: each undeclared identifier is reported only once for each function it appears in
```
According to my analysis, the parser can accept multiple headers,
but the output function cannot.
See ECPGGetDescHeaderItems and output_get_descr_header().
Therefore, it is thought that the variables were incorrectly concatenated,
resulting in an error.
I feel even if multiple header items cannot be specified,
invalid syntax should be detected by the precompiler, not the compiler.
Attached patch fixes both parser and the documentation.
After applying the patch, the above example can detect the invalid syntax
by the precompiler anymore.
```
bytea.pgc:123: ERROR: syntax error at or near ","
```
SET DESCRIPTOR also has the same issue, thus the patch fixes both.
I'm looking forward to your comments.
Regards,
Masashi Kamura
Fujitsu Limited
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
ecpg: Reject multiple header items in GET/SET DESCRIPTOR
- 9e8fd9f7ab56 14 (unreleased) landed
- bfeddcf09b68 15 (unreleased) landed
- 4d4b73cfd27d 16 (unreleased) landed
- fe8c0a762b30 17 (unreleased) landed
- 081434b0f582 18 (unreleased) landed
- 4484165b0712 19 (unreleased) landed