hammant     01/11/13 04:12:45

  Modified:    apps/db/src/java/org/apache/avalon/db/basic/actions
                        BasicSelect.java
               apps/db/src/java/org/apache/avalon/db/test Tester.java
  Log:
  where logic has correct ('s now.
  
  Revision  Changes    Path
  1.13      +45 -48    
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/actions/BasicSelect.java
  
  Index: BasicSelect.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/actions/BasicSelect.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- BasicSelect.java  2001/11/12 21:01:18     1.12
  +++ BasicSelect.java  2001/11/13 12:12:44     1.13
  @@ -20,6 +20,7 @@
   import org.apache.avalon.db.basic.parser.BasicLXSQLParser;
   import org.apache.avalon.db.utils.RhinoHelper;
   import org.apache.avalon.db.transport.SelectRequest;
  +import org.apache.avalon.db.data.ValidationException;
   import org.w3c.dom.Document;
   import org.w3c.dom.Element;
   import org.w3c.dom.NodeList;
  @@ -43,6 +44,7 @@
       private boolean mPrepared;
       private boolean mWithParams;
       private int mParamCount;
  +    StringBuffer mWhereBuffer = new StringBuffer();
   
       /**
        * The Constructor
  @@ -69,7 +71,7 @@
           if(true) {
               cols = parseSelect(mRootElement);
               tablenames = parseFrom(mRootElement);
  -            parseWhereRoot(mRootElement);
  +            parseLXSQL(mRootElement);
               System.out.println("cols.length=" + cols.length);
               System.out.println("tablenames.length=" + tablenames.length);
           } else {
  @@ -130,6 +132,37 @@
           return false;
       }
   
  +    protected void parseLXSQL(Element rootElement) throws ActionException {
  +        NodeList subRootNodes = this.getSubRootNodes(rootElement);
  +        boolean whereDone = false;
  +        StringBuffer whereBuffer = new StringBuffer();
  +        int indent = 0;
  +
  +        try {
  +            for (int i=0; i < subRootNodes.getLength(); i++) {
  +                if(subRootNodes.item(i).getNodeName().equals("where")) {
  +                    if (whereDone) {
  +                        throw new ActionException("<where> term must only be 
specified once");
  +                    }
  +                    Element whereElement = (Element)subRootNodes.item(i);
  +                    NodeList elements = whereElement.getChildNodes();
  +                    for (int j=0; j < elements.getLength(); j++) {
  +                        Element element = (Element)elements.item(j);
  +                        parseWhereTerm(element, whereBuffer, indent+1);
  +                    }
  +                    whereDone = true;
  +                }
  +            }
  +        } catch (ValidationException ve) {
  +            throw new ActionException("Validation Exception: " + 
ve.getMessage());
  +        }
  +        mWhereBuffer = whereBuffer;
  +        System.out.println("sb=[\n" + whereBuffer + "\n]");
  +
  +
  +    }
  +
  +
       private String[] parseSelect(Element rootElement) throws ActionException 
{
           NodeList subRootNodes = this.getSubRootNodes(rootElement);
           String[] cols = null;
  @@ -172,82 +205,46 @@
           }
           return tablenames;
       }
  -
  -    private StringBuffer parseWhereRoot(Element rootElement) {
  -        int indent = 0;
  -        System.out.println("Enter parseWhereRoot()");
  -        StringBuffer sb = new StringBuffer();
  -        Element whereElement = null;
  -
  -        NodeList subRootNodes = this.getSubRootNodes(rootElement);
  -        for (int i=0; i < subRootNodes.getLength(); i++) {
  -            if(subRootNodes.item(i).getNodeName().equals("where")) {
  -                System.out.println("parseWhereRoot(): found where");
  -                whereElement = (Element)subRootNodes.item(i);
  -            }
  -        }
  -        this.parseWhereTerm((Element)whereElement.getFirstChild(),sb, 
indent+1);
  -        System.out.println("parseWhereRoot(): END");
  -        System.out.println("sb=[\n" + sb + "\n]");
  -        return sb;
  -    }
   
  -    private void parseWhereTerm(Element element, StringBuffer sb, int 
indent) {
  -        System.out.println("Enter parseWhereTerm()");
  -        sb.append(getIndent(indent) + "(\n");
  +    private void parseWhereTerm(Element element, StringBuffer sb, int 
indent) throws ValidationException {
           if(element != null) {
               System.out.println("Element != null " + element);
               if(element.getTagName().equals("and")) {
                   System.out.println("parseWhereTerm(): found and");
  -                parseWhereAndTerm(element.getChildNodes(),sb, indent +1);
  +                parseWhereAndOrTerm(element.getChildNodes(),sb, indent, "&");
               } else if(element.getTagName().equals("or")) {
                   System.out.println("parseWhereTerm(): found or");
  -                parseWhereOrTerm(element.getChildNodes(),sb, indent +1);
  +                parseWhereAndOrTerm(element.getChildNodes(),sb, indent, "|");
               } else if(element.getTagName().equals("condition")) {
                   System.out.println("parseWhereTerm(): found condition");
  -                parseWhereConditionTerm(element,sb,indent+1);
  +                parseWhereConditionTerm(element,sb,indent);
               } else {
  -                return;
  +                throw new ValidationException("Unknown where term " + 
element.getTagName());
               }
           } else {
               System.out.println("Element == null " + element);
               System.out.println("parseWhereTerm after if");
  -            return;
  +            throw new ValidationException("Null where element");
           }
  -        //System.exit(0);
  -        //System.out.println("sb=" + sb.toString());
           System.out.println("parseWhereTerm at the end");
  -        sb.append(getIndent(indent) + ")\n");
  -        return;
       }
   
  -    private void parseWhereAndTerm(NodeList nodes, StringBuffer sb, int 
indent) {
  +    private void parseWhereAndOrTerm(NodeList nodes, StringBuffer sb, int 
indent, String andOr) {
  +        sb.append(getIndent(indent) + "(\n");
           try {
               for(int i=0; i<nodes.getLength(); i++) {
  -                System.out.println("Looping and");
  +                System.out.println("Looping and/or");
                   parseWhereTerm((Element)nodes.item(i),sb, indent +1);
                   if (i+1 < nodes.getLength()) {
  -                  sb.append( getIndent(indent) + "&\n");
  +                  sb.append( getIndent(indent) + andOr + "\n");
                   }
               }
           } catch(Exception e) {
               e.printStackTrace();
           }
  +        sb.append(getIndent(indent) + ")\n");
       }
   
  -    private void parseWhereOrTerm(NodeList nodes, StringBuffer sb, int 
indent) {
  -        try {
  -            for(int i=0; i<nodes.getLength(); i++) {
  -                System.out.println("Looping or");
  -                parseWhereTerm((Element)nodes.item(i),sb, indent +1);
  -                if (i+1 < nodes.getLength()) {
  -                  sb.append(getIndent(indent) + "|\n");
  -                }
  -            }
  -        } catch(Exception e) {
  -            e.printStackTrace();
  -        }
  -    }
   
       private void parseWhereConditionTerm(Element element, StringBuffer sb, 
int indent) {
           try {
  
  
  
  1.14      +2 -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.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- Tester.java       2001/11/13 09:25:43     1.13
  +++ Tester.java       2001/11/13 12:12:45     1.14
  @@ -69,7 +69,8 @@
                              "<from><table name=\"Flintstones\"/></from>" +
                              "<where>" +
                                "<and>" +
  -                               "<condition 
expr=\"row.getColumn('forename').equals('Fred')\"/>" +  //TODO this is too Java
  +                               "<condition 
expr=\"row.getColumn('forename').startsWith('F')\"/>" +  //TODO this is too Java
  +                               "<condition 
expr=\"row.getColumn('forename').length() > 3\"/>" +  //TODO this is too Java
                                "</and>" +
                              "</where>" +
                           "</simple-select>";
  
  
  

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

Reply via email to