Thread: BUG #1214: ecpg regression in 8.0.0beta1

BUG #1214: ecpg regression in 8.0.0beta1

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

Bug reference:      1214
Logged by:          R. Scott Bailey

Email address:      scott.bailey@eds.com

PostgreSQL version: 7.5 Dev

Operating system:   Tru64 UNIX V5.1B

Description:        ecpg regression in 8.0.0beta1

Details:

The following code snippet does not compile under 8.0.0beta1:

--- extract from load-day.pgc ---

exec sql CREATE TEMPORARY TABLE OverallData (Class, Parameter, DataVal)
  AS SELECT Class, Paramter, SUM(DataVal)
  FROM PatrolData JOIN Metrics ON Parameter = MetricName
  WHERE Aggregate = 1
  GROUP BY Class, Parameter, RSBMIN(Tstamp) ;

--- end of extract ---

I get this:
# ecpg -t load-day.pgc
load-day.pgc:200: ERROR: syntax error at or near "SELECT"

Line 200 is the second line of the snippet above, if you couldn't guess
that. :-) This compiled cleanly under 7.4.3 and prior versions. For thrills,
I tried typing this command manually in psql and it worked fine. I'd be
happy to send you more source code and/or database metadata but it doesn't
feel to me like that is central this issue, since theoretically the ecpg
preprocessor has no real knowledge of the underlying database.

For what it may be worth, I have a number of programs I have been
recompiling and it appears to me that the common factor in what works and
what doesn't is that "CREATE TEMPORARY TABLE ... AS SELECT ..." seems to
fail and programs that do not contain this construct compile successfully.

Hope this helps,
  Scott

Re: BUG #1214: ecpg regression in 8.0.0beta1

From
Tom Lane
Date:
"PostgreSQL Bugs List" <pgsql-bugs@postgresql.org> writes:
> The following code snippet does not compile under 8.0.0beta1:

> exec sql CREATE TEMPORARY TABLE OverallData (Class, Parameter, DataVal)
>   AS SELECT Class, Paramter, SUM(DataVal)
>   FROM PatrolData JOIN Metrics ON Parameter = MetricName
>   WHERE Aggregate = 1
>   GROUP BY Class, Parameter, RSBMIN(Tstamp) ;

Looks like a slip-up in copying a change from the main grammar.  I've
applied the attached patch to fix it.  Thanks for the report!

            regards, tom lane

*** src/interfaces/ecpg/preproc/preproc.y.orig    Wed Jul 21 18:40:54 2004
--- src/interfaces/ecpg/preproc/preproc.y    Wed Aug 11 18:30:40 2004
***************
*** 1546,1559 ****
   * SELECT ... INTO.
   */

! CreateAsStmt:  CREATE OptTemp TABLE qualified_name OptCreateAs WithOidsAs AS
          { FoundInto = 0; }
          SelectStmt
          {
              if (FoundInto == 1)
                  mmerror(PARSE_ERROR, ET_ERROR, "CREATE TABLE / AS SELECT may not specify INTO");

!             $$ = cat_str(8, make_str("create"), $2, make_str("table"), $4, $5, $6, make_str("as"), $9);
          }
          ;

--- 1546,1559 ----
   * SELECT ... INTO.
   */

! CreateAsStmt:  CREATE OptTemp TABLE qualified_name OptCreateAs WithOidsAs
          { FoundInto = 0; }
          SelectStmt
          {
              if (FoundInto == 1)
                  mmerror(PARSE_ERROR, ET_ERROR, "CREATE TABLE / AS SELECT may not specify INTO");

!             $$ = cat_str(8, make_str("create"), $2, make_str("table"), $4, $5, $6, $8);
          }
          ;

Re: BUG #1214: ecpg regression in 8.0.0beta1

From
Michael Meskes
Date:
On Wed, Aug 11, 2004 at 06:51:59PM -0400, Tom Lane wrote:
> Looks like a slip-up in copying a change from the main grammar.  I've
> applied the attached patch to fix it.  Thanks for the report!

Thanks Tom.

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!