|
||||||||||
| 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)
QueryExpanderExpression 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:
Emp[] femaleEmps = (select emp from emps as emp
where emp.gender.equals("F"));
becomes
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 result
private Expression expandIn(Expression seekExp,
Expression queryExp)
in. For example,
if ("Fred" in (select name from emps as emp)) {
yes();
}
becomes 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 | |||||||||