[
https://issues.jboss.org/browse/TEIID-2769?page=com.atlassian.jira.plugin...
]
Steven Hawkins commented on TEIID-2769:
---------------------------------------
The issue here is that users have to careful when using the streaming option. The
xmlparse counts as one read and the xmltable counts as another and thus an exception. If
you pass the blob directly, use the wellformed option on xmlparse, or don't use a
streaming result, then you won't get an exception. I'm not sure if there is a
change that we'd want to make here other than maybe putting a longer message about not
re-reading a streaming result.
BLOB as virtual procedure parameter is getting closed
-----------------------------------------------------
Key: TEIID-2769
URL:
https://issues.jboss.org/browse/TEIID-2769
Project: Teiid
Issue Type: Bug
Components: Server
Affects Versions: 8.4.1
Reporter: Van Halbert
Assignee: Steven Hawkins
Not sure what is the cause.
I have two virtual procedures [1][2]. [2] has a XMLLiteral parameter. I call [2] inside
[1]. However I get exception [3] because the response.result blob stream is apparently
closed.
[1] CREATE VIRTUAL PROCEDURE
BEGIN
SELECT t.* FROM (EXEC PeopleRestXmlSource.invokeHttp('GET', null, null, TRUE))
AS response, TABLE(EXEC PeopleRestXmlView.getPeople_response(XMLPARSE(DOCUMENT
response.result))) AS t;
END
[2] CREATE VIRTUAL PROCEDURE
BEGIN
SELECT t.* FROM XMLTABLE('//return' PASSING
PeopleJaxwsView.getPeopleByName_response.xml_in COLUMNS name string PATH 'text()')
AS t;
END
[3]
org.teiid.jdbc.TeiidSQLException: TEIID30328 Unable to evaluate XMLPARSE(DOCUMENT
response.result): TEIID30331 java.sql.SQLException: Already Freed.
at org.teiid.jdbc.TeiidSQLException.create(TeiidSQLException.java:135)
at org.teiid.jdbc.TeiidSQLException.create(TeiidSQLException.java:71)
at org.teiid.jdbc.StatementImpl.postReceiveResults(StatementImpl.java:668)
at org.teiid.jdbc.StatementImpl.access$100(StatementImpl.java:63)
at org.teiid.jdbc.StatementImpl$2.onCompletion(StatementImpl.java:516)
at org.teiid.client.util.ResultsFuture.done(ResultsFuture.java:135)
at org.teiid.client.util.ResultsFuture.access$200(ResultsFuture.java:40)
at org.teiid.client.util.ResultsFuture$1.receiveResults(ResultsFuture.java:79)
at
org.teiid.net.socket.SocketServerInstanceImpl.receivedMessage(SocketServerInstanceImpl.java:242)
at
org.teiid.net.socket.SocketServerInstanceImpl.read(SocketServerInstanceImpl.java:278)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at
org.teiid.net.socket.SocketServerConnectionFactory$ShutdownHandler.invoke(SocketServerConnectionFactory.java:102)
at $Proxy1.read(Unknown Source)
at
org.teiid.net.socket.SocketServerInstanceImpl$RemoteInvocationHandler$1.get(SocketServerInstanceImpl.java:377)
at org.teiid.jdbc.StatementImpl.executeSql(StatementImpl.java:525)
at org.teiid.jdbc.StatementImpl.executeSql(StatementImpl.java:393)
at org.teiid.jdbc.StatementImpl.executeQuery(StatementImpl.java:327)
at JDBCClient.execute(JDBCClient.java:81)
at JDBCClient.main(JDBCClient.java:48)
Caused by: org.teiid.api.exception.query.ExpressionEvaluationException: TEIID30328 Unable
to evaluate XMLPARSE(DOCUMENT response.result): TEIID30331 java.sql.SQLException: Already
Freed.
at org.teiid.query.eval.Evaluator.evaluate(Evaluator.java:608)
at
org.teiid.query.processor.proc.ProcedurePlan.evaluateExpression(ProcedurePlan.java:804)
at org.teiid.query.processor.proc.ProcedurePlan.open(ProcedurePlan.java:211)
at
org.teiid.query.processor.relational.PlanExecutionNode.open(PlanExecutionNode.java:82)
at org.teiid.query.processor.relational.RelationalNode.open(RelationalNode.java:254)
at org.teiid.query.processor.relational.JoinStrategy.openRight(JoinStrategy.java:105)
at
org.teiid.query.processor.relational.NestedTableJoinStrategy.process(NestedTableJoinStrategy.java:114)
at org.teiid.query.processor.relational.JoinNode.nextBatchDirect(JoinNode.java:211)
at
org.teiid.query.processor.relational.RelationalNode.nextBatch(RelationalNode.java:278)
at
org.teiid.query.processor.relational.ProjectNode.nextBatchDirect(ProjectNode.java:146)
at
org.teiid.query.processor.relational.RelationalNode.nextBatch(RelationalNode.java:278)
at
org.teiid.query.processor.relational.RelationalPlan.nextBatch(RelationalPlan.java:149)
at org.teiid.query.processor.QueryProcessor.nextBatchDirect(QueryProcessor.java:149)
at org.teiid.query.processor.QueryProcessor.nextBatch(QueryProcessor.java:112)
at org.teiid.query.processor.BatchIterator.finalRow(BatchIterator.java:69)
at
org.teiid.common.buffer.AbstractTupleSource.getCurrentTuple(AbstractTupleSource.java:70)
at org.teiid.query.processor.BatchIterator.getCurrentTuple(BatchIterator.java:84)
at org.teiid.common.buffer.AbstractTupleSource.hasNext(AbstractTupleSource.java:92)
at org.teiid.query.processor.proc.ProcedurePlan.executePlan(ProcedurePlan.java:563)
at
org.teiid.query.processor.proc.CreateCursorResultSetInstruction.process(CreateCursorResultSetInstruction.java:68)
at
org.teiid.query.processor.proc.ProcedurePlan.processProcedure(ProcedurePlan.java:356)
at org.teiid.query.processor.proc.ProcedurePlan.nextBatchDirect(ProcedurePlan.java:283)
at org.teiid.query.processor.proc.ProcedurePlan.nextBatch(ProcedurePlan.java:257)
at
org.teiid.query.processor.relational.PlanExecutionNode.nextBatchDirect(PlanExecutionNode.java:118)
at
org.teiid.query.processor.relational.RelationalNode.nextBatch(RelationalNode.java:278)
at
org.teiid.query.processor.relational.ProjectNode.nextBatchDirect(ProjectNode.java:146)
at
org.teiid.query.processor.relational.RelationalNode.nextBatch(RelationalNode.java:278)
at
org.teiid.query.processor.relational.ProjectNode.nextBatchDirect(ProjectNode.java:146)
at
org.teiid.query.processor.relational.RelationalNode.nextBatch(RelationalNode.java:278)
at
org.teiid.query.processor.relational.ProjectNode.nextBatchDirect(ProjectNode.java:146)
at
org.teiid.query.processor.relational.RelationalNode.nextBatch(RelationalNode.java:278)
at
org.teiid.query.processor.relational.RelationalPlan.nextBatch(RelationalPlan.java:149)
at org.teiid.query.processor.QueryProcessor.nextBatchDirect(QueryProcessor.java:149)
at org.teiid.query.processor.QueryProcessor.nextBatch(QueryProcessor.java:112)
at org.teiid.query.processor.BatchCollector.collectTuples(BatchCollector.java:157)
at org.teiid.query.processor.BatchCollector.collectTuples(BatchCollector.java:139)
at org.teiid.dqp.internal.process.RequestWorkItem.processMore(RequestWorkItem.java:435)
at org.teiid.dqp.internal.process.RequestWorkItem.process(RequestWorkItem.java:320)
at org.teiid.dqp.internal.process.AbstractWorkItem.run(AbstractWorkItem.java:51)
at org.teiid.dqp.internal.process.RequestWorkItem.run(RequestWorkItem.java:248)
at org.teiid.dqp.internal.process.DQPWorkContext.runInContext(DQPWorkContext.java:269)
at
org.teiid.dqp.internal.process.ThreadReuseExecutor$RunnableWrapper.run(ThreadReuseExecutor.java:119)
at
org.teiid.dqp.internal.process.ThreadReuseExecutor$3.run(ThreadReuseExecutor.java:214)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Caused by: org.teiid.api.exception.query.ExpressionEvaluationException: TEIID30331
java.sql.SQLException: Already Freed.
at org.teiid.query.eval.Evaluator.evaluateXMLParse(Evaluator.java:734)
at org.teiid.query.eval.Evaluator.internalEvaluate(Evaluator.java:668)
at org.teiid.query.eval.Evaluator.evaluate(Evaluator.java:606)
... 45 more
Caused by: java.sql.SQLException: java.sql.SQLException: Already Freed.
at org.teiid.core.types.BaseLob.getBinaryStream(BaseLob.java:105)
at org.teiid.core.types.BaseLob.getCharacterStream(BaseLob.java:98)
at org.teiid.query.eval.Evaluator.evaluateXMLParse(Evaluator.java:727)
... 47 more
Caused by: java.io.IOException: java.sql.SQLException: Already Freed.
at
org.teiid.core.types.InputStreamFactory$BlobInputStreamFactory.getInputStream(InputStreamFactory.java:205)
at org.teiid.core.types.BaseLob.getBinaryStream(BaseLob.java:103)
... 49 more
Caused by: java.sql.SQLException: Already Freed.
at
org.teiid.translator.ws.BinaryWSProcedureExecution$StreamingBlob.getBinaryStream(BinaryWSProcedureExecution.java:72)
at
org.teiid.core.types.InputStreamFactory$BlobInputStreamFactory.getInputStream(InputStreamFactory.java:203)
... 50 more
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see:
http://www.atlassian.com/software/jira