mirror of
https://github.com/postgres/postgres.git
synced 2025-06-07 11:02:12 +03:00
Refactor Copy{From|To}GetRoutine() to use pass-by-reference argument.
The change improves efficiency by eliminating unnecessary copying of CopyFormatOptions. The coverity also complained about inefficiencies caused by pass-by-value. Oversight in 7717f6300 and 2e4127b6d. Reported-by: Junwang Zhao <zhjwpku@gmail.com> Reported-by: Tom Lane <tgl@sss.pgh.pa.us> (per reports from coverity) Author: Sutou Kouhei <kou@clear-code.com> Reviewed-by: Junwang Zhao <zhjwpku@gmail.com> Reviewed-by: Masahiko Sawada <sawada.mshk@gmail.com> Discussion: https://postgr.es/m/CAEG8a3L6YCpPksTQMzjD_CvwDEhW3D_t=5md9BvvdOs5k+TA=Q@mail.gmail.com
This commit is contained in:
parent
0b2a45a5d1
commit
bacbc4863b
@ -153,11 +153,11 @@ static const CopyFromRoutine CopyFromRoutineBinary = {
|
|||||||
|
|
||||||
/* Return a COPY FROM routine for the given options */
|
/* Return a COPY FROM routine for the given options */
|
||||||
static const CopyFromRoutine *
|
static const CopyFromRoutine *
|
||||||
CopyFromGetRoutine(CopyFormatOptions opts)
|
CopyFromGetRoutine(const CopyFormatOptions *opts)
|
||||||
{
|
{
|
||||||
if (opts.csv_mode)
|
if (opts->csv_mode)
|
||||||
return &CopyFromRoutineCSV;
|
return &CopyFromRoutineCSV;
|
||||||
else if (opts.binary)
|
else if (opts->binary)
|
||||||
return &CopyFromRoutineBinary;
|
return &CopyFromRoutineBinary;
|
||||||
|
|
||||||
/* default is text */
|
/* default is text */
|
||||||
@ -1574,7 +1574,7 @@ BeginCopyFrom(ParseState *pstate,
|
|||||||
ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
|
ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
|
||||||
|
|
||||||
/* Set the format routine */
|
/* Set the format routine */
|
||||||
cstate->routine = CopyFromGetRoutine(cstate->opts);
|
cstate->routine = CopyFromGetRoutine(&cstate->opts);
|
||||||
|
|
||||||
/* Process the target relation */
|
/* Process the target relation */
|
||||||
cstate->rel = rel;
|
cstate->rel = rel;
|
||||||
|
@ -174,11 +174,11 @@ static const CopyToRoutine CopyToRoutineBinary = {
|
|||||||
|
|
||||||
/* Return a COPY TO routine for the given options */
|
/* Return a COPY TO routine for the given options */
|
||||||
static const CopyToRoutine *
|
static const CopyToRoutine *
|
||||||
CopyToGetRoutine(CopyFormatOptions opts)
|
CopyToGetRoutine(const CopyFormatOptions *opts)
|
||||||
{
|
{
|
||||||
if (opts.csv_mode)
|
if (opts->csv_mode)
|
||||||
return &CopyToRoutineCSV;
|
return &CopyToRoutineCSV;
|
||||||
else if (opts.binary)
|
else if (opts->binary)
|
||||||
return &CopyToRoutineBinary;
|
return &CopyToRoutineBinary;
|
||||||
|
|
||||||
/* default is text */
|
/* default is text */
|
||||||
@ -700,7 +700,7 @@ BeginCopyTo(ParseState *pstate,
|
|||||||
ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
|
ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
|
||||||
|
|
||||||
/* Set format routine */
|
/* Set format routine */
|
||||||
cstate->routine = CopyToGetRoutine(cstate->opts);
|
cstate->routine = CopyToGetRoutine(&cstate->opts);
|
||||||
|
|
||||||
/* Process the source/target relation or query */
|
/* Process the source/target relation or query */
|
||||||
if (rel)
|
if (rel)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user