From dc7d66fa04154148f4a1b7e095cb2b6a265815ac Mon Sep 17 00:00:00 2001 From: xushukun Date: Thu, 5 Sep 2024 07:40:43 +0000 Subject: [PATCH] =?UTF-8?q?=E3=80=90CMIT=E3=80=91gsql=20core=20when=20exec?= =?UTF-8?q?ute=20copy=20with=20header?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/bin/psql/copy.cpp | 10 +++++----- src/test/regress/expected/copy2.out | 10 ++++++++++ src/test/regress/sql/copy2.sql | 9 +++++++++ 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/bin/psql/copy.cpp b/src/bin/psql/copy.cpp index 401616cc99..2c52063fd3 100644 --- a/src/bin/psql/copy.cpp +++ b/src/bin/psql/copy.cpp @@ -226,12 +226,12 @@ static bool ParseParallelOption(struct copy_options* result, char** errToken) xstrcat(&result->after_tofrom, token); token = strtokx(nullptr, whitespace, ",()", NULL, 0, false, false, pset.encoding); - if (pg_strcasecmp(token, "true") == 0 || pg_strcasecmp(token, "on") == 0) { - result->hasHeader = true; - xstrcat(&result->after_tofrom, " false"); - } else { + if (token != nullptr) { + bool res = (pg_strcasecmp(token, "true") == 0 || pg_strcasecmp(token, "on") == 0); + result->hasHeader = (result->hasHeader || res); + const char *resToken = res ? "false" : token; xstrcat(&result->after_tofrom, " "); - xstrcat(&result->after_tofrom, token); + xstrcat(&result->after_tofrom, resToken); } } else { xstrcat(&result->after_tofrom, " "); diff --git a/src/test/regress/expected/copy2.out b/src/test/regress/expected/copy2.out index 68f2fdb3b2..cb87764270 100644 --- a/src/test/regress/expected/copy2.out +++ b/src/test/regress/expected/copy2.out @@ -363,3 +363,13 @@ drop trigger insert_measurement_trigger on measurement; drop function measurement_insert_trigger; drop table measurement; drop table measurement_movement; +create table copy_header_src (c1 int); +create table copy_header_dest (c1 int); +insert into copy_header_src select generate_series(1,10); +\copy copy_header_src to '~/copy_header_src.csv' with csv header; +\copy copy_header_dest from '~/copy_header_src.csv' with csv header'on'; +ERROR: syntax error at or near "'on'" +LINE 1: COPY copy_header_dest FROM STDIN csv header'on'; + ^ +drop table copy_header_src; +drop table copy_header_dest; diff --git a/src/test/regress/sql/copy2.sql b/src/test/regress/sql/copy2.sql index df3ad4292b..b77eba045f 100644 --- a/src/test/regress/sql/copy2.sql +++ b/src/test/regress/sql/copy2.sql @@ -271,3 +271,12 @@ drop trigger insert_measurement_trigger on measurement; drop function measurement_insert_trigger; drop table measurement; drop table measurement_movement; + +create table copy_header_src (c1 int); +create table copy_header_dest (c1 int); +insert into copy_header_src select generate_series(1,10); +\copy copy_header_src to '~/copy_header_src.csv' with csv header; +\copy copy_header_dest from '~/copy_header_src.csv' with csv header'on'; + +drop table copy_header_src; +drop table copy_header_dest; -- Gitee