1use strict; 2use warnings; 3use utf8; 4use Test::More; 5use SQL::Maker; 6use SQL::QueryMaker; 7 8sub checkerr { 9 my $code = shift; 10 return sub { 11 local $@; 12 my $query = eval { 13 $code->(); 14 }; 15 ok ! defined $query, "does not return anything"; 16 like $@, qr/cannot pass in an unblessed ref/, "error is thrown"; 17 }; 18} 19 20my $maker = SQL::Maker->new( 21 driver => 'SQLite', 22 strict => 1, 23); 24 25ok $maker->strict, "maker->strict"; 26 27subtest "maker->select where" => sub { 28 my ($sql, @binds) = $maker->select("table", ["*"], sql_eq(id => 1)); 29 like $sql, qr/WHERE\s+.*id.*\s*=/s; 30 is_deeply \@binds, [ 1 ]; 31}; 32 33subtest "maker->update where" => sub { 34 my ($sql, @binds) = $maker->update("table", [], sql_eq(id => 1)); 35 like $sql, qr/WHERE\s+.*id.*\s*=/s; 36 is_deeply \@binds, [ 1 ]; 37}; 38 39subtest "maker->delete where" => sub { 40 my ($sql, @binds) = $maker->delete("table", sql_eq(id => 1)); 41 like $sql, qr/WHERE\s+.*id.*\s*=/s; 42 is_deeply \@binds, [ 1 ]; 43}; 44 45subtest "maker->where" => sub { 46 my ($sql, @binds) = $maker->where(sql_eq(id => 1)); 47 like $sql, qr/id.*\s*=/s; 48 is_deeply \@binds, [ 1 ]; 49}; 50 51subtest "maker->new_condition (err)" => checkerr(sub { 52 $maker->new_condition->add( 53 foo => [1], 54 ); 55}); 56 57{ 58 my $select = $maker->new_select; 59 ok $select->strict, "select->strict"; 60 subtest "select->new_condition (err)" => checkerr(sub { 61 $select->new_condition->add( 62 foo => [1], 63 ); 64 }); 65} 66 67subtest "maker->select (err)" => checkerr(sub { 68 $maker->select("user", ['*'], { name => ["John", "Tom" ]}); 69}); 70 71subtest "maker->select (ok)", sub { 72 $maker->select("user", ['*'], { name => sql_in(["John", "Tom"]) }); 73 $maker->select("user", ['*'], $maker->new_condition->add(name => sql_in(["John", "Tom"]))); 74 $maker->select("user", ['*'], sql_in(name => ["John", "Tom"])); 75 ok("run without croaking"); 76}; 77 78subtest "maker->insert (err)" => checkerr(sub { 79 $maker->insert( 80 user => [ name => "John", created_on => \"datetime(now)" ] 81 ); 82}); 83 84subtest "maker->insert (ok)" => sub { 85 $maker->insert(user => [name => "John", created_on => sql_raw("datetime(now)")]); 86 ok("run without croaking"); 87}; 88 89subtest "maker->delete (err)" => checkerr(sub { 90 $maker->delete(user => [ name => ["John", "Tom"]]); 91}); 92 93subtest "maker->update where (err)" => checkerr(sub { 94 $maker->update(user => [name => "John"], { user_id => [1, 2] }); 95}); 96 97subtest "maker->update set (err)" => checkerr(sub { 98 $maker->update(user => [name => \"select *"]); 99}); 100 101done_testing; 102