Project

Profile

Help

Bug #2389

closed

Streaming failure: No transmission filter available for let $zz:zz472117691 := ...

Added by Michael Kay over 9 years ago. Updated almost 9 years ago.

Status:
Closed
Priority:
Normal
Assignee:
Category:
Streaming
Sprint/Milestone:
Start date:
2015-06-03
Due date:
% Done:

100%

Estimated time:
Legacy ID:
Applies to branch:
9.6
Fix Committed on Branch:
9.6
Fixed in Maintenance Release:
Platforms:

Description

A test stylesheet using xsl:stream fails with the above error.

Actions #2

Updated by Michael Kay over 9 years ago

The basic problem is a failure to handle a path expression (or for-each expression) whose LHS is a let expression:

(let $x := data($y) return a / b[$x = @y]) / c

This expression is constructed as the result of a previous optimisation.

The simplest (though ad-hoc) aproach might be to move the variable binding out of the path expression, making it

let $x := data($y) return ( a / b[$x = @y] / c )

Actions #3

Updated by Michael Kay over 9 years ago

I changed LetExpressionAdjunct to be a TransmissionFilter and it fixed this case. Unfortunately it broke other tests, notably tests where the "select" rather than the "action" part of the LetExpression is consuming. I don't immediately see a way around this apart from having two different versions of LetExpressionAdjunct for the two cases, which is unconventional, but might be doable.

Actions #4

Updated by Michael Kay over 9 years ago

I've changed it to use a different StreamingAdjunct depending on which subexpression is consuming, and this both fixes the bug and solves the regression problems. I'm not very happy with this design (partly because we need a StreamingAdjunct in order to decide which subexpession is consuming...) but it will do for a patch. For 9.7 we need to look at the approach more carefully.

I've committed the 9.6 patch, but leaving open for further thought on 9.7

Actions #5

Updated by Michael Kay over 9 years ago

Simplified version of the repro added to the w3c test suite as insn/stream-500

Actions #6

Updated by Michael Kay over 9 years ago

  • Status changed from In Progress to Resolved

For 9.7 I decided to do essentially what the 9.6 patch does: have two different streaming Adjuncts for a LetExpression depending on which operand is consuming. But I regularised the approach slightly by introducing Expression.getStreamingAdjunct(Operand consumingOperand) so that any expression can play this trick.

Actions #7

Updated by O'Neil Delpratt over 9 years ago

  • Status changed from Resolved to Closed
  • % Done changed from 0 to 100
  • Fixed in version set to 9.6.0.7

Bug fix applied in the Saxon 9.6.0.7 maintenance release.

Actions #8

Updated by O'Neil Delpratt almost 9 years ago

  • Applies to branch 9.6 added
  • Fix Committed on Branch 9.6 added
  • Fixed in Maintenance Release 9.6.0.7 added
Actions #9

Updated by O'Neil Delpratt almost 9 years ago

  • Sprint/Milestone set to 9.6.0.7

Please register to edit this issue

Also available in: Atom PDF