net.sf.saffron.oj.xlat
Class OJQueryExpander

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

public class OJQueryExpander
extends QueryExpander

OJQueryExpander passes over a parse tree, and converts relational expressions into regular Java constructs.

Since:
22 September, 2001
Version:
$Id: //open/saffron/src/net/sf/saffron/oj/xlat/OJQueryExpander.java#9 $
Author:
jhyde

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.EvaluationShuttle
evaluateDown, evaluateDown, evaluateDown, evaluateDown, evaluateDown, evaluateDown, evaluateDown, evaluateDown, evaluateDown, evaluateDown, evaluateDown, evaluateDown, evaluateDown, evaluateDown, evaluateDown, evaluateDown, evaluateDown, evaluateDown, evaluateDown, evaluateDown, evaluateDown, evaluateDown, evaluateDown, evaluateDown, evaluateDown, evaluateDown, evaluateDown, 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, evaluateUp, evaluateUp, evaluateUp, evaluateUp, evaluateUp, evaluateUp, evaluateUp, evaluateUp, evaluateUp, evaluateUp, evaluateUp, evaluateUp, evaluateUp, evaluateUp, evaluateUp, evaluateUp, evaluateUp, evaluateUp, evaluateUp, evaluateUp, evaluateUp, evaluateUp, evaluateUp, evaluateUp, evaluateUp, evaluateUp, evaluateUp, evaluateUp, evaluateUp, evaluateUp, getEnvironment, setEnvironment, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit
 
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

rootRowType

private SaffronType rootRowType

connection

private final SaffronConnection connection
Constructor Detail

OJQueryExpander

public OJQueryExpander(Environment env,
                       SaffronConnection connection)
Method Detail

getRootRowType

public SaffronType getRootRowType()
Returns:
the row Type for the root relational expression encountered during last expansion, or null if none

convertExpToOptimizedRel

public 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.

Parameters:
exp - expression to convert
eager - whether to try to convert expressions which might not be relational, for example arrays
convention - calling convention (see CallingConvention)
variable - iterator variable (for for-loop)
body - statement list to add code to
Returns:
the optimal relational expression

expandExpression

protected Expression expandExpression(Expression exp)
Description copied from class: QueryExpander
Converts an Expression into a java expression which returns an array.

Specified by:
expandExpression in class QueryExpander

expandForIn

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.

Specified by:
expandForIn in class QueryExpander

convertExpToUnoptimizedRel

public SaffronRel convertExpToUnoptimizedRel(Expression exp,
                                             boolean eager,
                                             QueryInfo queryInfo,
                                             OJClass desiredRowType)
Convert an expression to a relation, if it is relational, otherwise return null. This method only deals with relational expressions which can occur outside a query; joins, in particular, are only dealt with inside queries.

Parameters:
exp - expression to translate
eager - whether to translate expressions which may or may not be (such as references to arrays) into relational expressions
queryInfo - context to convert expressions into results of other queries; null if this expression is not inside a query
desiredRowType - row type required; if this is null, leave the results as they are
Returns:
a relational expression, or null if the expression was not relational

convertInsertToRel

private SaffronRel convertInsertToRel(InsertExpression insertExp,
                                      QueryInfo queryInfo)

convertRelToExp

private Expression convertRelToExp(SaffronRel rel)

expandExists

private Expression expandExists(Expression exp)

expandExpression_

private Expression expandExpression_(Expression exp,
                                     OJClass desiredRowType,
                                     CallingConvention convention)
Converts an Expression into a java expression which returns an array. Examples:
  1. Query as expression
    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();

Parameters:
desiredRowType - row type required; if this is null, leave the results as they are
convention - calling convention of the result

expandIn

private Expression expandIn(Expression seekExp,
                            Expression queryExp)
Translates an expression involving 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();
 }


isRelational

private static boolean isRelational(OJClass clazz)
Returns whether an expression clazz can be read as a relation.


SourceForge.net_Logo