You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by ha...@apache.org on 2001/12/01 16:30:43 UTC

cvs commit: jakarta-avalon-cornerstone/apps/db/src/scripts/lxsql Test1.script

hammant     01/12/01 07:30:42

  Modified:    apps/db/src/java/org/apache/avalon/db/basic/actions
                        BasicCreateAggregateView.java BasicDeleteRows.java
                        BasicUpdateRows.java
               apps/db/src/java/org/apache/avalon/db/basic/data
                        BasicAggregateRow.java BasicAggregateView.java
               apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql
                        BasicLXSQLAggregateHandler.java
                        BasicLXSQLCreateAggregateViewHandler.java
                        BasicLXSQLDeleteRowsHandler.java
                        BasicLXSQLUpdateRowsHandler.java
               apps/db/src/java/org/apache/avalon/db/data
                        AggregateFunctionColumn.java
               apps/db/src/java/org/apache/avalon/db/data/impl
                        AbstractAggregateRow.java AbstractQueryable.java
                        AbstractTable.java AbstractView.java
                        DefaultAggregateAveColumn.java
                        DefaultAggregateCountColumn.java
                        DefaultAggregateMaxColumn.java
                        DefaultAggregateMinColumn.java
                        DefaultAggregateSumColumn.java
               apps/db/src/scripts/lxsql Test1.script
  Added:       apps/db/src/java/org/apache/avalon/db/data/impl
                        AbstractAggregateQueryable.java
                        AbstractConstituentQueryable.java
  Removed:     apps/db/src/java/org/apache/avalon/db/data/impl
                        AbstractAggregateView.java
  Log:
  Aggregates one step closer.
  
  Revision  Changes    Path
  1.4       +8 -12     jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/actions/BasicCreateAggregateView.java
  
  Index: BasicCreateAggregateView.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/actions/BasicCreateAggregateView.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- BasicCreateAggregateView.java	2001/12/01 11:49:24	1.3
  +++ BasicCreateAggregateView.java	2001/12/01 15:30:41	1.4
  @@ -21,30 +21,26 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.3 $
  + * @version $Revision: 1.4 $
    */
   public class BasicCreateAggregateView extends BasicCreateQueryable implements CreateAggregateView {
   
       protected String mViewName;
       protected Queryable mSrcQueryable;
       protected BasicCriteria mBasicCriteria;
  +    protected Column[] mKeyColumns;
  +    protected Column[] mFunctionColumns;
   
       public BasicCreateAggregateView(String viewName, Queryable srcQueryable, Column[] keyColumns, Column[] functionColumns, BasicCriteria basicCriteria) {
  -        super(makeAllColumns(keyColumns, functionColumns));
  +        super(BasicAggregateView.makeAllColumns(keyColumns, functionColumns));
           mViewName = viewName;
           mSrcQueryable = srcQueryable;
  +        mKeyColumns = keyColumns;
  +        mFunctionColumns = functionColumns;
           mBasicCriteria = basicCriteria;
       }
   
  -    private static Column[] makeAllColumns(Column[] keyColumns, Column[] functColumns) {
  -        Column[] allColumns = new Column[keyColumns.length + functColumns.length];
  -        System.arraycopy(keyColumns,0,allColumns,0,keyColumns.length);
  -        System.arraycopy(functColumns,0,allColumns,keyColumns.length,functColumns.length);
  -        for (int i =0; i < allColumns.length; i++) {
  -            allColumns[i].setIndex(i);
  -        }
  -        return allColumns;
  -    }
  +
   
       public void initialize() throws ActionException {
       }
  @@ -58,7 +54,7 @@
   
           System.out.println("cav execute");
   
  -        BasicAggregateView view = new BasicAggregateView(mViewName, mColumns, mSrcQueryable ,mBasicCriteria);
  +        BasicAggregateView view = new BasicAggregateView(mViewName, mKeyColumns, mFunctionColumns, mSrcQueryable ,mBasicCriteria);
           view.enableLogging(this.getLogger());
   
   
  
  
  
  1.7       +6 -6      jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/actions/BasicDeleteRows.java
  
  Index: BasicDeleteRows.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/actions/BasicDeleteRows.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- BasicDeleteRows.java	2001/11/29 10:35:26	1.6
  +++ BasicDeleteRows.java	2001/12/01 15:30:41	1.7
  @@ -11,9 +11,9 @@
   import org.apache.avalon.db.actions.impl.AbstractAction;
   import org.apache.avalon.db.actions.ActionException;
   import org.apache.avalon.db.actions.DeleteRows;
  -import org.apache.avalon.db.data.impl.AbstractQueryable;
   import org.apache.avalon.db.data.impl.AbstractTable;
   import org.apache.avalon.db.data.impl.AbstractView;
  +import org.apache.avalon.db.data.impl.AbstractConstituentQueryable;
   import org.apache.avalon.db.basic.data.BasicRow;
   import org.apache.avalon.framework.logger.LogEnabled;
   
  @@ -26,13 +26,13 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.6 $
  + * @version $Revision: 1.7 $
    */
   public class BasicDeleteRows extends AbstractAction
           implements DeleteRows, LogEnabled {
   
       private BasicCriteria mBasicCriteria;
  -    private AbstractQueryable mQueryable;
  +    private AbstractConstituentQueryable mQueryable;
       private AbstractTable mTable;
       private int mRecordCount;
   
  @@ -44,7 +44,7 @@
        * @param document
        *
        */
  -    public BasicDeleteRows(AbstractQueryable queryable, BasicCriteria basicCriteria) {
  +    public BasicDeleteRows(AbstractConstituentQueryable queryable, BasicCriteria basicCriteria) {
           mQueryable = queryable;
           mBasicCriteria = basicCriteria;
       }
  @@ -56,11 +56,11 @@
               mTable = (AbstractTable) mQueryable;
           } else if (mQueryable instanceof AbstractView) {
               boolean more = true;
  -            AbstractQueryable aq = mQueryable;
  +            AbstractConstituentQueryable aq = mQueryable;
               AbstractView av = null;
               while (mTable == null & more) {
                   av = (AbstractView) mQueryable;
  -                aq = (AbstractQueryable) av.getSourceQueryable();
  +                aq = (AbstractConstituentQueryable) av.getSourceQueryable();
                   if (aq == null) {
                       more = false;
                   } if (aq instanceof AbstractTable) {
  
  
  
  1.6       +4 -4      jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/actions/BasicUpdateRows.java
  
  Index: BasicUpdateRows.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/actions/BasicUpdateRows.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- BasicUpdateRows.java	2001/11/29 10:35:26	1.5
  +++ BasicUpdateRows.java	2001/12/01 15:30:41	1.6
  @@ -11,7 +11,7 @@
   import org.apache.avalon.db.actions.impl.AbstractAction;
   import org.apache.avalon.db.actions.ActionException;
   import org.apache.avalon.db.actions.UpdateRows;
  -import org.apache.avalon.db.data.impl.AbstractQueryable;
  +import org.apache.avalon.db.data.impl.AbstractConstituentQueryable;
   import org.apache.avalon.db.basic.data.BasicRow;
   import org.apache.avalon.framework.logger.LogEnabled;
   
  @@ -22,13 +22,13 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.5 $
  + * @version $Revision: 1.6 $
    */
   public class BasicUpdateRows extends AbstractAction
           implements UpdateRows, LogEnabled, BasicCriteriaMatchingRowCallback {
   
       private BasicCriteria mBasicCriteria;
  -    private AbstractQueryable mQueryable;
  +    private AbstractConstituentQueryable mQueryable;
       private int mRecordCount;
   
       /**
  @@ -39,7 +39,7 @@
        * @param document
        *
        */
  -    public BasicUpdateRows(AbstractQueryable queryable, BasicCriteria basicCriteria) {
  +    public BasicUpdateRows(AbstractConstituentQueryable queryable, BasicCriteria basicCriteria) {
           mQueryable = queryable;
           mBasicCriteria = basicCriteria;
       }
  
  
  
  1.2       +10 -33    jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/data/BasicAggregateRow.java
  
  Index: BasicAggregateRow.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/data/BasicAggregateRow.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- BasicAggregateRow.java	2001/11/24 20:26:12	1.1
  +++ BasicAggregateRow.java	2001/12/01 15:30:42	1.2
  @@ -8,48 +8,25 @@
   package org.apache.avalon.db.basic.data;
   
   import org.apache.avalon.db.data.impl.AbstractAggregateRow;
  -import org.apache.avalon.db.data.Column;
  -import org.apache.avalon.db.data.Row;
  +import org.apache.avalon.db.data.impl.DefaultKey;
  +import org.apache.avalon.db.data.impl.AbstractQueryable;
   
   import java.util.Vector;
  -import java.io.Serializable;
   
  -public class BasicAggregateRow extends AbstractAggregateRow {
   
  -    protected Vector mRow;
  -    protected Column[] mColumns;
  +public class BasicAggregateRow extends AbstractAggregateRow {
      
  -    private BasicTable mBasicTable;
  +    private AbstractQueryable mAbstractQueryable;
   
  -    public BasicAggregateRow(BasicTable basicTable, Vector row) {
  -        super(basicTable);
  -        mBasicTable = basicTable;
  -        mColumns = basicTable.getColumns();
  -        mRow = row;
  -    }
  -
  -    public Object getValue(String columnName) {
  -        for (int x = 0; x < mColumns.length; x++) {
  -            if (mColumns[x].getColumnName().equals(columnName)) {
  -                return mRow.elementAt(x);
  -            }
  -        }
  -        return null; //TODO
  -    }
  -
  -    public Column getColumn(String columnName) {
  -        return getColumn(columnName,true);
  -    }
  -
  -    public Column getColumn(String columnName, boolean throwExcpt) {
  -        return mBasicTable.getColumn(columnName, throwExcpt);
  -    }
  +    private Object[] mValues;
   
  -    public int getColumsLength() {
  -        return mColumns.length;
  +    public BasicAggregateRow(AbstractQueryable abstractQueryable, DefaultKey dk, Object[] aggRow) {
  +        super(abstractQueryable,dk);
  +        mAbstractQueryable = abstractQueryable;
  +        mValues = aggRow;
       }
   
       public Object getValue(int idx) {
  -        return mRow.elementAt(idx);
  +        return mValues[idx];
       }
   }
  
  
  
  1.4       +54 -10    jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/data/BasicAggregateView.java
  
  Index: BasicAggregateView.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/data/BasicAggregateView.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- BasicAggregateView.java	2001/11/29 10:35:44	1.3
  +++ BasicAggregateView.java	2001/12/01 15:30:42	1.4
  @@ -8,36 +8,45 @@
   package org.apache.avalon.db.basic.data;
   
   import org.apache.avalon.db.data.impl.AbstractView;
  -import org.apache.avalon.db.data.impl.AbstractAggregateView;
  +import org.apache.avalon.db.data.impl.AbstractAggregateQueryable;
  +import org.apache.avalon.db.data.impl.AbstractAggregateRow;
  +import org.apache.avalon.db.data.impl.DefaultKey;
   import org.apache.avalon.db.data.Column;
   import org.apache.avalon.db.data.Queryable;
   import org.apache.avalon.db.data.RowListener;
   import org.apache.avalon.db.data.Row;
   import org.apache.avalon.db.data.DataException;
  +import org.apache.avalon.db.data.AggregateKeyColumn;
  +import org.apache.avalon.db.data.AggregateFunctionColumn;
   import org.apache.avalon.db.basic.actions.BasicSelectSimple;
   import org.apache.avalon.db.basic.actions.BasicCriteria;
   import org.apache.avalon.db.basic.actions.BasicCriteriaMatchingRowCallback;
   
   import java.util.Collection;
   import java.util.Iterator;
  +import java.util.Vector;
   
   /**
    * Class BasicView
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.3 $
  + * @version $Revision: 1.4 $
    */
  -public class BasicAggregateView extends AbstractAggregateView {
  +public class BasicAggregateView extends AbstractAggregateQueryable {
   
       private BasicCriteria mBasicCriteria;
  -    private Queryable mQueryable;
  +    private Queryable mSrcQueryable;
       private RowListener mRowListener;
  +    protected Column[] mKeyColumns;
  +    protected Column[] mFunctionColumns;
   
  -    public BasicAggregateView(String name, Column[] columns, Queryable queryable, BasicCriteria basicCriteria) {
  -        super(name, columns);
  +    public BasicAggregateView(String name, Column[] keyColumns, Column[] functionColumns, Queryable srcQueryable, BasicCriteria basicCriteria) {
  +        super(name, makeAllColumns(keyColumns, functionColumns));
  +        mKeyColumns = keyColumns;
  +        mFunctionColumns = functionColumns;
           mBasicCriteria = basicCriteria;
  -        mQueryable = queryable;
  +        mSrcQueryable = srcQueryable;
   
           mRowListener = new RowListener() {
               public void rowAdded(Queryable queryable, Row row) {
  @@ -46,7 +55,7 @@
                           addRow(row);
                       }
                   } catch (DataException de) {
  -                    getLogger().debug("(BasicView) Some exception during rowAdded",de);
  +                    getLogger().debug("(BasicAggregateView) Some exception during rowAdded",de);
                   }
               }
               public void rowDeleted(Queryable queryable, Row row) {
  @@ -129,11 +138,46 @@
                   }
               }
           };
  -        queryable.addRowListener(mRowListener);
  +        srcQueryable.addRowListener(mRowListener);
       }
   
  +    public static Column[] makeAllColumns(Column[] keyColumns, Column[] functColumns) {
  +        Column[] allColumns = new Column[keyColumns.length + functColumns.length];
  +        System.arraycopy(keyColumns,0,allColumns,0,keyColumns.length);
  +        System.arraycopy(functColumns,0,allColumns,keyColumns.length,functColumns.length);
  +        for (int i =0; i < allColumns.length; i++) {
  +            allColumns[i].setIndex(i);
  +        }
  +        return allColumns;
  +    }
       public Queryable getSourceQueryable() {
  -        return mQueryable;
  +        return mSrcQueryable;
  +    }
  +
  +    protected DefaultKey getDefaultKey(Row srcRow) {
  +        DefaultKey dk = new DefaultKey(mKeyColumns.length);
  +        for (int f =0; f < mKeyColumns.length; f++) {
  +            dk.addKeyElem(f,mKeyColumns[f].getValue(srcRow));
  +        }
  +        return dk;
       }
   
  +    protected AbstractAggregateRow makeAbstractAggregateRow(Row srcRow, DefaultKey dk) {
  +
  +        Object[] aggRow = new Object[mColumns.length];
  +
  +        for (int i =0; i < mColumns.length; i++) {
  +            Column col = mColumns[i];
  +            if (col instanceof AggregateKeyColumn) {
  +                aggRow[i] = col.getValue(srcRow);
  +            } else if (col instanceof AggregateFunctionColumn) {
  +                AggregateFunctionColumn afc = (AggregateFunctionColumn) col;
  +                aggRow[i] = afc.getDefaultValue();
  +            } else {
  +                // should never happen.
  +            }
  +        }
  +
  +        return new BasicAggregateRow(this,dk, aggRow);
  +    }
   }
  
  
  
  1.7       +18 -16    jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLAggregateHandler.java
  
  Index: BasicLXSQLAggregateHandler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLAggregateHandler.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- BasicLXSQLAggregateHandler.java	2001/12/01 11:49:25	1.6
  +++ BasicLXSQLAggregateHandler.java	2001/12/01 15:30:42	1.7
  @@ -12,6 +12,8 @@
   import org.apache.avalon.db.services.DatabasePersistor;
   import org.apache.avalon.db.data.Column;
   import org.apache.avalon.db.data.Queryable;
  +import org.apache.avalon.db.data.AggregateKeyColumn;
  +import org.apache.avalon.db.data.AggregateFunctionColumn;
   import org.apache.avalon.db.data.types.StringColumn;
   import org.apache.avalon.db.data.impl.DefaultAggregateCountColumn;
   import org.apache.avalon.db.data.impl.DefaultAggregateSumColumn;
  @@ -33,7 +35,7 @@
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
    * @author Gerhard Froehlich <a href="mailto:g-froehlich@gmx.de">g-froehlich@gmx.de</a>
  - * @version $Revision: 1.6 $
  + * @version $Revision: 1.7 $
    */
   public abstract class BasicLXSQLAggregateHandler extends BasicLXSQLHandler {
   
  @@ -54,7 +56,7 @@
        *
        *
        */
  -    protected Column[] getAggregateFunctionColumns(Element fnColumnsNode) throws ActionException {
  +    protected AggregateFunctionColumn[] getAggregateFunctionColumns(Element fnColumnsNode) throws ActionException {
   
           Vector columns = new Vector();
   
  @@ -78,60 +80,60 @@
               }
           }
   
  -        Column[] columnsAry = new Column[columns.size()];
  +        AggregateFunctionColumn[] columnsAry = new AggregateFunctionColumn[columns.size()];
           columns.toArray(columnsAry);
   
           return columnsAry;
   
       }
   
  -    protected Column createCountColumn(Node columnNode, int ix) throws ActionException {
  +    protected AggregateFunctionColumn createCountColumn(Node columnNode, int ix) throws ActionException {
           Node nameNode = columnNode.getAttributes().getNamedItem("as");
  -        Column column = new DefaultAggregateCountColumn(nameNode == null ? null : nameNode.getNodeValue());
  +        AggregateFunctionColumn column = new DefaultAggregateCountColumn(nameNode == null ? null : nameNode.getNodeValue());
           column.setIndex(ix);
           return column;
       }
   
  -    protected Column createSumColumn(Node columnNode, int ix) throws ActionException {
  +    protected AggregateFunctionColumn createSumColumn(Node columnNode, int ix) throws ActionException {
           Node nameNode = columnNode.getAttributes().getNamedItem("as");
           Node onNode = columnNode.getAttributes().getNamedItem("on");
           if (onNode == null) {
               throw new ActionException("Sum column must have 'on' attribute");
           }
  -        Column column = new DefaultAggregateSumColumn(nameNode == null ? null : nameNode.getNodeValue(), onNode.getNodeValue());
  +        AggregateFunctionColumn column = new DefaultAggregateSumColumn(nameNode == null ? null : nameNode.getNodeValue(), onNode.getNodeValue());
           column.setIndex(ix);
           return column;
       }
   
  -    protected Column createAveColumn(Node columnNode, int ix) throws ActionException {
  +    protected AggregateFunctionColumn createAveColumn(Node columnNode, int ix) throws ActionException {
           Node nameNode = columnNode.getAttributes().getNamedItem("as");
           Node onNode = columnNode.getAttributes().getNamedItem("on");
           if (onNode == null) {
               throw new ActionException("Ave column must have 'on' attribute");
           }
  -        Column column = new DefaultAggregateAveColumn(nameNode == null ? null : nameNode.getNodeValue(), onNode.getNodeValue());
  +        AggregateFunctionColumn column = new DefaultAggregateAveColumn(nameNode == null ? null : nameNode.getNodeValue(), onNode.getNodeValue());
           column.setIndex(ix);
           return column;
       }
   
  -    protected Column createMinColumn(Node columnNode, int ix) throws ActionException {
  +    protected AggregateFunctionColumn createMinColumn(Node columnNode, int ix) throws ActionException {
           Node nameNode = columnNode.getAttributes().getNamedItem("as");
           Node onNode = columnNode.getAttributes().getNamedItem("on");
           if (onNode == null) {
               throw new ActionException("Min column must have 'on' attribute");
           }
  -        Column column = new DefaultAggregateMinColumn(nameNode == null ? null : nameNode.getNodeValue(), onNode.getNodeValue());
  +        AggregateFunctionColumn column = new DefaultAggregateMinColumn(nameNode == null ? null : nameNode.getNodeValue(), onNode.getNodeValue());
           column.setIndex(ix);
           return column;
       }
   
  -    protected Column createMaxColumn(Node columnNode, int ix) throws ActionException {
  +    protected AggregateFunctionColumn createMaxColumn(Node columnNode, int ix) throws ActionException {
           Node nameNode = columnNode.getAttributes().getNamedItem("as");
           Node onNode = columnNode.getAttributes().getNamedItem("on");
           if (onNode == null) {
               throw new ActionException("Max column must have 'on' attribute");
           }
  -        Column column = new DefaultAggregateMaxColumn(nameNode == null ? null : nameNode.getNodeValue(), onNode.getNodeValue());
  +        AggregateFunctionColumn column = new DefaultAggregateMaxColumn(nameNode == null ? null : nameNode.getNodeValue(), onNode.getNodeValue());
           column.setIndex(ix);
           return column;
       }
  @@ -142,7 +144,7 @@
        *
        *
        */
  -    protected Column[] getKeyColumns(Queryable queryable, Element columnsNode) throws ActionException {
  +    protected AggregateKeyColumn[] getKeyColumns(Queryable queryable, Element columnsNode) throws ActionException {
   
           Vector columns = new Vector();
   
  @@ -158,14 +160,14 @@
               }
           }
   
  -        Column[] columnsAry = new Column[columns.size()];
  +        AggregateKeyColumn[] columnsAry = new AggregateKeyColumn[columns.size()];
           columns.toArray(columnsAry);
   
           return columnsAry;
   
       }
   
  -    protected Column createKeyColumn(Queryable queryable, Node columnNode, int ix) throws ActionException {
  +    protected AggregateKeyColumn createKeyColumn(Queryable queryable, Node columnNode, int ix) throws ActionException {
           String fieldName = columnNode.getAttributes().getNamedItem("name").getNodeValue();
           Node aliasNode = columnNode.getAttributes().getNamedItem("as");
           String aliasName = null;
  
  
  
  1.8       +5 -3      jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLCreateAggregateViewHandler.java
  
  Index: BasicLXSQLCreateAggregateViewHandler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLCreateAggregateViewHandler.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- BasicLXSQLCreateAggregateViewHandler.java	2001/12/01 11:49:25	1.7
  +++ BasicLXSQLCreateAggregateViewHandler.java	2001/12/01 15:30:42	1.8
  @@ -21,6 +21,8 @@
   import org.apache.avalon.db.actions.CreateAggregateView;
   import org.apache.avalon.db.data.Column;
   import org.apache.avalon.db.data.Queryable;
  +import org.apache.avalon.db.data.AggregateFunctionColumn;
  +import org.apache.avalon.db.data.AggregateKeyColumn;
   import org.apache.avalon.db.data.impl.AbstractQueryable;
   import org.apache.avalon.db.server.DBRequestContext;
   
  @@ -34,7 +36,7 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.7 $
  + * @version $Revision: 1.8 $
    */
   public class BasicLXSQLCreateAggregateViewHandler extends BasicLXSQLAggregateHandler {
   
  @@ -77,8 +79,8 @@
               Queryable onQueryable = mDatabasePersistor.getQueryable(onName);
   
   
  -            Column[] keyColumns = null;
  -            Column[] functColumns = null;
  +            AggregateKeyColumn[] keyColumns = null;
  +            AggregateFunctionColumn[] functColumns = null;
               NodeList subRootNodes = rootElement.getChildNodes();
               for (int i = 0; i < subRootNodes.getLength(); i++) {
                   if (subRootNodes.item(i).getNodeName().equals("grouped-columns")) {
  
  
  
  1.9       +4 -5      jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLDeleteRowsHandler.java
  
  Index: BasicLXSQLDeleteRowsHandler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLDeleteRowsHandler.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- BasicLXSQLDeleteRowsHandler.java	2001/11/29 14:29:06	1.8
  +++ BasicLXSQLDeleteRowsHandler.java	2001/12/01 15:30:42	1.9
  @@ -20,8 +20,7 @@
   import org.apache.avalon.db.transport.WriteReply;
   import org.apache.avalon.db.actions.ActionException;
   import org.apache.avalon.db.actions.DeleteRows;
  -import org.apache.avalon.db.data.Queryable;
  -import org.apache.avalon.db.data.impl.AbstractQueryable;
  +import org.apache.avalon.db.data.impl.AbstractConstituentQueryable;
   import org.apache.avalon.db.server.DBRequestContext;
   
   import org.w3c.dom.Document;
  @@ -33,7 +32,7 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.8 $
  + * @version $Revision: 1.9 $
    */
   public class BasicLXSQLDeleteRowsHandler extends BasicLXSQLHandler {
   
  @@ -67,12 +66,12 @@
           Document doc = mParser.parseLXSQLString(cvr.getSql());
           Element rootElement = doc.getDocumentElement();
           String queryableStr = rootElement.getAttribute("from");
  -        Queryable queryable = (Queryable) mDatabasePersistor.getQueryable(queryableStr);
  +        AbstractConstituentQueryable queryable = (AbstractConstituentQueryable) mDatabasePersistor.getQueryable(queryableStr);
   
           BasicLXSQLCriteriaHelper basicCriteriaHelper = new BasicLXSQLCriteriaHelper(rootElement);
           basicCriteriaHelper.enableLogging(super.getLogger());
   
  -        DeleteRows action = new BasicDeleteRows((AbstractQueryable) queryable,
  +        DeleteRows action = new BasicDeleteRows((AbstractConstituentQueryable) queryable,
                                   new BasicCriteria(basicCriteriaHelper.getCriteria()));
   
           mParser.initializeAction(action);
  
  
  
  1.10      +4 -5      jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLUpdateRowsHandler.java
  
  Index: BasicLXSQLUpdateRowsHandler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLUpdateRowsHandler.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- BasicLXSQLUpdateRowsHandler.java	2001/11/29 14:29:06	1.9
  +++ BasicLXSQLUpdateRowsHandler.java	2001/12/01 15:30:42	1.10
  @@ -18,8 +18,7 @@
   import org.apache.avalon.db.transport.UpdateRowsRequest;
   import org.apache.avalon.db.actions.ActionException;
   import org.apache.avalon.db.actions.UpdateRows;
  -import org.apache.avalon.db.data.Queryable;
  -import org.apache.avalon.db.data.impl.AbstractQueryable;
  +import org.apache.avalon.db.data.impl.AbstractConstituentQueryable;
   import org.apache.avalon.db.server.DBRequestContext;
   
   import org.w3c.dom.Document;
  @@ -32,7 +31,7 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.9 $
  + * @version $Revision: 1.10 $
    */
   public class BasicLXSQLUpdateRowsHandler extends BasicLXSQLHandler {
   
  @@ -66,7 +65,7 @@
           Document doc = mParser.parseLXSQLString(urr.getSql());
           Element rootElement = doc.getDocumentElement();
           String queryableStr = rootElement.getAttribute("from");
  -        Queryable queryable = (Queryable) mDatabasePersistor.getQueryable(queryableStr);
  +        AbstractConstituentQueryable queryable = (AbstractConstituentQueryable) mDatabasePersistor.getQueryable(queryableStr);
   
           String matchingInstructions = null;
   
  @@ -81,7 +80,7 @@
           basicCriteriaHelper.enableLogging(super.getLogger());
   
           UpdateRows action = new BasicUpdateRows(
  -                                    (AbstractQueryable) queryable,
  +                                    (AbstractConstituentQueryable) queryable,
                                       new BasicCriteria(
                                               basicCriteriaHelper.getCriteria(),
                                               matchingInstructions, "")
  
  
  
  1.3       +2 -1      jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/AggregateFunctionColumn.java
  
  Index: AggregateFunctionColumn.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/AggregateFunctionColumn.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- AggregateFunctionColumn.java	2001/11/28 23:09:58	1.2
  +++ AggregateFunctionColumn.java	2001/12/01 15:30:42	1.3
  @@ -13,8 +13,9 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version * $Revision: 1.2 $
  + * @version * $Revision: 1.3 $
    */
   public interface AggregateFunctionColumn extends Column {
  +    Object getDefaultValue();
   
   }
  
  
  
  1.3       +12 -2     jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/AbstractAggregateRow.java
  
  Index: AbstractAggregateRow.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/AbstractAggregateRow.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- AbstractAggregateRow.java	2001/11/24 20:26:12	1.2
  +++ AbstractAggregateRow.java	2001/12/01 15:30:42	1.3
  @@ -9,6 +9,7 @@
   package org.apache.avalon.db.data.impl;
   
   import org.apache.avalon.db.data.AggregateRow;
  +import org.apache.avalon.db.data.Row;
   
   import java.util.Vector;
   import java.util.Collection;
  @@ -19,7 +20,7 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.2 $
  + * @version $Revision: 1.3 $
    */
   public abstract class AbstractAggregateRow implements AggregateRow {
   
  @@ -29,8 +30,9 @@
   
       protected DefaultKey mDefaultKey;
   
  -    public AbstractAggregateRow(AbstractQueryable abstractQueryable) {
  +    public AbstractAggregateRow(AbstractQueryable abstractQueryable, DefaultKey defaultKey) {
           mAbstractQueryable = abstractQueryable;
  +        mDefaultKey = defaultKey;
       }
   
       public Collection getSourceRows() {
  @@ -40,4 +42,12 @@
       public DefaultKey getDefaultKey() {
           return mDefaultKey;
       }
  +
  +    public void addSourceRow(Row row) {
  +        mSourceRows.add(row);
  +    }
  +    public void removeSourceRow(Row row) {
  +        mSourceRows.remove(row);
  +    }
  +
   }
  
  
  
  1.10      +6 -27     jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/AbstractQueryable.java
  
  Index: AbstractQueryable.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/AbstractQueryable.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- AbstractQueryable.java	2001/11/23 12:40:20	1.9
  +++ AbstractQueryable.java	2001/12/01 15:30:42	1.10
  @@ -8,13 +8,11 @@
    */
   package org.apache.avalon.db.data.impl;
   
  -
  -
   import org.apache.avalon.db.data.Queryable;
   import org.apache.avalon.db.data.Column;
  -import org.apache.avalon.db.data.Row;
  -import org.apache.avalon.db.data.RowListener;
   import org.apache.avalon.db.data.Catalog;
  +import org.apache.avalon.db.data.RowListener;
  +import org.apache.avalon.db.data.Row;
   
   import java.util.Vector;
   import java.util.Iterator;
  @@ -27,14 +25,13 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.9 $
  + * @version $Revision: 1.10 $
    */
   public abstract class AbstractQueryable extends AbstractNameable implements Queryable {
   
       protected Column[] mColumns;
  -    protected Vector mRows = new Vector();
  -    protected transient Vector mListeners = new Vector();
  -    protected Catalog mCatalog;
  +    private transient Vector mListeners = new Vector();
  +    private Catalog mCatalog;
   
       /**
        * Constructor AbstractQueryable
  @@ -57,13 +54,8 @@
           mCatalog = catalog;
       }
   
  -    public Collection getRows() {
  -        return mRows;
  -    }
  +    public abstract Collection getRows();
   
  -    public boolean rowExists(Row row) {
  -        return mRows.contains(row);
  -    }
   
       /**
        * Method getColumns
  @@ -83,20 +75,7 @@
        * @param row
        *
        */
  -    public void addRow(Row row) {
  -        mRows.add(row);
  -        this.notifyRowListenersAdded(row);
  -    }
  -    public void addRows(Collection rows) {
  -        mRows.addAll(rows);
  -        this.notifyRowListenersAdded(rows);
  -    }
   
  -    public void deleteRow(Row row) {
  -        AbstractTableRow atr = (AbstractTableRow) row;
  -        mRows.remove(atr);
  -        this.notifyRowListenersDeleted(row);
  -    }
   
       public void rowChanged(Row row) {
           this.notifyRowListenersChanged(row);
  
  
  
  1.8       +2 -2      jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/AbstractTable.java
  
  Index: AbstractTable.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/AbstractTable.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- AbstractTable.java	2001/11/12 22:14:29	1.7
  +++ AbstractTable.java	2001/12/01 15:30:42	1.8
  @@ -25,9 +25,9 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.7 $
  + * @version $Revision: 1.8 $
    */
  -public abstract class AbstractTable extends AbstractQueryable implements Table {
  +public abstract class AbstractTable extends AbstractConstituentQueryable implements Table {
   
   
       /**
  
  
  
  1.6       +2 -2      jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/AbstractView.java
  
  Index: AbstractView.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/AbstractView.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- AbstractView.java	2001/11/24 20:26:12	1.5
  +++ AbstractView.java	2001/12/01 15:30:42	1.6
  @@ -23,9 +23,9 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.5 $
  + * @version $Revision: 1.6 $
    */
  -public abstract class AbstractView extends AbstractQueryable implements View {
  +public abstract class AbstractView extends AbstractConstituentQueryable implements View {
   
   
       private Vector mRows = new Vector();
  
  
  
  1.3       +6 -1      jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/DefaultAggregateAveColumn.java
  
  Index: DefaultAggregateAveColumn.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/DefaultAggregateAveColumn.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- DefaultAggregateAveColumn.java	2001/12/01 10:49:43	1.2
  +++ DefaultAggregateAveColumn.java	2001/12/01 15:30:42	1.3
  @@ -21,12 +21,13 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.2 $
  + * @version $Revision: 1.3 $
    */
   public class DefaultAggregateAveColumn extends AbstractAggregateFunctionColumn implements NumericColumn {
   
       private int mAve;
       private Integer mAve2;
  +    private static Integer DEFAULT = new Integer(0);
       private String mOnColumn;
   
       /**
  @@ -74,5 +75,9 @@
   
       public Short toShort(Row row) {
           return new Short((short) mAve);
  +    }
  +
  +    public Object getDefaultValue() {
  +        return DEFAULT;
       }
   }
  
  
  
  1.4       +6 -1      jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/DefaultAggregateCountColumn.java
  
  Index: DefaultAggregateCountColumn.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/DefaultAggregateCountColumn.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- DefaultAggregateCountColumn.java	2001/12/01 10:49:43	1.3
  +++ DefaultAggregateCountColumn.java	2001/12/01 15:30:42	1.4
  @@ -21,11 +21,12 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.3 $
  + * @version $Revision: 1.4 $
    */
   public class DefaultAggregateCountColumn extends AbstractAggregateFunctionColumn {
   
       int mCount;
  +    private static Integer DEFAULT = new Integer(0);
       Integer mCount2;
   
       /**
  @@ -72,5 +73,9 @@
   
       public Short toShort(Row row) {
           return new Short((short) mCount);
  +    }
  +
  +    public Object getDefaultValue() {
  +        return DEFAULT;
       }
   }
  
  
  
  1.3       +6 -1      jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/DefaultAggregateMaxColumn.java
  
  Index: DefaultAggregateMaxColumn.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/DefaultAggregateMaxColumn.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- DefaultAggregateMaxColumn.java	2001/12/01 10:49:43	1.2
  +++ DefaultAggregateMaxColumn.java	2001/12/01 15:30:42	1.3
  @@ -21,12 +21,13 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.2 $
  + * @version $Revision: 1.3 $
    */
   public class DefaultAggregateMaxColumn extends AbstractAggregateFunctionColumn implements NumericColumn {
   
       private int mMax;
       private Integer mMax2;
  +    private static Integer DEFAULT = new Integer(0);
       private String mOnColumn;
   
       /**
  @@ -74,5 +75,9 @@
   
       public Short toShort(Row row) {
           return new Short((short) mMax);
  +    }
  +
  +    public Object getDefaultValue() {
  +        return DEFAULT;
       }
   }
  
  
  
  1.3       +7 -1      jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/DefaultAggregateMinColumn.java
  
  Index: DefaultAggregateMinColumn.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/DefaultAggregateMinColumn.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- DefaultAggregateMinColumn.java	2001/12/01 10:49:43	1.2
  +++ DefaultAggregateMinColumn.java	2001/12/01 15:30:42	1.3
  @@ -21,12 +21,13 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.2 $
  + * @version $Revision: 1.3 $
    */
   public class DefaultAggregateMinColumn extends AbstractAggregateFunctionColumn implements NumericColumn {
   
       private int mMin;
       private Integer mMin2;
  +    private static Integer DEFAULT = new Integer(0);
       private String mOnColumn;
   
       /**
  @@ -75,4 +76,9 @@
       public Short toShort(Row row) {
           return new Short((short) mMin);
       }
  +
  +    public Object getDefaultValue() {
  +        return DEFAULT;
  +    }
  +
   }
  
  
  
  1.3       +7 -1      jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/DefaultAggregateSumColumn.java
  
  Index: DefaultAggregateSumColumn.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/DefaultAggregateSumColumn.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- DefaultAggregateSumColumn.java	2001/12/01 10:49:43	1.2
  +++ DefaultAggregateSumColumn.java	2001/12/01 15:30:42	1.3
  @@ -21,12 +21,13 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.2 $
  + * @version $Revision: 1.3 $
    */
   public class DefaultAggregateSumColumn extends AbstractAggregateFunctionColumn implements NumericColumn {
   
       private int mSum;
       private Integer mSum2;
  +    private static Integer DEFAULT = new Integer(0);
       private String mOnColumn;
   
       /**
  @@ -75,4 +76,9 @@
       public Short toShort(Row row) {
           return new Short((short) mSum);
       }
  +
  +    public Object getDefaultValue() {
  +        return DEFAULT;
  +    }
  +
   }
  
  
  
  1.1                  jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/AbstractAggregateQueryable.java
  
  Index: AbstractAggregateQueryable.java
  ===================================================================
  
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE file.
   */
  package org.apache.avalon.db.data.impl;
  
  
  import org.apache.avalon.db.data.Queryable;
  import org.apache.avalon.db.data.Column;
  import org.apache.avalon.db.data.View;
  import org.apache.avalon.db.data.Row;
  
  import java.util.Vector;
  import java.util.Collections;
  import java.util.Collection;
  import java.util.HashMap;
  import java.util.Iterator;
  
  
  /**
   * Class AbstractAggregateQueryable
   *
   *
   * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
   * @version $Revision: 1.1 $
   */
  public abstract class AbstractAggregateQueryable extends AbstractQueryable {
  
  
      private HashMap mAggregateRows = new HashMap();
  
      /**
       * Constructor AbstractAggregateQueryable
       *
       *
       * @param name
       * @param columns
       *
       */
      public AbstractAggregateQueryable(String name, Column[] columns) {
          super(name, columns);
      }
  
      public void addRow(Row row) {
          DefaultKey dk = getDefaultKey(row);
          AbstractAggregateRow aar = null;
          if (mAggregateRows.containsKey(dk)) {
              aar = (AbstractAggregateRow) mAggregateRows.get(dk);
          } else {
              aar = makeAbstractAggregateRow(row, dk);
              mAggregateRows.put(dk, aar);
          }
          aar.addSourceRow(row);
          this.notifyRowListenersAdded(aar);
      }
  
      public void deleteRow(Row row) {
          DefaultKey dk = getDefaultKey(row);
          AbstractAggregateRow aar = null;
          if (mAggregateRows.containsKey(dk)) {
              aar = (AbstractAggregateRow) mAggregateRows.get(dk);
          } else {
              // should never happen.
          }
          aar.removeSourceRow(row);
          this.notifyRowListenersDeleted(aar);
      }
  
      public Collection getRows() {
          return Collections.unmodifiableCollection(mAggregateRows.values());
      }
  
      public boolean rowExists(Row row) {
          return mAggregateRows.containsKey(getDefaultKey(row));
      }
  
  
      protected abstract DefaultKey getDefaultKey(Row row);
      protected abstract AbstractAggregateRow makeAbstractAggregateRow(Row srcRow, DefaultKey dk);
  
  }
  
  
  
  1.1                  jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/AbstractConstituentQueryable.java
  
  Index: AbstractConstituentQueryable.java
  ===================================================================
  
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE file.
   */
  package org.apache.avalon.db.data.impl;
  
  import org.apache.avalon.db.data.Row;
  import org.apache.avalon.db.data.Column;
  
  import java.util.Vector;
  import java.util.Collection;
  
  
  /**
   * Class AbstractConstituentQueryable
   *
   *
   * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
   * @version $Revision: 1.1 $
   */
  public abstract class AbstractConstituentQueryable extends AbstractQueryable {
  
      protected Vector mRows = new Vector();
  
  
  
      /**
       * Constructor AbstractConstituentQueryable
       *
       *
       * @param name
       * @param columns
       *
       */
      public AbstractConstituentQueryable(String name, Column[] columns) {
          super(name,columns);
      }
  
  
      public Collection getRows() {
          return mRows;
      }
  
      public boolean rowExists(Row row) {
          return mRows.contains(row);
      }
  
  
      /**
       * Method addRow
       *
       *
       * @param row
       *
       */
      public void addRow(Row row) {
          mRows.add(row);
          this.notifyRowListenersAdded(row);
      }
      public void addRows(Collection rows) {
          mRows.addAll(rows);
          this.notifyRowListenersAdded(rows);
      }
  
      public void deleteRow(Row row) {
          AbstractTableRow atr = (AbstractTableRow) row;
          mRows.remove(atr);
          this.notifyRowListenersDeleted(row);
      }
  
      public void rowChanged(Row row) {
          this.notifyRowListenersChanged(row);
      }
  
  }
  
  
  
  1.2       +15 -3     jakarta-avalon-cornerstone/apps/db/src/scripts/lxsql/Test1.script
  
  Index: Test1.script
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/scripts/lxsql/Test1.script,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Test1.script	2001/11/29 14:26:13	1.1
  +++ Test1.script	2001/12/01 15:30:42	1.2
  @@ -83,8 +83,7 @@
   
   <simple-select>
     <columns>
  -    <column name="forename"/>
  -    <column name="surname"/>
  +    <column name="*"/>
     </columns>
     <from>
       <table name="FlintstonesView"/>
  @@ -119,7 +118,7 @@
     </where>
   </update-rows>
   
  -### SELECT 3 (all rows) ##!
  +### SELECT 3 (all rows; fn, sn) ##!
   
   <simple-select>
     <columns><column name="forename"/>
  @@ -128,6 +127,19 @@
       <table name="Flintstones"/>
     </from>
   </simple-select>
  +
  +### SELECT 4 (all rows; sn, fn) ##!
  +
  +<simple-select>
  +  <columns>
  +     <column name="surname"/>
  +     <column name="forename"/>
  +  </columns>
  +  <from>
  +    <table name="Flintstones"/>
  +  </from>
  +</simple-select>
  +
   
   ### VIEW 2 (surname aggregate) ##!
   
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>