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
0001-ECPG-Reject-multiple-headers-in-GET-SET-DESCRIPTOR-a.patch
Description: 0001-ECPG-Reject-multiple-headers-in-GET-SET-DESCRIPTOR-a.patch
