no
warnings
'redefine'
;
use
Carp
qw(carp croak confess)
;
our
(
$VERSION
);
BEGIN {
$VERSION
=
'2.908'
;
}
sub
sse {
my
$self
=
shift
;
my
$context
=
shift
;
return
sprintf
(
'(%s %s)'
,
$self
->op,
map
{
$_
->sse(
$context
) }
$self
->operands,
);
}
sub
as_sparql {
my
$self
=
shift
;
my
$context
=
shift
;
my
$indent
=
shift
;
my
$op
=
$self
->op;
return
sprintf
(
"($op %s)"
,
map
{
$_
->as_sparql(
$context
,
$indent
) }
$self
->operands);
}
sub
evaluate {
my
$self
=
shift
;
my
$query
=
shift
;
my
$bound
=
shift
;
my
$context
=
shift
;
my
$op
=
$self
->op;
my
(
$data
) =
$self
->operands;
if
(
$op
eq
'+'
or
$op
eq
'-'
) {
my
$l
=
$data
->isa(
'RDF::Query::Algebra'
)
?
$data
->evaluate(
$query
,
$bound
,
$context
,
@_
)
: (
$data
->isa(
'RDF::Query::Node::Variable'
))
?
$bound
->{
$data
->name }
:
$data
;
my
$value
;
if
(
$op
eq
'+'
) {
$value
=
$l
->numeric_value;
}
elsif
(
$op
eq
'-'
) {
$value
= -1 *
$l
->numeric_value;
}
return
RDF::Query::Node::Literal->new(
$value
,
undef
,
$l
->literal_datatype );
}
elsif
(
$op
eq
'!'
) {
my
$alg
= RDF::Query::Expression::Function->new(
"sparql:ebv"
,
$data
);
my
$bool
=
$alg
->evaluate(
$query
,
$bound
,
$context
,
@_
);
if
(
$bool
->literal_value eq
'true'
) {
}
else
{
}
}
else
{
warn
"unknown unary op: $op"
;
throw RDF::Query::Error::ExecutionError
-text
=>
"Unknown unary op '$op'"
;
}
}
1;