hammant     01/10/30 09:45:15

  Modified:    apps/db  build.xml
               apps/db/src/java/org/apache/avalon/db/actions Action.java
               apps/db/src/java/org/apache/avalon/db/data Column.java
                        RowHolder.java
               apps/db/src/java/org/apache/avalon/db/data/impl
                        AbstractTableRow.java
               apps/db/src/java/org/apache/avalon/db/parser
                        DefaultSQLParser.java
               apps/db/src/java/org/apache/avalon/db/persistence/store
                        StorePersistence.java StorePersistence.xinfo
               apps/db/src/java/org/apache/avalon/db/services
                        ActionCache.java DatabaseManager.java
                        DatabasePersistor.java IndexGenerator.java
                        SQLOptimizer.java SQLParser.java
  Added:       apps/db/src/java/org/apache/avalon/db/bcelactions
                        BCELCreateTable.java BCELInsertSingleValue.java
               apps/db/src/java/org/apache/avalon/db/bcelparser
                        BCELSQLParser.java BCELSQLParser.xinfo
               apps/db/src/java/org/apache/avalon/db/data/impl
                        AbstractRowHolder.java AbstractTable.java
                        DefaultColumn.java
               apps/db/src/java/org/apache/avalon/db/persistence/inmemory
                        NoPersistence.java NoPersistence.xinfo
  Log:
  Start of work on Data impl using BCEL for stongly typed table-beans.
  
  Revision  Changes    Path
  1.2       +9 -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.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- build.xml 2001/10/28 14:09:19     1.1
  +++ build.xml 2001/10/30 17:45:13     1.2
  @@ -46,6 +46,9 @@
       <fileset dir="../../lib">
         <include name="*.jar" />
       </fileset>
  +    <fileset dir="lib">
  +      <include name="*.jar" />
  +    </fileset>    
     </path>
   
     <taskdef name="sar" classname="org.apache.avalon.phoenix.tools.tasks.Sar">
  @@ -65,13 +68,18 @@
   
       <mkdir dir="${build.classes}"/>
   
  +    <available classname="org.apache.bcel.Constants" 
  +        classpathref="project.class.path" 
  +        property="bcel.present"/>
  +
       <javac srcdir="${java.dir}"
              destdir="${build.classes}"
              debug="${build.debug}"
              optimize="${build.optimize}"
              deprecation="${build.deprecation}">
         <classpath refid="project.class.path" />
  -
  +      <exclude name="org/apache/avalon/db/bcelparser/**"
  +               unless="bcel.present" />
       </javac>
   
       <copy todir="${build.classes}">
  
  
  
  1.2       +4 -2      
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/actions/Action.java
  
  Index: Action.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/actions/Action.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Action.java       2001/10/28 14:09:19     1.1
  +++ Action.java       2001/10/30 17:45:14     1.2
  @@ -15,6 +15,8 @@
    *
    *
    * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
  - * @version * $Revision: 1.1 $
  + * @version * $Revision: 1.2 $
    */
  -public interface Action {}
  +public interface Action {
  +    void execute();
  +}
  
  
  
  1.1                  
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcelactions/BCELCreateTable.java
  
  Index: BCELCreateTable.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.bcelactions;
  
  
  
  import org.apache.avalon.db.actions.CreateTable;
  import org.apache.bcel.classfile.JavaClass;
  
  
  /**
   * Class BCELCreateTable
   *
   *
   * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
   * @version $Revision: 1.1 $
   */
  public class BCELCreateTable implements CreateTable {
  
      private JavaClass mPendingClass;
      private String mTableName;
  
      /**
       * Constructor BCELCreateTable
       *
       *
       * @param pendingClass
       * @param tableName
       *
       */
      public BCELCreateTable(JavaClass pendingClass, String tableName) {
          mPendingClass = pendingClass;
          mTableName = tableName;
      }
  
      /**
       * Method execute
       *
       *
       */
      public void execute() {}
  }
  
  
  
  1.1                  
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcelactions/BCELInsertSingleValue.java
  
  Index: BCELInsertSingleValue.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.bcelactions;
  
  
  
  import org.apache.avalon.db.actions.Insert;
  import org.apache.avalon.db.data.Table;
  import org.apache.bcel.classfile.JavaClass;
  
  import java.util.Vector;
  import java.util.Iterator;
  
  import java.lang.reflect.Method;
  import java.lang.reflect.InvocationTargetException;
  
  
  /**
   * Class BCELInsertSingleValue
   *
   *
   * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
   * @version $Revision: 1.1 $
   */
  public class BCELInsertSingleValue implements Insert {
  
      private Vector mColumnNames;
      private Vector mColumnValues;
      private Table mTable;
  
      /**
       * Constructor BCELInsertSingleValue
       *
       *
       * @param table
       * @param columnNames
       * @param columnValues
       *
       */
      public BCELInsertSingleValue(Table table, Vector columnNames, Vector 
columnValues) {
  
          mTable = table;
          mColumnNames = columnNames;
          mColumnValues = columnValues;
      }
  
      /**
       * Method execute
       *
       *
       */
      public void execute() {
  
          StringBuffer sb = new StringBuffer();
          Iterator it = mColumnNames.iterator();
          Iterator it2 = mColumnValues.iterator();
  
          //repeated setxxxxx(yyyyyy);
          try {
              while (it.hasNext()) {
                  String name = (String) it.next();
                  Object value = it2.next();
                  Method meth = mTable.getClass().getDeclaredMethod("set" + 
name,
                                                                    new Class[]{
                                                                        
value.getClass() });
  
                  meth.invoke(mTable, new Object[]{ value });
              }
          } catch (NoSuchMethodException nsme) {
  
              //TODO throw
              System.out.println("nsme " + nsme.getMessage());
          } catch (IllegalAccessException iae) {
  
              //TODO
              System.out.println("nsme " + iae.getMessage());
          } catch (InvocationTargetException ite) {
  
              //TODO
              System.out.println("nsme " + ite.getMessage());
          }
      }
  }
  
  
  
  1.1                  
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcelparser/BCELSQLParser.java
  
  Index: BCELSQLParser.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.bcelparser;
  
  
  
  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.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.bcelactions.BCELCreateTable;
  import org.apache.avalon.db.bcelactions.BCELInsertSingleValue;
  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.bcel.Constants;
  import org.apache.bcel.generic.*;
  import org.apache.bcel.classfile.Field;
  
  import java.util.StringTokenizer;
  import java.util.Vector;
  
  
  /**
   * Class BCELSQLParser
   *
   *
   * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
   * @version $Revision: 1.1 $
   */
  public class BCELSQLParser extends AbstractLoggable
          implements Block, SQLParser, Contextualizable, Composable, 
Configurable, Initializable {
  
      private DatabasePersistor mDatabasePersistor;
  
      /**
       * Method createAction
       *
       *
       * @param request
       *
       * @return
       *
       */
      public Action createAction(Request request) {
          return null;
      }
  
      /**
       * Method contextualize
       *
       *
       * @param context
       *
       * @throws ContextException
       *
       */
      public void contextualize(Context context) throws ContextException {}
  
      /**
       * Method compose
       *
       *
       * @param componentManager
       *
       * @throws ComponentException
       *
       */
      public void compose(ComponentManager componentManager) throws 
ComponentException {
          mDatabasePersistor =
              (DatabasePersistor) 
componentManager.lookup(DatabasePersistor.class.getName());
      }
  
      /**
       * Method configure
       *
       *
       * @param configuration
       *
       * @throws ConfigurationException
       *
       */
      public void configure(Configuration configuration) throws 
ConfigurationException {}
  
      /**
       * Method initialize
       *
       *
       * @throws Exception
       *
       */
      public void initialize() throws Exception {}
  
      /**
       * Method createSelectAction
       *
       *
       * @param request
       *
       * @return
       *
       */
      public Select createSelectAction(SelectRequest request) {
          return null;
      }
  
      private String getWordOne(String str) {
  
          int ix0 = str.indexOf(' ');
  
          if (ix0 == -1) {
              ix0 = str.length();
          }
  
          return str.substring(0, ix0);
      }
  
      private String getWordTwo(String str) {
  
          int ix0 = str.indexOf(' ');
          int ix1 = str.indexOf(' ', ix0 + 1);
  
          if (ix1 == -1) {
              ix1 = str.length();
          }
  
          return str.substring(ix0 + 1, ix1);
      }
  
      private String getWordThree(String str) {
  
          int ix0 = str.indexOf(' ');
          int ix1 = str.indexOf(' ', ix0 + 1);
          int ix2 = str.indexOf(' ', ix1 + 1);
  
          if (ix2 == -1) {
              ix2 = str.length();
          }
  
          return str.substring(ix1 + 1, ix2);
      }
  
      private String getWordFour(String str) {
  
          int ix0 = str.indexOf(' ');
          int ix1 = str.indexOf(' ', ix0 + 1);
          int ix2 = str.indexOf(' ', ix1 + 1);
          int ix3 = str.indexOf(' ', ix2 + 1);
  
          if (ix3 == -1) {
              ix3 = str.length();
          }
  
          return str.substring(ix2 + 1, ix3);
      }
  
      private String getBracketedExpr(String str) {
  
          int ix0 = str.indexOf('(');
          int ix1 = str.lastIndexOf(')');
  
          System.out.println("str=" + str);
          System.out.println("ix0=" + ix0);
          System.out.println("ix1=" + ix1);
  
          return str.substring(ix0 + 1, ix1);
      }
  
      /**
       * Method createCreateTableAction
       *
       *
       * @param request
       *
       * @return
       *
       */
      public CreateTable createCreateTableAction(CreateTableRequest request) {
  
          String table = getWordThree(request.getSql());
          String values = getBracketedExpr(request.getSql());
          StringTokenizer st = new StringTokenizer(values, ",");
          ClassGen cg = new ClassGen(table + "Row",
                                     
"org.apache.avalon.db.data.impl.AbstractTableRow",
                                     "<SQL Generated>", Constants.ACC_PUBLIC | 
Constants.ACC_SUPER,
                                     null);
          ConstantPoolGen cp = cg.getConstantPool();
          Vector columns = new Vector();
  
          while (st.hasMoreTokens()) {
              String fieldStr = st.nextToken();
              StringTokenizer st2 = new StringTokenizer(fieldStr, " ");
  
              System.out.println("FieldStr=" + fieldStr);
  
              String fieldName = st2.nextToken();
              String sqlFieldType = st2.nextToken();
              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, table);
          }
  
          //TODO need to create constrcutor suitable for superclass.
          try {
              cg.getJavaClass().dump(table + "Row.class");
          } catch (java.io.IOException e) {
              System.err.println(e);
          }
  
          return new BCELCreateTable(cg.getJavaClass(), table);
      }
  
      private Type getType(String type) {
  
          System.out.println("Type=(" + type + ")");
  
          if (type.equals("varchar")) {
              return Type.STRING;
          } else if (type.equals("char")) {
              return Type.STRING;
          }
  
          return Type.VOID;
      }
  
      private void createField(ConstantPoolGen cp, ClassGen cg, Type fieldType, 
String name) {
  
          System.out.println("fn=" + name);
          System.out.println("Type2=" + fieldType);
  
          FieldGen fg = new FieldGen(Constants.ACC_PUBLIC, fieldType, name, cp);
  
          cg.addField(fg.getField());
      }
  
      private void createSetter(ConstantPoolGen cp, ClassGen cg, Type 
fieldType, String name,
                                String table) {
  
          InstructionList il = new InstructionList();
          MethodGen mg = new MethodGen(Constants.ACC_PUBLIC,    // access flags
                                       Type.VOID,               // return type
                                       new Type[]{ fieldType }, new String[]{ 
"value" },    // arg names
                                       "set" + name, table,     // method, class
                                       il, cp);
  
          mg.stripAttributes(true);
          mg.setMaxStack();
          mg.setMaxLocals();
          cg.addMethod(mg.getMethod());
      }
  
      /**
       * Method createInsertAction
       *
       *
       * @param request
       *
       * @return
       *
       */
      public Insert createInsertAction(InsertRequest request) {
  
          String tableName = getWordThree(request.getSql());
          Table table = mDatabasePersistor.getTable(tableName);
          String type = getWordFour(request.getSql());
  
          if (type.startsWith("(")) {
  
              //return createNamedColumnsInsert(table);
          } else if (type.startsWith("values")) {
              return createAllValuesInsert(table, request.getSql());
          } else if (type.startsWith("select")) {
  
              //return createSelectInsert(table);
          }
  
          return null;
      }
  
      //private Insert createNamedColumnsInsert(Table table, String sql ) {
      //}
      private Insert createAllValuesInsert(Table table, String sql) {
  
          String values = getBracketedExpr(sql);
          StringTokenizer st = new StringTokenizer(values, ",");
          Vector valuesVec = new Vector();
  
          while (st.hasMoreTokens()) {
              valuesVec.add(st.nextToken().trim());
          }
  
          //TODO get columns from table.
          return new BCELInsertSingleValue(table, null, valuesVec);
      }
  
      //private Insert createSelectInsert(Table table, String sql) {
      //}
  
      /**
       * 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.1                  
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcelparser/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>         
    </dependencies> 
  
  </blockinfo>
  
  
  
  1.3       +3 -4      
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/Column.java
  
  Index: Column.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/Column.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- Column.java       2001/10/28 20:57:39     1.2
  +++ Column.java       2001/10/30 17:45:14     1.3
  @@ -15,10 +15,9 @@
    *
    *
    * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
  - * @version * $Revision: 1.2 $
  + * @version * $Revision: 1.3 $
    */
   public interface Column extends Nameable {
  -    int STRINGTYPE = 31;
  -    int INTTYPE = 32;
  -    int getType();
  +    String getSQLType();
  +    String getJavaType();
   }
  
  
  
  1.3       +4 -1      
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/RowHolder.java
  
  Index: RowHolder.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/RowHolder.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- RowHolder.java    2001/10/28 23:14:54     1.2
  +++ RowHolder.java    2001/10/30 17:45:14     1.3
  @@ -15,8 +15,11 @@
    *
    *
    * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
  - * @version * $Revision: 1.2 $
  + * @version * $Revision: 1.3 $
    */
   public interface RowHolder extends Nameable {
       Column[] getColumns();
  +
  +    void addRow(Row row);
  +
   }
  
  
  
  1.2       +19 -6     
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/AbstractTableRow.java
  
  Index: AbstractTableRow.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/AbstractTableRow.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- AbstractTableRow.java     2001/10/30 08:40:29     1.1
  +++ AbstractTableRow.java     2001/10/30 17:45:14     1.2
  @@ -8,6 +8,8 @@
    */
   package org.apache.avalon.db.data.impl;
   
  +
  +
   import org.apache.avalon.db.data.Row;
   import org.apache.avalon.db.data.ValidationException;
   
  @@ -17,15 +19,26 @@
    *
    *
    * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
  - * @version $Revision: 1.1 $
  + * @version $Revision: 1.2 $
    */
   public abstract class AbstractTableRow implements Row {
  -
   
  -  public void testLength(String name, String value, int maxLen) throws 
ValidationException {
  -      if (value.length() > maxLen) {
  -          throw new ValidationException("String " + name + " should be a 
maximum of " + maxLen + " characters long");
  -      }
  -  }
  +    /**
  +     * Method testLength
  +     *
  +     *
  +     * @param name
  +     * @param value
  +     * @param maxLen
  +     *
  +     * @throws ValidationException
  +     *
  +     */
  +    public void testLength(String name, String value, int maxLen) throws 
ValidationException {
   
  +        if (value.length() > maxLen) {
  +            throw new ValidationException("String " + name + " should be a 
maximum of " + maxLen
  +                                          + " characters long");
  +        }
  +    }
   }
  
  
  
  1.1                  
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/AbstractRowHolder.java
  
  Index: AbstractRowHolder.java
  ===================================================================
  
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE file.
   */
  package org.apache.avalon.db.data.impl;
  
  
  
  import org.apache.avalon.db.data.RowHolder;
  import org.apache.avalon.db.data.Column;
  import org.apache.avalon.db.data.Row;
  
  import java.util.Vector;
  
  
  /**
   * Class AbstractRowHolder
   *
   *
   * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
   * @version $Revision: 1.1 $
   */
  public abstract class AbstractRowHolder implements RowHolder {
  
      private String mName;
      private Column[] mColumns;
      private Vector mRows = new Vector();
      private Class mRowClass;
  
      /**
       * Constructor AbstractRowHolder
       *
       *
       * @param name
       * @param columns
       * @param rowClass
       *
       */
      public AbstractRowHolder(String name, Column[] columns, Class rowClass) {
  
          mName = name;
          mColumns = columns;
          mRowClass = rowClass;
      }
  
      /**
       * Method getColumns
       *
       *
       * @return
       *
       */
      public Column[] getColumns() {
          return mColumns;
      }
  
      /**
       * Method getName
       *
       *
       * @return
       *
       */
      public String getName() {
          return mName;
      }
  
      /**
       * Method addRow
       *
       *
       * @param row
       *
       */
      public void addRow(Row row) {
          mRows.add(row);
      }
  }
  
  
  
  1.1                  
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/AbstractTable.java
  
  Index: AbstractTable.java
  ===================================================================
  
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE file.
   */
  package org.apache.avalon.db.data.impl;
  
  
  
  import org.apache.avalon.db.data.Table;
  import org.apache.avalon.db.data.RowHolder;
  import org.apache.avalon.db.data.Column;
  
  
  /**
   * Class AbstractTable
   *
   *
   * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
   * @version $Revision: 1.1 $
   */
  public abstract class AbstractTable extends AbstractRowHolder implements 
Table {
  
      /**
       * Constructor AbstractTable
       *
       *
       * @param name
       * @param columns
       * @param rowClass
       *
       */
      public AbstractTable(String name, Column[] columns, Class rowClass) {
          super(name, columns, rowClass);
      }
  }
  
  
  
  1.1                  
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/DefaultColumn.java
  
  Index: DefaultColumn.java
  ===================================================================
  
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE file.
   */
  package org.apache.avalon.db.data.impl;
  
  
  
  import org.apache.avalon.db.data.Table;
  import org.apache.avalon.db.data.RowHolder;
  import org.apache.avalon.db.data.Column;
  
  
  /**
   * Class DefaultColumn
   *
   *
   * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
   * @version $Revision: 1.1 $
   */
  public class DefaultColumn implements Column {
  
      private String mName;
      private String mSqlType;
      private String mJavaType;
  
      /**
       * Constructor DefaultColumn
       *
       *
       * @param name
       * @param sqlType
       * @param javaType
       *
       */
      public DefaultColumn(String name, String sqlType, String javaType) {
  
          mName = name;
          mSqlType = sqlType;
          mJavaType = javaType;
      }
  
      /**
       * Method getSQLType
       *
       *
       * @return
       *
       */
      public String getSQLType() {
          return mSqlType;
      }
  
      /**
       * Method getName
       *
       *
       * @return
       *
       */
      public String getName() {
          return mName;
      }
  
      /**
       * Method getJavaType
       *
       *
       * @return
       *
       */
      public String getJavaType() {
          return mJavaType;
      }
  }
  
  
  
  1.3       +7 -1      
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.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- DefaultSQLParser.java     2001/10/30 08:40:29     1.2
  +++ DefaultSQLParser.java     2001/10/30 17:45:14     1.3
  @@ -14,9 +14,11 @@
   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.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.phoenix.Block;
   import org.apache.avalon.framework.context.Contextualizable;
   import org.apache.avalon.framework.context.Context;
  @@ -36,7 +38,7 @@
    *
    *
    * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
  - * @version $Revision: 1.2 $
  + * @version $Revision: 1.3 $
    */
   public class DefaultSQLParser extends AbstractLoggable
           implements Block, SQLParser, Contextualizable, Composable, 
Configurable, Initializable {
  @@ -110,6 +112,10 @@
       }
   
       public CreateTable createCreateTableAction(CreateTableRequest request) {
  +        return null;
  +    }
  +
  +    public Insert createInsertAction(InsertRequest request) {
           return null;
       }
   }
  
  
  
  1.1                  
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/persistence/inmemory/NoPersistence.java
  
  Index: NoPersistence.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.persistence.inmemory;
  
  
  
  import org.apache.avalon.db.services.DatabasePersistor;
  import org.apache.avalon.db.services.ActionCache;
  import org.apache.avalon.db.data.Table;
  import org.apache.avalon.framework.logger.AbstractLoggable;
  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.phoenix.Block;
  
  import java.util.HashMap;
  
  
  /**
   * Class NoPersistence
   *
   *
   * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
   * @version $Revision: 1.1 $
   */
  public class NoPersistence extends AbstractLoggable
          implements DatabasePersistor, Block, Contextualizable, Composable, 
Configurable,
                     Initializable {
  
      private HashMap mTables = new HashMap();
  
      /**
       * Method contextualize
       *
       *
       * @param context
       *
       * @throws ContextException
       *
       */
      public void contextualize(Context context) throws ContextException {}
  
      /**
       * Method compose
       *
       *
       * @param componentManager
       *
       * @throws ComponentException
       *
       */
      public void compose(ComponentManager componentManager) throws 
ComponentException {}
  
      /**
       * Method configure
       *
       *
       * @param configuration
       *
       * @throws ConfigurationException
       *
       */
      public void configure(Configuration configuration) throws 
ConfigurationException {}
  
      /**
       * Method initialize
       *
       *
       * @throws Exception
       *
       */
      public void initialize() throws Exception {}
  
      /**
       * Method getTable
       *
       *
       * @param tableName
       *
       * @return
       *
       */
      public Table getTable(String tableName) {
          return (Table) mTables.get(tableName);
      }
  
      /**
       * Method tableExists
       *
       *
       * @param tableName
       *
       * @return
       *
       */
      public boolean tableExists(String tableName) {
          return mTables.containsKey(tableName);
      }
  
      /**
       * Method addTable
       *
       *
       * @param tableName
       * @param table
       *
       */
      public void addTable(String tableName, Table table) {
          mTables.put(tableName, tableName);
      }
  }
  
  
  
  1.1                  
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/persistence/inmemory/NoPersistence.xinfo
  
  Index: NoPersistence.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.DatabasePersistor" 
version="1.0" />
    </services>
  
    <dependencies>        
    </dependencies>  
  
  </blockinfo>
  
  
  
  1.2       +78 -15    
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/persistence/store/StorePersistence.java
  
  Index: StorePersistence.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/persistence/store/StorePersistence.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- StorePersistence.java     2001/10/28 14:09:21     1.1
  +++ StorePersistence.java     2001/10/30 17:45:14     1.2
  @@ -12,6 +12,7 @@
   
   import org.apache.avalon.db.services.DatabasePersistor;
   import org.apache.avalon.db.services.ActionCache;
  +import org.apache.avalon.db.data.Table;
   import org.apache.avalon.framework.logger.AbstractLoggable;
   import org.apache.avalon.framework.context.Contextualizable;
   import org.apache.avalon.framework.context.Context;
  @@ -31,27 +32,89 @@
    *
    *
    * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
  - * @version $Revision: 1.1 $
  + * @version $Revision: 1.2 $
    */
  -public class StorePersistence  extends AbstractLoggable implements 
DatabasePersistor, Block, Contextualizable, Composable, Configurable, 
Initializable {
  +public class StorePersistence extends AbstractLoggable
  +        implements DatabasePersistor, Block, Contextualizable, Composable, 
Configurable,
  +                   Initializable {
   
       // depends on CornerStone's Store.
   
  -    public void contextualize(Context context)
  -            throws ContextException {
  +    /**
  +     * Method contextualize
  +     *
  +     *
  +     * @param context
  +     *
  +     * @throws ContextException
  +     *
  +     */
  +    public void contextualize(Context context) throws ContextException {}
  +
  +    /**
  +     * Method compose
  +     *
  +     *
  +     * @param componentManager
  +     *
  +     * @throws ComponentException
  +     *
  +     */
  +    public void compose(ComponentManager componentManager) throws 
ComponentException {}
  +
  +    /**
  +     * Method configure
  +     *
  +     *
  +     * @param configuration
  +     *
  +     * @throws ConfigurationException
  +     *
  +     */
  +    public void configure(Configuration configuration) throws 
ConfigurationException {}
  +
  +    /**
  +     * Method initialize
  +     *
  +     *
  +     * @throws Exception
  +     *
  +     */
  +    public void initialize() throws Exception {}
  +
  +    /**
  +     * Method getTable
  +     *
  +     *
  +     * @param tableName
  +     *
  +     * @return
  +     *
  +     */
  +    public Table getTable(String tableName) {
  +        return null;
       }
   
  -    public void compose(ComponentManager componentManager)
  -            throws ComponentException {
  +    /**
  +     * Method tableExists
  +     *
  +     *
  +     * @param tableName
  +     *
  +     * @return
  +     *
  +     */
  +    public boolean tableExists(String tableName) {
  +        return false;
       }
   
  -    public void configure(Configuration configuration)
  -            throws ConfigurationException {
  -    }
  -
  -    public void initialize()
  -            throws Exception {
  -    }
  -
  -
  +    /**
  +     * Method addTable
  +     *
  +     *
  +     * @param tableName
  +     * @param table
  +     *
  +     */
  +    public void addTable(String tableName, Table table) {}
   }
  
  
  
  1.2       +3 -6      
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/persistence/store/StorePersistence.xinfo
  
  Index: StorePersistence.xinfo
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/persistence/store/StorePersistence.xinfo,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- StorePersistence.xinfo    2001/10/28 14:09:21     1.1
  +++ StorePersistence.xinfo    2001/10/30 17:45:14     1.2
  @@ -9,16 +9,13 @@
   
     <!-- services that are offered by this block -->
     <services>
  -    <service name="org.apache.avalon.db.services.DatabaseManager" 
version="1.0" />
  +    <service name="org.apache.avalon.db.services.DatabasePersistor" 
version="1.0" />
     </services>
   
     <dependencies>
       <dependency>
  -      <service name="org.apache.avalon.db.services.SQLParser" version="1.0"/>
  -    </dependency>
  -    <dependency>
  -      <service name="org.apache.avalon.db.services.SQLOptimizer" 
version="1.0"/>
  -    </dependency>          
  +      <service name="org.apache.avalon.cornerstone.services.store.Store" 
version="1.0"/>
  +    </dependency>         
     </dependencies>  
   
   </blockinfo>
  
  
  
  1.2       +11 -2     
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/services/ActionCache.java
  
  Index: ActionCache.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/services/ActionCache.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ActionCache.java  2001/10/28 14:09:21     1.1
  +++ ActionCache.java  2001/10/30 17:45:14     1.2
  @@ -1,3 +1,4 @@
  +
   /*
    * Copyright (C) The Apache Software Foundation. All rights reserved.
    *
  @@ -6,6 +7,14 @@
    * the LICENSE file.
    */
   package org.apache.avalon.db.services;
  +
  +
   
  -public interface ActionCache {
  -}
  +/**
  + * Interface ActionCache
  + *
  + *
  + * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
  + * @version * $Revision: 1.2 $
  + */
  +public interface ActionCache {}
  
  
  
  1.2       +4 -3      
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/services/DatabaseManager.java
  
  Index: DatabaseManager.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/services/DatabaseManager.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DatabaseManager.java      2001/10/28 14:09:21     1.1
  +++ DatabaseManager.java      2001/10/30 17:45:14     1.2
  @@ -1,3 +1,4 @@
  +
   /*
    * Copyright (C) The Apache Software Foundation. All rights reserved.
    *
  @@ -7,13 +8,13 @@
    */
   package org.apache.avalon.db.services;
   
  +
  +
   /**
    * @author  Paul Hammant <[EMAIL PROTECTED]>
    * @version 1.0
    */
  -public interface DatabaseManager
  -{
  +public interface DatabaseManager {
   
       // Resulting block will depend on SQLParser & SQLOptimizer
  -
   }
  
  
  
  1.2       +45 -0     
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/services/DatabasePersistor.java
  
  Index: DatabasePersistor.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/services/DatabasePersistor.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DatabasePersistor.java    2001/10/28 14:09:21     1.1
  +++ DatabasePersistor.java    2001/10/30 17:45:14     1.2
  @@ -1,3 +1,4 @@
  +
   /*
    * Copyright (C) The Apache Software Foundation. All rights reserved.
    *
  @@ -7,5 +8,49 @@
    */
   package org.apache.avalon.db.services;
   
  +
  +
  +import org.apache.avalon.db.data.Table;
  +
  +
  +/**
  + * Interface DatabasePersistor
  + *
  + *
  + * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
  + * @version * $Revision: 1.2 $
  + */
   public interface DatabasePersistor {
  +
  +    /**
  +     * Method getTable
  +     *
  +     *
  +     * @param tableName
  +     *
  +     * @return
  +     *
  +     */
  +    Table getTable(String tableName);
  +
  +    /**
  +     * Method tableExists
  +     *
  +     *
  +     * @param tableName
  +     *
  +     * @return
  +     *
  +     */
  +    boolean tableExists(String tableName);
  +
  +    /**
  +     * Method addTable
  +     *
  +     *
  +     * @param tableName
  +     * @param table
  +     *
  +     */
  +    void addTable(String tableName, Table table);
   }
  
  
  
  1.2       +11 -2     
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/services/IndexGenerator.java
  
  Index: IndexGenerator.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/services/IndexGenerator.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- IndexGenerator.java       2001/10/28 14:09:21     1.1
  +++ IndexGenerator.java       2001/10/30 17:45:14     1.2
  @@ -1,3 +1,4 @@
  +
   /*
    * Copyright (C) The Apache Software Foundation. All rights reserved.
    *
  @@ -6,6 +7,14 @@
    * the LICENSE file.
    */
   package org.apache.avalon.db.services;
  +
  +
   
  -public interface IndexGenerator {
  -}
  +/**
  + * Interface IndexGenerator
  + *
  + *
  + * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
  + * @version * $Revision: 1.2 $
  + */
  +public interface IndexGenerator {}
  
  
  
  1.2       +21 -0     
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/services/SQLOptimizer.java
  
  Index: SQLOptimizer.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/services/SQLOptimizer.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- SQLOptimizer.java 2001/10/28 14:09:21     1.1
  +++ SQLOptimizer.java 2001/10/30 17:45:14     1.2
  @@ -1,3 +1,4 @@
  +
   /*
    * Copyright (C) The Apache Software Foundation. All rights reserved.
    *
  @@ -7,8 +8,28 @@
    */
   package org.apache.avalon.db.services;
   
  +
  +
   import org.apache.avalon.db.transport.SelectRequest;
   
  +
  +/**
  + * Interface SQLOptimizer
  + *
  + *
  + * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
  + * @version * $Revision: 1.2 $
  + */
   public interface SQLOptimizer {
  +
  +    /**
  +     * Method optimizeSelectRequest
  +     *
  +     *
  +     * @param selectRequest
  +     *
  +     * @return
  +     *
  +     */
       SelectRequest optimizeSelectRequest(SelectRequest selectRequest);
   }
  
  
  
  1.3       +53 -0     
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.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- SQLParser.java    2001/10/30 08:40:29     1.2
  +++ SQLParser.java    2001/10/30 17:45:14     1.3
  @@ -1,3 +1,4 @@
  +
   /*
    * Copyright (C) The Apache Software Foundation. All rights reserved.
    *
  @@ -7,18 +8,70 @@
    */
   package org.apache.avalon.db.services;
   
  +
  +
   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.transport.Request;
   import org.apache.avalon.db.transport.SelectRequest;
   import org.apache.avalon.db.transport.CreateTableRequest;
  +import org.apache.avalon.db.transport.InsertRequest;
   
  +
  +/**
  + * Interface SQLParser
  + *
  + *
  + * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
  + * @version * $Revision: 1.3 $
  + */
   public interface SQLParser {
   
       // Resulting block may depend on ActionCache, DatabasePersistor & 
IndexGenerator
   
  +    /**
  +     * Method createAction
  +     *
  +     *
  +     * @param request
  +     *
  +     * @return
  +     *
  +     */
       Action createAction(Request request);
  +
  +    /**
  +     * Method createSelectAction
  +     *
  +     *
  +     * @param request
  +     *
  +     * @return
  +     *
  +     */
       Select createSelectAction(SelectRequest request);
  +
  +    /**
  +     * Method createCreateTableAction
  +     *
  +     *
  +     * @param request
  +     *
  +     * @return
  +     *
  +     */
       CreateTable createCreateTableAction(CreateTableRequest request);
  +
  +    /**
  +     * Method createInsertAction
  +     *
  +     *
  +     * @param request
  +     *
  +     * @return
  +     *
  +     */
  +    Insert createInsertAction(InsertRequest request);
   }
  
  
  

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

Reply via email to