Skip site navigation (1) Skip section navigation (2)

Re: Bug #668: cursors with params: mismatched parentheses;

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: rambo(at)portoweb(dot)com(dot)br, pgsql-bugs(at)postgresql(dot)org
Subject: Re: Bug #668: cursors with params: mismatched parentheses;
Date: 2002-05-21 18:54:05
Message-ID: 26546.1022007245@sss.pgh.pa.us (view raw or flat)
Thread:
Lists: pgsql-bugs
pgsql-bugs(at)postgresql(dot)org writes:
>   cursors with parameters do not seems to work. Is that implemented?

Sigh.  They used to work, but I seem to have broken 'em with a
last-minute 7.2 fix.  (Wish we had better regression tests for plpgsql.)
A fix against 7.2.* is attached.

			regards, tom lane

*** src/pl/plpgsql/src/gram.y.orig	Thu Nov 29 17:57:37 2001
--- src/pl/plpgsql/src/gram.y	Tue May 21 14:50:18 2002
***************
*** 4,10 ****
   *						  procedural language
   *
   * IDENTIFICATION
!  *	  $Header: /cvsroot/pgsql/src/pl/plpgsql/src/gram.y,v 1.29 2001/11/29 22:57:37 tgl Exp $
   *
   *	  This software is copyrighted by Jan Wieck - Hamburg.
   *
--- 4,10 ----
   *						  procedural language
   *
   * IDENTIFICATION
!  *	  $Header: /cvsroot/pgsql/src/pl/plpgsql/src/gram.y,v 1.29.2.1 2002/05/21 18:50:18 tgl Exp $
   *
   *	  This software is copyrighted by Jan Wieck - Hamburg.
   *
***************
*** 1327,1343 ****
  								if (tok != '(')
  								{
  									plpgsql_error_lineno = yylineno;
! 									elog(ERROR, "cursor %s has arguments", $3->refname);
  								}
  
  								new->argquery = read_sql_stmt("SELECT ");
! 								/* Remove the trailing right paren,
!                                  * because we want "select 1, 2", not
!                                  * "select (1, 2)".
  								 */
  								cp = new->argquery->query;
! 								cp += strlen(cp);
! 								--cp;
  								if (*cp != ')')
  								{
  									plpgsql_error_lineno = yylineno;
--- 1327,1370 ----
  								if (tok != '(')
  								{
  									plpgsql_error_lineno = yylineno;
! 									elog(ERROR, "cursor %s has arguments",
! 										 $3->refname);
  								}
  
+ 								/*
+ 								 * Push back the '(', else read_sql_stmt
+ 								 * will complain about unbalanced parens.
+ 								 */
+ 								plpgsql_push_back_token(tok);
+ 
  								new->argquery = read_sql_stmt("SELECT ");
! 
! 								/*
! 								 * Now remove the leading and trailing parens,
! 								 * because we want "select 1, 2", not
! 								 * "select (1, 2)".
  								 */
  								cp = new->argquery->query;
! 
! 								if (strncmp(cp, "SELECT", 6) != 0)
! 								{
! 									plpgsql_error_lineno = yylineno;
! 									elog(ERROR, "expected 'SELECT (', got '%s' (internal error)",
! 										 new->argquery->query);
! 								}
! 								cp += 6;
! 								while (*cp == ' ') /* could be more than 1 space here */
! 									cp++;
! 								if (*cp != '(')
! 								{
! 									plpgsql_error_lineno = yylineno;
! 									elog(ERROR, "expected 'SELECT (', got '%s' (internal error)",
! 										 new->argquery->query);
! 								}
! 								*cp = ' ';
! 
! 								cp += strlen(cp) - 1;
! 
  								if (*cp != ')')
  								{
  									plpgsql_error_lineno = yylineno;

In response to

pgsql-bugs by date

Next:From: pgsql-bugsDate: 2002-05-22 12:41:17
Subject: Bug #671: server corrupt
Previous:From: Lecessi, RalphDate: 2002-05-21 17:30:27
Subject: Re: Bug #669: gawk: cmd. line:2: (END OF FILE)

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group