/* // $Id: //guest/julian_hyde/saffron/src/main/openjava/ptree/SetExpression.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.ptree; import openjava.mop.*; import java.util.Vector; /** * A <code>SetExpression</code> is an expression which consists of a set of * rows. (Other expressions, such as variable references, may have set types * also.) */ public abstract class SetExpression extends NonLeaf implements Expression { private OJClass rowType; // implement Expression public synchronized OJClass getRowType(Environment env) { if (rowType == null) { try { rowType = deriveRowType(env); } catch (Exception e) { System.err.println( "unexpected exception : " + e.toString() ); } } return rowType; } protected abstract OJClass deriveRowType(Environment env) throws Exception; // implement Expression public OJClass getType(Environment env) { OJClass rowType = getRowType(env); return OJClass.arrayOf(rowType); // try { // return OJClass.forName(rowType.getName() + "[]"); // } catch (OJClassNotFoundException e) { // throw Toolbox.newInternal(e); // } } public Expression[] flatten() { return flatten(this); } public static Expression[] flatten(Expression expression) { Vector v = new Vector(); if (expression != null) { flattenRecurse(expression, v); } Expression[] expressions = new Expression[v.size()]; v.copyInto(expressions); return expressions; } private static void flattenRecurse(Expression expression, Vector v) { if (expression instanceof JoinExpression) { JoinExpression join = (JoinExpression) expression; flattenRecurse(join.getLeft(), v); flattenRecurse(join.getRight(), v); } else { v.addElement(expression); } } }; // End SetExpression.java
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#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. |