Committed by Greg Sabino Mullane <[email protected]>

Add TODO (aka known failing) tests for setting $sth->err to 6 as specified in 
the docs.
Per RT 88332. Thanks to Christoph Lamprecht for a well designed test case.

---
 t/04misc.t |   69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 68 insertions(+), 1 deletions(-)

diff --git a/t/04misc.t b/t/04misc.t
index ec2759c..7e4e964 100644
--- a/t/04misc.t
+++ b/t/04misc.t
@@ -18,7 +18,7 @@ my $dbh = connect_database();
 if (! $dbh) {
        plan skip_all => 'Connection to database failed, cannot continue 
testing';
 }
-plan tests => 71;
+plan tests => 77;
 
 isnt ($dbh, undef, 'Connect to database for miscellaneous tests');
 
@@ -80,6 +80,73 @@ for my $flag (qw/pglibpq pgstart pgend pgprefix pglogin 
pgquote/) {
 
 SKIP: {
 
+       my $SQL = q{
+CREATE OR REPLACE FUNCTION dbdpg_test_error_handler(TEXT)
+RETURNS boolean
+LANGUAGE plpgsql
+AS $BC$
+ DECLARE
+   level ALIAS FOR $1;
+ BEGIN 
+  IF level ~* 'notice' THEN
+    RAISE NOTICE 'RAISE NOTICE FROM dbdpg_test_error_handler';
+  ELSIF level ~* 'warning' THEN
+    RAISE WARNING 'RAISE WARNING FROM dbdpg_test_error_handler';
+  ELSIF level ~* 'exception' THEN
+    RAISE EXCEPTION 'RAISE EXCEPTION FROM dbdpg_test_error_handler';
+  END IF;
+  RETURN TRUE;
+ END;
+$BC$
+};
+
+       eval {
+               $dbh->do($SQL);
+               $dbh->commit();
+       };
+       if ($@) {
+               $dbh->rollback();
+               $@ and skip ('Cannot load function  for testing', 6);
+       }
+
+       my $sth = $dbh->prepare('SELECT * FROM dbdpg_test_error_handler( ? )');
+
+       is( $sth->err, undef, q{Statement attribute 'err' is initially undef});
+
+  TODO: {
+               local $TODO = q{Known bug: notice and warnings should set err 
to 6};
+
+               for my $level (qw/notice warning/) {
+                       $sth->execute($level);
+                       is( $sth->err, 6, qq{Statement attribute 'err' set to 6 
for level $level});
+               }
+       }
+
+       $dbh->do(q{SET client_min_messages = 'FATAL'});
+
+       for my $level (qw/exception/) {
+               eval { $sth->execute($level);};
+               is( $sth->err, 7, qq{Statement attribute 'err' set to 7 for 
level $level});
+               $dbh->rollback;
+       }
+
+       for my $level (qw/normal/) {
+               $sth->execute($level);
+               is( $sth->err, undef, qq{Statement attribute 'err' set to undef 
when no notices raised});
+       }
+
+       $sth->finish;
+
+       is( $sth->err, undef, qq{Statement attribute 'err' set to undef after 
statement finishes});
+
+       $dbh->do('DROP FUNCTION dbdpg_test_error_handler(TEXT)') or die 
$dbh->errstr;
+       $dbh->do('SET client_min_messages = NOTICE');
+       $dbh->commit();
+
+}
+
+SKIP: {
+
        eval {
                require File::Temp;
        };
-- 
1.7.1

Reply via email to