1
0
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:
Masahiko Sawada 2025-03-04 10:38:41 -08:00
parent 0b2a45a5d1
commit bacbc4863b
2 changed files with 8 additions and 8 deletions

View File

@ -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;

View File

@ -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)