diff --git a/src/bin/psql/copy.c b/src/bin/psql/copy.c index eb205ecbc279e5f711f46f78a244ef48fd2a929a..a3f22c3c14c4b4ca763564acca25a3d9d1413900 100644 --- a/src/bin/psql/copy.c +++ b/src/bin/psql/copy.c @@ -3,7 +3,7 @@ * * Copyright (c) 2000-2007, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/bin/psql/copy.c,v 1.74 2007/02/08 11:10:27 petere Exp $ + * $PostgreSQL: pgsql/src/bin/psql/copy.c,v 1.75 2007/03/16 13:41:21 adunstan Exp $ */ #include "postgres_fe.h" #include "copy.h" @@ -35,21 +35,19 @@ * parse_slash_copy * -- parses \copy command line * - * The documented preferred syntax is: + * The documented syntax is: * \copy tablename [(columnlist)] from|to filename * [ with ] [ binary ] [ oids ] [ delimiter [as] char ] [ null [as] string ] + * [ csv [ header ] [ quote [ AS ] string ] escape [as] string + * [ force not null column [, ...] | force quote column [, ...] ] ] * * \copy ( select stmt ) to filename * [ with ] [ binary ] [ delimiter [as] char ] [ null [as] string ] + * [ csv [ header ] [ quote [ AS ] string ] escape [as] string + * [ force quote column [, ...] ] ] * - * The pre-7.3 syntax was: - * \copy [ binary ] tablename [(columnlist)] [with oids] from|to filename - * [ [using] delimiters char ] [ with null as string ] - * - * The actual accepted syntax is a rather unholy combination of these, - * plus some undocumented flexibility (for instance, the clauses after - * WITH can appear in any order). The accepted syntax matches what - * the backend grammar actually accepts (see backend/parser/gram.y). + * Force quote only applies for copy to; force not null only applies for + * copy from. * * table name can be double-quoted and can have a schema part. * column names can be double-quoted. @@ -216,23 +214,6 @@ parse_slash_copy(const char *args) goto error; } - /* - * Allows old COPY syntax for backward compatibility 2002-06-19 - */ - if (pg_strcasecmp(token, "with") == 0) - { - token = strtokx(NULL, whitespace, NULL, NULL, - 0, false, false, pset.encoding); - if (!token || pg_strcasecmp(token, "oids") != 0) - goto error; - result->oids = true; - - token = strtokx(NULL, whitespace, NULL, NULL, - 0, false, false, pset.encoding); - if (!token) - goto error; - } - if (pg_strcasecmp(token, "from") == 0) result->from = true; else if (pg_strcasecmp(token, "to") == 0) @@ -267,27 +248,6 @@ parse_slash_copy(const char *args) token = strtokx(NULL, whitespace, NULL, NULL, 0, false, false, pset.encoding); - /* - * Allows old COPY syntax for backward compatibility. - */ - if (token && pg_strcasecmp(token, "using") == 0) - { - token = strtokx(NULL, whitespace, NULL, NULL, - 0, false, false, pset.encoding); - if (!(token && pg_strcasecmp(token, "delimiters") == 0)) - goto error; - } - if (token && pg_strcasecmp(token, "delimiters") == 0) - { - token = strtokx(NULL, whitespace, NULL, "'", - nonstd_backslash, true, false, pset.encoding); - if (!token) - goto error; - result->delim = pg_strdup(token); - token = strtokx(NULL, whitespace, NULL, NULL, - 0, false, false, pset.encoding); - } - if (token) { /*