diff options
Diffstat (limited to 'src/backend/commands/copyfromparse.c')
-rw-r--r-- | src/backend/commands/copyfromparse.c | 24 |
1 files changed, 8 insertions, 16 deletions
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c index 7cacd0b752c..906756362e9 100644 --- a/src/backend/commands/copyfromparse.c +++ b/src/backend/commands/copyfromparse.c @@ -25,10 +25,10 @@ * is copied into 'line_buf', with quotes and escape characters still * intact. * - * 4. CopyReadAttributesText/CSV() function takes the input line from - * 'line_buf', and splits it into fields, unescaping the data as required. - * The fields are stored in 'attribute_buf', and 'raw_fields' array holds - * pointers to each field. + * 4. CopyReadAttributesText/CSV() function (via copy_read_attribute) takes + * the input line from 'line_buf', and splits it into fields, unescaping + * the data as required. The fields are stored in 'attribute_buf', and + * 'raw_fields' array holds pointers to each field. * * If encoding conversion is not required, a shortcut is taken in step 2 to * avoid copying the data unnecessarily. The 'input_buf' pointer is set to @@ -152,8 +152,6 @@ static const char BinarySignature[11] = "PGCOPY\n\377\r\n\0"; /* non-export function prototypes */ static bool CopyReadLine(CopyFromState cstate); static bool CopyReadLineText(CopyFromState cstate); -static int CopyReadAttributesText(CopyFromState cstate); -static int CopyReadAttributesCSV(CopyFromState cstate); static Datum CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo, Oid typioparam, int32 typmod, bool *isnull); @@ -775,10 +773,7 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields) { int fldnum; - if (cstate->opts.csv_mode) - fldct = CopyReadAttributesCSV(cstate); - else - fldct = CopyReadAttributesText(cstate); + fldct = cstate->copy_read_attributes(cstate); if (fldct != list_length(cstate->attnumlist)) ereport(ERROR, @@ -830,10 +825,7 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields) return false; /* Parse the line into de-escaped field values */ - if (cstate->opts.csv_mode) - fldct = CopyReadAttributesCSV(cstate); - else - fldct = CopyReadAttributesText(cstate); + fldct = cstate->copy_read_attributes(cstate); *fields = cstate->raw_fields; *nfields = fldct; @@ -1502,7 +1494,7 @@ GetDecimalFromHex(char hex) * * The return value is the number of fields actually read. */ -static int +int CopyReadAttributesText(CopyFromState cstate) { char delimc = cstate->opts.delim[0]; @@ -1756,7 +1748,7 @@ CopyReadAttributesText(CopyFromState cstate) * CopyReadAttributesText, except we parse the fields according to * "standard" (i.e. common) CSV usage. */ -static int +int CopyReadAttributesCSV(CopyFromState cstate) { char delimc = cstate->opts.delim[0]; |