my
$w1
= SQL::Maker::Condition->new();
$w1
->add(
x
=> 1);
$w1
->add(
y
=> 2);
my
$w2
= SQL::Maker::Condition->new();
my
$w3
= SQL::Maker::Condition->new();
subtest
'and_before'
=>
sub
{
my
$and
= (
$w1
&
$w2
);
is
$and
->as_sql,
'((x = ?) AND (y = ?))'
;
is
join
(
', '
,
$and
->
bind
),
'1, 2'
;
$and
->add(
z
=> 99);
is
$and
->as_sql,
'((x = ?) AND (y = ?)) AND (z = ?)'
;
is
join
(
', '
,
$and
->
bind
),
'1, 2, 99'
;
};
subtest
'and_after'
=>
sub
{
my
$and
= (
$w2
&
$w1
);
is
$and
->as_sql,
'((x = ?) AND (y = ?))'
;
is
join
(
', '
,
$and
->
bind
),
'1, 2'
;
$and
->add(
z
=> 99);
is
$and
->as_sql,
'((x = ?) AND (y = ?)) AND (z = ?)'
;
is
join
(
', '
,
$and
->
bind
),
'1, 2, 99'
;
};
subtest
'or_before'
=>
sub
{
my
$or
= (
$w1
|
$w2
);
is
$or
->as_sql,
'((x = ?) AND (y = ?))'
;
is
join
(
', '
,
$or
->
bind
),
'1, 2'
;
$or
->add(
z
=> 99);
is
$or
->as_sql,
'((x = ?) AND (y = ?)) AND (z = ?)'
;
is
join
(
', '
,
$or
->
bind
),
'1, 2, 99'
;
};
subtest
'or_after'
=>
sub
{
my
$or
= (
$w2
|
$w1
);
is
$or
->as_sql,
'((x = ?) AND (y = ?))'
;
is
join
(
', '
,
$or
->
bind
),
'1, 2'
;
$or
->add(
z
=> 99);
is
$or
->as_sql,
'((x = ?) AND (y = ?)) AND (z = ?)'
;
is
join
(
', '
,
$or
->
bind
),
'1, 2, 99'
;
};
subtest
'and_both'
=>
sub
{
my
$and
= (
$w2
&
$w3
);
is
$and
->as_sql,
''
;
is
join
(
', '
,
$and
->
bind
),
''
;
$and
->add(
z
=> 99);
is
$and
->as_sql,
'(z = ?)'
;
is
join
(
', '
,
$and
->
bind
),
'99'
;
};
subtest
'or_both'
=>
sub
{
my
$or
= (
$w2
|
$w3
);
is
$or
->as_sql,
''
;
is
join
(
', '
,
$or
->
bind
),
''
;
$or
->add(
z
=> 99);
is
$or
->as_sql,
'(z = ?)'
;
is
join
(
', '
,
$or
->
bind
),
'99'
;
};
done_testing;