hammant 01/11/28 15:09:58
Modified: apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql
BasicLXSQLAggregateHandler.java
apps/db/src/java/org/apache/avalon/db/data
AggregateFunctionColumn.java
apps/db/src/java/org/apache/avalon/db/data/impl
ContrivedStringFunctionColumn.java
VarCharColumn.java
apps/db/src/java/org/apache/avalon/db/data/types
StringType.java
apps/db/src/java/org/apache/avalon/db/functions
StringFunction.java
apps/db/src/java/org/apache/avalon/db/functions/impl
ConcatFunction.java LowerCaseStringFunction.java
SubStringFunction.java TrimStringFunction.java
UpperCaseStringFunction.java
apps/db/src/java/org/apache/avalon/db/test Tester.java
Added: apps/db/src/java/org/apache/avalon/db/data
AggregateKeyColumn.java
apps/db/src/java/org/apache/avalon/db/data/impl
DefaultAggregateVarcharKeyColumn.java
Log:
more work on aggregate views
Revision Changes Path
1.3 +52 -1
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.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- BasicLXSQLAggregateHandler.java 2001/11/27 23:01:31 1.2
+++ BasicLXSQLAggregateHandler.java 2001/11/28 23:09:58 1.3
@@ -11,6 +11,9 @@
import org.apache.avalon.db.basic.parser.BasicLXSQLParser;
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.types.Type;
+import org.apache.avalon.db.data.types.StringType;
import org.apache.avalon.db.data.impl.VarCharColumn;
import org.apache.avalon.db.data.impl.IntegerColumn;
import org.apache.avalon.db.data.impl.DateColumn;
@@ -25,6 +28,7 @@
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.data.impl.DefaultAggregateVarcharKeyColumn;
import org.apache.avalon.db.actions.ActionException;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
@@ -39,7 +43,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.2 $
+ * @version $Revision: 1.3 $
*/
public abstract class BasicLXSQLAggregateHandler extends
BasicLXSQLQueryableHandler {
@@ -141,4 +145,51 @@
}
+ /**
+ * Method getColumns
+ *
+ *
+ */
+ protected Column[] getKeyColumns(Queryable queryable, Element
columnsNode) throws ActionException {
+
+ Vector columns = new Vector();
+
+ NodeList subColumnsNodes = columnsNode.getChildNodes();
+ for (int x = 0 ; x < subColumnsNodes.getLength(); x++) {
+ if (subColumnsNodes.item(x).getNodeName().equals("column")) {
+ columns.add(createKeyColumn(queryable,
subColumnsNodes.item(x), x));
+ } else {
+
+ throw new ActionException("Only 'column' allowed as a node
under 'columns' node");
+ }
+ }
+
+ Column[] columnsAry = new Column[columns.size()];
+ columns.toArray(columnsAry);
+
+ return columnsAry;
+
+ }
+
+ protected Column 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;
+ if (aliasNode != null) {
+ aliasName = aliasNode.getNodeValue();
+ }
+ Column column = null;
+ Column[] columns = queryable.getColumns();
+ int maxLen = -1;
+ for (int i = 0; i < columns.length; i++) {
+ Column col = columns[i];
+ if (col.getName().equals(fieldName)) {
+ if (col instanceof StringType) {
+ StringType sCol = (StringType) col;
+ return new DefaultAggregateVarcharKeyColumn(fieldName,
aliasName, sCol.getMaxLength());
+ }
+ }
+ }
+ throw new ActionException("Unmatched" + fieldName + " for source
table/view/index");
+ }
}
1.2 +1 -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.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- AggregateFunctionColumn.java 2001/11/27 21:18:22 1.1
+++ AggregateFunctionColumn.java 2001/11/28 23:09:58 1.2
@@ -9,11 +9,11 @@
package org.apache.avalon.db.data;
/**
- * Interface AggregateFunctionColumn
+ * Interface AggregateKeyColumn
*
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
- * @version * $Revision: 1.1 $
+ * @version * $Revision: 1.2 $
*/
public interface AggregateFunctionColumn extends Column {
1.1
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/AggregateKeyColumn.java
Index: AggregateKeyColumn.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;
/**
* Interface AggregateKeyColumn
*
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
* @version * $Revision: 1.1 $
*/
public interface AggregateKeyColumn extends Column {
}
1.5 +5 -1
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/ContrivedStringFunctionColumn.java
Index: ContrivedStringFunctionColumn.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/ContrivedStringFunctionColumn.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ContrivedStringFunctionColumn.java 2001/11/18 13:57:39 1.4
+++ ContrivedStringFunctionColumn.java 2001/11/28 23:09:58 1.5
@@ -23,7 +23,7 @@
*
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
- * @version $Revision: 1.4 $
+ * @version $Revision: 1.5 $
*/
public class ContrivedStringFunctionColumn extends AbstractContrivedColumn
implements StringType {
@@ -72,5 +72,9 @@
public Short toShort(Row row) {
return new Short((String)mStringFunction.getValue(row));
+ }
+
+ public int getMaxLength() {
+ return mStringFunction.getMaxLength();
}
}
1.9 +5 -1
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/VarCharColumn.java
Index: VarCharColumn.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/VarCharColumn.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- VarCharColumn.java 2001/11/25 05:57:14 1.8
+++ VarCharColumn.java 2001/11/28 23:09:58 1.9
@@ -22,7 +22,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.8 $
+ * @version $Revision: 1.9 $
*/
public class VarCharColumn extends AbstractWritableColumn implements
StringType {
@@ -75,5 +75,9 @@
public int getPrecesion() {
return Type.PREC_STRING;
+ }
+
+ public int getMaxLength() {
+ return mMaxLength;
}
}
1.1
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/DefaultAggregateVarcharKeyColumn.java
Index: DefaultAggregateVarcharKeyColumn.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.data.AggregateKeyColumn;
import org.apache.avalon.db.data.Queryable;
import org.apache.avalon.db.data.Column;
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 DefaultAggregateVarcharKeyColumn extends VarCharColumn
implements AggregateKeyColumn {
private int mAve;
private Integer mAve2;
private String mAlias;
/**
* Constructor DefaultAggregateAveColumn
*
*
* @param name
*
*/
public DefaultAggregateVarcharKeyColumn(String name, String as, int
maxLen) throws ActionException {
super(name, maxLen);
mAlias = as;
}
}
1.3 +2 -1
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/types/StringType.java
Index: StringType.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/types/StringType.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- StringType.java 2001/11/17 17:32:14 1.2
+++ StringType.java 2001/11/28 23:09:58 1.3
@@ -16,7 +16,8 @@
*
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
- * @version $Revision: 1.2 $
+ * @version $Revision: 1.3 $
*/
public interface StringType extends Type{
+ int getMaxLength();
}
1.2 +2 -1
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/functions/StringFunction.java
Index: StringFunction.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/functions/StringFunction.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- StringFunction.java 2001/11/17 08:52:56 1.1
+++ StringFunction.java 2001/11/28 23:09:58 1.2
@@ -15,8 +15,9 @@
* Interface StringFunction
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
- * @version * $Revision: 1.1 $
+ * @version * $Revision: 1.2 $
*/
public interface StringFunction extends Function {
String getStringValue(Row row);
+ int getMaxLength();
}
1.3 +12 -1
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/functions/impl/ConcatFunction.java
Index: ConcatFunction.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/functions/impl/ConcatFunction.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ConcatFunction.java 2001/11/17 08:52:57 1.2
+++ ConcatFunction.java 2001/11/28 23:09:58 1.3
@@ -8,6 +8,7 @@
package org.apache.avalon.db.functions.impl;
import org.apache.avalon.db.data.Row;
+import org.apache.avalon.db.data.types.StringType;
import org.apache.avalon.db.functions.StringFunction;
@@ -15,7 +16,7 @@
* Class ConcatFunction
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
- * @version $Revision: 1.2 $
+ * @version $Revision: 1.3 $
*/
public class ConcatFunction extends AbstractStringFunction {
@@ -26,4 +27,14 @@
}
return retVal;
}
+
+ public int getMaxLength() {
+ int maxLength = 0;
+ for (int i = 0; i < mColumns.length; i++) {
+ StringType sTyp = (StringType) mColumns[i];
+ maxLength+= sTyp.getMaxLength();
+ }
+ return maxLength;
+ }
+
}
1.2 +6 -0
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/functions/impl/LowerCaseStringFunction.java
Index: LowerCaseStringFunction.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/functions/impl/LowerCaseStringFunction.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- LowerCaseStringFunction.java 2001/11/17 08:52:57 1.1
+++ LowerCaseStringFunction.java 2001/11/28 23:09:58 1.2
@@ -8,6 +8,7 @@
package org.apache.avalon.db.functions.impl;
import org.apache.avalon.db.data.Row;
+import org.apache.avalon.db.data.types.StringType;
import org.apache.avalon.db.functions.StringFunction;
import java.util.Locale;
@@ -16,7 +17,7 @@
* Class LowerCaseStringFunction
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
- * @version $Revision: 1.1 $
+ * @version $Revision: 1.2 $
*/
public class LowerCaseStringFunction extends AbstractStringFunction {
@@ -28,5 +29,10 @@
public String getStringValue(Row row) {
return ((String) mColumns[0].getValue(row)).toLowerCase(mLocale);
+ }
+
+ public int getMaxLength() {
+ StringType sTyp = (StringType) mColumns[0];
+ return sTyp.getMaxLength();
}
}
1.2 +6 -0
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/functions/impl/SubStringFunction.java
Index: SubStringFunction.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/functions/impl/SubStringFunction.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- SubStringFunction.java 2001/11/17 08:52:57 1.1
+++ SubStringFunction.java 2001/11/28 23:09:58 1.2
@@ -8,13 +8,14 @@
package org.apache.avalon.db.functions.impl;
import org.apache.avalon.db.data.Row;
+import org.apache.avalon.db.data.types.StringType;
import org.apache.avalon.db.functions.StringFunction;
/**
* Class SubStringFunction
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
- * @version $Revision: 1.1 $
+ * @version $Revision: 1.2 $
*/
public class SubStringFunction extends AbstractStringFunction {
@@ -36,4 +37,9 @@
return val.substring(start,end);
}
}
+
+ public int getMaxLength() {
+ return mLen;
+ }
+
}
1.2 +7 -0
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/functions/impl/TrimStringFunction.java
Index: TrimStringFunction.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/functions/impl/TrimStringFunction.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- TrimStringFunction.java 2001/11/17 08:52:57 1.1
+++ TrimStringFunction.java 2001/11/28 23:09:58 1.2
@@ -8,6 +8,7 @@
package org.apache.avalon.db.functions.impl;
import org.apache.avalon.db.data.Row;
+import org.apache.avalon.db.data.types.StringType;
import org.apache.avalon.db.functions.StringFunction;
import java.util.Locale;
@@ -16,11 +17,17 @@
* Class TrimStringFunction
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
- * @version $Revision: 1.1 $
+ * @version $Revision: 1.2 $
*/
public class TrimStringFunction extends AbstractStringFunction {
public String getStringValue(Row row) {
return ((String) mColumns[0].getValue(row)).trim();
}
+
+ public int getMaxLength() {
+ StringType sTyp = (StringType) mColumns[0];
+ return sTyp.getMaxLength();
+ }
+
}
1.2 +7 -0
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/functions/impl/UpperCaseStringFunction.java
Index: UpperCaseStringFunction.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/functions/impl/UpperCaseStringFunction.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- UpperCaseStringFunction.java 2001/11/17 08:52:57 1.1
+++ UpperCaseStringFunction.java 2001/11/28 23:09:58 1.2
@@ -8,6 +8,7 @@
package org.apache.avalon.db.functions.impl;
import org.apache.avalon.db.data.Row;
+import org.apache.avalon.db.data.types.StringType;
import org.apache.avalon.db.functions.StringFunction;
import java.util.Locale;
@@ -16,7 +17,7 @@
* Class UpperCaseStringFunction
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
- * @version $Revision: 1.1 $
+ * @version $Revision: 1.2 $
*/
public class UpperCaseStringFunction extends AbstractStringFunction {
@@ -29,4 +30,10 @@
public String getStringValue(Row row) {
return ((String) mColumns[0].getValue(row)).toUpperCase(mLocale);
}
+
+ public int getMaxLength() {
+ StringType sTyp = (StringType) mColumns[0];
+ return sTyp.getMaxLength();
+ }
+
}
1.32 +1 -1
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.31
retrieving revision 1.32
diff -u -r1.31 -r1.32
--- Tester.java 2001/11/27 23:01:31 1.31
+++ Tester.java 2001/11/28 23:09:58 1.32
@@ -197,7 +197,7 @@
st = mCon.createStatement();
view = "<create-aggregate-view name=\"FlintstonesAggView\"
on=\"Flintstones\">" +
"<grouped-columns>" +
- "<column name=\"surname\" type=\"varchar\"
max=\"20\"/>" +
+ "<column name=\"surname\" as=\"lastName\"/>" +
"</grouped-columns>" +
"<group-function-columns>" +
"<count as=\"surCount\"/>" +
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>