v8-0009-change-CopyToGetFormat-to-CopyToSendCopyBegin-and.patch
application/octet-stream
Filename: v8-0009-change-CopyToGetFormat-to-CopyToSendCopyBegin-and.patch
Type: application/octet-stream
Part: 8
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: format-patch
Series: patch v8-0009
Subject: change CopyToGetFormat to CopyToSendCopyBegin and export more api
| File | + | − |
|---|---|---|
| src/backend/commands/copyto.c | 35 | 30 |
| src/include/commands/copyapi.h | 8 | 4 |
| src/test/modules/test_copy_format/test_copy_format.c | 3 | 4 |
From f0a8151feff44823881c3c4e1e7aca4f9bd690d5 Mon Sep 17 00:00:00 2001
From: Zhao Junwang <zhjwpku@gmail.com>
Date: Sat, 27 Jan 2024 09:53:31 +0800
Subject: [PATCH v8 09/10] change CopyToGetFormat to CopyToSendCopyBegin and
export more api
Signed-off-by: Zhao Junwang <zhjwpku@gmail.com>
---
src/backend/commands/copyto.c | 65 ++++++++++---------
src/include/commands/copyapi.h | 12 ++--
.../test_copy_format/test_copy_format.c | 7 +-
3 files changed, 46 insertions(+), 38 deletions(-)
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index b5d8678394..e2a4964015 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -66,11 +66,6 @@ static void CopyAttributeOutCSV(CopyToState cstate, const char *string,
/* Low-level communications functions */
static void SendCopyBegin(CopyToState cstate);
static void SendCopyEnd(CopyToState cstate);
-static void CopySendData(CopyToState cstate, const void *databuf, int datasize);
-static void CopySendString(CopyToState cstate, const char *str);
-static void CopySendChar(CopyToState cstate, char c);
-static void CopySendInt32(CopyToState cstate, int32 val);
-static void CopySendInt16(CopyToState cstate, int16 val);
/*
* CopyToRoutine implementations.
@@ -90,10 +85,20 @@ CopyToTextProcessOption(CopyToState cstate, DefElem *defel)
return false;
}
-static int16
-CopyToTextGetFormat(CopyToState cstate)
+static void
+CopyToTextSendCopyBegin(CopyToState cstate)
{
- return 0;
+ StringInfoData buf;
+ int natts = list_length(cstate->attnumlist);
+ int16 format = 0;
+ int i;
+
+ pq_beginmessage(&buf, PqMsg_CopyOutResponse);
+ pq_sendbyte(&buf, format); /* overall format */
+ pq_sendint16(&buf, natts);
+ for (i = 0; i < natts; i++)
+ pq_sendint16(&buf, format); /* per-column formats */
+ pq_endmessage(&buf);
}
static void
@@ -230,10 +235,20 @@ CopyToBinaryProcessOption(CopyToState cstate, DefElem *defel)
return false;
}
-static int16
-CopyToBinaryGetFormat(CopyToState cstate)
+static void
+CopyToBinarySendCopyBegin(CopyToState cstate)
{
- return 1;
+ StringInfoData buf;
+ int natts = list_length(cstate->attnumlist);
+ int16 format = 1;
+ int i;
+
+ pq_beginmessage(&buf, PqMsg_CopyOutResponse);
+ pq_sendbyte(&buf, format); /* overall format */
+ pq_sendint16(&buf, natts);
+ for (i = 0; i < natts; i++)
+ pq_sendint16(&buf, format); /* per-column formats */
+ pq_endmessage(&buf);
}
static void
@@ -315,7 +330,7 @@ CopyToBinaryEnd(CopyToState cstate)
CopyToRoutine CopyToRoutineText = {
.CopyToProcessOption = CopyToTextProcessOption,
- .CopyToGetFormat = CopyToTextGetFormat,
+ .CopyToSendCopyBegin = CopyToTextSendCopyBegin,
.CopyToStart = CopyToTextStart,
.CopyToOneRow = CopyToTextOneRow,
.CopyToEnd = CopyToTextEnd,
@@ -328,7 +343,7 @@ CopyToRoutine CopyToRoutineText = {
*/
CopyToRoutine CopyToRoutineCSV = {
.CopyToProcessOption = CopyToTextProcessOption,
- .CopyToGetFormat = CopyToTextGetFormat,
+ .CopyToSendCopyBegin = CopyToTextSendCopyBegin,
.CopyToStart = CopyToTextStart,
.CopyToOneRow = CopyToTextOneRow,
.CopyToEnd = CopyToTextEnd,
@@ -336,7 +351,7 @@ CopyToRoutine CopyToRoutineCSV = {
CopyToRoutine CopyToRoutineBinary = {
.CopyToProcessOption = CopyToBinaryProcessOption,
- .CopyToGetFormat = CopyToBinaryGetFormat,
+ .CopyToSendCopyBegin = CopyToBinarySendCopyBegin,
.CopyToStart = CopyToBinaryStart,
.CopyToOneRow = CopyToBinaryOneRow,
.CopyToEnd = CopyToBinaryEnd,
@@ -349,17 +364,7 @@ CopyToRoutine CopyToRoutineBinary = {
static void
SendCopyBegin(CopyToState cstate)
{
- StringInfoData buf;
- int natts = list_length(cstate->attnumlist);
- int16 format = cstate->opts.to_routine->CopyToGetFormat(cstate);
- int i;
-
- pq_beginmessage(&buf, PqMsg_CopyOutResponse);
- pq_sendbyte(&buf, format); /* overall format */
- pq_sendint16(&buf, natts);
- for (i = 0; i < natts; i++)
- pq_sendint16(&buf, format); /* per-column formats */
- pq_endmessage(&buf);
+ cstate->opts.to_routine->CopyToSendCopyBegin(cstate);
cstate->copy_dest = COPY_DEST_FRONTEND;
}
@@ -382,19 +387,19 @@ SendCopyEnd(CopyToState cstate)
* NB: no data conversion is applied by these functions
*----------
*/
-static void
+void
CopySendData(CopyToState cstate, const void *databuf, int datasize)
{
appendBinaryStringInfo(cstate->fe_msgbuf, databuf, datasize);
}
-static void
+void
CopySendString(CopyToState cstate, const char *str)
{
appendBinaryStringInfo(cstate->fe_msgbuf, str, strlen(str));
}
-static void
+void
CopySendChar(CopyToState cstate, char c)
{
appendStringInfoCharMacro(cstate->fe_msgbuf, c);
@@ -464,7 +469,7 @@ CopyToStateFlush(CopyToState cstate)
/*
* CopySendInt32 sends an int32 in network byte order
*/
-static inline void
+inline void
CopySendInt32(CopyToState cstate, int32 val)
{
uint32 buf;
@@ -476,7 +481,7 @@ CopySendInt32(CopyToState cstate, int32 val)
/*
* CopySendInt16 sends an int16 in network byte order
*/
-static inline void
+inline void
CopySendInt16(CopyToState cstate, int16 val)
{
uint16 buf;
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 22accc83ab..0a05b24c54 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -67,7 +67,7 @@ extern CopyFromRoutine CopyFromRoutineBinary;
typedef struct CopyToStateData *CopyToState;
typedef bool (*CopyToProcessOption_function) (CopyToState cstate, DefElem *defel);
-typedef int16 (*CopyToGetFormat_function) (CopyToState cstate);
+typedef void (*CopyToSendCopyBegin_function) (CopyToState cstate);
typedef void (*CopyToStart_function) (CopyToState cstate, TupleDesc tupDesc);
typedef void (*CopyToOneRow_function) (CopyToState cstate, TupleTableSlot *slot);
typedef void (*CopyToEnd_function) (CopyToState cstate);
@@ -84,10 +84,9 @@ typedef struct CopyToRoutine
CopyToProcessOption_function CopyToProcessOption;
/*
- * Called when COPY TO is started. This will return a format as int16
- * value. It's used for the CopyOutResponse message.
+ * Called when COPY TO is started.
*/
- CopyToGetFormat_function CopyToGetFormat;
+ CopyToSendCopyBegin_function CopyToSendCopyBegin;
/* Called when COPY TO is started. This will send a header. */
CopyToStart_function CopyToStart;
@@ -384,6 +383,11 @@ typedef struct CopyToStateData
void *opaque; /* private space */
} CopyToStateData;
+extern void CopySendData(CopyToState cstate, const void *databuf, int datasize);
+extern void CopySendString(CopyToState cstate, const char *str);
+extern void CopySendChar(CopyToState cstate, char c);
+extern void CopySendInt32(CopyToState cstate, int32 val);
+extern void CopySendInt16(CopyToState cstate, int16 val);
extern void CopyToStateFlush(CopyToState cstate);
#endif /* COPYAPI_H */
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
index 5e1b40e881..d833f22bbf 100644
--- a/src/test/modules/test_copy_format/test_copy_format.c
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -71,11 +71,10 @@ CopyToProcessOption(CopyToState cstate, DefElem *defel)
return true;
}
-static int16
-CopyToGetFormat(CopyToState cstate)
+static void
+CopyToSendCopyBegin(CopyToState cstate)
{
ereport(NOTICE, (errmsg("CopyToGetFormat")));
- return 0;
}
static void
@@ -99,7 +98,7 @@ CopyToEnd(CopyToState cstate)
static const CopyToRoutine CopyToRoutineTestCopyFormat = {
.type = T_CopyToRoutine,
.CopyToProcessOption = CopyToProcessOption,
- .CopyToGetFormat = CopyToGetFormat,
+ .CopyToSendCopyBegin = CopyToSendCopyBegin,
.CopyToStart = CopyToStart,
.CopyToOneRow = CopyToOneRow,
.CopyToEnd = CopyToEnd,
--
2.41.0