ECPG: inconsistent behavior with the document in “GET/SET DESCRIPTOR.” - Mailing list pgsql-hackers

From Masashi Kamura (Fujitsu)
Subject ECPG: inconsistent behavior with the document in “GET/SET DESCRIPTOR.”
Date
Msg-id OS9PR01MB13174AD7D1829D0644B6BB90E9447A@OS9PR01MB13174.jpnprd01.prod.outlook.com
Whole thread Raw
List pgsql-hackers
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

Attachment

pgsql-hackers by date:

Previous
From: Shiju Sivadazz
Date:
Subject: Question about heap_inplace_update and VACUUM behavior
Next
From: Shin Berg
Date:
Subject: Re: Inconsistency in owner assignment between INDEX and STATISTICS