You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avalon.apache.org by ha...@apache.org on 2001/11/07 14:28:35 UTC
cvs commit: jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcel/parser BCELLXSQLParser.java LXSQLParser.java
hammant 01/11/07 05:28:35
Modified: apps/db/src/java/org/apache/avalon/db/basic/data
BasicRow.java BasicTable.java
Added: apps/db/src/java/org/apache/avalon/db/actions
ParameterAdaptable.java
apps/db/src/java/org/apache/avalon/db/basic/actions
BasicInsert.java BasicSelect.java
apps/db/src/java/org/apache/avalon/db/basic/parser
BasicLXSQLParser.java
apps/db/src/java/org/apache/avalon/db/bcel/parser
BCELLXSQLParser.java
Removed: apps/db/src/java/org/apache/avalon/db/basic/parser
LXSQLParser.java
apps/db/src/java/org/apache/avalon/db/bcel/parser
LXSQLParser.java
Log:
Refactoring and start of Basic Select Action
Revision Changes Path
1.1 jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/actions/ParameterAdaptable.java
Index: ParameterAdaptable.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.actions;
import org.apache.avalon.db.services.DatabasePersistor;
import org.apache.avalon.db.services.SQLParser;
/**
* Interface Action
*
*
* @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
* @author Gerhard Froehlich <a href="mailto:g-froehlich@gmx.de">g-froehlich@gmx.de</a>
* @version * $Revision: 1.5 $
*/
public interface ParameterAdaptable extends Action {
void execute(Object[] paramters) throws ActionException;
void setParameters(Object[] paramters);
}
1.1 jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/actions/BasicInsert.java
Index: BasicInsert.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.basic.actions;
import org.apache.avalon.db.actions.Insert;
import org.apache.avalon.db.actions.ActionException;
import org.apache.avalon.db.actions.impl.AbstractAction;
import org.apache.avalon.db.data.impl.AbstractTableRow;
import org.apache.avalon.db.data.Column;
import org.apache.avalon.db.basic.data.BasicTable;
import org.apache.avalon.db.basic.data.BasicRow;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;
import java.util.Vector;
/**
* Class BasicInsert
*
*
* @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
* @version $Revision: 1.4 $
*/
public class BasicInsert extends AbstractAction implements Insert {
private Document mDocument;
private BasicTable mTable;
private int mRecordCount;
/**
* Constructor BasicInsert
*
*
* @param table
* @param document
*
*/
public BasicInsert(BasicTable table, Document document) {
mTable = table;
mDocument = document;
}
/**
* Method execute
*
*
*/
public void execute() throws ActionException {
System.out.println("insert execute");
System.out.println("mTable=" + mTable);
System.out.println("mDocument=" + mDocument);
Column[] columns = mTable.getColumns();
int colCount = columns.length;
Object[] values = new Object[colCount];
Element rootElement = mDocument.getDocumentElement();
NodeList subRootNodes = rootElement.getChildNodes();
for (int f = 0 ; f < subRootNodes.getLength(); f++) {
if (subRootNodes.item(f).getNodeName().equals("rows")) {
NodeList subRowsNodes = subRootNodes.item(f).getChildNodes();
Vector row = new Vector();
for (int x = 0 ; x < subRowsNodes.getLength(); x++) {
if (subRowsNodes.item(x).getNodeName().equals("row")) {
mRecordCount++;
NodeList subRowNodes = subRootNodes.item(f).getChildNodes();
for (int y = 0 ; y < subRowNodes.getLength(); y++) {
if (subRowNodes.item(y).getNodeName().equals("value")) {
Element rowNode = (Element) subRowNodes.item(y);
String colName = rowNode.getAttribute("column");
String valueStr = rowNode.getNodeValue();
int ix = mTable.getColumnIndex(colName);
values[x] = valueStr;
}
}
} else {
// TODO
}
}
Vector pendingRow = new Vector();
for (int q = 0; q < values.length; q ++) {
if (values[q] == null) {
pendingRow.add(BasicRow.NOVALUE);
} else {
pendingRow.add(values[q]);
}
}
mTable.addRow(new BasicRow(mTable,pendingRow));
} else {
//TODO
}
}
}
public int getRecordCount() {
return mRecordCount;
}
}
1.1 jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/actions/BasicSelect.java
Index: BasicSelect.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.basic.actions;
import org.apache.avalon.db.actions.Select;
import org.apache.avalon.db.actions.ActionException;
import org.apache.avalon.db.actions.impl.AbstractAction;
import org.apache.avalon.db.data.impl.AbstractTableRow;
import org.apache.avalon.db.results.RowSet;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;
/**
* Class BasicSelect
*
*
* @author Gerhard Froehlich <a href="mailto:g-froehlich@gmx.de">g-froehlich@gmx.de</a>
*/
public class BasicSelect extends AbstractAction implements Select {
private Document mDocument;
private boolean mPrepared;
private boolean mWithParams;
/**
* Constructor BCELInsert
*
*
* @param table
* @param document
*
*/
public BasicSelect(Document document) {
mDocument = document;
}
/**
* Method execute
*
*
*/
public void execute() throws ActionException {
System.out.println("select execute");
if(getPrepared()) {
//only check params and stuff
//no results
}
}
public void execute(String[] params) {
System.out.println("select execute prepared");
}
public void setPrepared(boolean b) {
mPrepared = b;
}
public boolean getPrepared() {
return mPrepared;
}
public void setWithParams(boolean b) {
mWithParams = b;
}
public boolean getWithParams() {
return mWithParams;
}
public RowSet getRowSet() {
return null;
}
}
1.2 +3 -0 jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/data/BasicRow.java
Index: BasicRow.java
===================================================================
RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/data/BasicRow.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- BasicRow.java 2001/11/07 12:01:14 1.1
+++ BasicRow.java 2001/11/07 13:28:35 1.2
@@ -14,6 +14,9 @@
public class BasicRow extends AbstractTableRow {
+ public static class NoValue {}
+ public static NoValue NOVALUE = new NoValue();
+
protected Vector mRow;
protected Column[] mColumns;
1.3 +9 -0 jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/data/BasicTable.java
Index: BasicTable.java
===================================================================
RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/data/BasicTable.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- BasicTable.java 2001/11/07 12:24:20 1.2
+++ BasicTable.java 2001/11/07 13:28:35 1.3
@@ -17,5 +17,14 @@
super(name, columns);
}
+ public int getColumnIndex(String columnName) {
+ for (int x = 0; x < mColumns.length; x++) {
+ if (mColumns[x].getColumnName().equals(columnName)) {
+ return x;
+ }
+ }
+ return -1;
+ }
+
}
1.1 jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/parser/BasicLXSQLParser.java
Index: BasicLXSQLParser.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.basic.parser;
import org.apache.avalon.db.server.AbstractLXSQLParser;
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.actions.Insert;
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.data.Column;
import org.apache.avalon.db.data.impl.DefaultColumn;
import org.apache.avalon.db.bcel.actions.AbstractBCELAction;
import org.apache.avalon.db.basic.actions.BasicCreateTable;
import org.apache.avalon.db.basic.actions.BasicInsert;
import org.apache.avalon.db.basic.data.BasicTable;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.ComponentException;
import org.apache.bcel.generic.InstructionFactory;
import org.apache.bcel.generic.ConstantPoolGen;
import org.apache.bcel.generic.ClassGen;
import org.apache.bcel.generic.Type;
import org.apache.bcel.Constants;
import org.w3c.dom.Element;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import java.util.Vector;
/**
* Class BCELSQLParser
*
*
* @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
* @version $Revision: 1.14 $
*/
public class BasicLXSQLParser extends AbstractLXSQLParser {
/**
* Method createSelectAction
*
*
* @param request
*
* @return
*
*/
public Select createSelectAction(SelectRequest request) throws ActionException {
// TODO
return null;
}
/**
* Method createCreateTableAction
*
*
* @param request
*
* @return
*
*/
public CreateTable createCreateTableAction(CreateTableRequest request) throws ActionException {
Document doc = parseLXSQLString(request.getSql());
Element rootElement = doc.getDocumentElement();
getLogger().debug("rootElement=" + rootElement.getTagName());
String tableName = rootElement.getAttribute("name");
NodeList subRootNodes = rootElement.getChildNodes();
Vector columns = new Vector();
for (int f = 0 ; f < subRootNodes.getLength(); f++) {
if (subRootNodes.item(f).getNodeName().equals("columns")) {
NodeList subColumnsNodes = subRootNodes.item(f).getChildNodes();
for (int x = 0 ; x < subColumnsNodes.getLength(); x++) {
if (subColumnsNodes.item(x).getNodeName().equals("column")) {
Node columnNode = subColumnsNodes.item(x);
String fieldName = columnNode.getAttributes().getNamedItem("name").getNodeValue();
String sqlFieldType = columnNode.getAttributes().getNamedItem("type").getNodeValue();
String fieldType = getJavaType(sqlFieldType).toString();
Column column = new DefaultColumn(fieldName, sqlFieldType, fieldType);
columns.add(column);
} else {
// TODO There should be no other element types inside <columns>
}
}
} else {
//TODO Only <columns> is supported in <create-table> so far
}
}
//TODO need to create constrcutor suitable for superclass.
CreateTable action = new BasicCreateTable(tableName, columns);
action.setDatabasePersistor(mDatabasePersistor);
return action;
}
/**
* Method createInsertAction
*
*
* @param request
*
* @return
*
*/
public Insert createInsertAction(InsertRequest request) throws ActionException {
Document doc = parseLXSQLString(request.getSql());
Element rootElement = doc.getDocumentElement();
String tableName = rootElement.getAttribute("table-name");
System.out.println("mDatabasePersistor" + mDatabasePersistor);
System.out.println("=tn=" + tableName);
BasicTable table = (BasicTable) mDatabasePersistor.getTable(tableName);
System.out.println("=table=" + table);
Insert action = new BasicInsert(table, doc);
action.setDatabasePersistor(mDatabasePersistor);
return action;
}
}
1.1 jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcel/parser/BCELLXSQLParser.java
Index: BCELLXSQLParser.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
package org.apache.avalon.db.bcel.parser;
import org.apache.avalon.db.server.AbstractLXSQLParser;
import org.apache.avalon.db.bcel.actions.BCELSelect;
import org.apache.avalon.db.bcel.actions.AbstractBCELAction;
import org.apache.avalon.db.bcel.actions.BCELCreateTable;
import org.apache.avalon.db.bcel.actions.BCELInsert;
import org.apache.avalon.db.bcel.data.BCELTable;
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.actions.Insert;
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.data.Column;
import org.apache.avalon.db.data.impl.DefaultColumn;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.ComponentException;
import org.apache.bcel.generic.InstructionFactory;
import org.apache.bcel.generic.ConstantPoolGen;
import org.apache.bcel.generic.ClassGen;
import org.apache.bcel.generic.Type;
import org.apache.bcel.Constants;
import org.w3c.dom.Element;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import java.util.Vector;
/**
* Class BCELSQLParser
*
*
* @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
* @version $Revision: 1.14 $
*/
public class BCELLXSQLParser extends AbstractLXSQLParser {
protected BCELHelper bcelHelper = new BCELHelper();
public void compose(ComponentManager componentManager) throws ComponentException {
super.compose(componentManager);
bcelHelper.setDatabasePersistor(mDatabasePersistor);
}
/**
* Method createSelectAction
*
*
* @param request
*
* @return
*
*/
public Select createSelectAction(SelectRequest request) throws ActionException {
Document doc = parseLXSQLString(request.getSql());
Element rootElement = doc.getDocumentElement();
Select action = new BCELSelect(doc);
if(request.getPrepared()) {
action.setPrepared(true);
} else if(request.getParams().length > 0) {
action.setWithParams(true);
}
action.setDatabasePersistor(mDatabasePersistor);
((AbstractBCELAction) action).setBCELHelper(bcelHelper);
return action;
}
/**
* Method createCreateTableAction
*
*
* @param request
*
* @return
*
*/
public CreateTable createCreateTableAction(CreateTableRequest request) throws ActionException {
Document doc = parseLXSQLString(request.getSql());
Element rootElement = doc.getDocumentElement();
getLogger().debug("rootElement=" + rootElement.getTagName());
String tableName = rootElement.getAttribute("name");
String tableRowName = tableName + "Row";
String newTableRowClassName = bcelHelper.createUniqueClassName(tableRowName);
ClassGen cg = new ClassGen(newTableRowClassName,
"org.apache.avalon.db.data.impl.AbstractTableRow",
"<SQL Generated>", Constants.ACC_PUBLIC | Constants.ACC_SUPER,
null);
ConstantPoolGen cp = cg.getConstantPool();
cg.addEmptyConstructor(Constants.ACC_PUBLIC);
InstructionFactory factory = new InstructionFactory(cg);
NodeList subRootNodes = rootElement.getChildNodes();
Vector columns = new Vector();
for (int f = 0 ; f < subRootNodes.getLength(); f++) {
if (subRootNodes.item(f).getNodeName().equals("columns")) {
NodeList subColumnsNodes = subRootNodes.item(f).getChildNodes();
for (int x = 0 ; x < subColumnsNodes.getLength(); x++) {
if (subColumnsNodes.item(x).getNodeName().equals("column")) {
Node columnNode = subColumnsNodes.item(x);
String fieldName = columnNode.getAttributes().getNamedItem("name").getNodeValue();
String sqlFieldType = columnNode.getAttributes().getNamedItem("type").getNodeValue();
Type fieldType = bcelHelper.getType(sqlFieldType);
Column column = new DefaultColumn(fieldName, sqlFieldType, fieldType.toString());
columns.add(column);
bcelHelper.createFieldAndSetter(cp, cg, factory, fieldType, fieldName, tableName);
} else {
// TODO There should be no other element types inside <columns>
}
}
} else {
//TODO Only <columns> is supported in <create-table> so far
}
}
//TODO need to create constrcutor suitable for superclass.
try {
cg.getJavaClass().dump(newTableRowClassName + tableName + ".class");
} catch (java.io.IOException e) {
System.err.println(e);
}
CreateTable action = new BCELCreateTable(cg.getJavaClass(), tableName, tableRowName, newTableRowClassName, columns);
action.setDatabasePersistor(mDatabasePersistor);
((AbstractBCELAction) action).setBCELHelper(bcelHelper);
return action;
}
/**
* Method createInsertAction
*
*
* @param request
*
* @return
*
*/
public Insert createInsertAction(InsertRequest request) throws ActionException {
Document doc = parseLXSQLString(request.getSql());
Element rootElement = doc.getDocumentElement();
String tableName = rootElement.getAttribute("table-name");
System.out.println("mDatabasePersistor" + mDatabasePersistor);
System.out.println("=tn=" + tableName);
String uniqueTableName = bcelHelper.getGeneratedClassName(tableName);
System.out.println("=utn=" + uniqueTableName);
BCELTable table = (BCELTable) mDatabasePersistor.getTable(tableName);
System.out.println("=table=" + table);
Insert action = new BCELInsert(table, doc);
action.setDatabasePersistor(mDatabasePersistor);
((AbstractBCELAction) action).setBCELHelper(bcelHelper);
return action;
}
}
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>