The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# 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');