/* // $Id: //guest/julian_hyde/saffron/src/main/openjava/ptree/SetExpression.java#1 $ // (C) Copyright 2001 Broadbase Software, Inc. // jhyde, 18 March, 2001 */ 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. |