[PATCHES] Increased error verbosity when querying row-returning functions

2005-01-11 Thread Brendan Jurd
This patch to src/backend/executor/nodeFunctionscan.c is intended to 
make life a little easier for people using row-returning functions, by 
increasing the level of detail in the error messages thrown when 
tupledesc_match fails.

Cheers
BJ

Index: src/backend/executor/nodeFunctionscan.c
===
RCS file: /projects/cvsroot/pgsql/src/backend/executor/nodeFunctionscan.c,v
retrieving revision 1.29
diff -c -r1.29 nodeFunctionscan.c
*** src/backend/executor/nodeFunctionscan.c 31 Dec 2004 21:59:45 -  
1.29
--- src/backend/executor/nodeFunctionscan.c 11 Jan 2005 22:17:16 -
***
*** 87,96 
 * need to do this for functions returning RECORD, but might as
 * well do it always.
 */
!   if (funcTupdesc  !tupledesc_match(node-tupdesc, funcTupdesc))
!   ereport(ERROR,
!   (errcode(ERRCODE_DATATYPE_MISMATCH),
!errmsg(query-specified return row and 
actual function return row do not match)));
}
  
/*
--- 87,94 
 * need to do this for functions returning RECORD, but might as
 * well do it always.
 */
!   if( funcTupdesc )
!   tupledesc_match(node-tupdesc, funcTupdesc);
}
  
/*
***
*** 363,369 
--- 361,373 
int i;
  
if (dst_tupdesc-natts != src_tupdesc-natts)
+   {
+   ereport(ERROR,
+   (errcode(ERRCODE_DATATYPE_MISMATCH),
+errmsg(function return row and query-specified return 
row do not match),
+errdetail(function-returned row contains %d 
attributes, but query expects %d., src_tupdesc-natts, dst_tupdesc-natts)));
return false;
+   }
  
for (i = 0; i  dst_tupdesc-natts; i++)
{
***
*** 373,382 
--- 377,401 
if (dattr-atttypid == sattr-atttypid)
continue;   /* no worries */
if (!dattr-attisdropped)
+   {
+   ereport(ERROR,
+   (errcode(ERRCODE_DATATYPE_MISMATCH),
+errmsg(function return row and 
query-specified return row do not match),
+errdetail(function returned type %s at 
ordinal position %d, but query expects %s., 
+format_type_be(sattr-atttypid),
+i+1,
+format_type_be(dattr-atttypid;
return false;
+   }
if (dattr-attlen != sattr-attlen ||
dattr-attalign != sattr-attalign)
+   {
+   ereport(ERROR,
+   (errcode(ERRCODE_DATATYPE_MISMATCH),
+errmsg(function return row and 
query-specified return row do not match),
+errdetail(physical storage mismatch on 
dropped attribute at ordinal position %d., i+1)));
return false;
+   }
}
  
return true;

---(end of broadcast)---
TIP 8: explain analyze is your friend


Re: [PATCHES] Increased error verbosity when querying row-returning functions

2005-01-11 Thread Alvaro Herrera
On Wed, Jan 12, 2005 at 09:23:26AM +1100, Brendan Jurd wrote:
 This patch to src/backend/executor/nodeFunctionscan.c is intended to 
 make life a little easier for people using row-returning functions, by 
 increasing the level of detail in the error messages thrown when 
 tupledesc_match fails.

You should get rid of the returns, because ereport(ERROR) will never
return control to the function and they are thus dead code.  And make
the function return void rather than bool.

Also follow the style: use if (foo) rather than if( foo ).  And
message style stipulates that the errdetail() message should start with
a capital (upper case?) letter.

-- 
Alvaro Herrera ([EMAIL PROTECTED])
Pido que me den el Nobel por razones humanitarias (Nicanor Parra)

---(end of broadcast)---
TIP 6: Have you searched our list archives?

   http://archives.postgresql.org