From 962987a1c255f721734b14865e2c1be6da5f99ed Mon Sep 17 00:00:00 2001
From: Bruce Momjian <bruce@momjian.us>
Date: Fri, 10 Oct 2003 03:46:51 +0000
Subject: [PATCH] Add NULL regression tests.

Manfred Koizar
---
 src/test/regress/expected/copy2.out | 86 +++++++++++++++++++++++------
 src/test/regress/sql/copy2.sql      | 21 ++++++-
 2 files changed, 90 insertions(+), 17 deletions(-)

diff --git a/src/test/regress/expected/copy2.out b/src/test/regress/expected/copy2.out
index df08fcd45a6..6345969a036 100644
--- a/src/test/regress/expected/copy2.out
+++ b/src/test/regress/expected/copy2.out
@@ -2,7 +2,7 @@ CREATE TABLE x (
 	a serial,
 	b int,
 	c text not null default 'stuff',
-	d text not null,
+	d text,
 	e text
 );
 NOTICE:  CREATE TABLE will create implicit sequence "x_a_seq" for "serial" column "x.a"
@@ -48,23 +48,38 @@ ERROR:  extra data after last expected column
 CONTEXT:  COPY x, line 1: "2002	232	40	50	60	70	80"
 -- various COPY options: delimiters, oids, NULL string
 COPY x (b, c, d, e) from stdin with oids delimiter ',' null 'x';
+COPY x from stdin WITH DELIMITER AS ';' NULL AS '';
+COPY x from stdin WITH DELIMITER AS ':' NULL AS '\\X';
 -- check results of copy in
 SELECT * FROM x;
-   a   | b  |   c   |   d    |          e           
--------+----+-------+--------+----------------------
- 10000 | 21 | 31    | 41     | before trigger fired
- 10001 | 22 | 32    | 42     | before trigger fired
- 10002 | 23 | 33    | 43     | before trigger fired
- 10003 | 24 | 34    | 44     | before trigger fired
- 10004 | 25 | 35    | 45     | before trigger fired
- 10005 | 26 | 36    | 46     | before trigger fired
-     6 |    | 45    | 80     | before trigger fired
-     1 |  1 | stuff | test_1 | after trigger fired
-     2 |  2 | stuff | test_2 | after trigger fired
-     3 |  3 | stuff | test_3 | after trigger fired
-     4 |  4 | stuff | test_4 | after trigger fired
-     5 |  5 | stuff | test_5 | after trigger fired
-(12 rows)
+   a   | b  |     c      |   d    |          e           
+-------+----+------------+--------+----------------------
+  9999 |    | \N         | NN     | before trigger fired
+ 10000 | 21 | 31         | 41     | before trigger fired
+ 10001 | 22 | 32         | 42     | before trigger fired
+ 10002 | 23 | 33         | 43     | before trigger fired
+ 10003 | 24 | 34         | 44     | before trigger fired
+ 10004 | 25 | 35         | 45     | before trigger fired
+ 10005 | 26 | 36         | 46     | before trigger fired
+     6 |    | 45         | 80     | before trigger fired
+     7 |    | x          | \x     | before trigger fired
+     8 |    | ,          | \,     | before trigger fired
+  3000 |    | c          |        | before trigger fired
+  4000 |    | C          |        | before trigger fired
+  4001 |  1 | empty      |        | before trigger fired
+  4002 |  2 | null       |        | before trigger fired
+  4003 |  3 | Backslash  | \      | before trigger fired
+  4004 |  4 | BackslashX | \X     | before trigger fired
+  4005 |  5 | N          | N      | before trigger fired
+  4006 |  6 | BackslashN | \N     | before trigger fired
+  4007 |  7 | XX         | XX     | before trigger fired
+  4008 |  8 | Delimiter  | :      | before trigger fired
+     1 |  1 | stuff      | test_1 | after trigger fired
+     2 |  2 | stuff      | test_2 | after trigger fired
+     3 |  3 | stuff      | test_3 | after trigger fired
+     4 |  4 | stuff      | test_4 | after trigger fired
+     5 |  5 | stuff      | test_5 | after trigger fired
+(25 rows)
 
 -- COPY w/ oids on a table w/o oids should fail
 CREATE TABLE no_oids (
@@ -80,6 +95,7 @@ COPY no_oids TO stdout WITH OIDS;
 ERROR:  table "no_oids" does not have OIDs
 -- check copy out
 COPY x TO stdout;
+9999	\N	\\N	NN	before trigger fired
 10000	21	31	41	before trigger fired
 10001	22	32	42	before trigger fired
 10002	23	33	43	before trigger fired
@@ -87,12 +103,25 @@ COPY x TO stdout;
 10004	25	35	45	before trigger fired
 10005	26	36	46	before trigger fired
 6	\N	45	80	before trigger fired
+7	\N	x	\\x	before trigger fired
+8	\N	,	\\,	before trigger fired
+3000	\N	c	\N	before trigger fired
+4000	\N	C	\N	before trigger fired
+4001	1	empty		before trigger fired
+4002	2	null	\N	before trigger fired
+4003	3	Backslash	\\	before trigger fired
+4004	4	BackslashX	\\X	before trigger fired
+4005	5	N	N	before trigger fired
+4006	6	BackslashN	\\N	before trigger fired
+4007	7	XX	XX	before trigger fired
+4008	8	Delimiter	:	before trigger fired
 1	1	stuff	test_1	after trigger fired
 2	2	stuff	test_2	after trigger fired
 3	3	stuff	test_3	after trigger fired
 4	4	stuff	test_4	after trigger fired
 5	5	stuff	test_5	after trigger fired
 COPY x (c, e) TO stdout;
+\\N	before trigger fired
 31	before trigger fired
 32	before trigger fired
 33	before trigger fired
@@ -100,12 +129,25 @@ COPY x (c, e) TO stdout;
 35	before trigger fired
 36	before trigger fired
 45	before trigger fired
+x	before trigger fired
+,	before trigger fired
+c	before trigger fired
+C	before trigger fired
+empty	before trigger fired
+null	before trigger fired
+Backslash	before trigger fired
+BackslashX	before trigger fired
+N	before trigger fired
+BackslashN	before trigger fired
+XX	before trigger fired
+Delimiter	before trigger fired
 stuff	after trigger fired
 stuff	after trigger fired
 stuff	after trigger fired
 stuff	after trigger fired
 stuff	after trigger fired
 COPY x (b, e) TO stdout WITH NULL 'I''m null';
+I'm null	before trigger fired
 21	before trigger fired
 22	before trigger fired
 23	before trigger fired
@@ -113,6 +155,18 @@ COPY x (b, e) TO stdout WITH NULL 'I''m null';
 25	before trigger fired
 26	before trigger fired
 I'm null	before trigger fired
+I'm null	before trigger fired
+I'm null	before trigger fired
+I'm null	before trigger fired
+I'm null	before trigger fired
+1	before trigger fired
+2	before trigger fired
+3	before trigger fired
+4	before trigger fired
+5	before trigger fired
+6	before trigger fired
+7	before trigger fired
+8	before trigger fired
 1	after trigger fired
 2	after trigger fired
 3	after trigger fired
diff --git a/src/test/regress/sql/copy2.sql b/src/test/regress/sql/copy2.sql
index 72c52dba113..52d8f563e3d 100644
--- a/src/test/regress/sql/copy2.sql
+++ b/src/test/regress/sql/copy2.sql
@@ -2,7 +2,7 @@ CREATE TABLE x (
 	a serial,
 	b int,
 	c text not null default 'stuff',
-	d text not null,
+	d text,
 	e text
 );
 
@@ -27,6 +27,7 @@ CREATE TRIGGER trg_x_before BEFORE INSERT ON x
 FOR EACH ROW EXECUTE PROCEDURE fn_x_before();
 
 COPY x (a, b, c, d, e) from stdin;
+9999	\N	\\N	\NN	\N
 10000	21	31	41	51
 \.
 
@@ -74,6 +75,24 @@ COPY x from stdin;
 -- various COPY options: delimiters, oids, NULL string
 COPY x (b, c, d, e) from stdin with oids delimiter ',' null 'x';
 500000,x,45,80,90
+500001,x,\x,\\x,\\\x
+500002,x,\,,\\\,,\\
+\.
+
+COPY x from stdin WITH DELIMITER AS ';' NULL AS '';
+3000;;c;;
+\.
+
+COPY x from stdin WITH DELIMITER AS ':' NULL AS '\\X';
+4000:\X:C:\X:\X
+4001:1:empty::
+4002:2:null:\X:\X
+4003:3:Backslash:\\:\\
+4004:4:BackslashX:\\X:\\X
+4005:5:N:\N:\N
+4006:6:BackslashN:\\N:\\N
+4007:7:XX:\XX:\XX
+4008:8:Delimiter:\::\:
 \.
 
 -- check results of copy in
-- 
GitLab