Neil Conway wrote:

Andrew Dunstan wrote:

I have just been alerted to a bug in the 8.0 handling of embedded newlines in CSV data. Basically it barfs on consecutive newlines. The attached patch for 8.0 appears to fix it. The bug isn't present in the HEAD branch, and I'm wondering if we should not backpatch the HEAD multiline patch rather than applying this.


Is there a particular reason to backport the larger patch? As a general rule I'm inclined to apply minimally-invasive fixes to stable branches, but I don't know the code in question, so perhaps there is some reason to make an exception in this case.


Well, if I'd known we were as far away from a release as we turned out to be at the time the original multiline limitation was discovered, I would have submitted a patch for inclusion in 8.0. Never mind - hindsight doesn't help much. Just go with the tiny patch. If anyone wants the later fix it's very easy to get, because it was the first patch applied after 8.0 branched. Just dropping in the later version of copy.c should work.



Also, a regression test for this bug would be nice :)



regression patch against 8.0 branch attached.

cheers

andrew


Index: expected/copy2.out
===================================================================
RCS file: /home/cvsmirror/pgsql/src/test/regress/expected/copy2.out,v
retrieving revision 1.19.4.1
diff -c -r1.19.4.1 copy2.out
*** expected/copy2.out	22 Jan 2005 05:14:19 -0000	1.19.4.1
--- expected/copy2.out	12 May 2005 01:08:20 -0000
***************
*** 191,196 ****
--- 191,199 ----
  "Jackson, Sam","\\h"
  "It is \"perfect\".","	"
  "",
+ --test that we read consecutive LFs properly
+ CREATE TEMP TABLE testnl (a int, b text, c int);
+ COPY testnl FROM stdin CSV;
  DROP TABLE x, y;
  DROP FUNCTION fn_x_before();
  DROP FUNCTION fn_x_after();
Index: sql/copy2.sql
===================================================================
RCS file: /home/cvsmirror/pgsql/src/test/regress/sql/copy2.sql,v
retrieving revision 1.10.4.1
diff -c -r1.10.4.1 copy2.sql
*** sql/copy2.sql	22 Jan 2005 05:14:25 -0000	1.10.4.1
--- sql/copy2.sql	12 May 2005 01:05:12 -0000
***************
*** 129,134 ****
--- 129,145 ----
  COPY y TO stdout WITH CSV QUOTE '''' DELIMITER '|';
  COPY y TO stdout WITH CSV FORCE QUOTE col2 ESCAPE '\\';
  
+ --test that we read consecutive LFs properly
+ 
+ CREATE TEMP TABLE testnl (a int, b text, c int);
+ 
+ COPY testnl FROM stdin CSV;
+ 1,"a field with two LFs
+ 
+ inside",2
+ \.
+ 
+ 
  DROP TABLE x, y;
  DROP FUNCTION fn_x_before();
  DROP FUNCTION fn_x_after();
---------------------------(end of broadcast)---------------------------
TIP 7: don't forget to increase your free space map settings

Reply via email to