|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--openjava.ptree.util.ParseTreeVisitor | +--openjava.ptree.util.EvaluationShuttle | +--openjava.ptree.util.ScopeHandler | +--openjava.ptree.util.QueryExpander | +--net.sf.saffron.oj.xlat.OJQueryExpander
OJQueryExpander
passes over a parse tree, and converts
relational expressions into regular Java constructs.
Field Summary | |
private SaffronConnection |
connection
|
private SaffronType |
rootRowType
|
Fields inherited from class openjava.ptree.util.ScopeHandler |
|
Fields inherited from class openjava.ptree.util.EvaluationShuttle |
|
Constructor Summary | |
OJQueryExpander(Environment env,
SaffronConnection connection)
|
Method Summary | |
SaffronRel |
convertExpToOptimizedRel(Expression exp,
boolean eager,
CallingConvention convention,
Variable variable,
StatementList body)
Converts an expression to a relational expression according to a particular calling convention, and optimizes it. |
SaffronRel |
convertExpToUnoptimizedRel(Expression exp,
boolean eager,
QueryInfo queryInfo,
OJClass desiredRowType)
Convert an expression to a relation, if it is relational, otherwise return null. |
private SaffronRel |
convertInsertToRel(InsertExpression insertExp,
QueryInfo queryInfo)
|
private Expression |
convertRelToExp(SaffronRel rel)
|
private Expression |
expandExists(Expression exp)
|
private Expression |
expandExpression_(Expression exp,
OJClass desiredRowType,
CallingConvention convention)
Converts an Expression into a java expression which returns an
array. |
protected Expression |
expandExpression(Expression exp)
Converts an Expression into a java expression which returns an
array. |
protected Statement |
expandForIn(Variable variable,
Expression exp,
StatementList body)
Converts an Expression of the form for (variable
in exp) {body} into a regular java Statement . |
private Expression |
expandIn(Expression seekExp,
Expression queryExp)
Translates an expression involving in . |
SaffronType |
getRootRowType()
|
private static boolean |
isRelational(OJClass clazz)
Returns whether an expression clazz can be read as a
relation. |
Methods inherited from class openjava.ptree.util.QueryExpander |
evaluateDown, evaluateDown, evaluateDown, evaluateDown, evaluateDown, evaluateDown, evaluateDown, isRelational |
Methods inherited from class openjava.ptree.util.ScopeHandler |
evaluateDown, evaluateDown, evaluateDown, evaluateDown, evaluateDown, evaluateDown, evaluateDown, evaluateDown, evaluateDown, evaluateDown, evaluateDown, evaluateDown, evaluateUp, evaluateUp, evaluateUp, evaluateUp, evaluateUp, evaluateUp, evaluateUp, evaluateUp, evaluateUp, evaluateUp, evaluateUp, evaluateUp, evaluateUp, evaluateUp, pop, push, pushClosedEnvironment |
Methods inherited from class openjava.ptree.util.ParseTreeVisitor |
visit, visit, visit, visit, visit, visit, visit, visit, visit |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
private SaffronType rootRowType
private final SaffronConnection connection
Constructor Detail |
public OJQueryExpander(Environment env, SaffronConnection connection)
Method Detail |
public SaffronType getRootRowType()
public SaffronRel convertExpToOptimizedRel(Expression exp, boolean eager, CallingConvention convention, Variable variable, StatementList body)
exp
- expression to converteager
- whether to try to convert expressions which might not be
relational, for example arraysconvention
- calling convention (see CallingConvention
)variable
- iterator variable (for for
-loop)body
- statement list to add code to
protected Expression expandExpression(Expression exp)
QueryExpander
Expression
into a java expression which returns an
array.
expandExpression
in class QueryExpander
protected Statement expandForIn(Variable variable, Expression exp, StatementList body)
Expression
of the form for (variable
in exp) {body}
into a regular java Statement
.
expandForIn
in class QueryExpander
public SaffronRel convertExpToUnoptimizedRel(Expression exp, boolean eager, QueryInfo queryInfo, OJClass desiredRowType)
exp
- expression to translateeager
- whether to translate expressions which may or may not be
(such as references to arrays) into relational expressionsqueryInfo
- context to convert expressions into results of other
queries; null if this expression is not inside a querydesiredRowType
- row type required; if this is null, leave the
results as they are
private SaffronRel convertInsertToRel(InsertExpression insertExp, QueryInfo queryInfo)
private Expression convertRelToExp(SaffronRel rel)
private Expression expandExists(Expression exp)
private Expression expandExpression_(Expression exp, OJClass desiredRowType, CallingConvention convention)
Expression
into a java expression which returns an
array. Examples:
becomesEmp[] femaleEmps = (select emp from emps as emp where emp.gender.equals("F"));
Emp[] femaleEmps = new Object() { public Emp[] asArray() { Vector v = new Vector(); for (i in (select emp from emps as emp where emp.gender.equals("F"))) { v.addElement(i); } Emp[] a = new Emp[v.size()]; v.copyInto(a); return a; } }.asArray();
desiredRowType
- row type required; if this is null, leave the
results as they areconvention
- calling convention of the resultprivate Expression expandIn(Expression seekExp, Expression queryExp)
in
. For example,
becomesif ("Fred" in (select name from emps as emp)) { yes(); }
in
within a query
if (exists ( select where "Joe" in (select name from emps as emp))) { yes(); }
private static boolean isRelational(OJClass clazz)
clazz
can be read as a
relation.
|
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |