use Scalar::Util 'refaddr';
use Storable 'nfreeze';
+BEGIN { $ENV{SQLA_ISVALUE_IGNORE_AUTOGENERATED_STRINGIFICATION} = 0 }
+
use SQL::Abstract qw(is_plain_value is_literal_value);
# fallback setting is inheriting starting p5 50853fa9 (run up to 5.17.0)
{
package # hideee
+ SQLATest::SillyBool;
+
+ use overload
+ # *DELIBERATELY* unspecified
+ #fallback => 1,
+ bool => sub { ${$_[0]} },
+ ;
+
+ package # hideee
+ SQLATest::SillyBool::Subclass;
+
+ our @ISA = 'SQLATest::SillyBool';
+}
+
+{
+ package # hideee
SQLATest::SillyInt;
use overload
}
for my $case (
+ { class => 'SQLATest::SillyBool', can_math => 0, should_str => 1 },
+ { class => 'SQLATest::SillyBool::Subclass', can_math => 0, should_str => 1 },
{ class => 'SQLATest::SillyInt', can_math => 0, should_str => 1 },
{ class => 'SQLATest::SillyInt::Subclass', can_math => 0, should_str => 1 },
{ class => 'SQLATest::SillierInt', can_math => 0, should_str => 0 },
if (STRINGIFIER_CAN_RETURN_IVS and $can_cmp) {
is_deeply(
is_plain_value $num,
- [ $num ],
+ \$num,
"stringification detected on $case->{class}",
) || diag explain $case;
}
# is_deeply does not do nummify/stringify cmps properly
# but we can always compare the ice
ok(
- ( nfreeze( is_plain_value $num ) eq nfreeze( [ $num ] ) ),
+ ( nfreeze( is_plain_value $num ) eq nfreeze( \$num ) ),
"stringification without cmp capability detected on $case->{class}"
) || diag explain $case;
}
is (
- refaddr( ( is_plain_value($num)||[] )->[0] ),
+ refaddr( ${is_plain_value($num)} ),
refaddr $num,
"Same reference (blessed object) returned",
);
cmp_ok(--$num, 'eq', 23, 'test overloaded object compares correctly');
is_deeply(
is_plain_value $num,
- [ 23 ],
+ \23,
'fallback stringification detected'
);
cmp_ok(--$num, 'eq', 22, 'test overloaded object compares correctly');
is_deeply
is_plain_value { -value => [] },
- [ [] ],
+ \[],
'-value recognized'
;
for (undef, { -value => undef }) {
is_deeply
is_plain_value $_,
- [ undef ],
+ \undef,
'NULL -value recognized'
;
}
is_deeply
- is_literal_value { -ident => 'foo' },
- [ 'foo' ],
- '-ident recognized as literal'
+ is_literal_value \'sql',
+ [ 'sql' ],
+ 'literal correctly recognized and unpacked'
;
is_deeply
is_literal_value \[ 'sql', 'bind1', [ {} => 'bind2' ] ],
[ 'sql', 'bind1', [ {} => 'bind2' ] ],
- 'literal correctly unpacked'
+ 'literal with binds correctly recognized and unpacked'
;