Если у меня есть заполнитель, заданный как $1::text
, означает ли это, что соответствующий paramValues
, который я передаю PQexecPrepared()
, должен быть строкой в стиле C? До сих пор я делал это таким образом, и пока это работает. (И до сих пор мне нужно было дать ::text
вместе с заполнителем, или я получаю ошибку). Но что, если я объявлю заполнитель как $1:int
? Могу ли я дать строку в стиле C в paramValues
? Должен ли дать строку в стиле C? Документы на этом немного расплывчаты и не очень ясны в отношении того, что делать с параметром paramTypes
для PQprepare()
, который я все равно оставил NULL
.
Что еще более важно, что, если мне нужно выразить массив, например $1::text[]
? Документы ничего не говорят об этом, и решения, которые я видел до сих пор, не кажутся очень эффективными или даже очень надежными, такие как https://stackoverflow.com/a/36930781/1676382. До сих пор я давал значения PQexecPrepared()
в тексте "формат, но я должен перейти на" двоичный "и в каких условиях?
До сих пор мне удавалось избавиться от нескольких довольно простых запросов:
const char *query = "SELECT * FROM table WHERE col=$1::text";
const void *types = NULL; //Wish I knew what could be assigned to an Oid
PQprepare(conn, name, query, 1, static_cast<const Oid *>(types));
...
const int *lengths = NULL; //It doesn't seem like these vars are used for anything right now
const int *formats = NULL;
int result_format = 0;
//values is a const char * const * and is the return value of QScopedArrayPointer <char*>::data()
res = PQexecPrepared(conn, name, 1, values, lengths, formats, result_format);
Пока что это работает, но что, если бы я хотел получить
WHERE col = ANY ($1::text[])
? Как бы я выразил values
, который передается в PQexecPrepared()
?
Мой проект в GNU C ++ с использованием PostgreSQL 9.6.