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]>