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

cvs commit: jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/services SQLParser.java

hammant     01/11/03 05:26:22

  Modified:    apps/db/src/conf db-assembly.xml db-config.xml
               apps/db/src/java/org/apache/avalon/db/bcel/parser
                        BCELSQLParser.java BaseBCELParser.java
               apps/db/src/java/org/apache/avalon/db/parser
                        DefaultSQLParser.java
               apps/db/src/java/org/apache/avalon/db/services
                        SQLParser.java
  Added:       apps/db/src/java/org/apache/avalon/db/bcel/parser
                        BCELSQLParser.xinfo LXSQLParser.java
                        LXSQLParser.xinfo
  Log:
  New XML based parser
  
  Revision  Changes    Path
  1.5       +4 -1      jakarta-avalon-cornerstone/apps/db/src/conf/db-assembly.xml
  
  Index: db-assembly.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/conf/db-assembly.xml,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- db-assembly.xml	2001/11/03 10:31:21	1.4
  +++ db-assembly.xml	2001/11/03 13:26:21	1.5
  @@ -16,8 +16,10 @@
         <block class="org.apache.avalon.cornerstone.blocks.sockets.DefaultSocketManager" name="sockets"/>
         
         <block class="org.apache.avalon.db.persistence.inmemory.NoPersistence" name="db-persistor" />
  +
  +      <block class="org.apache.avalon.cornerstone.blocks.dom.DOMBuilderFactory" name="dom-builder-factory" />
         
  -      <block class="org.apache.avalon.db.parser.DefaultSQLParser" name="sql-parser" />
  +      <block class="org.apache.avalon.db.bcel.parser.LXSQLParser" name="sql-parser" />
    
         <block class="org.apache.avalon.db.optimizer.DefaultSQLOptimizer" name="sql-optimizer" />
    
  @@ -25,6 +27,7 @@
       	<provide name="sockets" role="org.apache.avalon.cornerstone.services.sockets.SocketManager"/>
           <provide name="connections" 
                    role="org.apache.avalon.cornerstone.services.connection.ConnectionManager" />
  +        <provide name="dom-builder-factory" role="org.apache.avalon.cornerstone.services.dom.DocumentBuilderFactory" />                 
           <provide name="sql-parser" role="org.apache.avalon.db.services.SQLParser" />
           <provide name="sql-optimizer" role="org.apache.avalon.db.services.SQLOptimizer" />  
           <provide name="db-persistor" role="org.apache.avalon.db.services.DatabasePersistor" />
  
  
  
  1.4       +5 -0      jakarta-avalon-cornerstone/apps/db/src/conf/db-config.xml
  
  Index: db-config.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/conf/db-config.xml,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- db-config.xml	2001/11/03 08:21:00	1.3
  +++ db-config.xml	2001/11/03 13:26:21	1.4
  @@ -43,5 +43,10 @@
       <sql-parser>TODO</sql-parser>
       <sql-optimizer>TODO</sql-optimizer>
       <db-persistor>TODO</db-persistor>    
  +    
  +    <dom-builder-factory>
  +        <domClass>org.apache.xerces.jaxp.DocumentBuilderFactoryImpl</domClass>
  +    </dom-builder-factory>
  +    
   
   </config>
  
  
  
  1.4       +5 -33     jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcel/parser/BCELSQLParser.java
  
  Index: BCELSQLParser.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcel/parser/BCELSQLParser.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- BCELSQLParser.java	2001/11/01 09:22:15	1.3
  +++ BCELSQLParser.java	2001/11/03 13:26:21	1.4
  @@ -16,6 +16,7 @@
   import org.apache.avalon.db.actions.Select;
   import org.apache.avalon.db.actions.CreateTable;
   import org.apache.avalon.db.actions.Insert;
  +import org.apache.avalon.db.actions.ActionException;
   import org.apache.avalon.db.transport.Request;
   import org.apache.avalon.db.transport.SelectRequest;
   import org.apache.avalon.db.transport.CreateTableRequest;
  @@ -58,25 +59,11 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.3 $
  + * @version $Revision: 1.4 $
    */
   public class BCELSQLParser extends BaseBCELParser {
   
       /**
  -     * Method createAction
  -     *
  -     *
  -     * @param request
  -     *
  -     * @return
  -     *
  -     */
  -    public Action createAction(Request request) {
  -        return null;
  -    }
  -
  -
  -    /**
        * Method createSelectAction
        *
        *
  @@ -85,7 +72,7 @@
        * @return
        *
        */
  -    public Select createSelectAction(SelectRequest request) {
  +    public Select createSelectAction(SelectRequest request) throws ActionException {
           return null;
       }
   
  @@ -98,7 +85,7 @@
        * @return
        *
        */
  -    public CreateTable createCreateTableAction(CreateTableRequest request) {
  +    public CreateTable createCreateTableAction(CreateTableRequest request) throws ActionException {
   
           String tableName = getWordThree(request.getSql());
           String values = getBracketedExpr(request.getSql());
  @@ -149,7 +136,7 @@
        * @return
        *
        */
  -    public Insert createInsertAction(InsertRequest request) {
  +    public Insert createInsertAction(InsertRequest request) throws ActionException {
   
           String tableName = getWordThree(request.getSql());
           Table table = mDatabasePersistor.getTable(tableName);
  @@ -168,19 +155,4 @@
           return null;
       }
   
  -
  -    /**
  -     * Method main
  -     *
  -     *
  -     * @param args
  -     *
  -     */
  -    public static void main(String[] args) {
  -
  -        BCELSQLParser parser = new BCELSQLParser();
  -
  -        parser.createCreateTableAction(
  -            new CreateTableRequest("CREATE TABLE Fred (Wilma varchar, Barney varchar)"));
  -    }
   }
  
  
  
  1.3       +1 -26     jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcel/parser/BaseBCELParser.java
  
  Index: BaseBCELParser.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcel/parser/BaseBCELParser.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- BaseBCELParser.java	2001/11/01 09:31:11	1.2
  +++ BaseBCELParser.java	2001/11/03 13:26:21	1.3
  @@ -59,7 +59,7 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.2 $
  + * @version $Revision: 1.3 $
    */
   public abstract class BaseBCELParser extends AbstractLoggable
           implements Block, SQLParser, Contextualizable, Composable, Configurable {
  @@ -72,19 +72,6 @@
   
   
       /**
  -     * Method createAction
  -     *
  -     *
  -     * @param request
  -     *
  -     * @return
  -     *
  -     */
  -    public Action createAction(Request request) {
  -        return null;
  -    }
  -
  -    /**
        * Method contextualize
        *
        *
  @@ -124,18 +111,6 @@
   
       }
   
  -    /**
  -     * Method createSelectAction
  -     *
  -     *
  -     * @param request
  -     *
  -     * @return
  -     *
  -     */
  -    public Select createSelectAction(SelectRequest request) {
  -        return null;
  -    }
   
       protected String getWordOne(String str) {
   
  
  
  
  1.1                  jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcel/parser/BCELSQLParser.xinfo
  
  Index: BCELSQLParser.xinfo
  ===================================================================
  <?xml version="1.0"?>
  
  <blockinfo>
  
    <!-- section to describe block -->
    <block>
      <version>1.0</version>
    </block>
  
    <!-- services that are offered by this block -->
    <services>
      <service name="org.apache.avalon.db.services.SQLParser" version="1.0" />
    </services>
    <dependencies>
      <dependency>
        <service name="org.apache.avalon.db.services.DatabasePersistor" version="1.0"/>
      </dependency>        
  </blockinfo>
  
  
  
  1.1                  jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcel/parser/LXSQLParser.java
  
  Index: LXSQLParser.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.bcel.parser;
  
  import org.apache.avalon.db.services.SQLParser;
  import org.apache.avalon.db.services.DatabasePersistor;
  import org.apache.avalon.db.actions.Action;
  import org.apache.avalon.db.actions.Select;
  import org.apache.avalon.db.actions.CreateTable;
  import org.apache.avalon.db.actions.Insert;
  import org.apache.avalon.db.actions.ActionException;
  import org.apache.avalon.db.transport.Request;
  import org.apache.avalon.db.transport.SelectRequest;
  import org.apache.avalon.db.transport.CreateTableRequest;
  import org.apache.avalon.db.transport.InsertRequest;
  import org.apache.avalon.db.bcel.actions.BCELCreateTable;
  import org.apache.avalon.db.bcel.actions.BCELInsertSingleValue;
  import org.apache.avalon.db.bcel.data.BCELTable;
  import org.apache.avalon.db.data.Table;
  import org.apache.avalon.db.data.Column;
  import org.apache.avalon.db.data.impl.DefaultColumn;
  import org.apache.avalon.phoenix.Block;
  import org.apache.avalon.framework.context.Contextualizable;
  import org.apache.avalon.framework.context.Context;
  import org.apache.avalon.framework.context.ContextException;
  import org.apache.avalon.framework.component.Composable;
  import org.apache.avalon.framework.component.ComponentManager;
  import org.apache.avalon.framework.component.ComponentException;
  import org.apache.avalon.framework.configuration.Configurable;
  import org.apache.avalon.framework.configuration.Configuration;
  import org.apache.avalon.framework.configuration.ConfigurationException;
  import org.apache.avalon.framework.activity.Initializable;
  import org.apache.avalon.framework.logger.AbstractLoggable;
  import org.apache.avalon.cornerstone.services.dom.DocumentBuilderFactory;
  import org.apache.bcel.Constants;
  import org.apache.bcel.generic.ConstantPoolGen;
  import org.apache.bcel.generic.Type;
  import org.apache.bcel.generic.ClassGen;
  import org.apache.bcel.generic.FieldGen;
  import org.apache.bcel.generic.InstructionList;
  import org.apache.bcel.generic.MethodGen;
  
  import org.apache.bcel.classfile.Field;
  import org.w3c.dom.DOMImplementation;
  import org.w3c.dom.Document;
  import org.w3c.dom.DocumentType;
  import org.w3c.dom.NodeList;
  import org.w3c.dom.Node;
  import org.xml.sax.InputSource;
  import org.xml.sax.SAXException;
  
  import javax.xml.parsers.DocumentBuilder;
  import javax.xml.parsers.ParserConfigurationException;
  import java.util.StringTokenizer;
  import java.util.Vector;
  import java.util.HashMap;
  import java.io.Reader;
  import java.io.StringReader;
  import java.io.IOException;
  
  
  /**
   * Class BCELSQLParser
   *
   *
   * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
   * @version $Revision: 1.1 $
   */
  public class LXSQLParser extends BaseBCELParser {
  
      protected DocumentBuilderFactory mDocumentBuilderFactory;
      protected DocumentBuilder mDocumentBuilder;
      private final String XMLHDR = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
  
      /**
       * Method compose
       *
       *
       * @param componentManager
       *
       * @throws ComponentException
       *
       */
      public void compose(ComponentManager componentManager) throws ComponentException {
          mDocumentBuilderFactory =
              (DocumentBuilderFactory) componentManager.lookup(DocumentBuilderFactory.class.getName());
          try
          {
              mDocumentBuilder = mDocumentBuilderFactory.newDocumentBuilder();
          }
          catch (ParserConfigurationException pce)
          {
              throw new ComponentException("ParserConfiguration Exception in compose()",pce);
          }
      }
  
      /**
       * Method createSelectAction
       *
       *
       * @param request
       *
       * @return
       *
       */
      public Select createSelectAction(SelectRequest request) throws ActionException {
          return null;
      }
  
      /**
       * Method createCreateTableAction
       *
       *
       * @param request
       *
       * @return
       *
       */
      public CreateTable createCreateTableAction(CreateTableRequest request) throws ActionException {
  
  //<create-table name="Fred">
  //    <columns>
  //       <column name="wilma" type="varchar" max="20"/>
  //       <column name="barney" type="varchar" max="20"/>
  //    </columns>
  //</create-table>
  
  
  
          StringReader sr = new StringReader(XMLHDR + request.getSql());
          InputSource is = new InputSource(sr);
          try
          {
              Document doc = mDocumentBuilder.parse(is);
  
              String tableName = doc.getAttributes().getNamedItem("name").getNodeValue();
  
              NodeList columnNodes = doc.getElementsByTagName("columns/column");
  
              String newTableClassName = createUniqueClassName(tableName);
              ClassGen cg = new ClassGen(newTableClassName,
                                     "org.apache.avalon.db.data.impl.AbstractTableRow",
                                     "<SQL Generated>", Constants.ACC_PUBLIC | Constants.ACC_SUPER,
                                     null);
              ConstantPoolGen cp = cg.getConstantPool();
              Vector columns = new Vector();
  
              for ( int i= 0; i < columnNodes.getLength(); i ++ ) {
                  final Node columnNode = columnNodes.item(i);
  
                  String fieldName = columnNode.getAttributes().getNamedItem("name").getNodeValue();
                  String sqlFieldType = columnNode.getAttributes().getNamedItem("type").getNodeValue();
                  Type fieldType = getType(sqlFieldType);
                  Column column = new DefaultColumn(fieldName, sqlFieldType, fieldType.toString());
  
                  columns.add(column);
                  createField(cp, cg, fieldType, fieldName);
                  createSetter(cp, cg, fieldType, fieldName, tableName);
              }
  
              //TODO need to create constrcutor suitable for superclass.
              try {
                  cg.getJavaClass().dump(tableName + "Row.class");
              } catch (java.io.IOException e) {
                  System.err.println(e);
              }
  
              CreateTable action = new BCELCreateTable(cg.getJavaClass(), tableName, columns);
              action.setDatabasePersistor(mDatabasePersistor);
              return action;
          }
          catch (SAXException se)
          {
              throw new ActionException(se.getMessage());
          }
          catch (IOException ioe)
          {
              throw new ActionException(ioe.getMessage());
          }
  
      }
  
  
      /**
       * Method createInsertAction
       *
       *
       * @param request
       *
       * @return
       *
       */
      public Insert createInsertAction(InsertRequest request) throws ActionException {
  
          //TODO
  
          return null;
      }
  
  }
  
  
  
  1.1                  jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcel/parser/LXSQLParser.xinfo
  
  Index: LXSQLParser.xinfo
  ===================================================================
  <?xml version="1.0"?>
  
  <blockinfo>
  
    <!-- section to describe block -->
    <block>
      <version>1.0</version>
    </block>
  
    <!-- services that are offered by this block -->
    <services>
      <service name="org.apache.avalon.db.services.SQLParser" version="1.0" />
    </services>
    <dependencies>
      <dependency>
        <service name="org.w3c.dom.DOMImplementation" version="1.0"/>
      </dependency>
      <dependency>
        <service name="org.apache.avalon.db.services.DatabasePersistor" version="1.0"/>
      </dependency>        
  </blockinfo>
  
  
  
  1.4       +5 -17     jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/parser/DefaultSQLParser.java
  
  Index: DefaultSQLParser.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/parser/DefaultSQLParser.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- DefaultSQLParser.java	2001/10/30 17:45:14	1.3
  +++ DefaultSQLParser.java	2001/11/03 13:26:21	1.4
  @@ -15,6 +15,7 @@
   import org.apache.avalon.db.actions.Select;
   import org.apache.avalon.db.actions.CreateTable;
   import org.apache.avalon.db.actions.Insert;
  +import org.apache.avalon.db.actions.ActionException;
   import org.apache.avalon.db.transport.Request;
   import org.apache.avalon.db.transport.SelectRequest;
   import org.apache.avalon.db.transport.CreateTableRequest;
  @@ -38,25 +39,12 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.3 $
  + * @version $Revision: 1.4 $
    */
   public class DefaultSQLParser extends AbstractLoggable
           implements Block, SQLParser, Contextualizable, Composable, Configurable, Initializable {
   
       /**
  -     * Method createAction
  -     *
  -     *
  -     * @param request
  -     *
  -     * @return
  -     *
  -     */
  -    public Action createAction(Request request) {
  -        return null;
  -    }
  -
  -    /**
        * Method contextualize
        *
        *
  @@ -107,15 +95,15 @@
        * @return
        *
        */
  -    public Select createSelectAction(SelectRequest request) {
  +    public Select createSelectAction(SelectRequest request) throws ActionException {
           return null;
       }
   
  -    public CreateTable createCreateTableAction(CreateTableRequest request) {
  +    public CreateTable createCreateTableAction(CreateTableRequest request) throws ActionException {
           return null;
       }
   
  -    public Insert createInsertAction(InsertRequest request) {
  +    public Insert createInsertAction(InsertRequest request) throws ActionException {
           return null;
       }
   }
  
  
  
  1.4       +5 -15     jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/services/SQLParser.java
  
  Index: SQLParser.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/services/SQLParser.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- SQLParser.java	2001/10/30 17:45:14	1.3
  +++ SQLParser.java	2001/11/03 13:26:22	1.4
  @@ -14,6 +14,7 @@
   import org.apache.avalon.db.actions.Select;
   import org.apache.avalon.db.actions.CreateTable;
   import org.apache.avalon.db.actions.Insert;
  +import org.apache.avalon.db.actions.ActionException;
   import org.apache.avalon.db.transport.Request;
   import org.apache.avalon.db.transport.SelectRequest;
   import org.apache.avalon.db.transport.CreateTableRequest;
  @@ -25,24 +26,13 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version * $Revision: 1.3 $
  + * @version * $Revision: 1.4 $
    */
   public interface SQLParser {
   
       // Resulting block may depend on ActionCache, DatabasePersistor & IndexGenerator
   
       /**
  -     * Method createAction
  -     *
  -     *
  -     * @param request
  -     *
  -     * @return
  -     *
  -     */
  -    Action createAction(Request request);
  -
  -    /**
        * Method createSelectAction
        *
        *
  @@ -51,7 +41,7 @@
        * @return
        *
        */
  -    Select createSelectAction(SelectRequest request);
  +    Select createSelectAction(SelectRequest request) throws ActionException;
   
       /**
        * Method createCreateTableAction
  @@ -62,7 +52,7 @@
        * @return
        *
        */
  -    CreateTable createCreateTableAction(CreateTableRequest request);
  +    CreateTable createCreateTableAction(CreateTableRequest request) throws ActionException;
   
       /**
        * Method createInsertAction
  @@ -73,5 +63,5 @@
        * @return
        *
        */
  -    Insert createInsertAction(InsertRequest request);
  +    Insert createInsertAction(InsertRequest request) throws ActionException;
   }
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>