X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fsqlmaker%2Fquotes.t;h=4a5357b7d06b2f2b7bd46e828d3cf05824afa2ae;hb=7df2b5df3d6c48b35c73a9e840d8e8ef395b11f6;hp=84f2a3f975bbcf4ea6ffbdbcb69da98916c84485;hpb=02a2db55ba0471379640a89ba5d9d128b5486270;p=dbsrgits%2FDBIx-Class.git diff --git a/t/sqlmaker/quotes.t b/t/sqlmaker/quotes.t index 84f2a3f..4a5357b 100644 --- a/t/sqlmaker/quotes.t +++ b/t/sqlmaker/quotes.t @@ -4,29 +4,30 @@ use warnings; use Test::More; use lib qw(t/lib); -use DBICTest; -use DBIC::SqlMakerTest; -use DBIC::DebugObj; +use DBICTest ':DiffSQL'; -my $schema = DBICTest->init_schema(); +my $schema = DBICTest->init_schema( no_deploy => 1 ); $schema->connection( @{ $schema->storage->_dbi_connect_info }, { AutoCommit => 1, quote_char => [qw/[ ]/] } ); -my ($sql, @bind); -$schema->storage->debugobj(DBIC::DebugObj->new(\$sql, \@bind)); -$schema->storage->debug(1); +my $rs = $schema->resultset('CD')->search( + { 'me.year' => 2001, 'artist.name' => 'Caterwauler McCrae' }, + { join => 'artist' } +)->count_rs; + +my $expected_bind = [ + [ { dbic_colname => "artist.name", sqlt_datatype => "varchar", sqlt_size => 100 } + => 'Caterwauler McCrae' ], + [ { dbic_colname => "me.year", sqlt_datatype => "varchar", sqlt_size => 100 } + => 2001 ], +]; -my $rs = $schema->resultset('CD')->search( - { 'me.year' => 2001, 'artist.name' => 'Caterwauler McCrae' }, - { join => 'artist' }); -my $expected_bind = ["'Caterwauler McCrae'", "'2001'"]; -eval { $rs->count }; is_same_sql_bind( - $sql, \@bind, - "SELECT COUNT( * ) FROM cd [me] JOIN [artist] [artist] ON ( [artist].[artistid] = [me].[artist] ) WHERE ( [artist].[name] = ? AND [me].[year] = ? )", + $rs->as_query, + "(SELECT COUNT( * ) FROM cd [me] JOIN [artist] [artist] ON [artist].[artistid] = [me].[artist] WHERE ( [artist].[name] = ? AND [me].[year] = ? ))", $expected_bind, 'got correct SQL for count query with bracket quoting' ); @@ -34,27 +35,32 @@ is_same_sql_bind( $schema->storage->sql_maker->quote_char('`'); $schema->storage->sql_maker->name_sep('.'); -eval { $rs->count }; -is_same_sql_bind( - $sql, \@bind, - "SELECT COUNT( * ) FROM cd `me` JOIN `artist` `artist` ON ( `artist`.`artistid` = `me`.`artist` ) WHERE ( `artist`.`name` = ? AND `me`.`year` = ? )", +is_same_sql_bind ( + $rs->as_query, + "(SELECT COUNT( * ) FROM cd `me` JOIN `artist` `artist` ON ( `artist`.`artistid` = `me`.`artist` ) WHERE ( `artist`.`name` = ? AND `me`.`year` = ? ))", $expected_bind, - 'got correct SQL for count query with quoting' + 'got correct SQL for count query with mysql quoting' ); -my $order = 'year DESC'; -$rs = $schema->resultset('CD')->search({}, - { 'order_by' => $order }); -eval { $rs->first }; -like($sql, qr/ORDER BY `\Q${order}\E`/, 'quoted ORDER BY with DESC (should use a scalarref anyway)'); +# !!! talk to ribasushi *explicitly* before modfying these tests !!! +{ + is_same_sql_bind( + $schema->resultset('CD')->search({}, { order_by => 'year DESC', columns => 'cdid' })->as_query, + '(SELECT `me`.`cdid` FROM cd `me` ORDER BY `year DESC`)', + [], + 'quoted ORDER BY with DESC (should use a scalarref anyway)' + ); -$rs = $schema->resultset('CD')->search({}, - { 'order_by' => \$order }); -eval { $rs->first }; -like($sql, qr/ORDER BY \Q${order}\E/, 'did not quote ORDER BY with scalarref'); + is_same_sql_bind( + $schema->resultset('CD')->search({}, { order_by => \'year DESC', columns => 'cdid' })->as_query, + '(SELECT `me`.`cdid` FROM cd `me` ORDER BY year DESC)', + [], + 'did not quote ORDER BY with scalarref', + ); +} -is( - $schema->storage->sql_maker->update('group', { name => 'Bill', order => 12 }), +is_same_sql( + scalar $schema->storage->sql_maker->update('group', { order => 12, name => 'Bill' }), 'UPDATE `group` SET `name` = ?, `order` = ?', 'quoted table names for UPDATE' );