Hi Tomasz, Thanks for creating the issue and for the fix. @Ian, I looked at the PR and it looked good to me. How can we get this in? through Gerrit?
Cheers, Abdullah. > On Nov 7, 2017, at 1:21 PM, Tomasz Pawłowski (JIRA) <[email protected]> wrote: > > > [ > https://issues.apache.org/jira/browse/ASTERIXDB-2157?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16242901#comment-16242901 > ] > > Tomasz Pawłowski commented on ASTERIXDB-2157: > --------------------------------------------- > > I have already created a pull request for this bug > https://github.com/apache/asterixdb/pull/6 including a proper unit test. > >> Parsing metadata of UDF with UnorderedList return type >> ------------------------------------------------------ >> >> Key: ASTERIXDB-2157 >> URL: https://issues.apache.org/jira/browse/ASTERIXDB-2157 >> Project: Apache AsterixDB >> Issue Type: Bug >> Components: MTD - Metadata >> Reporter: Tomasz Pawłowski >> Priority: Minor >> Labels: easyfix, newbie >> >> While defining a library UDF with return_type representing a unordered list >> (eg. {{ ASTRING }}). UDF is created with result type {{ {{ ASTRING }} }}. >> This error can be replicated with libraryFunction: >> <libraryFunction> >> <function_type>SCALAR</function_type> >> <name>test</name> >> <arguments>ASTRING</arguments> >> <return_type>{{ ASTRING }}</return_type> >> <definition>org.apache.asterix.external.library.TestFactory</definition> >> </libraryFunction> >> TestFactory.java: >> package org.apache.asterix.external.library; >> import org.apache.asterix.external.api.IExternalScalarFunction; >> import org.apache.asterix.external.api.IFunctionFactory; >> public class TestFactory implements IFunctionFactory { >> @Override >> public IExternalScalarFunction getExternalFunction() { >> return new TestFunction(); >> } >> } >> // END of TestFactory.java >> TestFunction.java: >> package org.apache.asterix.external.library; >> import org.apache.asterix.external.api.IExternalScalarFunction; >> import org.apache.asterix.external.api.IFunctionHelper; >> import org.apache.asterix.external.library.java.JObjects; >> import org.apache.asterix.om.types.BuiltinType; >> public class TestFunction implements IExternalScalarFunction { >> private JObjects.JUnorderedList results; >> @Override >> public void deinitialize() {} >> @Override >> public void evaluate(IFunctionHelper functionHelper) throws Exception { >> JObjects.JString input = (JObjects.JString) >> functionHelper.getArgument(0); >> results.reset(); >> JObjects.JUnorderedList test = new >> JObjects.JUnorderedList(BuiltinType.ASTRING); >> test.add(input); >> test.add(input); >> test.add(input); >> results.add(test); >> functionHelper.setResult(results); >> } >> @Override >> public void initialize(IFunctionHelper functionHelper) throws Exception{ >> results = (JObjects.JUnorderedList) functionHelper.getResultObject(); >> } >> } >> // END of TestFunction.java >> And executing (AQL): >> use dataverse test; >> testlib#test("test") >> Which results in: >> {{ {{ "test", "test", "test" }} }} >> At the same time writing TestFunction evaluate to return {{ ASTRING }} >> results in error: >> org.apache.hyracks.algebricks.common.exceptions.AlgebricksException: >> java.io.EOFException >> at >> org.apache.asterix.optimizer.rules.ConstantFoldingRule$ConstantFoldingVisitor.visitScalarFunctionCallExpression(ConstantFoldingRule.java:231) >> at >> org.apache.asterix.optimizer.rules.ConstantFoldingRule$ConstantFoldingVisitor.visitScalarFunctionCallExpression(ConstantFoldingRule.java:153) >> at >> org.apache.hyracks.algebricks.core.algebra.expressions.ScalarFunctionCallExpression.accept(ScalarFunctionCallExpression.java:55) >> at >> org.apache.asterix.optimizer.rules.ConstantFoldingRule$ConstantFoldingVisitor.transform(ConstantFoldingRule.java:163) >> at >> org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractAssignOperator.acceptExpressionTransform(AbstractAssignOperator.java:67) >> at >> org.apache.asterix.optimizer.rules.ConstantFoldingRule.rewritePost(ConstantFoldingRule.java:150) >> at >> org.apache.hyracks.algebricks.core.rewriter.base.AbstractRuleController.rewriteOperatorRef(AbstractRuleController.java:126) >> at >> org.apache.hyracks.algebricks.core.rewriter.base.AbstractRuleController.rewriteOperatorRef(AbstractRuleController.java:100) >> at >> org.apache.hyracks.algebricks.core.rewriter.base.AbstractRuleController.rewriteOperatorRef(AbstractRuleController.java:100) >> at >> org.apache.hyracks.algebricks.compiler.rewriter.rulecontrollers.SequentialFixpointRuleController.rewriteWithRuleCollection(SequentialFixpointRuleController.java:53) >> at >> org.apache.hyracks.algebricks.core.rewriter.base.HeuristicOptimizer.runOptimizationSets(HeuristicOptimizer.java:102) >> at >> org.apache.hyracks.algebricks.core.rewriter.base.HeuristicOptimizer.optimize(HeuristicOptimizer.java:82) >> at >> org.apache.hyracks.algebricks.compiler.api.HeuristicCompilerFactoryBuilder$1$1.optimize(HeuristicCompilerFactoryBuilder.java:90) >> at >> org.apache.asterix.api.common.APIFramework.compileQuery(APIFramework.java:267) >> at >> org.apache.asterix.app.translator.QueryTranslator.rewriteCompileQuery(QueryTranslator.java:1834) >> at >> org.apache.asterix.app.translator.QueryTranslator.lambda$handleQuery$1(QueryTranslator.java:2307) >> at >> org.apache.asterix.app.translator.QueryTranslator.createAndRunJob(QueryTranslator.java:2407) >> at >> org.apache.asterix.app.translator.QueryTranslator.deliverResult(QueryTranslator.java:2340) >> at >> org.apache.asterix.app.translator.QueryTranslator.handleQuery(QueryTranslator.java:2319) >> at >> org.apache.asterix.app.translator.QueryTranslator.compileAndExecute(QueryTranslator.java:370) >> at >> org.apache.asterix.app.translator.QueryTranslator.compileAndExecute(QueryTranslator.java:253) >> at >> org.apache.asterix.api.http.server.ApiServlet.post(ApiServlet.java:153) >> at >> org.apache.hyracks.http.server.AbstractServlet.handle(AbstractServlet.java:78) >> at >> org.apache.hyracks.http.server.HttpRequestHandler.handle(HttpRequestHandler.java:70) >> at >> org.apache.hyracks.http.server.HttpRequestHandler.call(HttpRequestHandler.java:55) >> at >> org.apache.hyracks.http.server.HttpRequestHandler.call(HttpRequestHandler.java:36) >> at java.util.concurrent.FutureTask.run(FutureTask.java:266) >> at >> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) >> at >> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) >> at java.lang.Thread.run(Thread.java:745) >> Caused by: org.apache.hyracks.api.exceptions.HyracksDataException: >> java.io.EOFException >> at >> org.apache.hyracks.api.exceptions.HyracksDataException.create(HyracksDataException.java:45) >> at >> org.apache.asterix.dataflow.data.nontagged.serde.AUnorderedListSerializerDeserializer.deserialize(AUnorderedListSerializerDeserializer.java:102) >> at >> org.apache.asterix.dataflow.data.nontagged.serde.AUnorderedListSerializerDeserializer.deserialize(AUnorderedListSerializerDeserializer.java:43) >> at >> org.apache.asterix.dataflow.data.nontagged.serde.AUnorderedListSerializerDeserializer.deserialize(AUnorderedListSerializerDeserializer.java:96) >> at >> org.apache.asterix.dataflow.data.nontagged.serde.AUnorderedListSerializerDeserializer.deserialize(AUnorderedListSerializerDeserializer.java:43) >> at >> org.apache.asterix.formats.nontagged.SerializerDeserializerProvider$1.deserialize(SerializerDeserializerProvider.java:191) >> at >> org.apache.asterix.formats.nontagged.SerializerDeserializerProvider$1.deserialize(SerializerDeserializerProvider.java:173) >> at >> org.apache.asterix.optimizer.rules.ConstantFoldingRule$ConstantFoldingVisitor.visitScalarFunctionCallExpression(ConstantFoldingRule.java:228) >> ... 29 more >> Caused by: java.io.EOFException >> at java.io.DataInputStream.readInt(DataInputStream.java:392) >> at >> org.apache.asterix.dataflow.data.nontagged.serde.AUnorderedListSerializerDeserializer.deserialize(AUnorderedListSerializerDeserializer.java:92) >> ... 35 more > > > > -- > This message was sent by Atlassian JIRA > (v6.4.14#64029)
