You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by ha...@apache.org on 2001/11/29 15:26:13 UTC

cvs commit: jakarta-avalon-cornerstone/apps/db/src/scripts/lxsql Test1.script

hammant     01/11/29 06:26:13

  Modified:    apps/db  build.xml
               apps/db/src/java/org/apache/avalon/db/basic/actions
                        BasicLXSQLCriteriaHelper.java
               apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql
                        BasicLXSQLCreateAggregateViewHandler.java
                        BasicLXSQLCreateTableHandler.java
                        BasicLXSQLInsertRowsHandler.java
                        BasicLXSQLQueryableHandler.java
                        BasicLXSQLSelectSimpleHandler.java
                        BasicLXSQLUpdateRowsHandler.java
               apps/db/src/java/org/apache/avalon/db/driver/lxsql
                        LXSQLParserHelper.java
               apps/db/src/java/org/apache/avalon/db/test Tester.java
  Added:       apps/db/src/scripts/lxsql Test1.script
  Log:
  Tester uses script file now
  
  Revision  Changes    Path
  1.22      +5 -1      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.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- build.xml	2001/11/27 23:01:30	1.21
  +++ build.xml	2001/11/29 14:26:13	1.22
  @@ -336,7 +336,11 @@
     <target name="docs"/>
     
     <target name="test1" depends="main">
  -    <java classname="org.apache.avalon.db.test.Tester" fork="true">
  +  
  +    <property name="script" location="src/scripts/lxsql/Test1.script"/>
  +  
  +    <java classname="org.apache.avalon.db.test.Tester" fork="true">          
  +      <arg value="${script}"/>
         <classpath refid="test.path"/>
       </java>  
     </target>
  
  
  
  1.2       +15 -5     jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/actions/BasicLXSQLCriteriaHelper.java
  
  Index: BasicLXSQLCriteriaHelper.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/actions/BasicLXSQLCriteriaHelper.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- BasicLXSQLCriteriaHelper.java	2001/11/29 10:35:26	1.1
  +++ BasicLXSQLCriteriaHelper.java	2001/11/29 14:26:13	1.2
  @@ -20,6 +20,7 @@
   
   import java.util.Hashtable;
   import java.util.Enumeration;
  +import java.util.Vector;
   
   /**
    * Class BasicLXSQLCriteriaHelper
  @@ -74,8 +75,10 @@
                       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);
  +                        String nodeName = elements.item(j).getNodeName();
  +                        if (!nodeName.equals("#text")) {
  +                          parseWhereTerm((Element) elements.item(j), whereBuffer, indent+1);
  +                        }
                       }
                       whereDone = true;
                   }
  @@ -113,11 +116,18 @@
       private void parseWhereAndOrTerm(NodeList nodes, StringBuffer sb, int indent, String andOr) {
           sb.append(getIndent(indent) + "(\n");
           try {
  +            Vector realNodes = new Vector();
               for(int i=0; i<nodes.getLength(); i++) {
  +                if (!nodes.item(i).getNodeName().equals("#text")) {
  +                    realNodes.add(nodes.item(i));
  +                }
  +            }
  +            for (int i = 0; i < realNodes.size(); i++) {
  +                Element elem = (Element) realNodes.elementAt(i);
                   //getLogger().debug("Looping and/or");
  -                parseWhereTerm((Element)nodes.item(i),sb, indent +1);
  -                if (i+1 < nodes.getLength()) {
  -                  sb.append( getIndent(indent) + andOr + "\n");
  +                parseWhereTerm(elem,sb, indent +1);
  +                if (i+1 < realNodes.size()) {
  +                    sb.append( getIndent(indent) + andOr + "\n");
                   }
               }
           } catch(Exception e) {
  
  
  
  1.5       +3 -4      jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLCreateAggregateViewHandler.java
  
  Index: BasicLXSQLCreateAggregateViewHandler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLCreateAggregateViewHandler.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- BasicLXSQLCreateAggregateViewHandler.java	2001/11/29 10:35:55	1.4
  +++ BasicLXSQLCreateAggregateViewHandler.java	2001/11/29 14:26:13	1.5
  @@ -33,7 +33,7 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.4 $
  + * @version $Revision: 1.5 $
    */
   public class BasicLXSQLCreateAggregateViewHandler extends BasicLXSQLAggregateHandler {
   
  @@ -76,7 +76,6 @@
               Column[] columns = null;
               NodeList subRootNodes = rootElement.getChildNodes();
               for (int i = 0; i < subRootNodes.getLength(); i++) {
  -                System.out.println(">>>"+subRootNodes.item(i).getNodeName());
                   if (subRootNodes.item(i).getNodeName().equals("grouped-columns")) {
                       columns = this.getColumns((Element) subRootNodes.item(i));
                   } else if (subRootNodes.item(i).getNodeName().equals("group-function-columns")) {
  @@ -88,8 +87,8 @@
               basicCriteriaHelper.enableLogging(super.getLogger());
   
               CreateAggregateView action = new BasicCreateAggregateView(
  -                                                viewName, 
  -                                                onName, 
  +                                                viewName,
  +                                                onName,
                                                   columns ,
                                                   new BasicCriteria(basicCriteriaHelper.getCriteria())
                                            );
  
  
  
  1.7       +1 -3      jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLCreateTableHandler.java
  
  Index: BasicLXSQLCreateTableHandler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLCreateTableHandler.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- BasicLXSQLCreateTableHandler.java	2001/11/23 12:40:20	1.6
  +++ BasicLXSQLCreateTableHandler.java	2001/11/29 14:26:13	1.7
  @@ -32,7 +32,7 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.6 $
  + * @version $Revision: 1.7 $
    */
   public class BasicLXSQLCreateTableHandler extends BasicLXSQLQueryableHandler {
   
  @@ -74,12 +74,10 @@
               Column[] columns = null;
               NodeList subRootNodes = rootElement.getChildNodes();
               for (int i = 0; i < subRootNodes.getLength(); i++) {
  -                System.out.println(">>>"+subRootNodes.item(i).getNodeName());
                   if (subRootNodes.item(i).getNodeName().equals("columns")) {
                       columns = getColumns((Element) subRootNodes.item(i));
                   }
               }
  -            System.out.println(">>>-" + columns[0]);
               CreateTable action = new BasicCreateTable(tableName, columns);
   
               mParser.initializeAction(action);
  
  
  
  1.6       +6 -3      jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLInsertRowsHandler.java
  
  Index: BasicLXSQLInsertRowsHandler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLInsertRowsHandler.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- BasicLXSQLInsertRowsHandler.java	2001/11/23 12:40:20	1.5
  +++ BasicLXSQLInsertRowsHandler.java	2001/11/29 14:26:13	1.6
  @@ -40,7 +40,7 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.5 $
  + * @version $Revision: 1.6 $
    */
   public class BasicLXSQLInsertRowsHandler extends BasicLXSQLHandler {
   
  @@ -81,11 +81,14 @@
           Collection rows = null;
           try {
               for (int f = 0 ; f < subRootNodes.getLength(); f++) {
  +                String nodeName = subRootNodes.item(f).getNodeName();
                   if (subRootNodes.item(f).getNodeName().equals("rows")) {
                       NodeList subRowsNodes = subRootNodes.item(f).getChildNodes();
                       rows = processSubRowsNodes((BasicTable) queryable, subRowsNodes);
  -               } else {
  -                   throw new ActionException("Only 'rows' allowed as a node under root node");
  +                } else if (nodeName.equals("#text")) {
  +                    // do nothing, whitespace between elems
  +                } else {
  +                    throw new ActionException("Only 'rows' allowed as a node under root node");
                   }
               }
           } catch (ValidationException ve) {
  
  
  
  1.3       +9 -4      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.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- BasicLXSQLQueryableHandler.java	2001/11/29 00:50:02	1.2
  +++ BasicLXSQLQueryableHandler.java	2001/11/29 14:26:13	1.3
  @@ -34,7 +34,7 @@
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
    * @author Gerhard Froehlich <a href="mailto:g-froehlich@gmx.de">g-froehlich@gmx.de</a>
  - * @version $Revision: 1.2 $
  + * @version $Revision: 1.3 $
    */
   public abstract class BasicLXSQLQueryableHandler extends BasicLXSQLHandler {
   
  @@ -61,16 +61,21 @@
   
           NodeList subColumnsNodes = columnsNode.getChildNodes();
           for (int x = 0 ; x < subColumnsNodes.getLength(); x++) {
  -            if (subColumnsNodes.item(x).getNodeName().equals("column")) {
  +            String nodeName = subColumnsNodes.item(x).getNodeName();
  +            if (nodeName.equals("column")) {
                   columns.add(createColumn(subColumnsNodes.item(x), x));
  +            } else if (nodeName.equals("#text")) {
  +                // do nothing, whitespace between elems
               } else {
  -
  -                throw new ActionException("Only 'column' allowed as a node under 'columns' node");
  +                throw new ActionException("Only 'column' allowed as a node under 'columns' node, "+subColumnsNodes.item(x).getNodeName()+" found");
               }
           }
   
           Column[] columnsAry = new Column[columns.size()];
           columns.toArray(columnsAry);
  +        for (int x = 0; x < columnsAry.length; x++ ) {
  +            columnsAry[x].setIndex(x);
  +        }
   
           return columnsAry;
   
  
  
  
  1.6       +42 -22    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.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- BasicLXSQLSelectSimpleHandler.java	2001/11/29 10:35:55	1.5
  +++ BasicLXSQLSelectSimpleHandler.java	2001/11/29 14:26:13	1.6
  @@ -27,13 +27,16 @@
   import org.w3c.dom.Element;
   import org.w3c.dom.NodeList;
   
  +import java.util.Vector;
   
  +
   /**
    * Class BasicLXSQLSelectSimpleHandler
    *
    *
  +* @author Gerhard Froehlich <a href="mailto:g-froehlich@gmx.de">g-froehlich@gmx.de</a>
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.5 $
  + * @version $Revision: 1.6 $
    */
   public class BasicLXSQLSelectSimpleHandler extends BasicLXSQLHandler {
   
  @@ -72,6 +75,16 @@
   
           AbstractQueryable queryable = (AbstractQueryable) mDatabasePersistor.getQueryable(tables[0]);
   
  +        String[] cols = getColumns(rootElement);
  +        Column[] columns = null;
  +
  +        // TODO - not perfect.
  +        if (cols.length != 0 && cols[0].equals("*")) {
  +            columns = queryable.getColumns();
  +        } else {
  +            columns = convertColumns(queryable, cols);
  +        }
  +
           Select action = new BasicSelectSimple(tables,
           convertColumns(queryable, getColumns(rootElement)),
           new BasicCriteria(criteriaHelper.getCriteria()));
  @@ -83,18 +96,28 @@
       }
   
   
  -    private String[] parseFrom(Element rootElement) {
  +    private String[] parseFrom(Element rootElement) throws ActionException {
           NodeList subRootNodes = rootElement.getChildNodes();
           String[] tablenames = null;
   
           for (int i=0; i < subRootNodes.getLength(); i++) {
               if(subRootNodes.item(i).getNodeName().equals("from")) {
                   NodeList subFromNodes = subRootNodes.item(i).getChildNodes();
  -                tablenames = new String[subFromNodes.getLength()];
  +                Vector tables = new Vector();
                   for(int j=0; j < subFromNodes.getLength(); j++) {
  -                    Element fromElement = (Element)subFromNodes.item(j);
  -                    tablenames[j] = fromElement.getAttribute("name");
  +                    String subFromNodeName = subFromNodes.item(j).getNodeName();
  +                    if (subFromNodeName.equals("table")) {
  +                       Element fromElement = (Element)subFromNodes.item(j);
  +                       tables.add(fromElement.getAttribute("name"));
  +                    } else if (subFromNodeName.equals("#text")) {
  +
  +                        // ignore.
  +                    } else {
  +                        throw new ActionException("Unexpected node '"+subFromNodeName+"' under 'from'");
  +                    }
                   }
  +                tablenames = new String[tables.size()];
  +                tables.copyInto(tablenames);
               }
           }
           return tablenames;
  @@ -103,9 +126,6 @@
       protected Column[] convertColumns(AbstractQueryable queryable, String[] columnNames) {
   
           //TODO * could be with other contrived columns
  -        if (columnNames[0].equals("*")) {
  -            return queryable.getColumns();
  -        }
   
           Column[] columns = new Column[columnNames.length];
           for ( int i = 0; i < columnNames.length; i++ ) {
  @@ -121,24 +141,24 @@
           for (int i=0; i < subRootNodes.getLength(); i++) {
               if(subRootNodes.item(i).getNodeName().equals("columns")) {
                   Element columnsElement = (Element)subRootNodes.item(i);
  -                getLogger().debug("columnsElement.getFirstChild()=" + columnsElement.getFirstChild().getNodeName());
                   //First test if *
  -                if(columnsElement.getFirstChild().getNodeName().equals("#text")) {
  -                   if(columnsElement.getFirstChild().getNodeValue().equals("*")) {
  -                       cols = new String[1];
  -                       cols[0] = "*";
  -                   } else {
  -                       throw new ActionException(columnsElement.getFirstChild().getNodeValue()
  -                                              + " is not valid LXSQL Syntax");
  -                   }
  -                } else if (subRootNodes.item(i).hasChildNodes()) {
  +                if (subRootNodes.item(i).hasChildNodes()) {
                       NodeList subColumnsNodes = subRootNodes.item(i).getChildNodes();
  -                    cols = new String[subColumnsNodes.getLength()];
  +                    Vector colVec = new Vector();
                       for (int j=0; j < subColumnsNodes.getLength(); j++) {
  -                        //TODO checking columns, function...maybe extern syntax checking!?
  -                        Element columnElement = (Element)subColumnsNodes.item(j);
  -                        cols[j] = columnElement.getAttribute("name");
  +                        String nodeName = subColumnsNodes.item(j).getNodeName();
  +                        if (nodeName.equals("column")) {
  +                            //TODO checking columns, function...maybe extern syntax checking!?
  +                            Element columnElement = (Element)subColumnsNodes.item(j);
  +                            colVec.add(columnElement.getAttribute("name"));
  +                        } else if (nodeName.equals("#text")) {
  +                            // do nothing, whitespace between elems
  +                        } else {
  +                            throw new ActionException("Unknow node type '"+nodeName+"' under 'columns'");
  +                        }
                       }
  +                    cols = new String[colVec.size()];
  +                    colVec.copyInto(cols);
                   } else {
                       throw new ActionException(columnsElement.getFirstChild().getNodeValue()
                                                 + " is not valid LXSQL Syntax");
  
  
  
  1.8       +8 -5      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.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- BasicLXSQLUpdateRowsHandler.java	2001/11/29 10:35:55	1.7
  +++ BasicLXSQLUpdateRowsHandler.java	2001/11/29 14:26:13	1.8
  @@ -33,7 +33,7 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.7 $
  + * @version $Revision: 1.8 $
    */
   public class BasicLXSQLUpdateRowsHandler extends BasicLXSQLHandler {
   
  @@ -68,7 +68,7 @@
           Element rootElement = doc.getDocumentElement();
           String queryableStr = rootElement.getAttribute("from");
           Queryable queryable = (Queryable) mDatabasePersistor.getQueryable(queryableStr);
  -    
  +
           String matchingInstructions = null;
   
           NodeList subRootNodes = rootElement.getChildNodes();
  @@ -82,9 +82,9 @@
           basicCriteriaHelper.enableLogging(super.getLogger());
   
           UpdateRows action = new BasicUpdateRows(
  -                                    (AbstractQueryable) queryable, 
  +                                    (AbstractQueryable) queryable,
                                       new BasicCriteria(
  -                                            basicCriteriaHelper.getCriteria(), 
  +                                            basicCriteriaHelper.getCriteria(),
                                               matchingInstructions, "")
                                       );
   
  @@ -98,8 +98,11 @@
           NodeList subUpdatesNodes = updatesElement.getChildNodes();
           StringBuffer instructionBuffer = new StringBuffer();
           for (int i=0; i < subUpdatesNodes.getLength(); i++) {
  -            if(subUpdatesNodes.item(i).getNodeName().equals("set")) {
  +            String nodeName = subUpdatesNodes.item(i).getNodeName();
  +            if (nodeName.equals("set")) {
                   setSetInstruction((Element) subUpdatesNodes.item(i), instructionBuffer);
  +            } else if(nodeName.equals("#text")) {
  +                // ignore
               } else {
                   throw new ActionException("Element 'set' is the only element allowed beneath 'updates'");
               }
  
  
  
  1.10      +9 -10     jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/driver/lxsql/LXSQLParserHelper.java
  
  Index: LXSQLParserHelper.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/driver/lxsql/LXSQLParserHelper.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- LXSQLParserHelper.java	2001/11/27 21:18:22	1.9
  +++ LXSQLParserHelper.java	2001/11/29 14:26:13	1.10
  @@ -1,10 +1,9 @@
   /*
  - * Created by IntelliJ IDEA.
  - * User: Administrator
  - * Date: Nov 4, 2001
  - * Time: 10:05:06 AM
  - * To change template for new class use 
  - * Code Style | Class Templates options (Tools | IDE Options).
  + * 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.driver.lxsql;
   
  @@ -33,7 +32,7 @@
               request = new UpdateRowsRequest(sql);
           } else if (sql.startsWith("<delete")) {
               request = new DeleteRowsRequest(sql);
  -        } else if (sql.startsWith("<select")) {
  +        } else if (sql.startsWith("<simple-select")) {
               request = new SelectRequest(sql);
           } else if (sql.startsWith("<create-")) {
               request = getCreateRequest(sql);
  @@ -43,7 +42,7 @@
               request = new DeleteRowsRequest(sql);
               //TODO
           } else {
  -            throw new SQLException("Unknown SQL instruction (first term)");
  +            throw new SQLException("Unknown SQL instruction (first term) - '" + sql.substring(0,10) + "'");
           }
           return request;
       }
  @@ -58,7 +57,7 @@
           } else if (sql.startsWith("<create-index")) {
               return new CreateIndexRequest(sql);
           } else {
  -            throw new SQLException("Unknown SQL instruction (first term)");
  +            throw new SQLException("Unknown SQL instruction (first term) - '" + sql.substring(0,10) + "'");
           }
       }
   
  @@ -70,7 +69,7 @@
           } else if (sql.startsWith("<drop-index")) {
               return new DropIndexRequest(sql);
           } else {
  -            throw new SQLException("Unknown SQL instruction (first term)");
  +            throw new SQLException("Unknown SQL instruction (first term) - '" + sql.substring(0,10) + "'");
           }
       }
   }
  
  
  
  1.33      +77 -196   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.32
  retrieving revision 1.33
  diff -u -r1.32 -r1.33
  --- Tester.java	2001/11/28 23:09:58	1.32
  +++ Tester.java	2001/11/29 14:26:13	1.33
  @@ -11,208 +11,90 @@
   import java.sql.Connection;
   import java.sql.Statement;
   import java.sql.ResultSet;
  +import java.sql.SQLException;
   import java.io.File;
  +import java.io.StringReader;
  +import java.io.FileInputStream;
  +import java.io.InputStreamReader;
   
   public class Tester {
   
       Connection mCon;
  +    String mLxsql;
   
  -    private Tester() throws Exception {
  +    private Tester(String scriptFile) throws Exception {
           Class.forName("org.apache.avalon.db.driver.AvalonDBDriver").newInstance();
           String url = "jdbc:avalondb:cmds:lxsql:BlahBlah:localhost:9001";
           mCon = DriverManager.getConnection(url, "todo", "todo");
  -    }
   
  -    private void test() throws Exception {
  -        Statement st = mCon.createStatement();
  +        String D = File.separator;
   
  -        System.err.println("CREATE");
  -        String createTable = "<create-table name=\"Flintstones\">" +
  -                               "<columns>" +
  -                                 "<column name=\"forename\" type=\"varchar\" max=\"20\"/>" +
  -                                 "<column name=\"surname\" type=\"varchar\" max=\"20\"/>" +
  -                                 "<column name=\"age\" type=\"integer\"/>" +
  -                               "</columns>" +
  -                             "</create-table>";
  -
  -        st.executeUpdate(createTable);
  -        System.out.println("  Update Count : " + st.getUpdateCount());
  -        st.close();
  -
  -        System.err.println("INSERT");
  -        st = mCon.createStatement();
  -        String insertInto = "<insert-into table-name=\"Flintstones\">" +
  -                               "<rows>" +
  -                                 "<row>" +
  -                                   "<value col=\"forename\">Fred</value>" +
  -                                   "<value col=\"surname\">Flintstone</value>" +
  -                                   "<value col=\"age\">40</value>" +
  -                                 "</row>" +
  -                                 "<row>" +
  -                                   "<value col=\"forename\">Wilma</value>" +
  -                                   "<value col=\"surname\">Flintstone</value>" +
  -                                   "<value col=\"age\">38</value>" +
  -                                 "</row>" +
  -                                 "<row>" +
  -                                   "<value col=\"forename\">Barney</value>" +
  -                                   "<value col=\"surname\">Rubble</value>" +
  -                                   "<value col=\"age\">66</value>" +
  -                                 "</row>" +
  -                                 "<row>" +
  -                                   "<value col=\"forename\">I am going</value>" +
  -                                   "<value col=\"surname\">to be deleted</value>" +
  -                                   "<value col=\"age\">999</value>" +
  -                                 "</row>" +
  -                               "</rows>" +
  -                             "</insert-into>";
  -        st.executeUpdate(insertInto);
  -        System.out.println("  Update Count : " + st.getUpdateCount());
  -        st.close();
  -
  -
  -        System.err.println("SELECT 0 (all rows)");
  -        st = mCon.createStatement();
  -        String select = "<simple-select>" +
  -                           "<columns>*</columns>" +
  -                           "<from><table name=\"Flintstones\"/></from>" +
  -                        "</simple-select>";
  -
  -        ResultSet rs = st.executeQuery(select);
  -        st.close();
  -        while (rs.next()) {
  -            System.out.println("  Row:" + rs.getString(0) + ", " + rs.getString(1) + ", " + rs.getString(2));
  -        }
  -        rs.close();
  +        FileInputStream fis = new FileInputStream(scriptFile);
  +        InputStreamReader isr = new InputStreamReader(fis, "UTF8");
   
  -        System.err.println("SELECT 1 (age>40)");
  -        st = mCon.createStatement();
  -        select = "<simple-select>" +
  -                          "<columns><column name=\"forename\"/>" +
  -                          "<column name=\"surname\"/></columns>" +
  -                           //"<columns>*</columns>" +
  -                           "<from><table name=\"Flintstones\"/></from>" +
  -
  -                           "<where>" +
  -                               "<condition expr=\"age>=40\"/>" +
  -                           "</where>" +
  -
  -                        "</simple-select>";
  -
  -        rs = st.executeQuery(select);
  -        st.close();
  -        while (rs.next()) {
  -            System.out.println("  Row:" + rs.getString(0) + ", " + rs.getString(1));
  -        }
  -        rs.close();
  +        StringBuffer buffer = new StringBuffer();
   
  -        System.err.println("VIEW 1 (Wilma Flintstone)");
  -        st = mCon.createStatement();
  -        String view = "<create-view name=\"FlintstonesView\" on=\"Flintstones\">" +
  -                         "<columns>" +
  -                             "<column name=\"forename\" type=\"varchar\" max=\"20\"/>" +
  -                             "<column name=\"surname\" type=\"varchar\" max=\"20\"/>" +
  -                             "<column name=\"age\" type=\"integer\"/>" +
  -                         "</columns>" +
  -                         "<where>" +
  -                             "<and>" +
  -                                 "<condition expr=\"forename=Wilma\"/>" +
  -                                 "<condition expr=\"surname=Flintstone\"/>" +
  -                             "</and>" +
  -                         "</where>" +
  -                      "</create-view>";
  -
  -        st.execute(view);
  -        System.out.println("  Update Count : " + st.getUpdateCount());
  -        st.close();
  -
  -        System.err.println("SELECT 2 (on view)");
  -        st = mCon.createStatement();
  -        select = "<simple-select>" +
  -                          "<columns><column name=\"forename\"/>" +
  -                          "<column name=\"surname\"/></columns>" +
  -                           //"<columns>*</columns>" +
  -                           "<from><table name=\"FlintstonesView\"/></from>" +
  -                        "</simple-select>";
  -        rs = st.executeQuery(select);
  -        st.close();
  -        while (rs.next()) {
  -            System.out.println("  Row:" + rs.getString(0) + ", " + rs.getString(1));
  +        int ch;
  +        while ((ch = isr.read()) > -1) {
  +            buffer.append((char)ch);
           }
  -        rs.close();
  +        isr.close();
  +        fis.close();
   
  +        mLxsql = buffer.toString();
   
  -        System.err.println("INDEX 1");
  -        st = mCon.createStatement();
  -        String index = "<create-index name=\"FlintstonesIdx\" table=\"Flintstones\">" +
  -                         "<columns>" +
  -                            "<column name=\"forename\"/>" +
  -                            "<column name=\"surname\"/>" +
  -                         "</columns>" +
  -                      "</create-index>";
  -        st.execute(index);
  -        System.out.println("  Update Count : " + st.getUpdateCount());
  -        st.close();
  -
  -        System.err.println("DELETE 1 (age>100)");
  -        st = mCon.createStatement();
  -        String delt = "<delete-rows from=\"Flintstones\">" +
  -                          "<where>" +
  -                              "<condition expr=\"age>100\"/>" +
  -                          "</where>" +
  -                      "</delete-rows>";
  -        st.execute(delt);
  -        System.out.println("  Update Count : " + st.getUpdateCount());
  -        st.close();
  -
  -        System.err.println("UPDATE 1");
  -        st = mCon.createStatement();
  -        String updt = "<update-rows from=\"Flintstones\">" +
  -                          "<updates>" +
  -                              "<set name=\"surname\" value=\"McRubble\"/>" +
  -                          "</updates>" +
  -                          "<where>" +
  -                              "<condition expr=\"age>60\"/>" +
  -                          "</where>" +
  -                      "</update-rows>";
  -        st.execute(updt);
  -        System.out.println("  Update Count : " + st.getUpdateCount());
  -        st.close();
  -
  -        System.err.println("SELECT 3 (all rows)");
  -        st = mCon.createStatement();
  -        select = "<simple-select>" +
  -                          "<columns><column name=\"forename\"/>" +
  -                          "<column name=\"surname\"/></columns>" +
  -                           //"<columns>*</columns>" +
  -                           "<from><table name=\"Flintstones\"/></from>" +
  -                        "</simple-select>";
  -        rs = st.executeQuery(select);
  -        st.close();
  -        while (rs.next()) {
  -            System.out.println("  Row:" + rs.getString(0) + ", " + rs.getString(1));
  -        }
  -        rs.close();
  +    }
  +
  +    private void test() throws Exception {
  +
  +        String lxSQL = null;
   
  -        System.err.println("VIEW 2 (surname aggregate)");
  -        st = mCon.createStatement();
  -        view = "<create-aggregate-view name=\"FlintstonesAggView\" on=\"Flintstones\">" +
  -                         "<grouped-columns>" +
  -                             "<column name=\"surname\" as=\"lastName\"/>" +
  -                         "</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>";
  -
  -        st.execute(view);
  -        System.out.println("  Update Count : " + st.getUpdateCount());
  -        st.close();
  +        try {
   
  +        System.out.println("Testing.....");
   
  +        int str = mLxsql.indexOf("###",0);
  +        int end = mLxsql.indexOf("###",str+3);
  +        while (end > 0) {
  +            int msgEnd = mLxsql.indexOf("##!",str);
  +            System.out.println(mLxsql.substring(str+3, msgEnd));
  +            lxSQL = mLxsql.substring(msgEnd+3,end);
  +            Statement st = mCon.createStatement();
  +
  +            if (lxSQL.indexOf("<simple-select") > 0) {
  +                ResultSet rs = st.executeQuery(lxSQL.trim());
  +                System.out.println("Results:");
  +                while (rs.next()) {
  +                    System.out.print("  Row:" + rs.getString(0));
  +                    try {
  +                        String col1 = rs.getString(1);
  +                        System.out.print(", " + col1);
  +                    } catch (ArrayIndexOutOfBoundsException aiobe) {
  +                        System.out.println(", [no col 1]");
  +                    }
  +                    try {
  +                        String col2 = rs.getString(2);
  +                        System.out.print(", " + col2);
  +                    } catch (ArrayIndexOutOfBoundsException aiobe) {
  +                        System.out.println(", [no col 2]");
  +                    }
  +                    System.out.println("");
  +                }
  +                rs.close();
  +            } else {
  +                st.executeUpdate(lxSQL.trim());
  +            }
  +            st.close();
  +            str = end;
  +            end = mLxsql.indexOf("###",end+3);
  +        }
  +
  +        } catch (SQLException sqle) {
  +            System.err.println("-- Failing LXSQL --");
  +            System.err.println(lxSQL);
  +            System.err.println("-------------------");
  +        }
  +
       }
   
       private void close() throws Exception {
  @@ -221,18 +103,17 @@
   
   
       public static void main(String[] args) {
  -        //String fileName = args[0];
  -        //if (fileName != null) {
  -            try {
  -                Tester tester = new Tester();
  -                tester.test();
  -                tester.close();
  -            } catch (Exception e) {
  -                System.out.println("Some problem during running of test : " + e.getMessage());
  -                e.printStackTrace();
  -            }
  -       // } else {
  -        //    System.out.println("Simgle parameter of file name containing SQL statements");
  -        //}
  +        if (args.length == 0) {
  +            System.err.println("First argument should be a script file");
  +        }
  +        String scriptFile = args[0];
  +        try {
  +            Tester tester = new Tester(scriptFile);
  +            tester.test();
  +            tester.close();
  +        } catch (Exception e) {
  +            System.out.println("Some problem during running of test : " + e.getMessage());
  +            e.printStackTrace();
  +        }
       }
   }
  
  
  
  1.1                  jakarta-avalon-cornerstone/apps/db/src/scripts/lxsql/Test1.script
  
  Index: Test1.script
  ===================================================================
  ### CREATE ##!
  
  <create-table name="Flintstones">
    <columns>
      <column name="forename" type="varchar" max="20"/>
      <column name="surname" type="varchar" max="20"/>
      <column name="age" type="integer"/>
    </columns>
  </create-table>
  
  ### INSERT ##!
  
  <insert-into table-name="Flintstones">
    <rows>
      <row>
        <value col="forename">Fred</value>
        <value col="surname">Flintstone</value>
        <value col="age">40</value>
      </row>
      <row>
        <value col="forename">Wilma</value>
        <value col="surname">Flintstone</value>
        <value col="age">38</value>
      </row>
      <row>
        <value col="forename">Barney</value>
        <value col="surname">Rubble</value>
        <value col="age">66</value>
      </row>
      <row>
        <value col="forename">I am going</value>
        <value col="surname">to be deleted</value>
        <value col="age">999</value>
      </row>
    </rows>
  </insert-into>
  
  ### SELECT 0 (all rows) ##!
  
  <simple-select>
     <columns>
      <column name="forename"/>
      <column name="surname"/>
      <column name="age"/>
     </columns>
     <from>
       <table name="Flintstones"/>
     </from>
  </simple-select>
  
  ### SELECT 1 (age>40) ##!
  
  <simple-select>
    <columns>
      <column name="forename"/>
      <column name="surname"/>
    </columns>
    <from>
      <table name="Flintstones"/>
    </from>
    <where>
      <condition expr="age>=40"/>
    </where>
  </simple-select>
  
  ### VIEW 1 (Wilma Flintstone) ##!
  
  <create-view name="FlintstonesView" on="Flintstones">
    <columns>
      <column name="forename" type="varchar" max="20"/>
      <column name="surname" type="varchar" max="20"/>
      <column name="age" type="integer"/>
    </columns>
    <where>
      <and>
        <condition expr="forename=Wilma"/>
        <condition expr="surname=Flintstone"/>
      </and>
    </where>
  </create-view>
  
  ### SELECT 2 (on view) ##!
  
  <simple-select>
    <columns>
      <column name="forename"/>
      <column name="surname"/>
    </columns>
    <from>
      <table name="FlintstonesView"/>
    </from>
  </simple-select>
  
  ### INDEX 1 ##!
  
  <create-index name="FlintstonesIdx" table="Flintstones">
    <columns>
      <column name="forename"/>
      <column name="surname"/>
    </columns>
  </create-index>
  
  ### DELETE 1 (age>100) ##!
  
  <delete-rows from="Flintstones">
    <where>
      <condition expr="age>100"/>
    </where>
  </delete-rows>
  
  ### UPDATE 1 ##!
  
  <update-rows from="Flintstones">
    <updates>
      <set name="surname" value="McRubble"/>
    </updates>
    <where>
      <condition expr="age>60"/>
    </where>
  </update-rows>
  
  ### SELECT 3 (all rows) ##!
  
  <simple-select>
    <columns><column name="forename"/>
    <column name="surname"/></columns>
    <from>
      <table name="Flintstones"/>
    </from>
  </simple-select>
  
  ### VIEW 2 (surname aggregate) ##!
  
  <create-aggregate-view name="FlintstonesAggView" on="Flintstones">
    <grouped-columns>
      <column name="surname" as="lastName"/>
    </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:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>