Thread: BUG #1165: ECPG can't parse dynamic SQL with indicator

BUG #1165: ECPG can't parse dynamic SQL with indicator

From
"PostgreSQL Bugs List"
Date:
The following bug has been logged online:

Bug reference:      1165
Logged by:          ISHIDA Akio

Email address:      iakio@mono-space.net

PostgreSQL version: 7.4

Operating system:   Linux miracle 2.4.9-31.22ml

Description:        ECPG can't parse dynamic SQL with indicator

Details:

$ cat indtest.pgc
int main()
{
  exec sql begin declare section;
  int i, i_ind;
  exec sql end declare section;
  exec sql execute stmt using :i;        /* good */
  exec sql execute stmt using :i :i_ind; /* error */
}

==== version 7.3.6 ====
$ pgsql736/bin/ecpg --version
ecpg (PostgreSQL 7.3.6) 2.10.0
$ pgsql736/bin/ecpg indtest.pgc
(No error)

==== version 7.4.2 ====
$ pgsql742/bin/ecpg --version
ecpg (PostgreSQL 7.4.2) 3.1.1
$ pgsql742/bin/ecpg indtest.pgc
indtest.pgc:7: ERROR: syntax error at or near ":i_ind"

This problem was reported in Japanese mailing list.
http://ml.postgresql.jp/pipermail/pgsql-jp/2004-June/008332.html

It is a patch.(but I'm not good at using bison)

--- src/interfaces/ecpg/preproc/preproc.y.org   Mon Jun 14 11:24:25 2004
+++ src/interfaces/ecpg/preproc/preproc.y       Fri Jun 11 12:54:10 2004
@@ -5304,6 +5304,7 @@
                                add_variable_to_head(&argsinsert,
new_variable($1, ECPGmake_simple_type(ECPGt_const, length), 0),
&no_indicator);
                        }
                }
+               | civarind              { $$ = EMPTY; }
                ;

Re: BUG #1165: ECPG can't parse dynamic SQL with indicator

From
Michael Meskes
Date:
On Mon, Jun 14, 2004 at 09:52:20PM -0300, PostgreSQL Bugs List wrote:
> It is a patch.(but I'm not good at using bison)
>
> --- src/interfaces/ecpg/preproc/preproc.y.org   Mon Jun 14 11:24:25 2004
> +++ src/interfaces/ecpg/preproc/preproc.y       Fri Jun 11 12:54:10 2004
> @@ -5304,6 +5304,7 @@
>                                 add_variable_to_head(&argsinsert,
> new_variable($1, ECPGmake_simple_type(ECPGt_const, length), 0),
> &no_indicator);
>                         }
>                 }
> +               | civarind              { $$ = EMPTY; }
>                 ;
>

This patch indeed fixes the problem and it allows indicators and thus
NULL values to be entered in every using clause there is. I don't see a
problem with this so I just committed the patch to CVS, HEAD and 7.4.

Sorry, that it did not make it into 7.4.3. This is my fault as I was
too busy to seriously review the patch.

Michael
--
Michael Meskes
Email: Michael at Fam-Meskes dot De
ICQ: 179140304, AIM/Yahoo: michaelmeskes, Jabber: meskes@jabber.org
Go SF 49ers! Go Rhein Fire! Use Debian GNU/Linux! Use PostgreSQL!