X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F05quotes.t;fp=t%2F05quotes.t;h=105ee9481549636f8f2d2e661fba4b181039ed8b;hb=28f137a08dc43c7207e0455ab7b4e94c6d9f7487;hp=0000000000000000000000000000000000000000;hpb=83cab70b1083adb4d64f06d786792c2dbc53571c;p=dbsrgits%2FSQL-Abstract.git diff --git a/t/05quotes.t b/t/05quotes.t new file mode 100644 index 0000000..105ee94 --- /dev/null +++ b/t/05quotes.t @@ -0,0 +1,193 @@ +use strict; +use warnings; + +use vars qw($TESTING); +$TESTING = 1; +use Test; + +# use a BEGIN block so we print our plan before SQL::Abstract is loaded +BEGIN { plan tests => 4 } + +use SQL::Abstract; + +sub is { + my ($got, $expect, $msg) = @_; + ok($got eq $expect) or + warn "got [${got}]\ninstead of [${expect}]\nfor test ${msg}\n\n"; +} + +my $sql_maker = SQL::Abstract->new; + +$sql_maker->{quote_char} = '`'; +$sql_maker->{name_sep} = '.'; + +my ($sql,) = $sql_maker->select( + [ + { + 'me' => 'cd' + }, + [ + { + 'artist' => 'artist', + '-join_type' => '' + }, + { + 'artist.artistid' => 'me.artist' + } + ] + ], + [ + #{ + # 'count' => '*' + #} + \'COUNT( * )' + ], + { + 'artist.name' => 'Caterwauler McCrae', + 'me.year' => 2001 + }, + [], + undef, + undef +); + +is($sql, + q/SELECT COUNT( * ) FROM `cd` `me` JOIN `artist` `artist` ON ( `artist`.`artistid` = `me`.`artist` ) WHERE ( `artist`.`name` = ? AND `me`.`year` = ? )/, + 'got correct SQL for count query with quoting'); + +($sql,) = $sql_maker->select( + [ + { + 'me' => 'cd' + } + ], + [ + 'me.cdid', + 'me.artist', + 'me.title', + 'me.year' + ], + undef, + [ + 'year DESC' + ], + undef, + undef +); + +#TODO: { +# local $TODO = "order_by with quoting needs fixing (ash/castaway)"; +# +# is($sql, +# q/SELECT `me`.`cdid`, `me`.`artist`, `me`.`title`, `me`.`year` FROM `cd` `me` ORDER BY `year` DESC/, +# 'quoted ORDER BY with DESC okay'); +#} + +($sql,) = $sql_maker->select( + [ + { + 'me' => 'cd' + } + ], + [ + 'me.*' + ], + undef, + [], + undef, + undef +); + +is($sql, q/SELECT `me`.* FROM `cd` `me`/, 'select attr with me.* is right'); + +($sql,) = $sql_maker->select( + [ + { + 'me' => 'cd' + } + ], + [ + 'me.cdid', + 'me.artist', + 'me.title', + 'me.year' + ], + undef, + [ + \'year DESC' + ], + undef, + undef +); + +is($sql, + q/SELECT `me`.`cdid`, `me`.`artist`, `me`.`title`, `me`.`year` FROM `cd` `me` ORDER BY year DESC/, + 'did not quote ORDER BY with scalarref'); + +my %data = ( + name => 'Bill', + order => 12 +); + +my @binds; + +($sql,@binds) = $sql_maker->update( + 'group', + { + 'order' => '12', + 'name' => 'Bill' + } +); + +is($sql, + q/UPDATE `group` SET `name` = ?, `order` = ?/, + 'quoted table names for UPDATE'); + +$sql_maker->{quote_char} = [qw/[ ]/]; + +($sql,) = $sql_maker->select( + [ + { + 'me' => 'cd' + }, + [ + { + 'artist' => 'artist', + '-join_type' => '' + }, + { + 'artist.artistid' => 'me.artist' + } + ] + ], + [ + #{ + # 'count' => '*' + #} + \'COUNT( * )' + ], + { + 'artist.name' => 'Caterwauler McCrae', + 'me.year' => 2001 + }, + [], + undef, + undef +); + +is($sql, + q/SELECT COUNT( * ) FROM [cd] [me] JOIN [artist] [artist] ON ( [artist].[artistid] = [me].[artist] ) WHERE ( [artist].[name] = ? AND [me].[year] = ? )/, + 'got correct SQL for count query with bracket quoting'); + + +($sql,@binds) = $sql_maker->update( + 'group', + { + 'order' => '12', + 'name' => 'Bill' + } +); + +is($sql, + q/UPDATE [group] SET [name] = ?, [order] = ?/, + 'bracket quoted table names for UPDATE');