From f6e3313fead29b2f00f1c203061bf941a7a6d806 Mon Sep 17 00:00:00 2001
From: Andrew Dunstan <andrew@dunslane.net>
Date: Fri, 16 Mar 2007 13:41:21 +0000
Subject: [PATCH] Remove undocumented support for copy syntax from before 7.3.
 Update comments to reflect syntax actually supported, e.g. by including CSV
 params.

---
 src/bin/psql/copy.c | 56 +++++++--------------------------------------
 1 file changed, 8 insertions(+), 48 deletions(-)

diff --git a/src/bin/psql/copy.c b/src/bin/psql/copy.c
index eb205ecbc27..a3f22c3c14c 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)
 	{
 		/*
-- 
GitLab