X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F04modifiers.t;h=efa95a4013210be1df88626d86887d64d075e408;hb=c771453abebe09026dad9f31fa2b64971aff2616;hp=71d2c2847696d97d6928e0e1e3386396d2bc79d1;hpb=a3dc0922ce5f3b7b3f155eaa65f2e3632008b5b3;p=dbsrgits%2FSQL-Abstract.git diff --git a/t/04modifiers.t b/t/04modifiers.t index 71d2c28..efa95a4 100644 --- a/t/04modifiers.t +++ b/t/04modifiers.t @@ -7,9 +7,10 @@ use Test::Exception; use SQL::Abstract::Test import => ['is_same_sql_bind']; use Data::Dumper; -use Storable qw/dclone/; use SQL::Abstract; +my $dclone = eval { require Storable; \&Storable::dclone }; + #### WARNING #### # # -nest has been undocumented on purpose, but is still supported for the @@ -307,8 +308,8 @@ my @and_or_tests = ( }, ); -# modN and mod_N were a bad design decision - they go away in SQLA2, warn now -my @numbered_mods = ( +# modN and mod_N were a bad design decision - they went away +my @invalid_numbered_mods = ( { -and => [a => 10, b => 11], -and2 => [ c => 20, d => 21 ], @@ -358,10 +359,32 @@ my @nest_tests = ( stmt => 'WHERE ( ( a = ? OR ( b = ? AND c = ? ) OR d = ? OR e = ? ) )', bind => [qw/1 2 3 4 5/], }, + { + where => { -and => [ + -and => [a => 10, b => 11], + -and => [ c => 20, d => 21 ], + -nest => [ x => 1 ], + -nest => [ y => 2 ], + -or => { m => 7, n => 8 }, + -or => { m => 17, n => 18 }, + ] }, + stmt => 'WHERE ( ( a = ? AND b = ? AND c = ? AND d = ? AND ( x = ? ) AND ( y = ? ) AND ( m = ? OR n = ? ) AND ( m = ? OR n = ? ) ) )', + bind => [ 10, 11, 20, 21, 1, 2, 7, 8, 17, 18 ], + }, + { + where => [ -and => [ + -and => [a => 10, b => 11], + -and => [ c => 20, d => 21 ], + -nest => [ x => 1 ], + -nest => [ y => 2 ], + -or => { m => 7, n => 8 }, + -or => { m => 17, n => 18 }, + ] ], + stmt => 'WHERE ( ( ( a = ? AND b = ? AND c = ? AND d = ? AND ( x = ? ) AND ( y = ? ) AND ( m = ? OR n = ? ) AND ( m = ? OR n = ? ) ) ) )', + bind => [ 10, 11, 20, 21, 1, 2, 7, 8, 17, 18 ], + }, ); -plan tests => @and_or_tests*4 + @numbered_mods + @nest_tests*2; - for my $case (@and_or_tests) { TODO: { local $TODO = $case->{todo} if $case->{todo}; @@ -372,7 +395,9 @@ for my $case (@and_or_tests) { local $SIG{__WARN__} = sub { push @w, @_ }; my $sql = SQL::Abstract->new ($case->{args} || {}); - my $where_copy = dclone($case->{where}); + + my $where_copy = $dclone->($case->{where}) + if $dclone;; lives_ok (sub { my ($stmt, @bind) = $sql->where($case->{where}); @@ -387,7 +412,8 @@ for my $case (@and_or_tests) { is (@w, 0, 'No warnings within and-or tests') || diag join "\n", 'Emitted warnings:', @w; - is_deeply ($case->{where}, $where_copy, 'Where conditions unchanged'); + is_deeply ($case->{where}, $where_copy, 'Where conditions unchanged') + if $dclone; } } @@ -412,18 +438,11 @@ for my $case (@nest_tests) { } } - - -my $w_str = "\QUse of [and|or|nest]_N modifiers is deprecated and will be removed in SQLA v2.0\E"; -for my $case (@numbered_mods) { - TODO: { - local $Data::Dumper::Terse = 1; - - my @w; +for my $case (@invalid_numbered_mods) { my $sql = SQL::Abstract->new ($case->{args} || {}); throws_ok (sub { $sql->where($case); }, qr/\QUse of [and|or|nest]_N modifiers is no longer supported/, 'Exception thrown on bogus syntax'); - } } +done_testing;