diff --git a/src/pl/plpython/feature.expected b/src/pl/plpython/feature.expected index 351bee017ce038fb773a4301fc4faf3133b7f1ad..90d161422c53db36208de6c73db68beef3e85c0e 100644 --- a/src/pl/plpython/feature.expected +++ b/src/pl/plpython/feature.expected @@ -137,3 +137,21 @@ SELECT join_sequences(sequences) FROM sequences ---------------- (0 rows) +SELECT newline_lf(); + newline_lf +------------ + 123 +(1 row) + +SELECT newline_cr(); + newline_cr +------------ + 123 +(1 row) + +SELECT newline_crlf(); + newline_crlf +-------------- + 123 +(1 row) + diff --git a/src/pl/plpython/plpython.c b/src/pl/plpython/plpython.c index 5f5b36b0a5062c0bf727da7b98e19a810a871f0c..431396d20d25f4b52c7959d4caab22b206b0fe75 100644 --- a/src/pl/plpython/plpython.c +++ b/src/pl/plpython/plpython.c @@ -29,7 +29,7 @@ * MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. * * IDENTIFICATION - * $PostgreSQL: pgsql/src/pl/plpython/plpython.c,v 1.58 2004/12/17 02:14:48 tgl Exp $ + * $PostgreSQL: pgsql/src/pl/plpython/plpython.c,v 1.59 2005/03/24 17:22:34 tgl Exp $ * ********************************************************************* */ @@ -1206,10 +1206,14 @@ PLy_procedure_munge_source(const char *name, const char *src) while (*sp != '\0') { - if (*sp == '\n') + if (*sp == '\r' && *(sp + 1) == '\n') + sp++; + + if (*sp == '\n' || *sp == '\r') { - *mp++ = *sp++; + *mp++ = '\n'; *mp++ = '\t'; + sp++; } else *mp++ = *sp++; diff --git a/src/pl/plpython/plpython_function.sql b/src/pl/plpython/plpython_function.sql index 801222f4ef8d7363817518017dbe63d362f0138f..c849c3e5b97373782523b6aea864d1382a6b510b 100644 --- a/src/pl/plpython/plpython_function.sql +++ b/src/pl/plpython/plpython_function.sql @@ -306,3 +306,19 @@ CREATE OR REPLACE FUNCTION write_file(text,text) RETURNS text AS ' open(args[0],"w").write(args[1]) return "Wrote to file: %s" % args[0] ' LANGUAGE plpythonu; + +-- +-- Universal Newline Support +-- + +CREATE OR REPLACE FUNCTION newline_lf() RETURNS integer AS +'x = 100\ny = 23\nreturn x + y\n' +LANGUAGE plpythonu; + +CREATE OR REPLACE FUNCTION newline_cr() RETURNS integer AS +'x = 100\ry = 23\rreturn x + y\r' +LANGUAGE plpythonu; + +CREATE OR REPLACE FUNCTION newline_crlf() RETURNS integer AS +'x = 100\r\ny = 23\r\nreturn x + y\r\n' +LANGUAGE plpythonu; diff --git a/src/pl/plpython/plpython_test.sql b/src/pl/plpython/plpython_test.sql index c78b4aa0c7f5f560c6c3b46624af854679ae9951..17d6b2e79225cb3de151214f642adb47bdba62f8 100644 --- a/src/pl/plpython/plpython_test.sql +++ b/src/pl/plpython/plpython_test.sql @@ -61,3 +61,10 @@ SELECT join_sequences(sequences) FROM sequences -- error in trigger -- +-- +-- Check Universal Newline Support +-- + +SELECT newline_lf(); +SELECT newline_cr(); +SELECT newline_crlf();