hammant 01/10/31 06:42:14 Modified: apps/db/src/java/org/apache/avalon/db/bcel/actions BCELCreateTable.java apps/db/src/java/org/apache/avalon/db/bcel/parser BCELSQLParser.java apps/db/src/java/org/apache/avalon/db/data/impl AbstractRowHolder.java AbstractTable.java DefaultTable.java apps/db/src/java/org/apache/avalon/db/server AbstractDatabaseManager.java Added: apps/db/src/java/org/apache/avalon/db/bcel/data BCELTable.java Log: generated classes have different names to their table names now. Revision Changes Path 1.2 +15 -6 jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcel/actions/BCELCreateTable.java Index: BCELCreateTable.java =================================================================== RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcel/actions/BCELCreateTable.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- BCELCreateTable.java 2001/10/31 12:43:23 1.1 +++ BCELCreateTable.java 2001/10/31 14:42:14 1.2 @@ -14,20 +14,26 @@ import org.apache.avalon.db.actions.ActionException; import org.apache.avalon.db.services.DatabasePersistor; import org.apache.avalon.db.data.Table; +import org.apache.avalon.db.data.Row; +import org.apache.avalon.db.data.Column; +import org.apache.avalon.db.bcel.data.BCELTable; import org.apache.bcel.classfile.JavaClass; +import java.util.Vector; + /** * Class BCELCreateTable * * * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> - * @version $Revision: 1.1 $ + * @version $Revision: 1.2 $ */ public class BCELCreateTable extends AbstractBCELAction implements CreateTable { - private JavaClass mPendingClass; + private JavaClass mPendingRowClass; private String mTableName; + private Vector mColumns; private int mRecordCount; /** @@ -38,9 +44,10 @@ * @param tableName * */ - public BCELCreateTable(JavaClass pendingClass, String tableName) { - mPendingClass = pendingClass; + public BCELCreateTable(JavaClass pendingRowClass, String tableName, Vector columns) { + mPendingRowClass = pendingRowClass; mTableName = tableName; + mColumns = columns; } @@ -54,9 +61,11 @@ if (mDatabasePersistor.tableExists(mTableName)) { throw new ActionException("Table " + mTableName + " Already Exists"); } - byte[] bytes = mPendingClass.getBytes(); + + byte[] bytes = mPendingRowClass.getBytes(); mBCELSQLParser.addGeneratedClass(mTableName, bytes); - Table table = (Table) mBCELSQLParser.getGeneratedInstance(mTableName); + Class rowClass = mBCELSQLParser.getGeneratedClass(mTableName); + Table table = new BCELTable(mTableName, (Column[]) mColumns.toArray(), rowClass); mDatabasePersistor.addTable(mTableName, table); } 1.1 jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcel/data/BCELTable.java Index: BCELTable.java =================================================================== /* * Created by IntelliJ IDEA. * User: Administrator * Date: Oct 31, 2001 * Time: 1:00:35 PM * To change template for new class use * Code Style | Class Templates options (Tools | IDE Options). */ package org.apache.avalon.db.bcel.data; import org.apache.avalon.db.data.impl.DefaultTable; import org.apache.avalon.db.data.Column; public class BCELTable extends DefaultTable { protected Class mRowClass; public BCELTable(String name, Column[] columns, Class rowClass) { super(name, columns); mRowClass = rowClass; } } 1.2 +30 -7 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.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- BCELSQLParser.java 2001/10/31 12:43:23 1.1 +++ BCELSQLParser.java 2001/10/31 14:42:14 1.2 @@ -22,6 +22,7 @@ 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; @@ -38,7 +39,13 @@ 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.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 java.util.StringTokenizer; @@ -51,7 +58,7 @@ * * * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> - * @version $Revision: 1.1 $ + * @version $Revision: 1.2 $ */ public class BCELSQLParser extends AbstractLoggable implements Block, SQLParser, Contextualizable, Composable, Configurable, Initializable { @@ -206,10 +213,11 @@ */ public CreateTable createCreateTableAction(CreateTableRequest request) { - String table = getWordThree(request.getSql()); + String tableName = getWordThree(request.getSql()); String values = getBracketedExpr(request.getSql()); StringTokenizer st = new StringTokenizer(values, ","); - ClassGen cg = new ClassGen(table + "Row", + 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); @@ -229,17 +237,17 @@ columns.add(column); createField(cp, cg, fieldType, fieldName); - createSetter(cp, cg, fieldType, fieldName, table); + createSetter(cp, cg, fieldType, fieldName, tableName); } //TODO need to create constrcutor suitable for superclass. try { - cg.getJavaClass().dump(table + "Row.class"); + cg.getJavaClass().dump(tableName + "Row.class"); } catch (java.io.IOException e) { System.err.println(e); } - CreateTable action = new BCELCreateTable(cg.getJavaClass(), table); + CreateTable action = new BCELCreateTable(cg.getJavaClass(), tableName, columns); action.setDatabasePersistor(mDatabasePersistor); return action; } @@ -333,8 +341,23 @@ public void addGeneratedClass(String name, byte[] bytes) { mGenClassLoader.addGeneratedClass(name, bytes); } + public Object getGeneratedInstance(String name) { return mGenClassLoader.getGeneratedInstance(name); + } + + public Class getGeneratedClass(String name) { + return mGenClassLoader.findClass(name); + } + + public String createUniqueClassName(String sqlObjectName){ + String className = "gen.A" + mGenObjSeq++; + mGeneratedObjTranslation.put(sqlObjectName, className); + return className; + } + + public String getGeneratedClassName(String sqlObjectName){ + return (String) mGeneratedObjTranslation.get(sqlObjectName); } 1.2 +4 -6 jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/AbstractRowHolder.java Index: AbstractRowHolder.java =================================================================== RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/AbstractRowHolder.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- AbstractRowHolder.java 2001/10/30 17:45:14 1.1 +++ AbstractRowHolder.java 2001/10/31 14:42:14 1.2 @@ -22,29 +22,27 @@ * * * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> - * @version $Revision: 1.1 $ + * @version $Revision: 1.2 $ */ public abstract class AbstractRowHolder implements RowHolder { private String mName; - private Column[] mColumns; - private Vector mRows = new Vector(); - private Class mRowClass; + protected Column[] mColumns; + protected Vector mRows = new Vector(); + /** * Constructor AbstractRowHolder * * * @param name * @param columns - * @param rowClass * */ - public AbstractRowHolder(String name, Column[] columns, Class rowClass) { + public AbstractRowHolder(String name, Column[] columns) { mName = name; mColumns = columns; - mRowClass = rowClass; } /** 1.2 +2 -2 jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/AbstractTable.java Index: AbstractTable.java =================================================================== RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/AbstractTable.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- AbstractTable.java 2001/10/30 17:45:14 1.1 +++ AbstractTable.java 2001/10/31 14:42:14 1.2 @@ -20,7 +20,7 @@ * * * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> - * @version $Revision: 1.1 $ + * @version $Revision: 1.2 $ */ public abstract class AbstractTable extends AbstractRowHolder implements Table { @@ -33,7 +33,7 @@ * @param rowClass * */ - public AbstractTable(String name, Column[] columns, Class rowClass) { - super(name, columns, rowClass); + public AbstractTable(String name, Column[] columns) { + super(name, columns); } } 1.2 +2 -2 jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/DefaultTable.java Index: DefaultTable.java =================================================================== RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/DefaultTable.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- DefaultTable.java 2001/10/31 12:38:01 1.1 +++ DefaultTable.java 2001/10/31 14:42:14 1.2 @@ -22,7 +22,7 @@ * * * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> - * @version $Revision: 1.1 $ + * @version $Revision: 1.2 $ */ public class DefaultTable extends AbstractTable { @@ -37,8 +37,8 @@ * @param rowClass * */ - public DefaultTable(String name, Column[] columns, Class rowClass) { - super(name, columns, rowClass); + public DefaultTable(String name, Column[] columns) { + super(name, columns); } public void addRow(AbstractTableRow atr) { 1.7 +10 -2 jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/server/AbstractDatabaseManager.java Index: AbstractDatabaseManager.java =================================================================== RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/server/AbstractDatabaseManager.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- AbstractDatabaseManager.java 2001/10/31 09:39:53 1.6 +++ AbstractDatabaseManager.java 2001/10/31 14:42:14 1.7 @@ -14,10 +14,18 @@ import org.apache.avalon.db.services.SQLParser; import org.apache.avalon.db.services.SQLOptimizer; import org.apache.avalon.db.services.DatabasePersistor; -import org.apache.avalon.db.transport.*; + import org.apache.avalon.db.actions.Select; import org.apache.avalon.db.actions.ActionException; import org.apache.avalon.db.actions.CreateTable; +import org.apache.avalon.db.transport.Request; +import org.apache.avalon.db.transport.Reply; +import org.apache.avalon.db.transport.SelectRequest; +import org.apache.avalon.db.transport.CreateTableRequest; +import org.apache.avalon.db.transport.ExceptionReply; +import org.apache.avalon.db.transport.UnknownRequestReply; +import org.apache.avalon.db.transport.UpdateReply; +import org.apache.avalon.db.transport.ResultSetReply; import org.apache.avalon.framework.logger.AbstractLoggable; import org.apache.avalon.framework.component.ComponentManager; import org.apache.avalon.framework.component.ComponentException; @@ -28,7 +36,7 @@ * * * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> - * @version $Revision: 1.6 $ + * @version $Revision: 1.7 $ */ public abstract class AbstractDatabaseManager extends AbstractLoggable {
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>