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)


Reply via email to