Add tests using select/as to sqlahacks
Jess Robinson [Mon, 26 Apr 2010 19:45:32 +0000 (19:45 +0000)]
t/sqlahacks/limit_dialects/rownumberover.t [new file with mode: 0644]
t/sqlahacks/limit_dialects/toplimit.t

diff --git a/t/sqlahacks/limit_dialects/rownumberover.t b/t/sqlahacks/limit_dialects/rownumberover.t
new file mode 100644 (file)
index 0000000..42cf33e
--- /dev/null
@@ -0,0 +1,36 @@
+use strict;
+use warnings;
+
+use Test::More;
+use lib qw(t/lib);
+use DBICTest;
+use DBIC::SqlMakerTest;
+
+my $schema = DBICTest->init_schema;
+
+delete $schema->storage->_sql_maker->{_cached_syntax};
+$schema->storage->_sql_maker->limit_dialect ('RowNumberOver');
+
+my $rs_selectas_rno = $schema->resultset ('BooksInLibrary')->search ({}, { '+select' => ['owner.name'], '+as' => ['owner_name'], join => 'owner', rows => 1 });
+
+is_same_sql_bind( $rs_selectas_rno->search({})->as_query,
+                  "(SELECT 
+                      me.id, me.source, me.owner, me.title, me.price, 
+                      owner.name 
+                    FROM 
+                      (SELECT me.*, 
+                       ROW_NUMBER() OVER( ) AS rno__row__index 
+                       FROM 
+                         (SELECT me.id, me.source, me.owner, me.title, me.price, owner.name 
+                          FROM books me 
+                          JOIN owners owner ON owner.id = me.owner 
+                          WHERE ( source = ? ) 
+                         ) me 
+                       ) me 
+                    JOIN owners owner ON owner.id = me.owner
+                    WHERE rno__row__index BETWEEN 1 AND 1 )",
+                  [  [ 'source', 'Library' ] ],
+                );
+
+
+done_testing;
index 3323574..b449850 100644 (file)
@@ -119,7 +119,7 @@ my @tests = (
 
 my @default_tests = ( undef, '', {}, [] );
 
-plan (tests => scalar @tests + scalar @default_tests + 1);
+# plan (tests => scalar @tests + scalar @default_tests + 1);
 
 test_order ($_) for @tests;
 default_test_order ($_) for @default_tests;
@@ -150,3 +150,19 @@ me.id, me.source, me.owner, me.title, me.price, owner.id, owner.name FROM
    ORDER BY title)' ,
   [ [ source => 'Library' ], [ source => 'Library' ] ],
 );
+
+my $rs_selectas_top = $schema->resultset ('BooksInLibrary')->search ({}, { '+select' => ['owner.name'], '+as' => ['owner_name'], join => 'owner', rows => 1 });
+
+is_same_sql_bind( $rs_selectas_top->search({})->as_query,
+                  "(SELECT 
+                      TOP 1 me.id, me.source, me.owner, me.title, me.price, 
+                      owner.name 
+                    FROM books me 
+                    JOIN owners owner ON owner.id = me.owner 
+                    WHERE ( source = ? )  
+                    ORDER BY me.id ASC
+                   )",
+                   [ [ 'source', 'Library' ] ],
+                );
+
+done_testing;