if ( fixedFilterPosition )
// Illegal SPARQL
return groupElt.getElements() ;
List<Element> groupElts = new ArrayList<Element>() ;
BasicPattern prev = null ;
List<ElementFilter> filters = null ;
PathBlock prev2 = null ;
for (Element elt : groupElt.getElements() )
{
if ( elt instanceof ElementFilter )
{
ElementFilter f = (ElementFilter)elt ;
if ( filters == null )
filters = new ArrayList<ElementFilter>() ;
filters.add(f) ;
// Collect filters but do not place them yet.
continue ;
}
if ( elt instanceof ElementTriplesBlock )
{
if ( prev2 != null )
throw new ARQInternalErrorException("Mixed ElementTriplesBlock and ElementPathBlock (case 1)") ;
ElementTriplesBlock etb = (ElementTriplesBlock)elt ;
if ( prev != null )
{
// Previous was an ElementTriplesBlock.
// Merge because they were adjacent in a group
// in syntax, so it must have been BGP, Filter, BGP.
// Or someone constructed a non-serializable query.
prev.addAll(etb.getPattern()) ;
continue ;
}
// New BGP.
// Copy - so that any later mergings do not change the original query.