hammant     01/12/19 02:45:46

  Modified:    apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql
                        BasicLXSQLCreateViewHandler.java
                        BasicLXSQLQueryableHandler.java
                        BasicLXSQLSelectSimpleHandler.java
                        BasicLXSQLUpdateRowsHandler.java
               apps/db/src/scripts/lxsql Test2.script
  Added:       apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql
                        SelectColumnHelper.java
  Removed:     apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql
                        BasicLXSQLSecondaryHandler.java
  Log:
  contrived columns in constituent views now
  
  Revision  Changes    Path
  1.13      +54 -4     
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLCreateViewHandler.java
  
  Index: BasicLXSQLCreateViewHandler.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLCreateViewHandler.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- BasicLXSQLCreateViewHandler.java  2001/12/06 00:54:45     1.12
  +++ BasicLXSQLCreateViewHandler.java  2001/12/19 10:45:45     1.13
  @@ -12,6 +12,7 @@
   import org.apache.avalon.db.basic.actions.BasicCreateView;
   import org.apache.avalon.db.basic.actions.BasicCriteria;
   import org.apache.avalon.db.basic.actions.BasicSelectSimple;
  +import org.apache.avalon.db.basic.handlers.ContrivedColumnNameHolder;
   import org.apache.avalon.db.services.DatabasePersistor;
   import org.apache.avalon.db.transport.Reply;
   import org.apache.avalon.db.transport.Request;
  @@ -20,7 +21,11 @@
   import org.apache.avalon.db.actions.ActionException;
   import org.apache.avalon.db.actions.CreateView;
   import org.apache.avalon.db.data.Column;
  +import org.apache.avalon.db.data.types.NumericColumn;
  +import org.apache.avalon.db.data.types.StringColumn;
   import org.apache.avalon.db.data.impl.AbstractQueryable;
  +import org.apache.avalon.db.data.impl.DefaultDelegatedVarcharColumn;
  +import org.apache.avalon.db.data.impl.DefaultDelegatedIntegerColumn;
   import org.apache.avalon.db.server.DBRequestContext;
   
   import org.w3c.dom.Document;
  @@ -28,15 +33,19 @@
   import org.w3c.dom.NodeList;
   import org.w3c.dom.Node;
   
  +import java.util.Vector;
   
  +
   /**
    * Class BasicLXSQLCreateViewHandler
    *
    *
    * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
  - * @version $Revision: 1.12 $
  + * @version $Revision: 1.13 $
    */
  -public class BasicLXSQLCreateViewHandler extends BasicLXSQLQueryableHandler {
  +public class BasicLXSQLCreateViewHandler extends BasicLXSQLHandler {
  +
  +    private SelectColumnHelper mSelectColumnHelper = new 
SelectColumnHelper();
   
       /**
        * Constructor BasicLXSQLCreateViewHandler
  @@ -99,9 +108,50 @@
               return new WriteReply(action.getRecordCount());
           }
       }
  +
  +    /**
  +     * Method getColumns
  +     *
  +     *
  +     */
  +    protected Column[] getColumns(AbstractQueryable aq, Element columnsNode) 
throws ActionException {
  +
  +        Vector columns = new Vector();
  +        ContrivedColumnNameHolder colHldr = new ContrivedColumnNameHolder();
  +
  +        NodeList subColumnsNodes = columnsNode.getChildNodes();
  +        for (int x = 0 ; x < subColumnsNodes.getLength(); x++) {
  +            String nodeName = subColumnsNodes.item(x).getNodeName();
  +            if (nodeName.equals("#text")) {
  +                // do nothing, whitespace between elems
  +            } else {
  +                columns.add(createDelegatedColumn(aq, colHldr, 
subColumnsNodes.item(x), x));
  +            }
  +        }
  +
  +        Column[] columnsAry = new Column[columns.size()];
  +        columns.toArray(columnsAry);
  +        for (int x = 0; x < columnsAry.length; x++ ) {
  +            columnsAry[x].setIndex(x);
  +        }
  +
  +        return columnsAry;
  +
  +    }
   
  -    protected Column makeColumn(AbstractQueryable aq, Node columnNode, int 
ix) throws ActionException {
  -        return createDelegatedColumn(aq, columnNode, ix);
  +    protected Column createDelegatedColumn(AbstractQueryable queryable, 
ContrivedColumnNameHolder colHldr, Node columnNode, int ix) throws 
ActionException {
  +        Column col = mSelectColumnHelper.getSelectColumn(queryable, 
(Element) columnNode, colHldr);
  +        Column column = null;
  +        if (col instanceof StringColumn) {
  +            column = new 
DefaultDelegatedVarcharColumn((StringColumn)col,null);
  +        } else if (col instanceof NumericColumn) {
  +            //TODO
  +            column = new 
DefaultDelegatedIntegerColumn((NumericColumn)col,null);
  +        } else {
  +            //TODO
  +        }
  +        column.setIndex(ix);
  +        return column;
       }
   
   }
  
  
  
  1.7       +1 -19     
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLQueryableHandler.java
  
  Index: BasicLXSQLQueryableHandler.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLQueryableHandler.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- BasicLXSQLQueryableHandler.java   2001/12/06 00:54:45     1.6
  +++ BasicLXSQLQueryableHandler.java   2001/12/19 10:45:45     1.7
  @@ -39,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.6 $
  + * @version $Revision: 1.7 $
    */
   public abstract class BasicLXSQLQueryableHandler extends BasicLXSQLHandler {
   
  @@ -127,24 +127,6 @@
           return column;
       }
   
  -    protected Column createDelegatedColumn(AbstractQueryable aq, Node 
columnNode, int ix) throws ActionException {
  -        Node nameNode = columnNode.getAttributes().getNamedItem("name");
  -        if (nameNode == null) {
  -            throw new ActionException("'name' not specified for one of the 
columns");
  -        }
   
  -        Column col = aq.getColumn(nameNode.getNodeValue());
  -        Column column = null;
  -        if (col instanceof StringColumn) {
  -            column = new 
DefaultDelegatedVarcharColumn((StringColumn)col,null);
  -        } else if (col instanceof NumericColumn) {
  -            //TODO
  -            column = new 
DefaultDelegatedIntegerColumn((NumericColumn)col,null);
  -        } else {
  -            //TODO
  -        }
  -        column.setIndex(ix);
  -        return column;
  -    }
   
   }
  
  
  
  1.14      +6 -4      
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLSelectSimpleHandler.java
  
  Index: BasicLXSQLSelectSimpleHandler.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLSelectSimpleHandler.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- BasicLXSQLSelectSimpleHandler.java        2001/12/18 23:34:33     1.13
  +++ BasicLXSQLSelectSimpleHandler.java        2001/12/19 10:45:46     1.14
  @@ -53,10 +53,12 @@
    *
   * @author Gerhard Froehlich <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
    * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
  - * @version $Revision: 1.13 $
  + * @version $Revision: 1.14 $
    */
  -public class BasicLXSQLSelectSimpleHandler extends 
BasicLXSQLSecondaryHandler {
  +public class BasicLXSQLSelectSimpleHandler extends BasicLXSQLHandler {
   
  +    private SelectColumnHelper mSelectColumnHelper = new 
SelectColumnHelper();
  +
       /**
        * Constructor BasicLXSQLSelectSimpleHandler
        *
  @@ -149,13 +151,13 @@
                               // do nothing, whitespace between elems
                           } else {
                               //TODO checking columns, function...maybe extern 
syntax checking!?
  -                            if (isAllColumns((Element) 
subColumnsNodes.item(j))) {
  +                            if (mSelectColumnHelper.isAllColumns((Element) 
subColumnsNodes.item(j))) {
                                   Column[] cs = queryable.getColumns();
                                   for (int f = 0; f< cs.length; f++) {
                                       colVec.add(cs[f]);
                                   }
                               } else {
  -                                colVec.add(getSelectColumn(queryable 
,(Element) subColumnsNodes.item(j), colHldr));
  +                                
colVec.add(mSelectColumnHelper.getSelectColumn(queryable ,(Element) 
subColumnsNodes.item(j), colHldr));
                               }
                           }
                       }
  
  
  
  1.14      +5 -3      
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.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- BasicLXSQLUpdateRowsHandler.java  2001/12/18 23:34:33     1.13
  +++ BasicLXSQLUpdateRowsHandler.java  2001/12/19 10:45:46     1.14
  @@ -37,10 +37,12 @@
    *
    *
    * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
  - * @version $Revision: 1.13 $
  + * @version $Revision: 1.14 $
    */
  -public class BasicLXSQLUpdateRowsHandler extends BasicLXSQLSecondaryHandler {
  +public class BasicLXSQLUpdateRowsHandler extends BasicLXSQLHandler {
   
  +    private SelectColumnHelper mSelectColumnHelper = new 
SelectColumnHelper();
  +
       /**
        * Constructor BasicLXSQLUpdateRowsHandler
        *
  @@ -141,7 +143,7 @@
                      // do nothing
                  } else {
                      ct++;
  -                   col = getSelectColumn(abstractQueryable,(Element) 
subSetNodes.item(i),colHldr);
  +                   col = 
mSelectColumnHelper.getSelectColumn(abstractQueryable,(Element) 
subSetNodes.item(i),colHldr);
                  }
              }
              if (ct < 1 | ct > 1) {
  
  
  
  1.1                  
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/SelectColumnHelper.java
  
  Index: SelectColumnHelper.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.basic.handlers.lxsql;
  
  
  
  import org.apache.avalon.db.server.AbstractRequestHandler;
  import org.apache.avalon.db.basic.parser.BasicLXSQLParserManager;
  import org.apache.avalon.db.basic.handlers.ContrivedColumnNameHolder;
  import org.apache.avalon.db.services.DatabasePersistor;
  import org.apache.avalon.db.actions.ActionException;
  import org.apache.avalon.db.data.impl.AbstractQueryable;
  import org.apache.avalon.db.data.impl.DefaultIntegerConstantColumn;
  import org.apache.avalon.db.data.impl.DefaultStringConstantColumn;
  import org.apache.avalon.db.data.impl.DefaultContrivedStringFunctionColumn;
  import org.apache.avalon.db.data.impl.DefaultContrivedIntegerFunctionColumn;
  import org.apache.avalon.db.data.Column;
  import org.apache.avalon.db.functions.impl.IntegerDivisionFunction;
  import org.apache.avalon.db.functions.impl.IntegerMultiplicationFunction;
  import org.apache.avalon.db.functions.impl.IntegerSubtractionFunction;
  import org.apache.avalon.db.functions.impl.IntegerAdditionFunction;
  import org.apache.avalon.db.functions.impl.ConcatFunction;
  import org.apache.avalon.db.functions.impl.TrimStringFunction;
  import org.apache.avalon.db.functions.impl.LowerCaseStringFunction;
  import org.apache.avalon.db.functions.impl.UpperCaseStringFunction;
  import org.apache.avalon.db.functions.impl.PositionFunction;
  import org.apache.avalon.db.functions.StringFunction;
  import org.apache.avalon.db.functions.NumericFunction;
  import org.w3c.dom.Element;
  import org.w3c.dom.Node;
  import org.w3c.dom.NodeList;
  
  import java.util.Vector;
  
  
  /**
   * Class SelectColumnHelper
   *
   *
   * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
   * @version $Revision: 1.1 $
   */
  public class SelectColumnHelper {
  
  
      protected boolean isAllColumns(Element elem) {
          String nodeName = elem.getNodeName();
          if (nodeName.equals("column")) {
              String name = elem.getAttribute("name");
              if (name.equals("*")) {
                  return true;
              }
          }
          return false;
      }
  
      protected Column getSelectColumn(AbstractQueryable queryable, Element 
elem, ContrivedColumnNameHolder colHldr) throws ActionException {
  
  
          String nodeName = elem.getNodeName();
  
          if (nodeName.equals("column")) {
              return getSelectColumnColumn(queryable, elem);
          } else if (nodeName.equals("concat")) {
              return getStringColumnFromStringFunction(queryable, elem, new 
ConcatFunction(), colHldr);
          } else if (nodeName.equals("const")) {
              return getColumnConst(queryable, elem, colHldr);
          } else if (nodeName.equals("trim")) {
              return getStringColumnFromStringFunction(queryable, elem, new 
TrimStringFunction(), colHldr);
          } else if (nodeName.equals("lowercase")) {
              return getStringColumnFromStringFunction(queryable, elem, new 
LowerCaseStringFunction(), colHldr);
          } else if (nodeName.equals("uppercase")) {
              return getStringColumnFromStringFunction(queryable, elem, new 
UpperCaseStringFunction(), colHldr);
          } else if (nodeName.equals("position")) {
              return getIntegerColumnFromIntegerFunction(queryable, elem, new 
PositionFunction(), colHldr);
          } else if (nodeName.equals("addition")) {
              return getIntegerColumnFromIntegerFunction(queryable, elem, new 
IntegerAdditionFunction(), colHldr);
          } else if (nodeName.equals("subtraction")) {
              return getIntegerColumnFromIntegerFunction(queryable, elem, new 
IntegerSubtractionFunction(), colHldr);
          } else if (nodeName.equals("multiplication")) {
              return getIntegerColumnFromIntegerFunction(queryable, elem, new 
IntegerMultiplicationFunction(), colHldr);
          } else if (nodeName.equals("division")) {
              return getIntegerColumnFromIntegerFunction(queryable, elem, new 
IntegerDivisionFunction(), colHldr);
          } else {
              throw new ActionException("Unknown node type '"+nodeName+"' under 
'columns'");
          }
  
  
      }
  
      protected Column getSelectColumnColumn(AbstractQueryable queryable, 
Element elem) throws ActionException {
          String name = elem.getAttribute("name");
          return queryable.getColumn(name, true);
      }
  
  
  
      protected Column getColumnConst(AbstractQueryable queryable, Element 
aElem,
              ContrivedColumnNameHolder colHldr) throws ActionException {
          String value = aElem.getAttribute("value");
          String as = aElem.getAttribute("as");
          if (as == null) {
              as = colHldr.getNextColumn();
          }
          // TODO more types
          try {
              return new 
DefaultIntegerConstantColumn(as,Integer.parseInt(value));
          } catch (java.lang.NumberFormatException nfe) {
              return new DefaultStringConstantColumn(as,value);
          }
  
      }
  
      protected Column getStringColumnFromStringFunction(AbstractQueryable 
queryable,
              Element aElem, StringFunction function, ContrivedColumnNameHolder 
colHldr) throws ActionException {
          String as = aElem.getAttribute("as");
          if (as == null) {
              as = colHldr.getNextColumn();
          }
          // TODO as might be missing
          //return queryable.getColumn(name, true);
          int count = 0;
          if (aElem.hasChildNodes()) {
              NodeList subConcatNodes = aElem.getChildNodes();
              Vector colVec = new Vector();
              for (int j=0; j < subConcatNodes.getLength(); j++) {
                  Node node = subConcatNodes.item(j);
  
                  String nodeName =  node.getNodeName();
                  if (nodeName.equals("#text")) {
                      // do nothing
                  } else {
                      count++;
                      colVec.add(getSelectColumn(queryable,(Element) node, 
colHldr));
                  }
              }
              if (colVec.size() > function.getMaxCols()) {
                  throw new ActionException("String function 
"+aElem.getNodeName()+" can only have "+function.getMaxCols()+" child columns");
              }
              Column[] cols = new Column[colVec.size()];
              colVec.copyInto(cols);
              function.initialize(cols);
              return new DefaultContrivedStringFunctionColumn(as,function);
          } else {
              throw new ActionException("String function 
"+aElem.getNodeName()+" must have child column");
          }
      }
  
      protected Column getIntegerColumnFromIntegerFunction(AbstractQueryable 
queryable, Element aElem,
              NumericFunction function, ContrivedColumnNameHolder colHldr) 
throws ActionException {
          String as = aElem.getAttribute("as");
          if (as == null) {
              as = colHldr.getNextColumn();
          }
          // TODO as might be missing
          //return queryable.getColumn(name, true);
          int count = 0;
          if (aElem.hasChildNodes()) {
              NodeList subConcatNodes = aElem.getChildNodes();
              Vector colVec = new Vector();
              for (int j=0; j < subConcatNodes.getLength(); j++) {
                  Node node = subConcatNodes.item(j);
                  String nodeName =  node.getNodeName();
                  if (nodeName.equals("#text")) {
                      // do nothing
                  } else {
                      count++;
                      colVec.add(getSelectColumn(queryable,(Element) node, 
colHldr));
                  }
              }
              if (colVec.size() > function.getMaxCols() | colVec.size() < 
function.getMinCols() ) {
                  throw new ActionException("Numeric function 
"+aElem.getNodeName()+" must have between "+function.getMinCols()+" and 
"+function.getMaxCols()+" ");
              }
              Column[] cols = new Column[colVec.size()];
              colVec.copyInto(cols);
              function.initialize(cols);
              return new DefaultContrivedIntegerFunctionColumn(as,function);
          } else {
              throw new ActionException("Numeric function 
"+aElem.getNodeName()+" must have child column");
          }
      }
  }
  
  
  
  1.6       +23 -0     
jakarta-avalon-cornerstone/apps/db/src/scripts/lxsql/Test2.script
  
  Index: Test2.script
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/scripts/lxsql/Test2.script,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- Test2.script      2001/12/18 23:34:33     1.5
  +++ Test2.script      2001/12/19 10:45:46     1.6
  @@ -108,5 +108,28 @@
      </from>
   </simple-select>
   
  +### VIEW 1 (contrived field) ##!
  +
  +<create-view name="FlintstonesView2" on="Flintstones">
  +  <columns>
  +      <concat>
  +        <const value="Warner Bros character "/>
  +        <column name="forename"/>
  +        <const value=" "/>
  +        <column name="surname"/>
  +      </concat>
  +  </columns>
  +</create-view>
  +
  +### SELECT 4 (all rows) ##!
  +
  +<simple-select>
  +   <columns>
  +    <column name="*"/>
  +   </columns>
  +   <from>
  +     <table name="FlintstonesView2"/>
  +   </from>
  +</simple-select>
   
   ###
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to