hammant 01/11/27 15:01:31
Modified: apps/db build.xml
apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql
BasicLXSQLAggregateHandler.java
apps/db/src/java/org/apache/avalon/db/data/impl
DefaultAggregateCountColumn.java
apps/db/src/java/org/apache/avalon/db/test Tester.java
Added: apps/db/src/java/org/apache/avalon/db/data/impl
DefaultAggregateAveColumn.java
DefaultAggregateMaxColumn.java
DefaultAggregateMinColumn.java
DefaultAggregateSumColumn.java
Log:
More work on Aggregate column types
Revision Changes Path
1.21 +3 -2 jakarta-avalon-cornerstone/apps/db/build.xml
Index: build.xml
===================================================================
RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/build.xml,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- build.xml 2001/11/27 19:00:13 1.20
+++ build.xml 2001/11/27 23:01:30 1.21
@@ -306,9 +306,10 @@
<target name="install" depends="main" description="Installs into Phoenix">
<!-- <fail message="install.dir not specified." unless="install.dir"/>
-->
- <echo message="Installing to ${install.dir}" />
+ <echo message="Installing to ${install.dir}" />
<copy file="${build.lib}/avalon-db.sar" todir="${install.dir}" />
- <delete file="${installvar.dir}/avalon-db-install.log" />
+ <delete file="${installvar.dir}/avalon-db-install.log" />
+ <delete file="${install.dir}/avalon-db/SAR-INF/lib/avalon-db.jar" />
<delete dir="${install.dir}/avalon-db" />
</target>
1.2 +60 -3
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.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- BasicLXSQLAggregateHandler.java 2001/11/27 21:18:22 1.1
+++ BasicLXSQLAggregateHandler.java 2001/11/27 23:01:31 1.2
@@ -21,6 +21,10 @@
import org.apache.avalon.db.data.impl.BigIntColumn;
import org.apache.avalon.db.data.impl.DecimalColumn;
import org.apache.avalon.db.data.impl.DefaultAggregateCountColumn;
+import org.apache.avalon.db.data.impl.DefaultAggregateSumColumn;
+import org.apache.avalon.db.data.impl.DefaultAggregateAveColumn;
+import org.apache.avalon.db.data.impl.DefaultAggregateMinColumn;
+import org.apache.avalon.db.data.impl.DefaultAggregateMaxColumn;
import org.apache.avalon.db.actions.ActionException;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
@@ -35,7 +39,7 @@
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
* @author Gerhard Froehlich <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
- * @version $Revision: 1.1 $
+ * @version $Revision: 1.2 $
*/
public abstract class BasicLXSQLAggregateHandler extends
BasicLXSQLQueryableHandler {
@@ -62,8 +66,17 @@
NodeList subFnColumnsNodes = fnColumnsNode.getChildNodes();
for (int x = 0 ; x < subFnColumnsNodes.getLength(); x++) {
- if (subFnColumnsNodes.item(x).getNodeName().equals("count")) {
+ String nodeName = subFnColumnsNodes.item(x).getNodeName();
+ if (nodeName.equals("count")) {
columns.add(createCountColumn(subFnColumnsNodes.item(x), x));
+ } else if (nodeName.equals("sum")) {
+ columns.add(createSumColumn(subFnColumnsNodes.item(x), x));
+ } else if (nodeName.equals("ave")) {
+ columns.add(createAveColumn(subFnColumnsNodes.item(x), x));
+ } else if (nodeName.equals("min")) {
+ columns.add(createMinColumn(subFnColumnsNodes.item(x), x));
+ } else if (nodeName.equals("max")) {
+ columns.add(createMaxColumn(subFnColumnsNodes.item(x), x));
} else {
throw new ActionException("Only 'count' allowed as a node
under 'group-function-columns' node");
}
@@ -76,12 +89,56 @@
}
-
protected Column createCountColumn(Node columnNode, int ix) throws
ActionException {
- Node nameNode = columnNode.getAttributes().getNamedItem("name");
+ Node nameNode = columnNode.getAttributes().getNamedItem("as");
Column column = new DefaultAggregateCountColumn(nameNode == null ?
null : nameNode.getNodeValue());
column.setIndex(ix);
return column;
}
+
+ protected Column 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());
+ column.setIndex(ix);
+ return column;
+ }
+
+ protected Column 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());
+ column.setIndex(ix);
+ return column;
+ }
+
+ protected Column 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());
+ column.setIndex(ix);
+ return column;
+ }
+
+ protected Column 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());
+ column.setIndex(ix);
+ return column;
+ }
+
}
1.2 +5 -5
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.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- DefaultAggregateCountColumn.java 2001/11/27 21:18:22 1.1
+++ DefaultAggregateCountColumn.java 2001/11/27 23:01:31 1.2
@@ -21,13 +21,13 @@
*
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
- * @version $Revision: 1.1 $
+ * @version $Revision: 1.2 $
*/
-public class DefaultAggregateCountColumn extends
AbstractAggregateFunctionColumn implements NumericType {
+public class DefaultAggregateCountColumn extends
AbstractAggregateFunctionColumn {
- private int mCount;
- private Integer mCount2;
-
+ int mCount;
+ Integer mCount2;
+
/**
* Constructor DefaultAggregateCountColumn
*
1.1
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/DefaultAggregateAveColumn.java
Index: DefaultAggregateAveColumn.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.types.Type;
import org.apache.avalon.db.data.types.NumericType;
import org.apache.avalon.db.data.Row;
import org.apache.avalon.db.actions.ActionException;
import java.math.BigDecimal;
/**
* Class DefaultAggregateAveColumn
*
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
* @version $Revision: 1.1 $
*/
public class DefaultAggregateAveColumn extends
AbstractAggregateFunctionColumn implements NumericType {
private int mAve;
private Integer mAve2;
private String mOnColumn;
/**
* Constructor DefaultAggregateAveColumn
*
*
* @param name
*
*/
public DefaultAggregateAveColumn(String name, String on) throws
ActionException {
super(getNameOfColumn(name),"integer",Integer.class);
mOnColumn = on;
}
public Object getValue(Row row) {
if (mAve2 == null) {
mAve2 = new Integer(mAve);
}
return mAve2;
}
public String toString(Row row) {
return "" + mAve;
}
public int getPrecesion() {
return Type.PREC_INT;
}
public Integer toInteger(Row row) {
return mAve2;
}
public Long toLong(Row row) {
return new Long((long) mAve);
}
public BigDecimal toBigDecimal(Row row) {
return new BigDecimal((double) mAve);
}
public Float toFloat(Row row) {
return new Float((float) mAve);
}
public Short toShort(Row row) {
return new Short((short) mAve);
}
}
1.1
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/DefaultAggregateMaxColumn.java
Index: DefaultAggregateMaxColumn.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.types.Type;
import org.apache.avalon.db.data.types.NumericType;
import org.apache.avalon.db.data.Row;
import org.apache.avalon.db.actions.ActionException;
import java.math.BigDecimal;
/**
* Class DefaultAggregateMaxColumn
*
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
* @version $Revision: 1.1 $
*/
public class DefaultAggregateMaxColumn extends
AbstractAggregateFunctionColumn implements NumericType {
private int mMax;
private Integer mMax2;
private String mOnColumn;
/**
* Constructor DefaultAggregateMaxColumn
*
*
* @param name
*
*/
public DefaultAggregateMaxColumn(String name, String on) throws
ActionException {
super(getNameOfColumn(name),"integer",Integer.class);
mOnColumn = on;
}
public Object getValue(Row row) {
if (mMax2 == null) {
mMax2 = new Integer(mMax);
}
return mMax2;
}
public String toString(Row row) {
return "" + mMax;
}
public int getPrecesion() {
return Type.PREC_INT;
}
public Integer toInteger(Row row) {
return mMax2;
}
public Long toLong(Row row) {
return new Long((long) mMax);
}
public BigDecimal toBigDecimal(Row row) {
return new BigDecimal((double) mMax);
}
public Float toFloat(Row row) {
return new Float((float) mMax);
}
public Short toShort(Row row) {
return new Short((short) mMax);
}
}
1.1
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/DefaultAggregateMinColumn.java
Index: DefaultAggregateMinColumn.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.types.Type;
import org.apache.avalon.db.data.types.NumericType;
import org.apache.avalon.db.data.Row;
import org.apache.avalon.db.actions.ActionException;
import java.math.BigDecimal;
/**
* Class DefaultAggregateMinColumn
*
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
* @version $Revision: 1.1 $
*/
public class DefaultAggregateMinColumn extends
AbstractAggregateFunctionColumn implements NumericType {
private int mMin;
private Integer mMin2;
private String mOnColumn;
/**
* Constructor DefaultAggregateMinColumn
*
*
* @param name
*
*/
public DefaultAggregateMinColumn(String name, String on) throws
ActionException {
super(getNameOfColumn(name),"integer",Integer.class);
mOnColumn = on;
}
public Object getValue(Row row) {
if (mMin2 == null) {
mMin2 = new Integer(mMin);
}
return mMin2;
}
public String toString(Row row) {
return "" + mMin;
}
public int getPrecesion() {
return Type.PREC_INT;
}
public Integer toInteger(Row row) {
return mMin2;
}
public Long toLong(Row row) {
return new Long((long) mMin);
}
public BigDecimal toBigDecimal(Row row) {
return new BigDecimal((double) mMin);
}
public Float toFloat(Row row) {
return new Float((float) mMin);
}
public Short toShort(Row row) {
return new Short((short) mMin);
}
}
1.1
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/DefaultAggregateSumColumn.java
Index: DefaultAggregateSumColumn.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.types.Type;
import org.apache.avalon.db.data.types.NumericType;
import org.apache.avalon.db.data.Row;
import org.apache.avalon.db.actions.ActionException;
import java.math.BigDecimal;
/**
* Class DefaultAggregateSumColumn
*
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
* @version $Revision: 1.1 $
*/
public class DefaultAggregateSumColumn extends
AbstractAggregateFunctionColumn implements NumericType {
private int mSum;
private Integer mSum2;
private String mOnColumn;
/**
* Constructor DefaultAggregateSumColumn
*
*
* @param name
*
*/
public DefaultAggregateSumColumn(String name, String on) throws
ActionException {
super(getNameOfColumn(name),"integer",Integer.class);
mOnColumn = on;
}
public Object getValue(Row row) {
if (mSum2 == null) {
mSum2 = new Integer(mSum);
}
return mSum2;
}
public String toString(Row row) {
return "" + mSum;
}
public int getPrecesion() {
return Type.PREC_INT;
}
public Integer toInteger(Row row) {
return mSum2;
}
public Long toLong(Row row) {
return new Long((long) mSum);
}
public BigDecimal toBigDecimal(Row row) {
return new BigDecimal((double) mSum);
}
public Float toFloat(Row row) {
return new Float((float) mSum);
}
public Short toShort(Row row) {
return new Short((short) mSum);
}
}
1.31 +4 -0
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/test/Tester.java
Index: Tester.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/test/Tester.java,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -r1.30 -r1.31
--- Tester.java 2001/11/27 21:18:22 1.30
+++ Tester.java 2001/11/27 23:01:31 1.31
@@ -201,6 +201,10 @@
"</grouped-columns>" +
"<group-function-columns>" +
"<count as=\"surCount\"/>" +
+ "<max as=\"maxAge\" on=\"age\"/>" +
+ "<min as=\"minAge\" on=\"age\"/>" +
+ "<ave as=\"aveAge\" on=\"age\"/>" +
+ "<sum as=\"sumAge\" on=\"age\"/>" +
"</group-function-columns>" +
"</create-aggregate-view>";
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>