--- a/src/evsql/util.c Thu Oct 16 22:04:53 2008 +0300
+++ b/src/evsql/util.c Thu Oct 16 22:56:29 2008 +0300
@@ -64,7 +64,7 @@
}
}
-int evsql_result_binary (const struct evsql_result_info *res, size_t row, size_t col, const char **ptr, size_t size, int nullok) {
+int evsql_result_buf (const struct evsql_result_info *res, size_t row, size_t col, const char **ptr, size_t *size, int nullok) {
*ptr = NULL;
switch (res->evsql->type) {
@@ -79,10 +79,8 @@
if (PQfformat(res->result.pq, col) != 1)
ERROR("[%zu:%zu] PQfformat is not binary: %d", row, col, PQfformat(res->result.pq, col));
- if (size && PQgetlength(res->result.pq, row, col) != size)
- ERROR("[%zu:%zu] field size mismatch: %zu -> %d", row, col, size, PQgetlength(res->result.pq, row, col));
-
- *ptr = PQgetvalue(res->result.pq, row, col);
+ *size = PQgetlength(res->result.pq, row, col);
+ *ptr = PQgetvalue(res->result.pq, row, col);
return 0;
@@ -94,6 +92,21 @@
return -1;
}
+int evsql_result_binary (const struct evsql_result_info *res, size_t row, size_t col, const char **ptr, size_t size, int nullok) {
+ size_t real_size;
+
+ if (evsql_result_buf(res, row, col, ptr, &real_size, nullok))
+ goto error;
+
+ if (size && real_size != size)
+ ERROR("[%zu:%zu] field size mismatch: %zu -> %zu", row, col, size, real_size);
+
+ return 0;
+
+error:
+ return -1;
+}
+
int evsql_result_string (const struct evsql_result_info *res, size_t row, size_t col, const char **ptr, int nullok) {
return evsql_result_binary(res, row, col, ptr, 0, nullok);
}