Thread: fmgr.h: PG_NARGS() for number of arguments passed

fmgr.h: PG_NARGS() for number of arguments passed

From
Lee Kindness
Date:
The small context diff below corrects what seems to be an oversight in
fmgr.h - it's discouraged to access fcinfo directly but there is no
macro to get the number of arguments passed to the function. Checking
the number of arguments is often useful when you have a function which
can be called like:

 func('arg');
 func(null);
 func();

all mapping to the same C function.

the macro has a function-like appearance to match the other PG_*
macros.

Regards, Lee Kindness.

Index: fmgr.h
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/include/fmgr.h,v
retrieving revision 1.24
diff -c -r1.24 fmgr.h
*** fmgr.h    2002/09/04 20:31:36    1.24
--- fmgr.h    2002/09/10 13:25:06
***************
*** 116,121 ****
--- 116,126 ----
  #define PG_FUNCTION_ARGS    FunctionCallInfo fcinfo

  /*
+  * Get number of arguments passed to function.
+  */
+ #define PG_NARGS() (fcinfo->nargs)
+
+ /*
   * If function is not marked "proisstrict" in pg_proc, it must check for
   * null arguments using this macro.  Do not try to GETARG a null argument!
   */

Re: fmgr.h: PG_NARGS() for number of arguments passed

From
Bruce Momjian
Date:
This is sort of a feature, but I don't think we need to wait for 7.4 for
a simple #define addition.

Your patch has been added to the PostgreSQL unapplied patches list at:

    http://candle.pha.pa.us/cgi-bin/pgpatches

I will try to apply it within the next 48 hours.

---------------------------------------------------------------------------


Lee Kindness wrote:
> The small context diff below corrects what seems to be an oversight in
> fmgr.h - it's discouraged to access fcinfo directly but there is no
> macro to get the number of arguments passed to the function. Checking
> the number of arguments is often useful when you have a function which
> can be called like:
>
>  func('arg');
>  func(null);
>  func();
>
> all mapping to the same C function.
>
> the macro has a function-like appearance to match the other PG_*
> macros.
>
> Regards, Lee Kindness.
>
> Index: fmgr.h
> ===================================================================
> RCS file: /projects/cvsroot/pgsql-server/src/include/fmgr.h,v
> retrieving revision 1.24
> diff -c -r1.24 fmgr.h
> *** fmgr.h    2002/09/04 20:31:36    1.24
> --- fmgr.h    2002/09/10 13:25:06
> ***************
> *** 116,121 ****
> --- 116,126 ----
>   #define PG_FUNCTION_ARGS    FunctionCallInfo fcinfo
>
>   /*
> +  * Get number of arguments passed to function.
> +  */
> + #define PG_NARGS() (fcinfo->nargs)
> +
> + /*
>    * If function is not marked "proisstrict" in pg_proc, it must check for
>    * null arguments using this macro.  Do not try to GETARG a null argument!
>    */
>
> ---------------------------(end of broadcast)---------------------------
> TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
>

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

Re: fmgr.h: PG_NARGS() for number of arguments passed

From
Bruce Momjian
Date:
Patch applied.  Thanks.

---------------------------------------------------------------------------


Lee Kindness wrote:
> The small context diff below corrects what seems to be an oversight in
> fmgr.h - it's discouraged to access fcinfo directly but there is no
> macro to get the number of arguments passed to the function. Checking
> the number of arguments is often useful when you have a function which
> can be called like:
>
>  func('arg');
>  func(null);
>  func();
>
> all mapping to the same C function.
>
> the macro has a function-like appearance to match the other PG_*
> macros.
>
> Regards, Lee Kindness.
>
> Index: fmgr.h
> ===================================================================
> RCS file: /projects/cvsroot/pgsql-server/src/include/fmgr.h,v
> retrieving revision 1.24
> diff -c -r1.24 fmgr.h
> *** fmgr.h    2002/09/04 20:31:36    1.24
> --- fmgr.h    2002/09/10 13:25:06
> ***************
> *** 116,121 ****
> --- 116,126 ----
>   #define PG_FUNCTION_ARGS    FunctionCallInfo fcinfo
>
>   /*
> +  * Get number of arguments passed to function.
> +  */
> + #define PG_NARGS() (fcinfo->nargs)
> +
> + /*
>    * If function is not marked "proisstrict" in pg_proc, it must check for
>    * null arguments using this macro.  Do not try to GETARG a null argument!
>    */
>
> ---------------------------(end of broadcast)---------------------------
> TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
>

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073