hammant 01/11/15 06:29:58
Modified: apps/db/src/java/org/apache/avalon/db/basic/parser
BasicLXSQLParser.java
apps/db/src/java/org/apache/avalon/db/bcel/actions
BCELInsert.java
apps/db/src/java/org/apache/avalon/db/bcel/parser
BCELHelper.java BCELLXSQLParser.java
BCELSQLParser.java
apps/db/src/java/org/apache/avalon/db/driver
AvalonDBStatement.java
apps/db/src/java/org/apache/avalon/db/driver/lxsql
LXSQLParserHelper.java
apps/db/src/java/org/apache/avalon/db/driver/sql
SQLParserHelper.java
apps/db/src/java/org/apache/avalon/db/server
AbstractDatabaseManager.java
AbstractLXSQLParser.java
apps/db/src/java/org/apache/avalon/db/services
DatabaseManager.java SQLParser.java
apps/db/src/java/org/apache/avalon/db/transport
AlterRequest.java Request.java SelectRequest.java
apps/db/src/java/org/apache/avalon/db/transport/cmdstream/server
PlainCMDDatabaseManager.java
apps/db/src/java/org/apache/avalon/db/transport/soap/client/glue
GlueConnection.java
Added: apps/db/src/java/org/apache/avalon/db/actions
InsertRows.java
apps/db/src/java/org/apache/avalon/db/basic/actions
BasicInsertRows.java
apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql
BasicLXSQLCreateIndexHandler.java
BasicLXSQLCreateTableHandler.java
BasicLXSQLCreateViewHandler.java
BasicLXSQLDeleteRowsHandler.java
BasicLXSQLHandler.java
BasicLXSQLInsertRowsHandler.java
BasicLXSQLSelectSimpleHandler.java
apps/db/src/java/org/apache/avalon/db/server
AbstractRequestHandler.java
apps/db/src/java/org/apache/avalon/db/server/stdhandlers
PingHandler.java
apps/db/src/java/org/apache/avalon/db/transport
DeleteRowsRequest.java InsertRowsRequest.java
Removed: apps/db/src/java/org/apache/avalon/db/actions Insert.java
apps/db/src/java/org/apache/avalon/db/basic/actions
BasicInsert.java
apps/db/src/java/org/apache/avalon/db/transport
DeleteRequest.java InsertRequest.java
Log:
handler architecture for request/replys
Revision Changes Path
1.1
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/actions/InsertRows.java
Index: InsertRows.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;
/**
* Interface InsertRows
*
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
* @version * $Revision: 1.1 $
*/
public interface InsertRows extends WriteAction {}
1.1
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/actions/BasicInsertRows.java
Index: BasicInsertRows.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.impl.AbstractAction;
import org.apache.avalon.db.actions.InsertRows;
import org.apache.avalon.db.actions.ActionException;
import org.apache.avalon.db.basic.data.BasicRow;
import org.apache.avalon.db.basic.data.BasicTable;
import org.apache.avalon.db.data.Column;
import org.apache.avalon.db.data.ValidationException;
import org.apache.avalon.framework.logger.LogEnabled;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import java.util.Vector;
/**
* Class BasicInsertRows
*
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
* @version $Revision: 1.1 $
*/
public class BasicInsertRows extends AbstractAction implements
InsertRows,LogEnabled {
private Document mDocument;
private BasicTable mTable;
private int mRecordCount;
/**
* Constructor BasicInsertRows
*
*
* @param table
* @param document
*
*/
public BasicInsertRows(BasicTable table, Document document) {
mTable = table;
mDocument = document;
}
public void initialize() throws ActionException {
getLogger().debug("BasicInsertRows.initialize()");
}
/**
* Method execute
*
*
*/
public void execute() throws ActionException {
System.out.println("insert execute");
System.out.println("mTable=" + mTable);
System.out.println("mDocument=" + mDocument);
Element rootElement = mDocument.getDocumentElement();
NodeList subRootNodes = rootElement.getChildNodes();
try {
for (int f = 0 ; f < subRootNodes.getLength(); f++) {
if (subRootNodes.item(f).getNodeName().equals("rows")) {
NodeList subRowsNodes =
subRootNodes.item(f).getChildNodes();
processSubRowsNodes(subRowsNodes);
} else {
throw new ActionException("Only 'rows' allowed as a node
under root node");
}
}
} catch (ValidationException ve) {
throw new ActionException(ve.getMessage());
}
}
private void processSubRowsNodes(NodeList subRowsNodes) throws
ValidationException {
Object[] values = new Object[mTable.getColumns().length];
for (int x = 0 ; x < subRowsNodes.getLength(); x++) {
if (subRowsNodes.item(x).getNodeName().equals("row")) {
mRecordCount++;
NodeList subValueNodes = subRowsNodes.item(x).getChildNodes();
for (int y = 0 ; y < subValueNodes.getLength(); y++) {
if (subValueNodes.item(y).getNodeName().equals("value")) {
Element rowNode = (Element)subValueNodes.item(y);
String colName = rowNode.getAttribute("col");
String valueStr =
rowNode.getFirstChild().getNodeValue();
int ix = mTable.getColumnIndex(colName);
// TODO perhaps columns could know their own index?
Column col = mTable.getColumn(colName);
col.test(valueStr);
values[ix] = col.convertFromString(valueStr);
}
}
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/handlers/lxsql/BasicLXSQLCreateIndexHandler.java
Index: BasicLXSQLCreateIndexHandler.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.handlers.lxsql;
import org.apache.avalon.db.basic.parser.BasicLXSQLParser;
import org.apache.avalon.db.basic.actions.BasicCreateIndex;
import org.apache.avalon.db.services.DatabasePersistor;
import org.apache.avalon.db.transport.Reply;
import org.apache.avalon.db.transport.Request;
import org.apache.avalon.db.transport.CreateIndexRequest;
import org.apache.avalon.db.transport.UpdateReply;
import org.apache.avalon.db.actions.ActionException;
import org.apache.avalon.db.actions.CreateIndex;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class BasicLXSQLCreateIndexHandler extends BasicLXSQLHandler {
public BasicLXSQLCreateIndexHandler(BasicLXSQLParser parser,
DatabasePersistor databasePersistor) {
super(parser, databasePersistor);
}
public Reply handleRequest(Request request) throws ActionException {
CreateIndexRequest cir = (CreateIndexRequest) request;
Document doc = mParser.parseLXSQLString(cir.getSql());
Element rootElement = doc.getDocumentElement();
String indexName = rootElement.getAttribute("name");
if(mDatabasePersistor.queryableExists(indexName)) {
throw new ActionException("Table/View/Index exists already");
} else {
CreateIndex action = new BasicCreateIndex(indexName, doc);
mParser.initializeAction(action);
action.execute();
return new UpdateReply(action.getRecordCount());
}
}
}
1.1
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLCreateTableHandler.java
Index: BasicLXSQLCreateTableHandler.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.handlers.lxsql;
import org.apache.avalon.db.basic.parser.BasicLXSQLParser;
import org.apache.avalon.db.basic.actions.BasicCreateTable;
import org.apache.avalon.db.services.DatabasePersistor;
import org.apache.avalon.db.transport.Reply;
import org.apache.avalon.db.transport.Request;
import org.apache.avalon.db.transport.CreateTableRequest;
import org.apache.avalon.db.transport.UpdateReply;
import org.apache.avalon.db.actions.ActionException;
import org.apache.avalon.db.actions.CreateTable;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class BasicLXSQLCreateTableHandler extends BasicLXSQLHandler {
public BasicLXSQLCreateTableHandler(BasicLXSQLParser parser,
DatabasePersistor databasePersistor) {
super(parser, databasePersistor);
}
public Reply handleRequest(Request request) throws ActionException {
CreateTableRequest ctr = (CreateTableRequest) request;
Document doc = mParser.parseLXSQLString(ctr.getSql());
Element rootElement = doc.getDocumentElement();
String tableName = rootElement.getAttribute("name");
if(mDatabasePersistor.queryableExists(tableName)) {
throw new ActionException("Table/View/Index exists already");
} else {
CreateTable action = new BasicCreateTable(tableName, rootElement);
mParser.initializeAction(action);
action.execute();
return new UpdateReply(action.getRecordCount());
}
}
}
1.1
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLCreateViewHandler.java
Index: BasicLXSQLCreateViewHandler.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.handlers.lxsql;
import org.apache.avalon.db.basic.parser.BasicLXSQLParser;
import org.apache.avalon.db.basic.actions.BasicCreateView;
import org.apache.avalon.db.services.DatabasePersistor;
import org.apache.avalon.db.transport.Reply;
import org.apache.avalon.db.transport.Request;
import org.apache.avalon.db.transport.CreateViewRequest;
import org.apache.avalon.db.transport.UpdateReply;
import org.apache.avalon.db.actions.ActionException;
import org.apache.avalon.db.actions.CreateView;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class BasicLXSQLCreateViewHandler extends BasicLXSQLHandler {
public BasicLXSQLCreateViewHandler(BasicLXSQLParser parser,
DatabasePersistor databasePersistor) {
super(parser, databasePersistor);
}
public Reply handleRequest(Request request) throws ActionException {
CreateViewRequest cvr = (CreateViewRequest) request;
Document doc = mParser.parseLXSQLString(cvr.getSql());
Element rootElement = doc.getDocumentElement();
String tableName = rootElement.getAttribute("name");
if(mDatabasePersistor.queryableExists(tableName)) {
throw new ActionException("Table/View/Index exists already");
} else {
CreateView action = new BasicCreateView(tableName, rootElement);
mParser.initializeAction(action);
action.execute();
return new UpdateReply(action.getRecordCount());
}
}
}
1.1
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLDeleteRowsHandler.java
Index: BasicLXSQLDeleteRowsHandler.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.handlers.lxsql;
import org.apache.avalon.db.basic.parser.BasicLXSQLParser;
import org.apache.avalon.db.basic.actions.BasicDeleteRows;
import org.apache.avalon.db.services.DatabasePersistor;
import org.apache.avalon.db.transport.Reply;
import org.apache.avalon.db.transport.Request;
import org.apache.avalon.db.transport.DeleteRowsRequest;
import org.apache.avalon.db.transport.UpdateReply;
import org.apache.avalon.db.actions.ActionException;
import org.apache.avalon.db.actions.DeleteRows;
import org.apache.avalon.db.data.Queryable;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class BasicLXSQLDeleteRowsHandler extends BasicLXSQLHandler {
public BasicLXSQLDeleteRowsHandler(BasicLXSQLParser parser,
DatabasePersistor databasePersistor) {
super(parser, databasePersistor);
}
public Reply handleRequest(Request request) throws ActionException {
DeleteRowsRequest cvr = (DeleteRowsRequest) request;
Document doc = mParser.parseLXSQLString(cvr.getSql());
Element rootElement = doc.getDocumentElement();
String queryableStr = rootElement.getAttribute("from");
Queryable queryable = (Queryable)
mDatabasePersistor.getQueryable(queryableStr);
DeleteRows action = new BasicDeleteRows(queryable, doc);
mParser.initializeAction(action);
action.execute();
return new UpdateReply(action.getRecordCount());
}
}
1.1
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLHandler.java
Index: BasicLXSQLHandler.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.handlers.lxsql;
import org.apache.avalon.db.server.AbstractRequestHandler;
import org.apache.avalon.db.basic.parser.BasicLXSQLParser;
import org.apache.avalon.db.services.DatabasePersistor;
public abstract class BasicLXSQLHandler extends AbstractRequestHandler {
protected final BasicLXSQLParser mParser;
protected final DatabasePersistor mDatabasePersistor;
public BasicLXSQLHandler(BasicLXSQLParser parser, DatabasePersistor
databasePersistor) {
mParser = parser;
mDatabasePersistor = databasePersistor;
}
}
1.1
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLInsertRowsHandler.java
Index: BasicLXSQLInsertRowsHandler.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.handlers.lxsql;
import org.apache.avalon.db.basic.parser.BasicLXSQLParser;
import org.apache.avalon.db.basic.data.BasicTable;
import org.apache.avalon.db.basic.actions.BasicInsertRows;
import org.apache.avalon.db.services.DatabasePersistor;
import org.apache.avalon.db.transport.Reply;
import org.apache.avalon.db.transport.Request;
import org.apache.avalon.db.transport.InsertRowsRequest;
import org.apache.avalon.db.transport.UpdateReply;
import org.apache.avalon.db.actions.ActionException;
import org.apache.avalon.db.actions.InsertRows;
import org.apache.avalon.db.data.Queryable;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class BasicLXSQLInsertRowsHandler extends BasicLXSQLHandler {
public BasicLXSQLInsertRowsHandler(BasicLXSQLParser parser,
DatabasePersistor databasePersistor) {
super(parser, databasePersistor);
}
public Reply handleRequest(Request request) throws ActionException {
InsertRowsRequest cvr = (InsertRowsRequest) request;
Document doc = mParser.parseLXSQLString(cvr.getSql());
Element rootElement = doc.getDocumentElement();
String queryableStr = rootElement.getAttribute("table-name");
Queryable queryable = (Queryable)
mDatabasePersistor.getQueryable(queryableStr);
//TOTO should be able to work with views and indexes.
InsertRows action = new BasicInsertRows((BasicTable) queryable, doc);
mParser.initializeAction(action);
action.execute();
return new UpdateReply(action.getRecordCount());
}
}
1.1
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLSelectSimpleHandler.java
Index: BasicLXSQLSelectSimpleHandler.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.handlers.lxsql;
import org.apache.avalon.db.basic.parser.BasicLXSQLParser;
import org.apache.avalon.db.basic.actions.BasicSelect;
import org.apache.avalon.db.services.DatabasePersistor;
import org.apache.avalon.db.transport.Reply;
import org.apache.avalon.db.transport.Request;
import org.apache.avalon.db.transport.SelectRequest;
import org.apache.avalon.db.transport.ResultSetReply;
import org.apache.avalon.db.actions.ActionException;
import org.apache.avalon.db.actions.Select;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class BasicLXSQLSelectSimpleHandler extends BasicLXSQLHandler {
public BasicLXSQLSelectSimpleHandler(BasicLXSQLParser parser,
DatabasePersistor databasePersistor) {
super(parser, databasePersistor);
}
public Reply handleRequest(Request request) throws ActionException {
SelectRequest cvr = (SelectRequest) request;
Document doc = mParser.parseLXSQLString(cvr.getSql());
Element rootElement = doc.getDocumentElement();
Select action = new BasicSelect(rootElement);
mParser.initializeAction(action);
action.execute();
return new ResultSetReply(action.getRowSet());
}
}
1.14 +26 -145
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/parser/BasicLXSQLParser.java
Index: BasicLXSQLParser.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/parser/BasicLXSQLParser.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- BasicLXSQLParser.java 2001/11/15 12:40:30 1.13
+++ BasicLXSQLParser.java 2001/11/15 14:29:57 1.14
@@ -9,45 +9,19 @@
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.server.AbstractRequestHandler;
+import org.apache.avalon.db.server.stdhandlers.PingHandler;
+import org.apache.avalon.db.transport.Request;
+import
org.apache.avalon.db.basic.handlers.lxsql.BasicLXSQLCreateTableHandler;
+import org.apache.avalon.db.basic.handlers.lxsql.BasicLXSQLCreateViewHandler;
+import
org.apache.avalon.db.basic.handlers.lxsql.BasicLXSQLCreateIndexHandler;
+import org.apache.avalon.db.basic.handlers.lxsql.BasicLXSQLDeleteRowsHandler;
+import org.apache.avalon.db.basic.handlers.lxsql.BasicLXSQLInsertRowsHandler;
+import
org.apache.avalon.db.basic.handlers.lxsql.BasicLXSQLSelectSimpleHandler;
+import org.apache.avalon.db.actions.Action;
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.actions.CreateView;
-import org.apache.avalon.db.actions.CreateIndex;
-import org.apache.avalon.db.actions.DeleteRows;
-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.transport.CreateViewRequest;
-import org.apache.avalon.db.transport.CreateIndexRequest;
-import org.apache.avalon.db.transport.DeleteRequest;
-import org.apache.avalon.db.data.Column;
-import org.apache.avalon.db.data.Queryable;
-import org.apache.avalon.db.data.impl.AbstractColumn;
-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.actions.BasicSelect;
-import org.apache.avalon.db.basic.actions.BasicCreateView;
-import org.apache.avalon.db.basic.actions.BasicCreateIndex;
-import org.apache.avalon.db.basic.actions.BasicDeleteRows;
-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
*
@@ -56,123 +30,30 @@
* @version $Revision: 1.14 $
*/
public class BasicLXSQLParser extends AbstractLXSQLParser {
-
- /**
- * Method createSelectAction
- *
- *
- * @param request
- *
- * @return
- *
- */
- public Select createSelectAction(SelectRequest request) throws
ActionException {
- Document doc = parseLXSQLString(request.getSql());
- Select action = new BasicSelect(doc.getDocumentElement());
- action.setDatabasePersistor(mDatabasePersistor);
- return action;
- }
-
- /**
- * Method createCreateTableAction
- *
- *
- * @param request
- *
- * @return
- *
- */
- public CreateTable createCreateTableAction(CreateTableRequest request)
throws ActionException {
-
- Document doc = parseLXSQLString(request.getSql());
-
- Element rootElement = doc.getDocumentElement();
- String tableName = rootElement.getAttribute("name");
-
- if(mDatabasePersistor.queryableExists(tableName)) {
- throw new ActionException("Table exists already");
- } else {
- CreateTable action = new BasicCreateTable(tableName,
rootElement);
- 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");
- BasicTable table = (BasicTable)
mDatabasePersistor.getQueryable(tableName);
- Insert action = new BasicInsert(table, doc);
- action.setDatabasePersistor(mDatabasePersistor);
-
- return action;
- }
+ public AbstractRequestHandler[] getRequestHandlers() {
+ AbstractRequestHandler[] handlers = new AbstractRequestHandler[1000];
- /**
- * Method createCreateTableAction
- *
- *
- * @param request
- *
- * @return
- *
- */
- public CreateView createCreateViewAction(CreateViewRequest request)
throws ActionException {
+ // standard
- Document doc = parseLXSQLString(request.getSql());
+ handlers[Request.PING] = new PingHandler();
- Element rootElement = doc.getDocumentElement();
- String viewName = rootElement.getAttribute("name");
+ // cusom basic / LXSQL
- CreateView action = new BasicCreateView(viewName, rootElement);
- action.setDatabasePersistor(mDatabasePersistor);
- return action;
-
+ handlers[Request.CREATETABLE] = new
BasicLXSQLCreateTableHandler(this,mDatabasePersistor);
+ handlers[Request.CREATEVIEW] = new
BasicLXSQLCreateViewHandler(this,mDatabasePersistor);
+ handlers[Request.CREATEINDEX] = new
BasicLXSQLCreateIndexHandler(this,mDatabasePersistor);
+ handlers[Request.DELETEROWS] = new
BasicLXSQLDeleteRowsHandler(this,mDatabasePersistor);
+ handlers[Request.INSERTROWS] = new
BasicLXSQLInsertRowsHandler(this,mDatabasePersistor);
+ handlers[Request.SELECTSIMPLE] = new
BasicLXSQLSelectSimpleHandler(this,mDatabasePersistor);
+ //TODO more
+ return handlers;
}
-
-
- /**
- * Method createCreateTableAction
- *
- *
- * @param request
- *
- * @return
- *
- */
- public CreateIndex createCreateIndexAction(CreateIndexRequest request)
throws ActionException {
-
- Document doc = parseLXSQLString(request.getSql());
- Element rootElement = doc.getDocumentElement();
- String indexName = rootElement.getAttribute("name");
-
- CreateIndex action = new BasicCreateIndex(indexName, doc);
+ public void initializeAction(Action action) throws ActionException {
action.setDatabasePersistor(mDatabasePersistor);
- return action;
-
+ setupLogger(action);
+ action.initialize();
}
- public DeleteRows createDeleteRowsAction(DeleteRequest request) throws
ActionException {
- Document doc = parseLXSQLString(request.getSql());
- Element rootElement = doc.getDocumentElement();
- String queryableStr = rootElement.getAttribute("from");
- Queryable queryable = (Queryable)
mDatabasePersistor.getQueryable(queryableStr);
- DeleteRows action = new BasicDeleteRows(queryable, doc);
- action.setDatabasePersistor(mDatabasePersistor);
-
- return action;
- }
}
1.6 +3 -3
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcel/actions/BCELInsert.java
Index: BCELInsert.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcel/actions/BCELInsert.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- BCELInsert.java 2001/11/13 14:16:23 1.5
+++ BCELInsert.java 2001/11/15 14:29:57 1.6
@@ -8,7 +8,7 @@
*/
package org.apache.avalon.db.bcel.actions;
-import org.apache.avalon.db.actions.Insert;
+import org.apache.avalon.db.actions.InsertRows;
import org.apache.avalon.db.actions.ActionException;
import org.apache.avalon.db.bcel.data.BCELTable;
import org.apache.avalon.db.data.impl.AbstractTableRow;
@@ -25,9 +25,9 @@
*
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
- * @version $Revision: 1.5 $
+ * @version $Revision: 1.6 $
*/
-public class BCELInsert extends AbstractBCELAction implements Insert {
+public class BCELInsert extends AbstractBCELAction implements InsertRows {
private Document mDocument;
private BCELTable mTable;
1.4 +2 -2
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcel/parser/BCELHelper.java
Index: BCELHelper.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcel/parser/BCELHelper.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- BCELHelper.java 2001/11/12 23:09:56 1.3
+++ BCELHelper.java 2001/11/15 14:29:57 1.4
@@ -15,11 +15,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.actions.InsertRows;
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.transport.InsertRowsRequest;
import org.apache.avalon.db.bcel.actions.BCELCreateTable;
import org.apache.avalon.db.bcel.actions.BCELInsert;
import org.apache.avalon.db.bcel.data.BCELTable;
1.6 +10 -135
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcel/parser/BCELLXSQLParser.java
Index: BCELLXSQLParser.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcel/parser/BCELLXSQLParser.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- BCELLXSQLParser.java 2001/11/15 12:40:30 1.5
+++ BCELLXSQLParser.java 2001/11/15 14:29:57 1.6
@@ -9,6 +9,7 @@
package org.apache.avalon.db.bcel.parser;
import org.apache.avalon.db.server.AbstractLXSQLParser;
+import org.apache.avalon.db.server.AbstractRequestHandler;
import org.apache.avalon.db.bcel.actions.BCELSelect;
import org.apache.avalon.db.bcel.actions.AbstractBCELAction;
import org.apache.avalon.db.bcel.actions.BCELCreateTable;
@@ -17,14 +18,15 @@
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.actions.InsertRows;
import org.apache.avalon.db.actions.CreateView;
import org.apache.avalon.db.actions.DeleteRows;
+import org.apache.avalon.db.actions.Action;
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.transport.InsertRowsRequest;
import org.apache.avalon.db.transport.CreateViewRequest;
-import org.apache.avalon.db.transport.DeleteRequest;
+import org.apache.avalon.db.transport.DeleteRowsRequest;
import org.apache.avalon.db.data.Column;
import org.apache.avalon.db.data.impl.AbstractColumn;
import org.apache.avalon.framework.component.ComponentManager;
@@ -58,139 +60,12 @@
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 = null; // TODO new
AbstractColumn(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.getQueryable(tableName);
- System.out.println("=table=" + table);
- Insert action = new BCELInsert(table, doc);
- action.setDatabasePersistor(mDatabasePersistor);
- ((AbstractBCELAction) action).setBCELHelper(bcelHelper);
-
- return action;
-
- }
-
- public CreateView createCreateViewAction(CreateViewRequest request)
throws ActionException {
- return null; //TODO
+ public AbstractRequestHandler[] getRequestHandlers() {
+ //TODO
+ return new AbstractRequestHandler[0];
}
- public DeleteRows createDeleteRowsAction(DeleteRequest request) throws
ActionException {
- return null;
+ public void initializeAction(Action action) throws ActionException {
+ //TODO
}
}
1.12 +11 -109
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.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- BCELSQLParser.java 2001/11/15 12:40:30 1.11
+++ BCELSQLParser.java 2001/11/15 14:29:57 1.12
@@ -9,17 +9,19 @@
package org.apache.avalon.db.bcel.parser;
import org.apache.avalon.db.server.AbstractSQLParser;
+import org.apache.avalon.db.server.AbstractRequestHandler;
import org.apache.avalon.db.actions.ActionException;
import org.apache.avalon.db.actions.Select;
import org.apache.avalon.db.actions.CreateTable;
-import org.apache.avalon.db.actions.Insert;
+import org.apache.avalon.db.actions.InsertRows;
import org.apache.avalon.db.actions.CreateView;
import org.apache.avalon.db.actions.DeleteRows;
+import org.apache.avalon.db.actions.Action;
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.transport.InsertRowsRequest;
import org.apache.avalon.db.transport.CreateViewRequest;
-import org.apache.avalon.db.transport.DeleteRequest;
+import org.apache.avalon.db.transport.DeleteRowsRequest;
import org.apache.avalon.db.utils.StringUtils;
import org.apache.avalon.db.data.impl.AbstractColumn;
import org.apache.avalon.db.data.Column;
@@ -42,7 +44,7 @@
*
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
- * @version $Revision: 1.11 $
+ * @version $Revision: 1.12 $
*/
public class BCELSQLParser extends AbstractSQLParser {
@@ -54,112 +56,12 @@
}
- /**
- * Method createSelectAction
- *
- *
- * @param request
- *
- * @return
- *
- */
- public Select createSelectAction(SelectRequest request) throws
ActionException {
- return null;
+ public AbstractRequestHandler[] getRequestHandlers() {
+ //TODO
+ return new AbstractRequestHandler[0];
}
- /**
- * Method createCreateTableAction
- *
- *
- * @param request
- *
- * @return
- *
- */
- public CreateTable createCreateTableAction(CreateTableRequest request)
throws ActionException {
-
- // ALL TODO
-
- String[] words = StringUtils.split(request.getSql());
-
- String tableName = words[2];
- String tableRowName = tableName + "Row";
- String values = getBracketedExpr(request.getSql());
- StringTokenizer st = new StringTokenizer(values, ",");
- 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();
- InstructionFactory factory = new InstructionFactory(cg);
- 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 = bcelHelper.getType(sqlFieldType);
- Column column = null; // TODO new AbstractColumn(fieldName,
sqlFieldType, fieldType.toString());
-
- columns.add(column);
- bcelHelper.createFieldAndSetter(cp, cg, factory, fieldType,
fieldName, tableName);
- }
-
- //TODO need to create constrcutor suitable for superclass.
- try {
- cg.getJavaClass().dump(tableName + "Row.class");
- } catch (java.io.IOException e) {
- System.err.println(e);
- }
-
- CreateTable action = new BCELCreateTable(cg.getJavaClass(),
tableName, tableRowName, newTableRowClassName, columns);
- action.setDatabasePersistor(mDatabasePersistor);
- return action;
- }
-
-
- /**
- * Method createInsertAction
- *
- *
- * @param request
- *
- * @return
- *
- */
- public Insert createInsertAction(InsertRequest request) throws
ActionException {
-
- // ALL TODO
-
- String[] words = StringUtils.split(request.getSql());
-
- String tableName = words[2];
- Table table = (Table) mDatabasePersistor.getQueryable(tableName);
- String type = words[3];
-
- if (type.startsWith("(")) {
-
- //return createNamedColumnsInsert(table);
- } else if (type.startsWith("values")) {
- //return bcelHelper.createAllValuesInsert(table,
request.getSql());
- } else if (type.startsWith("select")) {
-
- //return createSelectInsert(table);
- }
-
- return null;
- }
-
- public CreateView createCreateViewAction(CreateViewRequest request)
throws ActionException {
- return null; //TODO
- }
-
- public DeleteRows createDeleteRowsAction(DeleteRequest request) throws
ActionException {
- return null;
+ public void initializeAction(Action action) throws ActionException {
+ //TODO
}
}
1.7 +3 -3
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/driver/AvalonDBStatement.java
Index: AvalonDBStatement.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/driver/AvalonDBStatement.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- AvalonDBStatement.java 2001/11/09 00:26:28 1.6
+++ AvalonDBStatement.java 2001/11/15 14:29:57 1.7
@@ -16,9 +16,9 @@
import org.apache.avalon.db.transport.WriteRequest;
import org.apache.avalon.db.transport.UpdateReply;
import org.apache.avalon.db.transport.CloseRequest;
-import org.apache.avalon.db.transport.InsertRequest;
+import org.apache.avalon.db.transport.InsertRowsRequest;
import org.apache.avalon.db.transport.UpdateRequest;
-import org.apache.avalon.db.transport.DeleteRequest;
+import org.apache.avalon.db.transport.DeleteRowsRequest;
import java.sql.Statement;
import java.sql.ResultSet;
@@ -33,7 +33,7 @@
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
* @author Gerhard Froehlich <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
- * @version $Revision: 1.6 $
+ * @version $Revision: 1.7 $
*/
public class AvalonDBStatement extends AbstractDriver implements Statement {
1.6 +5 -5
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/driver/lxsql/LXSQLParserHelper.java
Index: LXSQLParserHelper.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/driver/lxsql/LXSQLParserHelper.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- LXSQLParserHelper.java 2001/11/15 12:40:30 1.5
+++ LXSQLParserHelper.java 2001/11/15 14:29:57 1.6
@@ -10,9 +10,9 @@
import org.apache.avalon.db.driver.AbstractParserHelper;
import org.apache.avalon.db.transport.Request;
-import org.apache.avalon.db.transport.InsertRequest;
+import org.apache.avalon.db.transport.InsertRowsRequest;
import org.apache.avalon.db.transport.UpdateRequest;
-import org.apache.avalon.db.transport.DeleteRequest;
+import org.apache.avalon.db.transport.DeleteRowsRequest;
import org.apache.avalon.db.transport.SelectRequest;
import org.apache.avalon.db.transport.CreateTableRequest;
import org.apache.avalon.db.transport.CreateViewRequest;
@@ -24,11 +24,11 @@
protected Request getRequest(String sql) throws SQLException {
Request request = null;
if (sql.startsWith("<insert-into")) {
- request = new InsertRequest(sql);
+ request = new InsertRowsRequest(sql);
} else if (sql.startsWith("<update")) {
request = new UpdateRequest(sql);
} else if (sql.startsWith("<delete")) {
- request = new DeleteRequest(sql);
+ request = new DeleteRowsRequest(sql);
} else if (sql.startsWith("<select")) {
request = new SelectRequest(sql);
} else if (sql.startsWith("<create-table")) {
@@ -38,7 +38,7 @@
} else if (sql.startsWith("<create-index")) {
request = new CreateIndexRequest(sql);
} else if (sql.startsWith("<delete-rows")) {
- request = new DeleteRequest(sql);
+ request = new DeleteRowsRequest(sql);
//TODO
} else {
throw new SQLException("Unknown SQL instruction (first term)");
1.2 +4 -4
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/driver/sql/SQLParserHelper.java
Index: SQLParserHelper.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/driver/sql/SQLParserHelper.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- SQLParserHelper.java 2001/11/04 10:22:13 1.1
+++ SQLParserHelper.java 2001/11/15 14:29:57 1.2
@@ -10,9 +10,9 @@
import org.apache.avalon.db.driver.AbstractParserHelper;
import org.apache.avalon.db.transport.Request;
-import org.apache.avalon.db.transport.InsertRequest;
+import org.apache.avalon.db.transport.InsertRowsRequest;
import org.apache.avalon.db.transport.UpdateRequest;
-import org.apache.avalon.db.transport.DeleteRequest;
+import org.apache.avalon.db.transport.DeleteRowsRequest;
import org.apache.avalon.db.transport.SelectRequest;
import org.apache.avalon.db.transport.CreateTableRequest;
@@ -22,11 +22,11 @@
protected Request getRequest(String sql) throws SQLException {
Request request = null;
if (sql.startsWith("INSERT")) {
- request = new InsertRequest(sql);
+ request = new InsertRowsRequest(sql);
} else if (sql.startsWith("UPDATE")) {
request = new UpdateRequest(sql);
} else if (sql.startsWith("DELETE")) {
- request = new DeleteRequest(sql);
+ request = new DeleteRowsRequest(sql);
} else if (sql.startsWith("SELECT")) {
request = new SelectRequest(sql);
} else if (sql.startsWith("CREATE TABLE")) {
1.21 +18 -65
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.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- AbstractDatabaseManager.java 2001/11/15 12:40:30 1.20
+++ AbstractDatabaseManager.java 2001/11/15 14:29:57 1.21
@@ -18,7 +18,7 @@
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.actions.InsertRows;
import org.apache.avalon.db.actions.CreateView;
import org.apache.avalon.db.actions.DeleteRows;
import org.apache.avalon.db.transport.Request;
@@ -30,14 +30,15 @@
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.db.transport.InsertRequest;
+import org.apache.avalon.db.transport.InsertRowsRequest;
import org.apache.avalon.db.transport.CreateViewRequest;
import org.apache.avalon.db.transport.PingReply;
-import org.apache.avalon.db.transport.DeleteRequest;
+import org.apache.avalon.db.transport.DeleteRowsRequest;
import org.apache.avalon.framework.logger.AbstractLogEnabled;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.ComponentException;
import org.apache.avalon.framework.component.Composable;
+import org.apache.avalon.framework.activity.Initializable;
/**
@@ -45,12 +46,14 @@
*
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
- * @version $Revision: 1.20 $
+ * @version $Revision: 1.21 $
*/
-public abstract class AbstractDatabaseManager extends AbstractLogEnabled
implements Composable {
+public abstract class AbstractDatabaseManager extends AbstractLogEnabled
+ implements Composable, Initializable {
protected SQLParser mSQLParser;
protected SQLOptimizer mSQLOptimizer;
+ protected AbstractRequestHandler[] mRequestHandlers;
/**
* Method compose
@@ -69,6 +72,10 @@
mSQLOptimizer = (SQLOptimizer)
componentManager.lookup(SQLOptimizer.class.getName());
}
+ public void initialize() throws Exception {
+ mRequestHandlers = mSQLParser.getRequestHandlers();
+ }
+
/**
* Method processRequest
*
@@ -81,73 +88,19 @@
public Reply processRequest(Request request) {
try {
- switch (request.getRequestCode()) {
-
- case (Request.SELECT) :
- return processSelectRequest((SelectRequest) request);
- case (Request.CREATETABLE) :
- return processCreateTableRequest((CreateTableRequest)
request);
- case (Request.CREATEVIEW) :
- return processCreateViewRequest((CreateViewRequest)
request);
- case (Request.DELETE) :
- return processDeleteRequest((DeleteRequest) request);
- case (Request.INSERT) :
- return processInsertRequest((InsertRequest) request);
- case (Request.PING) :
- return new PingReply(); // For keep alive
+ AbstractRequestHandler arh =
mRequestHandlers[request.getRequestCode()];
+ if (arh == null ) {
+ return new UnknownRequestReply();
+ } else {
+ return arh.handleRequest(request);
}
-
} catch (ActionException ae) {
- getLogger().error("processRequest(): Exception",ae);
+ getLogger().error("processRequest(): ActionException",ae);
return new ExceptionReply(ae.getMessage());
}
- return new UnknownRequestReply();
- }
-
- public Reply processSelectRequest(SelectRequest selectRequest) throws
ActionException {
- getLogger().debug("mSQLParser=" + mSQLParser);
- /*
- SelectRequest optimizedSelectRequest =
- mSQLOptimizer.optimizeSelectRequest(selectRequest);
- */
- Select select = mSQLParser.createSelectAction(selectRequest);
//optimizedSelectRequest);
- this.setupLogger(select);
- select.initialize();
- select.execute();
- return new ResultSetReply(select.getRowSet());
- }
-
- public Reply processCreateTableRequest(CreateTableRequest
createTableRequest) throws ActionException {
- CreateTable ct =
mSQLParser.createCreateTableAction(createTableRequest);
- this.setupLogger(ct);
- ct.initialize();
- ct.execute();
- return new UpdateReply(ct.getRecordCount());
- }
- public Reply processCreateViewRequest(CreateViewRequest
createViewRequest) throws ActionException {
- CreateView cv = mSQLParser.createCreateViewAction(createViewRequest);
- this.setupLogger(cv);
- cv.initialize();
- cv.execute();
- return new UpdateReply(cv.getRecordCount());
}
- public Reply processDeleteRequest(DeleteRequest deleteRequest) throws
ActionException {
- DeleteRows dr = mSQLParser.createDeleteRowsAction(deleteRequest);
- this.setupLogger(dr);
- dr.initialize();
- dr.execute();
- return new UpdateReply(dr.getRecordCount());
- }
-
- public Reply processInsertRequest(InsertRequest insertRequest) throws
ActionException {
- Insert ins = mSQLParser.createInsertAction(insertRequest);
- this.setupLogger(ins);
- ins.initialize();
- ins.execute();
- return new UpdateReply(ins.getRecordCount());
- }
}
1.2 +1 -1
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/server/AbstractLXSQLParser.java
Index: AbstractLXSQLParser.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/server/AbstractLXSQLParser.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- AbstractLXSQLParser.java 2001/11/07 12:01:14 1.1
+++ AbstractLXSQLParser.java 2001/11/15 14:29:57 1.2
@@ -58,7 +58,7 @@
}
- protected Document parseLXSQLString(String lxsql) throws ActionException
{
+ public Document parseLXSQLString(String lxsql) throws ActionException {
String docStr = XMLHDR + lxsql;
System.out.println("lxStr=" + docStr);
1.1
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/server/AbstractRequestHandler.java
Index: AbstractRequestHandler.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.server;
import org.apache.avalon.db.transport.Request;
import org.apache.avalon.db.transport.Reply;
import org.apache.avalon.db.actions.Action;
import org.apache.avalon.db.actions.ActionException;
public abstract class AbstractRequestHandler {
public abstract Reply handleRequest(Request request) throws
ActionException;
}
1.1
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/server/stdhandlers/PingHandler.java
Index: PingHandler.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.server.stdhandlers;
import org.apache.avalon.db.server.AbstractRequestHandler;
import org.apache.avalon.db.transport.Reply;
import org.apache.avalon.db.transport.Request;
import org.apache.avalon.db.transport.PingReply;
import org.apache.avalon.db.actions.ActionException;
public class PingHandler extends AbstractRequestHandler {
public Reply handleRequest(Request request) throws ActionException {
return new PingReply();
}
}
1.4 +0 -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.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- DatabaseManager.java 2001/11/02 11:09:08 1.3
+++ DatabaseManager.java 2001/11/15 14:29:57 1.4
@@ -24,7 +24,4 @@
// Resulting block will depend on SQLParser & SQLOptimizer
Reply processRequest(Request request);
- Reply processSelectRequest(SelectRequest selectRequest) throws
ActionException;
- Reply processCreateTableRequest(CreateTableRequest
createTableRequest) throws ActionException;
-
}
1.7 +7 -40
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.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- SQLParser.java 2001/11/15 12:40:30 1.6
+++ SQLParser.java 2001/11/15 14:29:57 1.7
@@ -13,16 +13,17 @@
import org.apache.avalon.db.actions.Action;
import org.apache.avalon.db.actions.Select;
import org.apache.avalon.db.actions.CreateTable;
-import org.apache.avalon.db.actions.Insert;
+import org.apache.avalon.db.actions.InsertRows;
import org.apache.avalon.db.actions.ActionException;
import org.apache.avalon.db.actions.CreateView;
import org.apache.avalon.db.actions.DeleteRows;
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.transport.InsertRowsRequest;
import org.apache.avalon.db.transport.CreateViewRequest;
-import org.apache.avalon.db.transport.DeleteRequest;
+import org.apache.avalon.db.transport.DeleteRowsRequest;
+import org.apache.avalon.db.server.AbstractRequestHandler;
/**
@@ -30,46 +31,12 @@
*
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
- * @version * $Revision: 1.6 $
+ * @version * $Revision: 1.7 $
*/
public interface SQLParser {
- // Resulting block may depend on ActionCache, DatabasePersistor &
IndexGenerator
+ AbstractRequestHandler[] getRequestHandlers();
- /**
- * Method createSelectAction
- *
- *
- * @param request
- *
- * @return
- *
- */
- Select createSelectAction(SelectRequest request) throws ActionException;
+ void initializeAction(Action action) throws ActionException ;
- /**
- * Method createCreateTableAction
- *
- *
- * @param request
- *
- * @return
- *
- */
- CreateTable createCreateTableAction(CreateTableRequest request) throws
ActionException;
-
- /**
- * Method createInsertAction
- *
- *
- * @param request
- *
- * @return
- *
- */
- Insert createInsertAction(InsertRequest request) throws ActionException;
-
- CreateView createCreateViewAction(CreateViewRequest request) throws
ActionException;
-
- DeleteRows createDeleteRowsAction(DeleteRequest request) throws
ActionException;
}
1.2 +1 -1
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/transport/AlterRequest.java
Index: AlterRequest.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/transport/AlterRequest.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- AlterRequest.java 2001/10/30 19:35:56 1.1
+++ AlterRequest.java 2001/11/15 14:29:57 1.2
@@ -18,7 +18,7 @@
public class AlterRequest extends WriteRequest {
/**
- * Constructor InsertRequest
+ * Constructor InsertRowsRequest
*
*
* @param sql
1.10 +4 -4
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/transport/Request.java
Index: Request.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/transport/Request.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- Request.java 2001/11/14 03:06:59 1.9
+++ Request.java 2001/11/15 14:29:57 1.10
@@ -18,13 +18,13 @@
*
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
- * @version $Revision: 1.9 $
+ * @version $Revision: 1.10 $
*/
public abstract class Request implements Serializable {
- public static final int SELECT = 110;
+ public static final int SELECTSIMPLE = 110;
public static final int CREATETABLE = 111;
- public static final int INSERT = 112;
+ public static final int INSERTROWS = 112;
public static final int GENERALSQL = 113;
public static final int AUTOCOMMITCHANGE = 114;
public static final int AUTOCOMMITQUERY = 115;
@@ -37,7 +37,7 @@
public static final int TRANSACTIONISOLATIONQUERY = 122;
public static final int SETCATALOG = 123;
public static final int CATALOGREQUEST = 124;
- public static final int DELETE = 125;
+ public static final int DELETEROWS = 125;
public static final int UPDATE = 126;
public static final int RESULTSETCLOSE = 127;
public static final int ALTER = 128;
1.4 +4 -4
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/transport/SelectRequest.java
Index: SelectRequest.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/transport/SelectRequest.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- SelectRequest.java 2001/11/06 00:32:34 1.3
+++ SelectRequest.java 2001/11/15 14:29:57 1.4
@@ -15,7 +15,7 @@
*
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
- * @version $Revision: 1.3 $
+ * @version $Revision: 1.4 $
*/
public class SelectRequest extends SQLRequest {
@@ -27,15 +27,15 @@
*
*/
public SelectRequest(String sql) {
- super(Request.SELECT, sql);
+ super(Request.SELECTSIMPLE, sql);
}
public SelectRequest(String sql,boolean prepared) {
- super(Request.SELECT, sql,prepared);
+ super(Request.SELECTSIMPLE, sql,prepared);
}
public SelectRequest(String sql,String[] param) {
- super(Request.SELECT, sql,param);
+ super(Request.SELECTSIMPLE, sql,param);
}
}
1.1
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/transport/DeleteRowsRequest.java
Index: DeleteRowsRequest.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.transport;
/**
* Class DeleteRowsRequest
*
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
* @version $Revision: 1.1 $
*/
public class DeleteRowsRequest extends WriteRequest {
/**
* Constructor DeleteRowsRequest
*
*
* @param sql
*
*/
public DeleteRowsRequest(String sql) {
super(Request.DELETEROWS, sql);
}
}
1.1
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/transport/InsertRowsRequest.java
Index: InsertRowsRequest.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.transport;
/**
* Class InsertRowsRequest
*
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
* @version $Revision: 1.1 $
*/
public class InsertRowsRequest extends WriteRequest {
/**
* Constructor InsertRowsRequest
*
*
* @param sql
*
*/
public InsertRowsRequest(String sql) {
super(Request.INSERTROWS, sql);
}
}
1.8 +3 -2
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/transport/cmdstream/server/PlainCMDDatabaseManager.java
Index: PlainCMDDatabaseManager.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/transport/cmdstream/server/PlainCMDDatabaseManager.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- PlainCMDDatabaseManager.java 2001/11/10 21:45:04 1.7
+++ PlainCMDDatabaseManager.java 2001/11/15 14:29:57 1.8
@@ -43,7 +43,7 @@
*/
public class PlainCMDDatabaseManager extends AbstractDatabaseManager
implements Block, DatabaseManager, Contextualizable, Configurable,
- Initializable, ConnectionHandlerFactory {
+ ConnectionHandlerFactory {
protected SocketManager mSocketManager;
protected ConnectionManager mConnectionManager;
@@ -129,8 +129,9 @@
final ServerSocketFactory factory =
mSocketManager.getServerSocketFactory("plain");
final ServerSocket serverSocket = factory.createServerSocket(mPort,
5, mBindTo);
- mConnectionManager.connect("AvalonDBListener", serverSocket, this);
+ super.initialize();
+ mConnectionManager.connect("AvalonDBListener", serverSocket, this);
System.out.println("AvalonDBListener server running on port " +
mPort);
}
1.4 +7 -21
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/transport/soap/client/glue/GlueConnection.java
Index: GlueConnection.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/transport/soap/client/glue/GlueConnection.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- GlueConnection.java 2001/11/14 03:26:06 1.3
+++ GlueConnection.java 2001/11/15 14:29:58 1.4
@@ -8,30 +8,26 @@
*/
package org.apache.avalon.db.transport.soap.client.glue;
-
-
-import electric.registry.Registry;
-import electric.registry.RegistryException;
import org.apache.avalon.db.driver.AvalonDBConnection;
import org.apache.avalon.db.services.DatabaseManager;
import org.apache.avalon.db.common.AvalonDBSQLException;
-import org.apache.avalon.db.transport.CreateTableRequest;
-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.Request;
import org.apache.avalon.db.transport.ExceptionReply;
-import org.apache.avalon.db.transport.TODOReply;
import org.apache.avalon.db.actions.ActionException;
import java.sql.SQLException;
+import electric.registry.Registry;
+import electric.registry.RegistryException;
+
/**
* Class GlueConnection
*
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
- * @version $Revision: 1.3 $
+ * @version $Revision: 1.4 $
*/
public class GlueConnection extends AvalonDBConnection {
@@ -71,18 +67,8 @@
*/
public Reply sendRequest(Request request) throws SQLException {
+ return mDBManager.processRequest(request);
- try {
- if (request instanceof CreateTableRequest) {
- return
mDBManager.processCreateTableRequest((CreateTableRequest) request);
- } else if (request instanceof SelectRequest) {
- return mDBManager.processSelectRequest((SelectRequest)
request);
- } else {
- return new TODOReply();
- }
- } catch (ActionException ae) {
- return new ExceptionReply(ae.getMessage());
- }
- //TODO Handle Glue excpetion, which is a derivative of
RuntimeException
+ //TODO Handle Glue excpetion, which is a derivative of
RuntimeException
}
}
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>