RT# 50541: Fix for clear bug. Introduces a speed regression
[dbsrgits/DBM-Deep.git] / t / common.pm
CommitLineData
5a70a6c0 1package # Hide from PAUSE
2 t::common;
fde3db1a 3
fde3db1a 4use strict;
d426259c 5use warnings FATAL => 'all';
fde3db1a 6
7use base 'Exporter';
8our @EXPORT_OK = qw(
2100f2ae 9 new_dbm
fde3db1a 10 new_fh
11);
12
13use File::Spec ();
14use File::Temp qw( tempfile tempdir );
15use Fcntl qw( :flock );
16
17my $parent = $ENV{WORK_DIR} || File::Spec->tmpdir;
18my $dir = tempdir( CLEANUP => 1, DIR => $parent );
19
20sub new_fh {
45f047f8 21 my ($fh, $filename) = tempfile( 'tmpXXXX', DIR => $dir, UNLINK => 1 );
fde3db1a 22
23 # This is because tempfile() returns a flock'ed $fh on MacOSX.
24 flock $fh, LOCK_UN;
25
26 return ($fh, $filename);
27}
e9b0b5f0 28
2100f2ae 29sub new_dbm {
30 my @args = @_;
31 my ($fh, $filename) = new_fh();
350896ee 32
33 my @reset_funcs;
34 my @extra_args;
35
36 unless ( $ENV{NO_TEST_FILE} ) {
37 push @reset_funcs, undef;
bac1b5d5 38 push @extra_args, [
39 file => $filename,
40 ];
350896ee 41 }
d426259c 42
bac1b5d5 43 if ( $ENV{TEST_SQLITE} ) {
44 (undef, my $filename) = new_fh();
7c927437 45# $filename = 'test.db';
bac1b5d5 46 push @reset_funcs, sub {
addbe56a 47 require 'DBI.pm';
bac1b5d5 48 my $dbh = DBI->connect(
49 "dbi:SQLite:dbname=$filename", '', '',
50 );
51 my $sql = do {
52 my $filename = 'etc/sqlite_tables.sql';
53 open my $fh, '<', $filename
54 or die "Cannot open '$filename' for reading: $!\n";
55 local $/;
56 <$fh>
57 };
58 foreach my $line ( split ';', $sql ) {
59 $dbh->do( "$line" ) if $line =~ /\S/;
60 }
61 };
62 push @extra_args, [
63 dbi => {
64 dsn => "dbi:SQLite:dbname=$filename",
65 user => '',
66 password => '',
67 },
68 ];
69 }
d426259c 70
71 if ( $ENV{TEST_MYSQL_DSN} ) {
350896ee 72 push @reset_funcs, sub {
cd5303b4 73 require 'DBI.pm';
350896ee 74 my $dbh = DBI->connect(
67e9b86f 75 $ENV{TEST_MYSQL_DSN},
350896ee 76 $ENV{TEST_MYSQL_USER},
77 $ENV{TEST_MYSQL_PASS},
78 );
79 my $sql = do {
80 my $filename = 'etc/mysql_tables.sql';
81 open my $fh, '<', $filename
82 or die "Cannot open '$filename' for reading: $!\n";
83 local $/;
84 <$fh>
85 };
86 foreach my $line ( split ';', $sql ) {
87 $dbh->do( "$line" ) if $line =~ /\S/;
88 }
89 };
d426259c 90 push @extra_args, [
91 dbi => {
67e9b86f 92 dsn => $ENV{TEST_MYSQL_DSN},
d426259c 93 user => $ENV{TEST_MYSQL_USER},
94 password => $ENV{TEST_MYSQL_PASS},
95 },
96 ];
97 }
98
2100f2ae 99 return sub {
100 return unless @extra_args;
101 my @these_args = @{ shift @extra_args };
350896ee 102 if ( my $reset = shift @reset_funcs ) {
103 $reset->();
104 }
2100f2ae 105 return sub {
7c927437 106 DBM::Deep->new( @these_args, @args, @_ )
2100f2ae 107 };
108 };
109}
110
fde3db1a 1111;
112__END__