/* // $Id: //guest/julian_hyde/saffron/src/main/openjava/mop/QueryEnvironment.java#3 $ // Saffron preprocessor and data engine // Copyright (C) 2002 Julian Hyde <julian.hyde@mail.com> // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Library General Public // License as published by the Free Software Foundation; either // version 2 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Library General Public License for more details. // // You should have received a copy of the GNU Library General Public // License along with this library; if not, write to the // Free Software Foundation, Inc., 59 Temple Place - Suite 330, // Boston, MA 02111-1307, USA. // // See the COPYING file located in the top-level-directory of // the archive of this library for complete text of license. */ package openjava.mop; import openjava.ptree.Expression; import openjava.ptree.QueryExpression; import openjava.ptree.SetExpression; /** * <code>QueryEnvironment</code> is the environment seen inside a {@link * QueryExpression}. The 'variables' are the tables in the from list; it * inherits stuff from the enclosing java environment, plus from enclosing * queries. TBD: can queries in a from list inherit? */ public class QueryEnvironment extends ClosedEnvironment { private QueryExpression query; public QueryEnvironment(Environment e, QueryExpression query) { super(e); this.query = query; } // implement Environment public OJClass lookupBind(String name) { Expression[] expressions = SetExpression.flatten(query.getFrom()); for (int i = 0; i < expressions.length; i++) { String alias = Toolbox.getAlias(expressions[i]); if (alias != null && alias.equals(name)) { try { return expressions[i].getRowType(parent); } catch (Exception e) { System.err.println( "unexpected exception : " + e.toString() ); break; } } } return parent.lookupBind(name); } // implement Environment public boolean isBind(String name) { Expression expression = lookupFrom(name); if (expression != null) { return true; } if (parent != null) { return parent.isBind(name); } return false; } /** * Looks for a from-list item called <code>name</code>. * * @param name name of from-list item * @param offset writes the zero-based offset to <code>offset[0]</code> if * the item is found * @return the expression if found, null if not */ public Expression lookupFrom(String name, int[] offset) { Expression[] expressions = SetExpression.flatten(query.getFrom()); for (int i = 0; i < expressions.length; i++) { Expression expression = expressions[i]; String alias = Toolbox.getAlias(expression); if (alias != null && alias.equals(name)) { if (offset != null) { offset[0] = i; } return expression; } } return null; // not found } public Expression lookupFrom(String name) { return lookupFrom(name, null); } public boolean isAggregating() { return query.getGroupList() != null; } } // End QueryEnvironment.java
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#3 | 1801 | Julian Hyde |
saffron: add ObjectSchema; rules can now be matched more than once; started to implement correlations in queries in from list. |
||
#2 | 1474 | Julian Hyde |
saffron: Aggregations are working. Renamed 'aggregator' to 'aggregation'. |
||
#1 | 1467 | Julian Hyde |
saffron: First saffron check-in; incorporate my changes to openjava. |