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>