my $sqla = SQL::Abstract->create(1);
is $sqla->dispatch(
- [ -where =>
- [ '>', [-name => qw/me id/], [-value => 500 ] ]
- ]
-), "WHERE me.id > ?",
+ { -type => 'expr',
+ op => '>',
+ args => [
+ {-type => name => args => [qw/me id/] },
+ { -type => 'value', value => 500 }
+ ]
+ }
+), "me.id > ?",
"simple where clause";
is $sqla->dispatch(
- [ -in => [ ] ]
+ { -type => 'expr', op => 'in', args => [ ] }
), "0 = 1", "emtpy -in";
is $sqla->dispatch(
- [ -where =>
- [ '>', [-name => qw/me id/], [-value => 500 ] ]
- ]
-), "WHERE me.id > ?",
- "simple where clause";
+ { -type => 'expr',
+ op => 'in',
+ args => [ { -type => 'name', args => ['foo'] } ],
+ }
+), "0 = 1", "emtpy -in";
-eq_or_diff( [ SQL::Abstract->generate(
- [ -ast_version => 1,
- -where =>
- [ '>', [-name => qw/me id/], [-value => 500 ] ],
- [ '==', [-name => qw/me name/], [-value => '200' ] ]
+is $sqla->dispatch(
+ { -type => 'expr',
+ op => '>',
+ args => [
+ {-type => 'name', args => [qw/me id/]},
+ {-type => 'value', value => 500 }
+ ]
+ }
+), "me.id > ?",
+ "simple expr clause";
+
+my $cols = [
+ { -type => 'expr',
+ op => '>',
+ args => [
+ {-type => 'name', args => [qw/me id/]},
+ {-type => 'value', value => 500 }
]
+ },
+ { -type => 'expr',
+ op => '==',
+ args => [
+ {-type => 'name', args => [qw/me name/]},
+ {-type => 'value', value => '200' }
+ ]
+ },
+];
+
+eq_or_diff( [ SQL::Abstract->generate(
+ { -ast_version => 1,
+ -type => 'expr',
+ op => 'and',
+ args => $cols,
+ }
) ],
- [ "WHERE me.id > ? AND me.name = ?",
+ [ "me.id > ? AND me.name = ?",
[ 500,
'200'
]
is $sqla->dispatch(
- [ -where => -or =>
- [ '>', [-name => qw/me id/], [-value => 500 ] ],
- [ '==', [-name => qw/me name/], [-value => '200' ] ],
- ]
-), "WHERE me.id > ? OR me.name = ?",
+ { -type => 'expr', op => 'or', args => $cols }
+), "me.id > ? OR me.name = ?",
"where clause (simple or)";
is $sqla->dispatch(
- [ -where => -or =>
- [ '>', [-name => qw/me id/], [-value => 500 ] ],
- [ -or =>
- [ '==', [-name => qw/me name/], [-value => '200' ] ],
- [ '==', [-name => qw/me name/], [-value => '100' ] ]
- ]
- ]
-), "WHERE me.id > ? OR me.name = ? OR me.name = ?",
+ { -type => 'expr', op => 'or',
+ args => [
+ { -type => 'expr', op => '==',
+ args => [ {-type => 'name', args => [qw/me name/] }, {-type => 'value', value => 500 } ]
+ },
+ { -type => 'expr', op => 'or', args => $cols }
+ ]
+ }
+), "me.name = ? OR me.id > ? OR me.name = ?",
"where clause (nested or)";
is $sqla->dispatch(
- [ -where => -or =>
- [ '==', [-name => qw/me id/], [-value => 500 ] ],
- [ -and =>
- [ '>', [-name => qw/me name/], [-value => '200' ] ],
- [ '<', [-name => qw/me name/], [-value => '100' ] ]
- ]
- ]
-), "WHERE me.id = ? OR me.name > ? AND me.name < ?",
+ { -type => 'expr', op => 'or',
+ args => [
+ { -type => 'expr', op => '==',
+ args => [ {-type => 'name', args => [qw/me name/] }, {-type => 'value', value => 500 } ]
+ },
+ { -type => 'expr', op => 'and', args => $cols }
+ ]
+ }
+), "me.name = ? OR me.id > ? AND me.name = ?",
"where clause (inner and)";
+__END__
is $sqla->dispatch(
[ -where => -and =>
[ '==', [-name => qw/me id/], [-value => 500 ] ],