PQexecParams

ilejn
Дата: 20.09.2004 13:55:29
Не встречался ли кому-нибудь продвинутый пример использования
PQexecParams (как минимум, не предполагающий передачи всех параметров как текстовых)?

Спасибо.

С уважением,
Илья Гольштейн.
Carrie
Дата: 21.09.2004 05:37:08
Прямо из своего кода.
PGresult *res;
const char *paramValues[] = { ts_start, ts_stop, blob };
int paramFormats[] = { 0, 0, 1 };
int paramLengths[] = { 0, 0, blob_size };

res = PQexecParams(conn, "INSERT INTO traffic_bin (ts_start, ts_stop, ts_dblog, int_version, blb_traffic) VALUES ($1, $2, NOW(), "VERSION", $3);", 3, NULL, paramValues, paramLengths, paramFormats, 1);
ilejn
Дата: 21.09.2004 10:20:39
Carrie
Прямо из своего кода.
PGresult *res;
const char *paramValues[] = { ts_start, ts_stop, blob };
int paramFormats[] = { 0, 0, 1 };
int paramLengths[] = { 0, 0, blob_size };

res = PQexecParams(conn, "INSERT INTO traffic_bin (ts_start, ts_stop, ts_dblog, int_version, blb_traffic) VALUES ($1, $2, NOW(), "VERSION", $3);", 3, NULL, paramValues, paramLengths, paramFormats, 1);

Большое спасибо.

Интересное кино - у тебя в передаваемых значениях нет явного указания на то, что blob это blob, да и указатель на массив типов у тебя null. Я думаю, что это работает именно из-за специфики типа. А поместить в базу, скажем, float так можно?

float fval;
const char *paramValues[] = { (char*)&fval };
int paramFormats[] = { 1 };
int paramLengths[] = { sizeof(float) };
res = PQexecParams(conn, "INSERT INTO AAA (F1) VALUES ($1)", 1, NULL, paramValues, paramLengths, paramFormats, 1);

если F1 имеет тип, скажем, NUMERIC(10,5)

Очень извиняюсь, что задаю такой вопрос вместо того, чтобы попробовать самому, но у меня еще environment не созрел.

Еще раз спасибо.
Carrie
Дата: 22.09.2004 06:21:43
Понятия не имею. Но мне кажется твой код должен сработать: информация о типах по крайней мере здесь ему не нужна.
Вообще, в свое время, когда я писал свой кусок, мне пришлось стягивать исходники постгреса и искать в нем реализацию PQexecParams, чтобы понять как ее юзать. Ну уж очень скудная дока по libpq.