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/03 14:26:22 UTC
cvs commit: jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/services SQLParser.java
hammant 01/11/03 05:26:22
Modified: apps/db/src/conf db-assembly.xml db-config.xml
apps/db/src/java/org/apache/avalon/db/bcel/parser
BCELSQLParser.java BaseBCELParser.java
apps/db/src/java/org/apache/avalon/db/parser
DefaultSQLParser.java
apps/db/src/java/org/apache/avalon/db/services
SQLParser.java
Added: apps/db/src/java/org/apache/avalon/db/bcel/parser
BCELSQLParser.xinfo LXSQLParser.java
LXSQLParser.xinfo
Log:
New XML based parser
Revision Changes Path
1.5 +4 -1 jakarta-avalon-cornerstone/apps/db/src/conf/db-assembly.xml
Index: db-assembly.xml
===================================================================
RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/conf/db-assembly.xml,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- db-assembly.xml 2001/11/03 10:31:21 1.4
+++ db-assembly.xml 2001/11/03 13:26:21 1.5
@@ -16,8 +16,10 @@
<block class="org.apache.avalon.cornerstone.blocks.sockets.DefaultSocketManager" name="sockets"/>
<block class="org.apache.avalon.db.persistence.inmemory.NoPersistence" name="db-persistor" />
+
+ <block class="org.apache.avalon.cornerstone.blocks.dom.DOMBuilderFactory" name="dom-builder-factory" />
- <block class="org.apache.avalon.db.parser.DefaultSQLParser" name="sql-parser" />
+ <block class="org.apache.avalon.db.bcel.parser.LXSQLParser" name="sql-parser" />
<block class="org.apache.avalon.db.optimizer.DefaultSQLOptimizer" name="sql-optimizer" />
@@ -25,6 +27,7 @@
<provide name="sockets" role="org.apache.avalon.cornerstone.services.sockets.SocketManager"/>
<provide name="connections"
role="org.apache.avalon.cornerstone.services.connection.ConnectionManager" />
+ <provide name="dom-builder-factory" role="org.apache.avalon.cornerstone.services.dom.DocumentBuilderFactory" />
<provide name="sql-parser" role="org.apache.avalon.db.services.SQLParser" />
<provide name="sql-optimizer" role="org.apache.avalon.db.services.SQLOptimizer" />
<provide name="db-persistor" role="org.apache.avalon.db.services.DatabasePersistor" />
1.4 +5 -0 jakarta-avalon-cornerstone/apps/db/src/conf/db-config.xml
Index: db-config.xml
===================================================================
RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/conf/db-config.xml,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- db-config.xml 2001/11/03 08:21:00 1.3
+++ db-config.xml 2001/11/03 13:26:21 1.4
@@ -43,5 +43,10 @@
<sql-parser>TODO</sql-parser>
<sql-optimizer>TODO</sql-optimizer>
<db-persistor>TODO</db-persistor>
+
+ <dom-builder-factory>
+ <domClass>org.apache.xerces.jaxp.DocumentBuilderFactoryImpl</domClass>
+ </dom-builder-factory>
+
</config>
1.4 +5 -33 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.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- BCELSQLParser.java 2001/11/01 09:22:15 1.3
+++ BCELSQLParser.java 2001/11/03 13:26:21 1.4
@@ -16,6 +16,7 @@
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.ActionException;
import org.apache.avalon.db.transport.Request;
import org.apache.avalon.db.transport.SelectRequest;
import org.apache.avalon.db.transport.CreateTableRequest;
@@ -58,25 +59,11 @@
*
*
* @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
- * @version $Revision: 1.3 $
+ * @version $Revision: 1.4 $
*/
public class BCELSQLParser extends BaseBCELParser {
/**
- * Method createAction
- *
- *
- * @param request
- *
- * @return
- *
- */
- public Action createAction(Request request) {
- return null;
- }
-
-
- /**
* Method createSelectAction
*
*
@@ -85,7 +72,7 @@
* @return
*
*/
- public Select createSelectAction(SelectRequest request) {
+ public Select createSelectAction(SelectRequest request) throws ActionException {
return null;
}
@@ -98,7 +85,7 @@
* @return
*
*/
- public CreateTable createCreateTableAction(CreateTableRequest request) {
+ public CreateTable createCreateTableAction(CreateTableRequest request) throws ActionException {
String tableName = getWordThree(request.getSql());
String values = getBracketedExpr(request.getSql());
@@ -149,7 +136,7 @@
* @return
*
*/
- public Insert createInsertAction(InsertRequest request) {
+ public Insert createInsertAction(InsertRequest request) throws ActionException {
String tableName = getWordThree(request.getSql());
Table table = mDatabasePersistor.getTable(tableName);
@@ -168,19 +155,4 @@
return null;
}
-
- /**
- * 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.3 +1 -26 jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcel/parser/BaseBCELParser.java
Index: BaseBCELParser.java
===================================================================
RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcel/parser/BaseBCELParser.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- BaseBCELParser.java 2001/11/01 09:31:11 1.2
+++ BaseBCELParser.java 2001/11/03 13:26:21 1.3
@@ -59,7 +59,7 @@
*
*
* @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
- * @version $Revision: 1.2 $
+ * @version $Revision: 1.3 $
*/
public abstract class BaseBCELParser extends AbstractLoggable
implements Block, SQLParser, Contextualizable, Composable, Configurable {
@@ -72,19 +72,6 @@
/**
- * Method createAction
- *
- *
- * @param request
- *
- * @return
- *
- */
- public Action createAction(Request request) {
- return null;
- }
-
- /**
* Method contextualize
*
*
@@ -124,18 +111,6 @@
}
- /**
- * Method createSelectAction
- *
- *
- * @param request
- *
- * @return
- *
- */
- public Select createSelectAction(SelectRequest request) {
- return null;
- }
protected String getWordOne(String str) {
1.1 jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcel/parser/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>
</blockinfo>
1.1 jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcel/parser/LXSQLParser.java
Index: LXSQLParser.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.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.actions.ActionException;
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.bcel.actions.BCELCreateTable;
import org.apache.avalon.db.bcel.actions.BCELInsertSingleValue;
import org.apache.avalon.db.bcel.data.BCELTable;
import org.apache.avalon.db.data.Table;
import org.apache.avalon.db.data.Column;
import org.apache.avalon.db.data.impl.DefaultColumn;
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.avalon.cornerstone.services.dom.DocumentBuilderFactory;
import org.apache.bcel.Constants;
import org.apache.bcel.generic.ConstantPoolGen;
import org.apache.bcel.generic.Type;
import org.apache.bcel.generic.ClassGen;
import org.apache.bcel.generic.FieldGen;
import org.apache.bcel.generic.InstructionList;
import org.apache.bcel.generic.MethodGen;
import org.apache.bcel.classfile.Field;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.DocumentType;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.ParserConfigurationException;
import java.util.StringTokenizer;
import java.util.Vector;
import java.util.HashMap;
import java.io.Reader;
import java.io.StringReader;
import java.io.IOException;
/**
* Class BCELSQLParser
*
*
* @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
* @version $Revision: 1.1 $
*/
public class LXSQLParser extends BaseBCELParser {
protected DocumentBuilderFactory mDocumentBuilderFactory;
protected DocumentBuilder mDocumentBuilder;
private final String XMLHDR = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
/**
* Method compose
*
*
* @param componentManager
*
* @throws ComponentException
*
*/
public void compose(ComponentManager componentManager) throws ComponentException {
mDocumentBuilderFactory =
(DocumentBuilderFactory) componentManager.lookup(DocumentBuilderFactory.class.getName());
try
{
mDocumentBuilder = mDocumentBuilderFactory.newDocumentBuilder();
}
catch (ParserConfigurationException pce)
{
throw new ComponentException("ParserConfiguration Exception in compose()",pce);
}
}
/**
* Method createSelectAction
*
*
* @param request
*
* @return
*
*/
public Select createSelectAction(SelectRequest request) throws ActionException {
return null;
}
/**
* Method createCreateTableAction
*
*
* @param request
*
* @return
*
*/
public CreateTable createCreateTableAction(CreateTableRequest request) throws ActionException {
//<create-table name="Fred">
// <columns>
// <column name="wilma" type="varchar" max="20"/>
// <column name="barney" type="varchar" max="20"/>
// </columns>
//</create-table>
StringReader sr = new StringReader(XMLHDR + request.getSql());
InputSource is = new InputSource(sr);
try
{
Document doc = mDocumentBuilder.parse(is);
String tableName = doc.getAttributes().getNamedItem("name").getNodeValue();
NodeList columnNodes = doc.getElementsByTagName("columns/column");
String newTableClassName = createUniqueClassName(tableName);
ClassGen cg = new ClassGen(newTableClassName,
"org.apache.avalon.db.data.impl.AbstractTableRow",
"<SQL Generated>", Constants.ACC_PUBLIC | Constants.ACC_SUPER,
null);
ConstantPoolGen cp = cg.getConstantPool();
Vector columns = new Vector();
for ( int i= 0; i < columnNodes.getLength(); i ++ ) {
final Node columnNode = columnNodes.item(i);
String fieldName = columnNode.getAttributes().getNamedItem("name").getNodeValue();
String sqlFieldType = columnNode.getAttributes().getNamedItem("type").getNodeValue();
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, 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, columns);
action.setDatabasePersistor(mDatabasePersistor);
return action;
}
catch (SAXException se)
{
throw new ActionException(se.getMessage());
}
catch (IOException ioe)
{
throw new ActionException(ioe.getMessage());
}
}
/**
* Method createInsertAction
*
*
* @param request
*
* @return
*
*/
public Insert createInsertAction(InsertRequest request) throws ActionException {
//TODO
return null;
}
}
1.1 jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcel/parser/LXSQLParser.xinfo
Index: LXSQLParser.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.w3c.dom.DOMImplementation" version="1.0"/>
</dependency>
<dependency>
<service name="org.apache.avalon.db.services.DatabasePersistor" version="1.0"/>
</dependency>
</blockinfo>
1.4 +5 -17 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.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- DefaultSQLParser.java 2001/10/30 17:45:14 1.3
+++ DefaultSQLParser.java 2001/11/03 13:26:21 1.4
@@ -15,6 +15,7 @@
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.ActionException;
import org.apache.avalon.db.transport.Request;
import org.apache.avalon.db.transport.SelectRequest;
import org.apache.avalon.db.transport.CreateTableRequest;
@@ -38,25 +39,12 @@
*
*
* @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
- * @version $Revision: 1.3 $
+ * @version $Revision: 1.4 $
*/
public class DefaultSQLParser extends AbstractLoggable
implements Block, SQLParser, Contextualizable, Composable, Configurable, Initializable {
/**
- * Method createAction
- *
- *
- * @param request
- *
- * @return
- *
- */
- public Action createAction(Request request) {
- return null;
- }
-
- /**
* Method contextualize
*
*
@@ -107,15 +95,15 @@
* @return
*
*/
- public Select createSelectAction(SelectRequest request) {
+ public Select createSelectAction(SelectRequest request) throws ActionException {
return null;
}
- public CreateTable createCreateTableAction(CreateTableRequest request) {
+ public CreateTable createCreateTableAction(CreateTableRequest request) throws ActionException {
return null;
}
- public Insert createInsertAction(InsertRequest request) {
+ public Insert createInsertAction(InsertRequest request) throws ActionException {
return null;
}
}
1.4 +5 -15 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.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- SQLParser.java 2001/10/30 17:45:14 1.3
+++ SQLParser.java 2001/11/03 13:26:22 1.4
@@ -14,6 +14,7 @@
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.ActionException;
import org.apache.avalon.db.transport.Request;
import org.apache.avalon.db.transport.SelectRequest;
import org.apache.avalon.db.transport.CreateTableRequest;
@@ -25,24 +26,13 @@
*
*
* @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
- * @version * $Revision: 1.3 $
+ * @version * $Revision: 1.4 $
*/
public interface SQLParser {
// Resulting block may depend on ActionCache, DatabasePersistor & IndexGenerator
/**
- * Method createAction
- *
- *
- * @param request
- *
- * @return
- *
- */
- Action createAction(Request request);
-
- /**
* Method createSelectAction
*
*
@@ -51,7 +41,7 @@
* @return
*
*/
- Select createSelectAction(SelectRequest request);
+ Select createSelectAction(SelectRequest request) throws ActionException;
/**
* Method createCreateTableAction
@@ -62,7 +52,7 @@
* @return
*
*/
- CreateTable createCreateTableAction(CreateTableRequest request);
+ CreateTable createCreateTableAction(CreateTableRequest request) throws ActionException;
/**
* Method createInsertAction
@@ -73,5 +63,5 @@
* @return
*
*/
- Insert createInsertAction(InsertRequest request);
+ Insert createInsertAction(InsertRequest request) throws ActionException;
}
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>