20110110-ResetCopyFrom.patch
application/octet-stream
Filename: 20110110-ResetCopyFrom.patch
Type: application/octet-stream
Part: 0
Message:
Re: SQL/MED - file_fdw
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/backend/commands/copy.c | 0 | 0 |
| src/include/commands/copy.h | 0 | 0 |
diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 00139b9..fab811a 100644
*** a/src/backend/commands/copy.c
--- b/src/backend/commands/copy.c
*************** NextCopyFrom(CopyState cstate, Datum *va
*** 2415,2420 ****
--- 2415,2448 ----
}
/*
+ * Reset read pointer to the head of the file.
+ * This can't be used for COPY FROM STDIN.
+ */
+ void
+ ResetCopyFrom(CopyState cstate)
+ {
+ /* stdin can't be rewinded */
+ Assert(cstate->copy_dest == COPY_FILE);
+
+ /* rewind seek pointer to the head */
+ if (fseek(cstate->copy_file, 0, SEEK_SET))
+ ereport(ERROR,
+ (errcode_for_file_access(),
+ errmsg("could not seek in file \"%s\": %m",
+ cstate->filename)));
+ cstate->fe_eof = false;
+
+ /* reset error context */
+ cstate->cur_lineno = 0;
+ cstate->cur_attname = NULL;
+ cstate->cur_attval = NULL;
+
+ /* just clear the line buffer to avoid re-allocation */
+ resetStringInfo(&cstate->line_buf);
+ }
+
+
+ /*
* Clean up storage and release resources for COPY FROM.
*/
void
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 8340e3d..424d170 100644
*** a/src/include/commands/copy.h
--- b/src/include/commands/copy.h
*************** extern CopyState BeginCopyFrom(Relation
*** 28,33 ****
--- 28,34 ----
extern void EndCopyFrom(CopyState cstate);
extern bool NextCopyFrom(CopyState cstate,
Datum *values, bool *nulls, Oid *tupleOid);
+ extern void ResetCopyFrom(CopyState cstate);
extern void CopyFromErrorCallback(void *arg);
extern DestReceiver *CreateCopyDestReceiver(void);