logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

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

Author

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

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".

Examples

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

              PGtexttext="foobar";PGint8i8=PQT_INT64CONST(1099511627776);PGparam*param=PQparamCreate(conn);if(!PQputf(param,"%text%int8",text,i8))fprintf(stderr,"*ERROR:%s\n",PQgeterror());PQparamClear(param);UsingPQputvf
       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,constchar*format,...){va_listap;charstmt[32768];PGparam*param;PGresult*res=NULL;/*createthetemporaryPGparam*/if(!(param=PQparamCreate(conn)))returnNULL;/*PQseterroralreadycalled*//*puttheparams,createthestmtandexecit*/va_start(ap,format);if(PQputvf(param,stmt,sizeof(stmt),format,ap))res=PQparamExec(conn,param,stmt,1);//resfmtisbinaryva_end(ap);/*parammustbecleared*/PQparamClear(param);returnres;}/*Example:execfwillput2intsandexecute"SELECT$1+$2"*/PGresult*res=execf(conn,"SELECT%int4+%int4",100,67);if(!res)fprintf(stderr,"*ERROR:%s\n",PQgeterror());

Name

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

Reporting Bugs

       Report bugs to <libpqtypes@esilo.com>.

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.

See Also

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

libpqtypes                                            2011                                             PQputf(3)

Synopsis

#include<libpqtypes.h>intPQputf(PGparam*param,constchar*format,...);intPQputvf(PGparam*param,char*stmtBuf,size_tstmtBufLen,constchar*format,va_listap);

See Also