/* // $Id: //guest/julian_hyde/saffron/src/main/openjava/mop/QueryEnvironment.java#2 $ // 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.tools.parser.*; import openjava.ptree.*; /** * <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) { int i = lookupFrom(name); if (i >= 0) { return true; } if (parent != null) { return parent.isBind(name); } return false; } /** * Looks for a from-list item called <code>name</code>, and returns its * offset if it finds one, or -1 if not. */ public int lookupFrom(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)) { return i; } } return -1; // not found } 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. |