Обсуждение: leaving out paramTypes parameter

Поиск
Список
Период
Сортировка

leaving out paramTypes parameter

От
Andro
Дата:
Hi,

from the documentation, here's PQexecParams prototype

PGresult *PQexecParams(PGconn *conn,                      const char *command,                      int nParams,
             const Oid *paramTypes,                      const char * const *paramValues,                      const
int*paramLengths,                      const int *paramFormats,                      int resultFormat);
 

and PQprepare's

PGresult *PQprepare(PGconn *conn,                   const char *stmtName,                   const char *query,
        int nParams,                   const Oid *paramTypes);
 

they both require "paramTypes" parameter, but documentation says "If
paramTypes is NULL, or any particular element in the array is zero,
the server assigns a data type to the parameter symbol in the same way
it would do for an untyped literal string."

How reliable is that? Can we really leave out this parameter anytime?
What are known issues? Or should we try at all costs to specify
parameters type?

Thanks

Charles


Re: leaving out paramTypes parameter

От
Tom Lane
Дата:
Andro <andromede@gmail.com> writes:
> they both require "paramTypes" parameter, but documentation says "If
> paramTypes is NULL, or any particular element in the array is zero,
> the server assigns a data type to the parameter symbol in the same way
> it would do for an untyped literal string."

> How reliable is that? Can we really leave out this parameter anytime?

Like it says, you get the same results you would get from writing a
literal string 'foo' where the parameter symbol is.  If you like,
you can force the type decision with a cast in the query text, eg
"SELECT ... WHERE x = $1::int8 ... "

In some ways this is better than using paramTypes because you don't
have to mess with numeric OIDs for data types.
        regards, tom lane