[svn:DBD-Pg] r14775 - DBD-Pg/trunk

[email protected]
Newsgroups gmane.comp.db.postgresql.dbdpg.cvs
Message-ID <[email protected]>
Author: turnstep
Date: Sat Mar 26 13:05:05 2011
New Revision: 14775

Added:
   DBD-Pg/trunk/testme.tmp   (contents, props changed)

Log:
Quick little testing file I use: might as well clean it up and make it public.


Added: DBD-Pg/trunk/testme.tmp
==============================================================================
--- (empty file)
+++ DBD-Pg/trunk/testme.tmp	Sat Mar 26 13:05:05 2011
@@ -0,0 +1,89 @@
+#!/usr/bin/env perl
+
+BEGIN {
+	use lib '.', 'blib/lib', 'blib/arch';
+	system 'make';
+}
+
+use strict;
+use warnings;
+use DBI ':sql_types';
+use Data::Dumper;
+use YAML;
+use DBD::Pg qw/:pg_types/;
+use Data::Peek;
+
+use vars qw/$sth $info $count $SQL/;
+
+my $tracelevel = shift || 0;
+$ENV{DBI_TRACE} = $tracelevel;
+
+my $DSN = 'DBI:Pg:dbname=postgres';
+my $dbh = DBI->connect($DSN, '', '', {AutoCommit=>0,RaiseError=>1,PrintError=>0})
+  or die "Connection failed!\n";
+
+my $me = $dbh->{Driver}{Name};
+print "DBI is version $DBI::VERSION, I am $me, version of DBD::Pg is $DBD::Pg::VERSION\n";
+
+memory_leak_test_bug_65734();
+
+exit;
+
+sub memory_leak_test_bug_65734 {
+
+	## Memory leak when an array appears in the bind variables
+
+	## Set things up
+	$dbh->do('CREATE TEMPORARY TABLE tbl1 (id SERIAL PRIMARY KEY, val INTEGER[])');
+	$dbh->do('CREATE TEMPORARY TABLE tbl2 (id SERIAL PRIMARY KEY, val INTEGER)');
+
+	## Subroutine that performs the leaking action
+	sub leakmaker1 {
+		$dbh->do('INSERT INTO tbl1(val) VALUES (?)', undef, [123]);
+	}
+
+	## Control subroutine that does not leak
+	sub leakmaker2 {
+		$dbh->do('INSERT INTO tbl2(val) VALUES (?)', undef, 123);
+	}
+
+	leakcheck(\&leakmaker1,1000);
+
+	exit;
+
+} ## end of memory_leak_test_bug_65734
+
+
+sub leakcheck {
+
+	my $sub = shift;
+	my $count = shift || 1000;
+	my $maxsize = shift || 100000;
+
+	## Safety check:
+	if (exists $ENV{DBI_TRACE} and $ENV{DBI_TRACE} != 0 and $ENV{DBI_TRACE} != 42) {
+		$maxsize = 1;
+	}
+
+	my $runs = 0;
+
+	while (1) {
+
+		last if $runs++ >= $maxsize;
+
+		&$sub();
+
+		unless ($runs % $count) {
+			printf "Cycles: %d\tProc size: %uK\n",
+				  $runs,
+				  (-f "/proc/$$/stat")
+				  ? do { local @ARGV="/proc/$$/stat"; (split (/\s/, <>))[22] / 1024 }
+				  : -1;
+		}
+
+
+	}
+
+} ## end of leakcheck
+
+__END__
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.