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]>

Reply via email to