libpqtypes home page

PQexecf(3)                     libpqtypes Manual                    PQexecf(3)



NAME
       PQexecf - Prepares parameters and executes a command.

SYNOPSIS
       #include <libpqtypes.h>

       PGresult *PQexecf(const PGconn *conn, const char *cmd, ...);
       PGresult *PQexecvf(const PGconn *conn, const char *cmd, va_list ap);
       int PQsendf(const PGconn *conn, const char *cmd, ...);
       int PQsendvf(const PGconn *conn, const char *cmd, va_list ap);

DESCRIPTION
       The  PQexecf()  function  executes  a command that uses libpqtypes type
       specifiers instead of $1, $2, etc... syntax.  The idea  is  to  combine
       PQputvf()  and PQparamExec() into a single call.  The variable argument
       list must match the type specs listed within the cmd. The  type  speci-
       fiers should be placed where one would normally place $1, $2, etc...

       The  PQexecvf()  function  is  identical to PQexecf() except it takes a
       va_list.

       The PQsendf() and PQsendvf() functions are identical to  PQexecf()  and
       PQexecvf() except they are asynchronous versions, meaning an additional
       call, PQgetResult, must be issued to get the PGresult object.  For more
       information,  see the PostgreSQL Documentation: specifically the "Asyn-
       chronous Command Processing" section under "Client Interfaces | libpq -
       C library".

       A  prepared type spec "@name" can be used with these functions, granted
       that PQspecPrepare() was called with a non-zero value for  the  is_stmt
       argument.  These functions needs an actual SQL statement to execute.

RETURN VALUE
       PQexecf  and PQexecvf return NULL on error and a valid PGresult on suc-
       cess.  PQsendf and PQsendvf return zero on error and a  non-zero  value
       on success.  On error, use PQgeterror(3) to obtain an error message.

EXAMPLES
   Using PQexecf
       The example uses PQexecf function to execute a query.


              /* The PQexecf call is shorthand for:
               *
               *   PGparam *param = PQparamCreate(conn);
               *   PQputf(param, "%int4 %int4", 1, 1);
               *   res = PQparamExec(conn, param, "SELECT $1 + $2", 1);
               *   PQparamClear(param);
               *
               * As you may notice, PQexecf makes life much simpler.
               */
              PGresult *res = PQexecf(conn, "SELECT %int4 + %int4", 1, 1);

              if(!res)
                   fprintf(stderr, "PQexecf failed: %s", PQgeterror());
              else
                   PQclear(res);

              /* A bit more common, this puts an int4 and a text into a generated
               * PGparam and then executes 'myfunc($1, $2)'
               */
              res = PQexecf(conn, "SELECT * FROM myfunc(%int4, %text)", 2, "abc");

              /* Prepared type spec example.  To use with execf, the final "is_stmt"
               * argument must be set to a non-zero value!
               */
              PQspecPrepare(conn, "account_insert", "INSERT INTO account VALUES "
                   "(%int8, %text, %int4)", 1);

              PGint8 acc_id = 78236;
              PGtext acc_name = "ABC Coders, LLC.";
              PGint4 acc_biz = ACC_BIZ_TECHNOLOGY;

              PQexecf(conn, "@account_insert", acc_id, acc_name, acc_biz);

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
       PQgeterror(3), PQputvf(3), PQparamExec(3)




libpqtypes                           2011                           PQexecf(3)

libpqtypes home page