no
warnings
qw/qw/
;
my
(
$sql
,
@bind
);
my
$sqla
= SQL::Abstract::More->new(
multicols_sep
=>
qr[\s*/\s*]
,
has_multicols_in_SQL
=> 1,
);
(
$sql
,
@bind
) =
$sqla
->where({
one_col
=> 999,
"foo/bar"
=> {
-in
=> [
"1/a"
,
"2/b"
]},
"x/y/z"
=> {
-not_in
=> [
"X/Y/Z"
]},
});
my
@expected
= (
"WHERE (foo, bar) IN ((?, ?), (?, ?)) "
.
"AND one_col = ? "
.
"AND (x, y, z) NOT IN ((?, ?, ?))"
,
[
qw/1 a 2 b 999 X Y Z/
]);
is_same_sql_bind(
$sql
, \
@bind
,
@expected
);
(
$sql
,
@bind
) =
$sqla
->where({
one_col
=> 999,
"foo/bar"
=> {
-in
=> [[1,
"a"
], [2,
"b"
]]},
"x/y/z"
=> {
-not_in
=> [[
qw/X Y Z/
]]},
});
is_same_sql_bind(
$sql
, \
@bind
,
@expected
);
(
$sql
,
@bind
) =
$sqla
->where({
one_col
=> 999,
"foo/bar"
=> {
-in
=> \
"SELECT (a, b) FROM FOOBAR"
},
});
is_same_sql_bind(
$sql
, \
@bind
,
"WHERE (foo, bar) IN (SELECT (a, b) FROM FOOBAR)"
.
"AND one_col = ? "
,
[999]);
(
$sql
,
@bind
) =
$sqla
->where({
one_col
=> 999,
"foo/bar"
=> {
-in
=> \[
"SELECT (a, b) FROM FOOBAR WHERE a > ?"
, 1234]},
});
is_same_sql_bind(
$sql
, \
@bind
,
"WHERE (foo, bar) IN (SELECT (a, b) FROM FOOBAR WHERE a > ?)"
.
"AND one_col = ? "
,
[1234, 999]);
$sqla
= SQL::Abstract::More->new(
multicols_sep
=>
qr[\s*/\s*]
,
has_multicols_in_SQL
=> 0,
);
(
$sql
,
@bind
) =
$sqla
->where({
one_col
=> 999,
"foo/bar"
=> {
-in
=> [
"1/a"
,
"2/b"
]},
"x/y/z"
=> {
-not_in
=> [
"X/Y/Z"
]},
});
is_same_sql_bind(
$sql
, \
@bind
,
"WHERE ((foo = ? AND bar = ?) OR (foo = ? AND bar = ?)) "
.
"AND one_col = ? "
.
"AND NOT (x = ? AND y = ? AND z = ?)"
,
[
qw/1 a 2 b 999 X Y Z/
],
);
done_testing();