X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F73oracle_hq.t;h=8189479d9ae94476c8d2d5c35ca3d7d552e14e06;hb=992a24f640638601acb795c24af493d789368400;hp=1025f6905471e96699e3f25bbdb40e21b6a5da43;hpb=0e773352a9c6c034dfb2526b8d68bf6ac1e2323b;p=dbsrgits%2FDBIx-Class.git diff --git a/t/73oracle_hq.t b/t/73oracle_hq.t index 1025f69..8189479 100644 --- a/t/73oracle_hq.t +++ b/t/73oracle_hq.t @@ -3,22 +3,27 @@ use warnings; use Test::Exception; use Test::More; - +use DBIx::Class::Optional::Dependencies (); use lib qw(t/lib); +use DBICTest::RunMode; use DBIC::SqlMakerTest; +use DBIx::Class::SQLMaker::LimitDialects; +my $ROWS = DBIx::Class::SQLMaker::LimitDialects->__rows_bindtype, +my $TOTAL = DBIx::Class::SQLMaker::LimitDialects->__total_bindtype, + $ENV{NLS_SORT} = "BINARY"; $ENV{NLS_COMP} = "BINARY"; $ENV{NLS_LANG} = "AMERICAN"; -plan skip_all => 'Test needs ' . DBIx::Class::Optional::Dependencies->req_missing_for ('test_rdbms_oracle') - unless DBIx::Class::Optional::Dependencies->req_ok_for ('test_rdbms_oracle'); - my ($dsn, $user, $pass) = @ENV{map { "DBICTEST_ORA_${_}" } qw/DSN USER PASS/}; plan skip_all => 'Set $ENV{DBICTEST_ORA_DSN}, _USER and _PASS to run this test.' unless ($dsn && $user && $pass); +plan skip_all => 'Test needs ' . DBIx::Class::Optional::Dependencies->req_missing_for ('rdbms_oracle') + unless DBIx::Class::Optional::Dependencies->req_ok_for ('rdbms_oracle'); + use DBICTest::Schema::Artist; BEGIN { DBICTest::Schema::Artist->add_column('parentid'); @@ -34,6 +39,7 @@ BEGIN { ); } +use DBICTest; use DBICTest::Schema; my $schema = DBICTest::Schema->connect($dsn, $user, $pass); @@ -114,7 +120,7 @@ do_creates($dbh); SELECT me.artistid, me.name, me.rank, me.charfield, me.parentid FROM artist me START WITH name = ? - CONNECT BY parentid = PRIOR artistid + CONNECT BY parentid = PRIOR artistid )', [ [ { 'sqlt_datatype' => 'varchar', 'dbic_colname' => 'name', 'sqlt_size' => 100 } => 'root'] ], @@ -131,7 +137,7 @@ do_creates($dbh); SELECT COUNT( * ) FROM artist me START WITH name = ? - CONNECT BY parentid = PRIOR artistid + CONNECT BY parentid = PRIOR artistid )', [ [ { 'sqlt_datatype' => 'varchar', 'dbic_colname' => 'name', 'sqlt_size' => 100 } => 'root'] ], @@ -158,7 +164,7 @@ do_creates($dbh); SELECT me.artistid, me.name, me.rank, me.charfield, me.parentid FROM artist me START WITH name = ? - CONNECT BY parentid = PRIOR artistid + CONNECT BY parentid = PRIOR artistid ORDER SIBLINGS BY name DESC )', [ [ { 'sqlt_datatype' => 'varchar', 'dbic_colname' => 'name', 'sqlt_size' => 100 } @@ -186,7 +192,7 @@ do_creates($dbh); FROM artist me WHERE ( parentid IS NULL ) START WITH name = ? - CONNECT BY parentid = PRIOR artistid + CONNECT BY parentid = PRIOR artistid )', [ [ { 'sqlt_datatype' => 'varchar', 'dbic_colname' => 'name', 'sqlt_size' => 100 } => 'root'] ], @@ -222,7 +228,7 @@ do_creates($dbh); LEFT JOIN cd cds ON cds.artist = me.artistid WHERE ( cds.title LIKE ? ) START WITH me.name = ? - CONNECT BY parentid = PRIOR artistid + CONNECT BY parentid = PRIOR artistid )', [ [ { 'sqlt_datatype' => 'varchar', 'dbic_colname' => 'cds.title', 'sqlt_size' => 100 } @@ -246,7 +252,7 @@ do_creates($dbh); LEFT JOIN cd cds ON cds.artist = me.artistid WHERE ( cds.title LIKE ? ) START WITH me.name = ? - CONNECT BY parentid = PRIOR artistid + CONNECT BY parentid = PRIOR artistid )', [ [ { 'sqlt_datatype' => 'varchar', 'dbic_colname' => 'cds.title', 'sqlt_size' => 100 } @@ -273,7 +279,7 @@ do_creates($dbh); SELECT me.artistid, me.name, me.rank, me.charfield, me.parentid FROM artist me START WITH name = ? - CONNECT BY parentid = PRIOR artistid + CONNECT BY parentid = PRIOR artistid ORDER BY LEVEL ASC, name ASC )', [ @@ -312,26 +318,26 @@ do_creates($dbh); my $rs = $schema->resultset('Artist')->search({}, { start_with => { name => 'root' }, connect_by => { parentid => { -prior => { -ident => 'artistid' } } }, - order_by => { -asc => 'name' }, + order_by => [ { -asc => 'name' }, { -desc => 'artistid' } ], rows => 2, }); is_same_sql_bind ( $rs->as_query, '( - SELECT artistid, name, rank, charfield, parentid + SELECT me.artistid, me.name, me.rank, me.charfield, me.parentid FROM ( SELECT me.artistid, me.name, me.rank, me.charfield, me.parentid FROM artist me START WITH name = ? CONNECT BY parentid = PRIOR artistid - ORDER BY name ASC + ORDER BY name ASC, artistid DESC ) me - WHERE ROWNUM <= 2 + WHERE ROWNUM <= ? )', [ [ { 'sqlt_datatype' => 'varchar', 'dbic_colname' => 'name', 'sqlt_size' => 100 } - => 'root'], + => 'root'], [ $ROWS => 2 ], ], ); @@ -346,19 +352,20 @@ do_creates($dbh); '( SELECT COUNT( * ) FROM ( - SELECT artistid + SELECT me.artistid FROM ( SELECT me.artistid FROM artist me START WITH name = ? CONNECT BY parentid = PRIOR artistid ) me - WHERE ROWNUM <= 2 + WHERE ROWNUM <= ? ) me )', [ [ { 'sqlt_datatype' => 'varchar', 'dbic_colname' => 'name', 'sqlt_size' => 100 } => 'root'], + [ $ROWS => 2 ], ], ); @@ -436,7 +443,7 @@ do_creates($dbh); SELECT me.artistid, me.name, me.rank, me.charfield, me.parentid, CONNECT_BY_ISCYCLE FROM artist me START WITH name = ? - CONNECT BY NOCYCLE parentid = PRIOR artistid + CONNECT BY NOCYCLE parentid = PRIOR artistid )', [ [ { 'sqlt_datatype' => 'varchar', 'dbic_colname' => 'name', 'sqlt_size' => 100 } @@ -460,7 +467,7 @@ do_creates($dbh); SELECT COUNT( * ) FROM artist me START WITH name = ? - CONNECT BY NOCYCLE parentid = PRIOR artistid + CONNECT BY NOCYCLE parentid = PRIOR artistid )', [ [ { 'sqlt_datatype' => 'varchar', 'dbic_colname' => 'name', 'sqlt_size' => 100 } @@ -548,13 +555,15 @@ sub do_creates { # clean up our mess END { - eval { - my $dbh = $schema->storage->dbh; - $dbh->do("DROP SEQUENCE artist_pk_seq"); - $dbh->do("DROP SEQUENCE cd_seq"); - $dbh->do("DROP SEQUENCE track_seq"); - $dbh->do("DROP TABLE artist"); - $dbh->do("DROP TABLE track"); - $dbh->do("DROP TABLE cd"); + if ($schema and my $dbh = $schema->storage->dbh) { + eval { $dbh->do($_) } for ( + 'DROP SEQUENCE artist_pk_seq', + 'DROP SEQUENCE cd_seq', + 'DROP SEQUENCE track_seq', + 'DROP TABLE artist', + 'DROP TABLE track', + 'DROP TABLE cd', + ); }; + undef $schema; }