From e6c2e8cb87846161033e1f215876c4b95f631df0 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Wed, 2 May 2012 21:09:03 +0300
Subject: [PATCH] PL/Python: Improve test coverage

Add test cases for inline handler of plython2u (when using that
language name), and for result object element assignment.  There is
now at least one test case for every top-level functionality, except
plpy.Fatal (annoying to use in regression tests) and result object
slice retrieval and slice assignment (which are somewhat broken).
---
 src/pl/plpython/expected/plpython_do.out  |  3 +++
 src/pl/plpython/expected/plpython_spi.out | 20 ++++++++++++++++++++
 src/pl/plpython/sql/plpython_do.sql       |  2 ++
 src/pl/plpython/sql/plpython_spi.sql      | 15 +++++++++++++++
 4 files changed, 40 insertions(+)

diff --git a/src/pl/plpython/expected/plpython_do.out b/src/pl/plpython/expected/plpython_do.out
index 41b7a511387..d979cf811c7 100644
--- a/src/pl/plpython/expected/plpython_do.out
+++ b/src/pl/plpython/expected/plpython_do.out
@@ -1,6 +1,9 @@
 DO $$ plpy.notice("This is plpythonu.") $$ LANGUAGE plpythonu;
 NOTICE:  This is plpythonu.
 CONTEXT:  PL/Python anonymous code block
+DO $$ plpy.notice("This is plpython2u.") $$ LANGUAGE plpython2u;
+NOTICE:  This is plpython2u.
+CONTEXT:  PL/Python anonymous code block
 DO $$ nonsense $$ LANGUAGE plpythonu;
 ERROR:  NameError: global name 'nonsense' is not defined
 CONTEXT:  Traceback (most recent call last):
diff --git a/src/pl/plpython/expected/plpython_spi.out b/src/pl/plpython/expected/plpython_spi.out
index 631a1a44255..671c24e33f7 100644
--- a/src/pl/plpython/expected/plpython_spi.out
+++ b/src/pl/plpython/expected/plpython_spi.out
@@ -1,3 +1,23 @@
+--
+-- result objects
+--
+CREATE FUNCTION test_resultobject_access() RETURNS void
+AS $$
+rv = plpy.execute("SELECT fname, lname, username FROM users ORDER BY username")
+plpy.info([row for row in rv])
+rv[1] = dict([(k, v*2) for (k, v) in rv[1].items()])
+plpy.info([row for row in rv])
+$$ LANGUAGE plpythonu;
+SELECT test_resultobject_access();
+INFO:  [{'lname': 'doe', 'username': 'j_doe', 'fname': 'jane'}, {'lname': 'doe', 'username': 'johnd', 'fname': 'john'}, {'lname': 'smith', 'username': 'slash', 'fname': 'rick'}, {'lname': 'doe', 'username': 'w_doe', 'fname': 'willem'}]
+CONTEXT:  PL/Python function "test_resultobject_access"
+INFO:  [{'lname': 'doe', 'username': 'j_doe', 'fname': 'jane'}, {'lname': 'doedoe', 'username': 'johndjohnd', 'fname': 'johnjohn'}, {'lname': 'smith', 'username': 'slash', 'fname': 'rick'}, {'lname': 'doe', 'username': 'w_doe', 'fname': 'willem'}]
+CONTEXT:  PL/Python function "test_resultobject_access"
+ test_resultobject_access 
+--------------------------
+ 
+(1 row)
+
 --
 -- nested calls
 --
diff --git a/src/pl/plpython/sql/plpython_do.sql b/src/pl/plpython/sql/plpython_do.sql
index 8596c39d37a..beb443f95d1 100644
--- a/src/pl/plpython/sql/plpython_do.sql
+++ b/src/pl/plpython/sql/plpython_do.sql
@@ -1,3 +1,5 @@
 DO $$ plpy.notice("This is plpythonu.") $$ LANGUAGE plpythonu;
 
+DO $$ plpy.notice("This is plpython2u.") $$ LANGUAGE plpython2u;
+
 DO $$ nonsense $$ LANGUAGE plpythonu;
diff --git a/src/pl/plpython/sql/plpython_spi.sql b/src/pl/plpython/sql/plpython_spi.sql
index ce218e93b6d..7be2fbff716 100644
--- a/src/pl/plpython/sql/plpython_spi.sql
+++ b/src/pl/plpython/sql/plpython_spi.sql
@@ -1,3 +1,18 @@
+--
+-- result objects
+--
+
+CREATE FUNCTION test_resultobject_access() RETURNS void
+AS $$
+rv = plpy.execute("SELECT fname, lname, username FROM users ORDER BY username")
+plpy.info([row for row in rv])
+rv[1] = dict([(k, v*2) for (k, v) in rv[1].items()])
+plpy.info([row for row in rv])
+$$ LANGUAGE plpythonu;
+
+SELECT test_resultobject_access();
+
+
 --
 -- nested calls
 --
-- 
GitLab