use List::Util ();
use Scalar::Util ();
use Data::Query::ExprHelpers;
+use Sub::Quote 'quote_sub';
use Moo;
use namespace::clean;
);
has default_logic => (
- is => 'ro', coerce => sub { uc($_[0]) }, default => sub { 'OR' }
+ is => 'ro', coerce => quote_sub( 'uc($_[0])' ), default => 'OR'
);
has bind_meta => (
- is => 'ro', default => sub { 1 }
+ is => 'ro', default => 1
);
-has cmp => (is => 'ro', default => sub { '=' });
+has cmp => (is => 'ro', default => '=' );
-has sqltrue => (is => 'ro', default => sub { '1=1' });
-has sqlfalse => (is => 'ro', default => sub { '0=1' });
+has sqltrue => (is => 'ro', default => '1=1' );
+has sqlfalse => (is => 'ro', default => '0=1' );
-has special_ops => (is => 'ro', default => sub { [] });
+has special_ops => (is => 'ro', default => quote_sub( '[]' ) );
# XXX documented but I don't current fail any tests not using it
-has unary_ops => (is => 'ro', default => sub { [] });
+has unary_ops => (is => 'ro', default => quote_sub( '[]' ) );
has injection_guard => (
is => 'ro',
- default => sub {
+ default => quote_sub( q{
qr/
\;
|
^ \s* go \s
/xmi;
- }
+ } ),
);
has identifier_sep => (
- is => 'ro', default => sub { '.' },
+ is => 'ro', default => '.',
);
-has always_quote => (is => 'ro', default => sub { 1 });
+has always_quote => (is => 'ro', default => 1);
has convert => (is => 'ro');
has equality_op => (
is => 'ro',
- default => sub { qr/^ (?: = ) $/ix },
+ default => quote_sub( q{ qr/^ (?: = ) $/ix } ),
);
has inequality_op => (
is => 'ro',
- default => sub { qr/^ (?: != | <> ) $/ix },
+ default => quote_sub( q{ qr/^ (?: != | <> ) $/ix } ),
);
has like_op => (
is => 'ro',
- default => sub { qr/^ (?: is \s+ )? r?like $/xi },
+ default => quote_sub( q{ qr/^ (?: is \s+ )? r?like $/xi } ),
);
has not_like_op => (
is => 'ro',
- default => sub { qr/^ (?: is \s+ )? not \s+ r?like $/xi },
+ default => quote_sub( q{ qr/^ (?: is \s+ )? not \s+ r?like $/xi } ),
);
if $op =~ $self->like_op or $op =~ $self->not_like_op;
if ($op =~ $self->equality_op or $op =~ $self->like_op or $op eq 'IS') {
'IS NULL'
- } elsif ($op =~ $self->inequality_op or $op =~ $self->not_like_op or $op eq 'IS NOT') {
+ } elsif (
+ $op =~ $self->inequality_op or $op =~ $self->not_like_op
+ or
+ $op eq 'IS NOT' or $op eq 'NOT'
+ ) {
'IS NOT NULL'
} else {
die "Can't do undef -> NULL transform for operator ${op}";