PQsetvalue.patch
text/x-patch
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: unified
| File | + | − |
|---|---|---|
| src/interfaces/libpq/fe-exec.c | 13 | 26 |
diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c
index 83c5ea3..9f013ed 100644
--- a/src/interfaces/libpq/fe-exec.c
+++ b/src/interfaces/libpq/fe-exec.c
@@ -424,28 +424,8 @@ PQsetvalue(PGresult *res, int tup_num, int field_num, char *value, int len)
if (tup_num < 0 || tup_num > res->ntups)
return FALSE;
- /* need to grow the tuple table? */
- if (res->ntups >= res->tupArrSize)
- {
- int n = res->tupArrSize ? res->tupArrSize * 2 : 128;
- PGresAttValue **tups;
-
- if (res->tuples)
- tups = (PGresAttValue **) realloc(res->tuples, n * sizeof(PGresAttValue *));
- else
- tups = (PGresAttValue **) malloc(n * sizeof(PGresAttValue *));
-
- if (!tups)
- return FALSE;
-
- memset(tups + res->tupArrSize, 0,
- (n - res->tupArrSize) * sizeof(PGresAttValue *));
- res->tuples = tups;
- res->tupArrSize = n;
- }
-
- /* need to allocate a new tuple? */
- if (tup_num == res->ntups && !res->tuples[tup_num])
+ /* need to allocate a new tuple. */
+ if (tup_num == res->ntups)
{
PGresAttValue *tup;
int i;
@@ -457,6 +437,12 @@ PQsetvalue(PGresult *res, int tup_num, int field_num, char *value, int len)
if (!tup)
return FALSE;
+ if (!pqAddTuple(res, tup))
+ {
+ free(tup);
+ return FALSE;
+ }
+
/* initialize each column to NULL */
for (i = 0; i < res->numAttributes; i++)
{
@@ -464,11 +450,12 @@ PQsetvalue(PGresult *res, int tup_num, int field_num, char *value, int len)
tup[i].value = res->null_field;
}
- res->tuples[tup_num] = tup;
- res->ntups++;
+ attval = &tup[tup_num][field_num];
+ }
+ else
+ {
+ attval = &res->tuples[tup_num][field_num];
}
-
- attval = &res->tuples[tup_num][field_num];
/* treat either NULL_LEN or NULL value pointer as a NULL field */
if (len == NULL_LEN || value == NULL)