Provided by: libpqtypes-dev_1.5.1-2_amd64 bug

NAME

       PQputf,  PQputvf  -  Packs  a  set of parameters in a PGparam for use with a parameterized
       query.

SYNOPSIS

       #include <libpqtypes.h>

       int PQputf(PGparam *param, const char *format, ...);
       int PQputvf(PGparam *param, char *stmtBuf, size_t stmtBufLen,
                   const char *format, va_list ap);

DESCRIPTION

       The PQputf() and PQputvf() functions put one or more query parameters into a PGparam using
       a printf style interface.  Any number of parameters can be put at the same time.

       The  format  argument is a data type specifier string indicating the parameters being put,
       such as "%int4 %polygon".  format cannot  be  NULL  or  an  empty  string.   The  variable
       argument list must match the format, either "..." or ap.  The number of arguments required
       for each data type is dependant on the data type itself; built-in PostgreSQL types  always
       require a single argument.

       The  PQputvf()  function can construct a parameterized command string from format, as long
       as stmtBuf and stmtBufLen have been provided.  If  the  construction  of  stmtBuf  is  not
       desired, set it to NULL and set stmtBufLen to 0.  When a constructed statement is desired,
       the contents of format will be copied to  stmtBuf  and  all  data  type  specifiers,  like
       "%int4",  will  be  replaced  with  $1, $2, etc...  syntax.  The result is a parameterized
       statement in synch with param and ready to be executed.  For instance: if spec is  "SELECT
       %int4 + %int4", the resulting stmtBuf would be "SELECT $1 + $2".

RETURN VALUE

       On  success,  a  non-zero value is returned.  On error, zero is returned and PQgeterror(3)
       will contain an error message.

       If any put operation fails, the param is reverted back to the number of parameters it  had
       prior to the function call; partial puts are not allowed.

EXAMPLES

   Using PQputf
       The example uses PQputf() to put a couple parameters into a PGparam.

              PGtext text = "foobar";
              PGint8 i8 = PQT_INT64CONST(1099511627776);
              PGparam *param = PQparamCreate(conn);

              if(!PQputf(param, "%text %int8", text, i8))
                   fprintf(stderr, "*ERROR: %s\n", PQgeterror());

              PQparamClear(param);

   Using PQputvf
       The example creates an application function named execf.  execf is a wrapper to PQputvf(),
       as well as PQparamExec(3).  It is similar to PQexecf().  The only difference is  that  the
       PQexecf implementation uses a smaller stack buffer and allocates heap memory when needed.

              PGresult *
              execf(PGconn *conn, const char *format, ...)
              {
                   va_list ap;
                   char stmt[32768];
                   PGparam *param;
                   PGresult *res = NULL;

                   /* create the temporary PGparam */
                   if(!(param = PQparamCreate(conn)))
                        return NULL; /* PQseterror already called */

                   /* put the params, create the stmt and exec it */
                   va_start(ap, format);
                   if(PQputvf(param, stmt, sizeof(stmt), format, ap))
                        res = PQparamExec(conn, param, stmt, 1); // resfmt is binary
                   va_end(ap);

                   /* param must be cleared */
                   PQparamClear(param);
                   return res;
              }

              /* Example: execf will put 2 ints and execute "SELECT $1 + $2" */
              PGresult *res = execf(conn, "SELECT %int4 + %int4", 100, 67);
              if(!res)
                   fprintf(stderr, "*ERROR: %s\n", PQgeterror());

AUTHOR

       A  contribution  of eSilo, LLC. for the PostgreSQL Database Management System.  Written by
       Andrew Chernow and Merlin Moncure.

REPORTING BUGS

       Report bugs to <libpqtypes@esilo.com>.

COPYRIGHT

       Copyright (c) 2011 eSilo, LLC. All rights reserved.
       This is free software; see the source for copying conditions.  There is NO  warranty;  not
       even for MERCHANTABILITY or  FITNESS FOR A PARTICULAR PURPOSE.

SEE ALSO

       pqt-specs(3), PQparamCreate(3), PQgeterror(3), PQseterror(3)