Skip to content

Commit

Permalink
Merge pull request #763 from wolfgangmm/bugfix/groupby-fix
Browse files Browse the repository at this point in the history
Fixes for FLWOR expressions
  • Loading branch information
ljo committed Aug 17, 2015
2 parents 6edffea + 2af5979 commit 951bb7c
Show file tree
Hide file tree
Showing 36 changed files with 23,854 additions and 23,954 deletions.
90 changes: 90 additions & 0 deletions src/org/exist/xquery/AbstractFLWORClause.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
package org.exist.xquery;

import org.exist.dom.QName;
import org.exist.xquery.value.Sequence;
import org.exist.xquery.value.Type;

/**
* Abstract base class for clauses in a FLWOR expressions, for/let/group by ...
*/
public abstract class AbstractFLWORClause extends AbstractExpression implements FLWORClause {

protected LocalVariable firstVar = null;
private FLWORClause previousClause = null;
protected Expression returnExpr;
private int actualReturnType = Type.ITEM;

public AbstractFLWORClause(XQueryContext context) {
super(context);
}

public LocalVariable createVariable(String name) throws XPathException {
final LocalVariable var = new LocalVariable(QName.parse(context, name, null));
if (firstVar == null) {
firstVar = var;
}
return var;
}

@Override
public Sequence preEval(Sequence seq) throws XPathException {
// just return the input sequence by default
if (returnExpr instanceof FLWORClause) {
return ((FLWORClause)returnExpr).preEval(seq);
}
return seq;
}

@Override
public Sequence postEval(Sequence seq) throws XPathException {
// reset variable after evaluation has completed
firstVar = null;
return seq;
}

@Override
public void setReturnExpression(Expression expr) {
this.returnExpr = expr;
}

@Override
public Expression getReturnExpression() {
return returnExpr;
}

@Override
public LocalVariable getStartVariable() {
return firstVar;
}

@Override
public void setPreviousClause(FLWORClause clause) {
previousClause = clause;
}

@Override
public FLWORClause getPreviousClause() {
return previousClause;
}

protected void setActualReturnType(int type) {
this.actualReturnType = type;
}

@Override
public int returnsType() {
//Type.ITEM by default : this may change *after* evaluation
return actualReturnType;
}

@Override
public void resetState(boolean postOptimization) {
super.resetState(postOptimization);
firstVar = null;
}

@Override
public int getDependencies() {
return returnExpr.getDependencies();
}
}
15 changes: 15 additions & 0 deletions src/org/exist/xquery/BasicExpressionVisitor.java
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,21 @@ public void visitLetExpression(LetExpr letExpr) {
//Nothing to do
}

@Override
public void visitOrderByClause(OrderByClause orderBy) {
// Nothing to do
}

@Override
public void visitGroupByClause(GroupByClause groupBy) {
// Nothing to do
}

@Override
public void visitWhereClause(WhereClause where) {
// Nothing to do
}

@Override
public void visitBuiltinFunction(Function function) {
//Nothing to do
Expand Down
Loading

0 comments on commit 951bb7c

Please sign in to comment.