Hi,
When attempting to implement the JSONiq function library, I have been
wondering rather than writing new classes for each function whether it is
not possible to reuse the existing code in VXQuery. For example the
specification[1] suggests that we could use *declare function *to create
the function *libjn:accumulate. *When I try to run *declare function *semantic
in current implementation of VXQuery it throws an error[Attached]. I would
like to know if *declare function *is currently supported in VXQuery and if
it is can we use it for implementing the JSONiq Function library as
suggested in the specification rather than writing a new class for each
function.
[1]
http://jsoniq.org/docs/JSONiqExtensionToXQuery/html-single/index.html#idm139680684849856
Thank you.
Yours sincerely,
Riyafa
--
Riyafa Abdul Hameed
Undergraduate, University of Moratuwa
Email: [email protected]
Website: https://riyafa.wordpress.com/ <http://riyafa.wordpress.com/>
<http://facebook.com/riyafa.ahf> <http://lk.linkedin.com/in/riyafa>
<http://twitter.com/Riyafa1>
QUERY:
declare function local:discount($price as xs:decimal?,$percentDiscount as
xs:decimal?)
as xs:decimal? {
let $discount := $price - ($price * $percentDiscount div 100)
return $discount
};
let $originalPrice := 100
let $discountAvailed := 10
return ( local:discount($originalPrice, $discountAvailed))
ERROR:
Exception in thread "main" org.apache.vxquery.exceptions.SystemException:
SYSE0001: [No IScalarEvaluatorFactory runtime for
{http://www.w3.org/2005/xquery-local-functions}discount]
at
org.apache.vxquery.functions.Function.createScalarEvaluatorFactory(Function.java:72)
at
org.apache.vxquery.compiler.algebricks.VXQueryExpressionRuntimeProvider.createEvaluatorFactory(VXQueryExpressionRuntimeProvider.java:85)
at
org.apache.hyracks.algebricks.core.algebra.operators.physical.AssignPOperator.contributeRuntimeOperator(AssignPOperator.java:84)
at
org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator.contributeRuntimeOperator(AbstractLogicalOperator.java:162)
at
org.apache.hyracks.algebricks.core.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:98)
at
org.apache.hyracks.algebricks.core.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:85)
at
org.apache.hyracks.algebricks.core.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:85)
at
org.apache.hyracks.algebricks.core.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:85)
at
org.apache.hyracks.algebricks.core.jobgen.impl.PlanCompiler.compilePlan(PlanCompiler.java:61)
at
org.apache.hyracks.algebricks.compiler.api.HeuristicCompilerFactoryBuilder$1$1.createJob(HeuristicCompilerFactoryBuilder.java:104)
at
org.apache.vxquery.xmlquery.query.XMLQueryCompiler.compile(XMLQueryCompiler.java:233)
at org.apache.vxquery.cli.VXQuery.runQueries(VXQuery.java:194)
at org.apache.vxquery.cli.VXQuery.execute(VXQuery.java:154)
at org.apache.vxquery.cli.VXQuery.main(VXQuery.java:115)
QUERY:
declare function libjn:accumulate($sequence as item()*) as object()
{
{|
for $key in $sequence() return { $key : $sequence($key) }
|}
};
ERROR:
Exception in thread "main" org.apache.vxquery.exceptions.SystemException:
SYSE0001: [No IScalarEvaluatorFactory runtime for
{http://jsoniq.org/function-library}accumulate]
at
org.apache.vxquery.functions.Function.createScalarEvaluatorFactory(Function.java:72)
at
org.apache.vxquery.compiler.algebricks.VXQueryExpressionRuntimeProvider.createEvaluatorFactory(VXQueryExpressionRuntimeProvider.java:85)
at
org.apache.hyracks.algebricks.core.algebra.operators.physical.AssignPOperator.contributeRuntimeOperator(AssignPOperator.java:84)
at
org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator.contributeRuntimeOperator(AbstractLogicalOperator.java:162)
at
org.apache.hyracks.algebricks.core.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:98)
at
org.apache.hyracks.algebricks.core.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:85)
at
org.apache.hyracks.algebricks.core.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:85)
at
org.apache.hyracks.algebricks.core.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:85)
at
org.apache.hyracks.algebricks.core.jobgen.impl.PlanCompiler.compilePlan(PlanCompiler.java:61)
at
org.apache.hyracks.algebricks.compiler.api.HeuristicCompilerFactoryBuilder$1$1.createJob(HeuristicCompilerFactoryBuilder.java:104)
at
org.apache.vxquery.xmlquery.query.XMLQueryCompiler.compile(XMLQueryCompiler.java:233)
at org.apache.vxquery.cli.VXQuery.runQueries(VXQuery.java:194)
at org.apache.vxquery.cli.VXQuery.execute(VXQuery.java:154)
at org.apache.vxquery.cli.VXQuery.main(VXQuery.java:115)