# Test manipulating sql// objects. use strict; BEGIN {require 't/lib.pl';} use Test::More 'no_plan'; use Data::Dumper; use SQL::Interpolate FILTER => 1, qw(:all); my $x = 5; my @v = ('one', 'two'); my $v = \@v; my %h = (one => 1, two => 2); my $h = \%h; my $s1 = sql[SELECT * FROM mytable WHERE x = $x]; #print Dumper($s1); # scalar is(&sql_str(sql[SELECT * FROM mytable WHERE x = $x]), &sql_str('SELECT * FROM mytable WHERE x = ', \$x), 'scalar'); # hash # IMPROVE: fails if "z" changed to "y" (source filtering) is(&sql_str(sql[SELECT * FROM mytable WHERE {x => 3, z => 2}]), &sql_str('SELECT * FROM mytable WHERE ', {x => 3, z => 2}), 'inline hashref'); is(&sql_str(sql[SELECT * FROM mytable WHERE %h]), &sql_str('SELECT * FROM mytable WHERE ', \%h), 'hash'); is(&sql_str(sql[SELECT * FROM mytable WHERE $h]), &sql_str('SELECT * FROM mytable WHERE ', $h), 'hashref'); # IN is(&sql_str(sql[SELECT * FROM mytable WHERE x IN [1, 2, 3]]), &sql_str('SELECT * FROM mytable WHERE x IN ', [1, 2, 3]), 'IN inline arrayref'); is(&sql_str(sql[SELECT * FROM mytable WHERE x IN @v]), &sql_str('SELECT * FROM mytable WHERE x IN ', \@v), 'IN array'); is(&sql_str(sql[SELECT * FROM mytable WHERE x IN $v]), &sql_str('SELECT * FROM mytable WHERE x IN ', $v), 'IN arrayref'); is(&sql_str(sql[SELECT * FROM mytable WHERE x IN $x]), &sql_str('SELECT * FROM mytable WHERE x IN ', \$x), 'IN scalar'); # INSERT is(&sql_str(sql[INSERT INTO mytable [1, 2, 3]]), &sql_str('INSERT INTO mytable ', [1, 2, 3]), 'INSERT inline arrayref'); is(&sql_str(sql[INSERT INTO mytable @v]), &sql_str('INSERT INTO mytable ', \@v), 'INSERT array'); is(&sql_str(sql[INSERT INTO mytable $v]), &sql_str('INSERT INTO mytable ', $v), 'INSERT arrayref'); is(&sql_str(sql[INSERT INTO mytable {one => 1, two => 2}]), &sql_str('INSERT INTO mytable ', $h), 'INSERT inline hashref'); is(&sql_str(sql[INSERT INTO mytable %h]), &sql_str('INSERT INTO mytable ', \%h), 'INSERT hash'); is(&sql_str(sql[INSERT INTO mytable $h]), &sql_str('INSERT INTO mytable ', $h), 'INSERT hashref'); is(&sql_str(sql[INSERT INTO mytable $x]), &sql_str('INSERT INTO mytable ', \$x), 'INSERT scalar'); # concat is(&sql_str(sql[SELECT * FROM mytable WHERE x =] . \$x . "AND y=z"), &sql_str('SELECT * FROM mytable WHERE x =', \5, 'AND y=z'), 'concat 1'); is(&sql_str(sql[SELECT * FROM mytable WHERE x IN ] . $v), &sql_str('SELECT * FROM mytable WHERE x IN ', $v), 'concat 2');