hammant 01/12/19 02:45:46
Modified: apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql
BasicLXSQLCreateViewHandler.java
BasicLXSQLQueryableHandler.java
BasicLXSQLSelectSimpleHandler.java
BasicLXSQLUpdateRowsHandler.java
apps/db/src/scripts/lxsql Test2.script
Added: apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql
SelectColumnHelper.java
Removed: apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql
BasicLXSQLSecondaryHandler.java
Log:
contrived columns in constituent views now
Revision Changes Path
1.13 +54 -4
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLCreateViewHandler.java
Index: BasicLXSQLCreateViewHandler.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLCreateViewHandler.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- BasicLXSQLCreateViewHandler.java 2001/12/06 00:54:45 1.12
+++ BasicLXSQLCreateViewHandler.java 2001/12/19 10:45:45 1.13
@@ -12,6 +12,7 @@
import org.apache.avalon.db.basic.actions.BasicCreateView;
import org.apache.avalon.db.basic.actions.BasicCriteria;
import org.apache.avalon.db.basic.actions.BasicSelectSimple;
+import org.apache.avalon.db.basic.handlers.ContrivedColumnNameHolder;
import org.apache.avalon.db.services.DatabasePersistor;
import org.apache.avalon.db.transport.Reply;
import org.apache.avalon.db.transport.Request;
@@ -20,7 +21,11 @@
import org.apache.avalon.db.actions.ActionException;
import org.apache.avalon.db.actions.CreateView;
import org.apache.avalon.db.data.Column;
+import org.apache.avalon.db.data.types.NumericColumn;
+import org.apache.avalon.db.data.types.StringColumn;
import org.apache.avalon.db.data.impl.AbstractQueryable;
+import org.apache.avalon.db.data.impl.DefaultDelegatedVarcharColumn;
+import org.apache.avalon.db.data.impl.DefaultDelegatedIntegerColumn;
import org.apache.avalon.db.server.DBRequestContext;
import org.w3c.dom.Document;
@@ -28,15 +33,19 @@
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
+import java.util.Vector;
+
/**
* Class BasicLXSQLCreateViewHandler
*
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
- * @version $Revision: 1.12 $
+ * @version $Revision: 1.13 $
*/
-public class BasicLXSQLCreateViewHandler extends BasicLXSQLQueryableHandler {
+public class BasicLXSQLCreateViewHandler extends BasicLXSQLHandler {
+
+ private SelectColumnHelper mSelectColumnHelper = new
SelectColumnHelper();
/**
* Constructor BasicLXSQLCreateViewHandler
@@ -99,9 +108,50 @@
return new WriteReply(action.getRecordCount());
}
}
+
+ /**
+ * Method getColumns
+ *
+ *
+ */
+ protected Column[] getColumns(AbstractQueryable aq, Element columnsNode)
throws ActionException {
+
+ Vector columns = new Vector();
+ ContrivedColumnNameHolder colHldr = new ContrivedColumnNameHolder();
+
+ NodeList subColumnsNodes = columnsNode.getChildNodes();
+ for (int x = 0 ; x < subColumnsNodes.getLength(); x++) {
+ String nodeName = subColumnsNodes.item(x).getNodeName();
+ if (nodeName.equals("#text")) {
+ // do nothing, whitespace between elems
+ } else {
+ columns.add(createDelegatedColumn(aq, colHldr,
subColumnsNodes.item(x), x));
+ }
+ }
+
+ Column[] columnsAry = new Column[columns.size()];
+ columns.toArray(columnsAry);
+ for (int x = 0; x < columnsAry.length; x++ ) {
+ columnsAry[x].setIndex(x);
+ }
+
+ return columnsAry;
+
+ }
- protected Column makeColumn(AbstractQueryable aq, Node columnNode, int
ix) throws ActionException {
- return createDelegatedColumn(aq, columnNode, ix);
+ protected Column createDelegatedColumn(AbstractQueryable queryable,
ContrivedColumnNameHolder colHldr, Node columnNode, int ix) throws
ActionException {
+ Column col = mSelectColumnHelper.getSelectColumn(queryable,
(Element) columnNode, colHldr);
+ Column column = null;
+ if (col instanceof StringColumn) {
+ column = new
DefaultDelegatedVarcharColumn((StringColumn)col,null);
+ } else if (col instanceof NumericColumn) {
+ //TODO
+ column = new
DefaultDelegatedIntegerColumn((NumericColumn)col,null);
+ } else {
+ //TODO
+ }
+ column.setIndex(ix);
+ return column;
}
}
1.7 +1 -19
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLQueryableHandler.java
Index: BasicLXSQLQueryableHandler.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLQueryableHandler.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- BasicLXSQLQueryableHandler.java 2001/12/06 00:54:45 1.6
+++ BasicLXSQLQueryableHandler.java 2001/12/19 10:45:45 1.7
@@ -39,7 +39,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 abstract class BasicLXSQLQueryableHandler extends BasicLXSQLHandler {
@@ -127,24 +127,6 @@
return column;
}
- protected Column createDelegatedColumn(AbstractQueryable aq, Node
columnNode, int ix) throws ActionException {
- Node nameNode = columnNode.getAttributes().getNamedItem("name");
- if (nameNode == null) {
- throw new ActionException("'name' not specified for one of the
columns");
- }
- Column col = aq.getColumn(nameNode.getNodeValue());
- Column column = null;
- if (col instanceof StringColumn) {
- column = new
DefaultDelegatedVarcharColumn((StringColumn)col,null);
- } else if (col instanceof NumericColumn) {
- //TODO
- column = new
DefaultDelegatedIntegerColumn((NumericColumn)col,null);
- } else {
- //TODO
- }
- column.setIndex(ix);
- return column;
- }
}
1.14 +6 -4
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLSelectSimpleHandler.java
Index: BasicLXSQLSelectSimpleHandler.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLSelectSimpleHandler.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- BasicLXSQLSelectSimpleHandler.java 2001/12/18 23:34:33 1.13
+++ BasicLXSQLSelectSimpleHandler.java 2001/12/19 10:45:46 1.14
@@ -53,10 +53,12 @@
*
* @author Gerhard Froehlich <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
- * @version $Revision: 1.13 $
+ * @version $Revision: 1.14 $
*/
-public class BasicLXSQLSelectSimpleHandler extends
BasicLXSQLSecondaryHandler {
+public class BasicLXSQLSelectSimpleHandler extends BasicLXSQLHandler {
+ private SelectColumnHelper mSelectColumnHelper = new
SelectColumnHelper();
+
/**
* Constructor BasicLXSQLSelectSimpleHandler
*
@@ -149,13 +151,13 @@
// do nothing, whitespace between elems
} else {
//TODO checking columns, function...maybe extern
syntax checking!?
- if (isAllColumns((Element)
subColumnsNodes.item(j))) {
+ if (mSelectColumnHelper.isAllColumns((Element)
subColumnsNodes.item(j))) {
Column[] cs = queryable.getColumns();
for (int f = 0; f< cs.length; f++) {
colVec.add(cs[f]);
}
} else {
- colVec.add(getSelectColumn(queryable
,(Element) subColumnsNodes.item(j), colHldr));
+
colVec.add(mSelectColumnHelper.getSelectColumn(queryable ,(Element)
subColumnsNodes.item(j), colHldr));
}
}
}
1.14 +5 -3
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLUpdateRowsHandler.java
Index: BasicLXSQLUpdateRowsHandler.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLUpdateRowsHandler.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- BasicLXSQLUpdateRowsHandler.java 2001/12/18 23:34:33 1.13
+++ BasicLXSQLUpdateRowsHandler.java 2001/12/19 10:45:46 1.14
@@ -37,10 +37,12 @@
*
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
- * @version $Revision: 1.13 $
+ * @version $Revision: 1.14 $
*/
-public class BasicLXSQLUpdateRowsHandler extends BasicLXSQLSecondaryHandler {
+public class BasicLXSQLUpdateRowsHandler extends BasicLXSQLHandler {
+ private SelectColumnHelper mSelectColumnHelper = new
SelectColumnHelper();
+
/**
* Constructor BasicLXSQLUpdateRowsHandler
*
@@ -141,7 +143,7 @@
// do nothing
} else {
ct++;
- col = getSelectColumn(abstractQueryable,(Element)
subSetNodes.item(i),colHldr);
+ col =
mSelectColumnHelper.getSelectColumn(abstractQueryable,(Element)
subSetNodes.item(i),colHldr);
}
}
if (ct < 1 | ct > 1) {
1.1
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/SelectColumnHelper.java
Index: SelectColumnHelper.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.BasicLXSQLParserManager;
import org.apache.avalon.db.basic.handlers.ContrivedColumnNameHolder;
import org.apache.avalon.db.services.DatabasePersistor;
import org.apache.avalon.db.actions.ActionException;
import org.apache.avalon.db.data.impl.AbstractQueryable;
import org.apache.avalon.db.data.impl.DefaultIntegerConstantColumn;
import org.apache.avalon.db.data.impl.DefaultStringConstantColumn;
import org.apache.avalon.db.data.impl.DefaultContrivedStringFunctionColumn;
import org.apache.avalon.db.data.impl.DefaultContrivedIntegerFunctionColumn;
import org.apache.avalon.db.data.Column;
import org.apache.avalon.db.functions.impl.IntegerDivisionFunction;
import org.apache.avalon.db.functions.impl.IntegerMultiplicationFunction;
import org.apache.avalon.db.functions.impl.IntegerSubtractionFunction;
import org.apache.avalon.db.functions.impl.IntegerAdditionFunction;
import org.apache.avalon.db.functions.impl.ConcatFunction;
import org.apache.avalon.db.functions.impl.TrimStringFunction;
import org.apache.avalon.db.functions.impl.LowerCaseStringFunction;
import org.apache.avalon.db.functions.impl.UpperCaseStringFunction;
import org.apache.avalon.db.functions.impl.PositionFunction;
import org.apache.avalon.db.functions.StringFunction;
import org.apache.avalon.db.functions.NumericFunction;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import java.util.Vector;
/**
* Class SelectColumnHelper
*
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
* @version $Revision: 1.1 $
*/
public class SelectColumnHelper {
protected boolean isAllColumns(Element elem) {
String nodeName = elem.getNodeName();
if (nodeName.equals("column")) {
String name = elem.getAttribute("name");
if (name.equals("*")) {
return true;
}
}
return false;
}
protected Column getSelectColumn(AbstractQueryable queryable, Element
elem, ContrivedColumnNameHolder colHldr) throws ActionException {
String nodeName = elem.getNodeName();
if (nodeName.equals("column")) {
return getSelectColumnColumn(queryable, elem);
} else if (nodeName.equals("concat")) {
return getStringColumnFromStringFunction(queryable, elem, new
ConcatFunction(), colHldr);
} else if (nodeName.equals("const")) {
return getColumnConst(queryable, elem, colHldr);
} else if (nodeName.equals("trim")) {
return getStringColumnFromStringFunction(queryable, elem, new
TrimStringFunction(), colHldr);
} else if (nodeName.equals("lowercase")) {
return getStringColumnFromStringFunction(queryable, elem, new
LowerCaseStringFunction(), colHldr);
} else if (nodeName.equals("uppercase")) {
return getStringColumnFromStringFunction(queryable, elem, new
UpperCaseStringFunction(), colHldr);
} else if (nodeName.equals("position")) {
return getIntegerColumnFromIntegerFunction(queryable, elem, new
PositionFunction(), colHldr);
} else if (nodeName.equals("addition")) {
return getIntegerColumnFromIntegerFunction(queryable, elem, new
IntegerAdditionFunction(), colHldr);
} else if (nodeName.equals("subtraction")) {
return getIntegerColumnFromIntegerFunction(queryable, elem, new
IntegerSubtractionFunction(), colHldr);
} else if (nodeName.equals("multiplication")) {
return getIntegerColumnFromIntegerFunction(queryable, elem, new
IntegerMultiplicationFunction(), colHldr);
} else if (nodeName.equals("division")) {
return getIntegerColumnFromIntegerFunction(queryable, elem, new
IntegerDivisionFunction(), colHldr);
} else {
throw new ActionException("Unknown node type '"+nodeName+"' under
'columns'");
}
}
protected Column getSelectColumnColumn(AbstractQueryable queryable,
Element elem) throws ActionException {
String name = elem.getAttribute("name");
return queryable.getColumn(name, true);
}
protected Column getColumnConst(AbstractQueryable queryable, Element
aElem,
ContrivedColumnNameHolder colHldr) throws ActionException {
String value = aElem.getAttribute("value");
String as = aElem.getAttribute("as");
if (as == null) {
as = colHldr.getNextColumn();
}
// TODO more types
try {
return new
DefaultIntegerConstantColumn(as,Integer.parseInt(value));
} catch (java.lang.NumberFormatException nfe) {
return new DefaultStringConstantColumn(as,value);
}
}
protected Column getStringColumnFromStringFunction(AbstractQueryable
queryable,
Element aElem, StringFunction function, ContrivedColumnNameHolder
colHldr) throws ActionException {
String as = aElem.getAttribute("as");
if (as == null) {
as = colHldr.getNextColumn();
}
// TODO as might be missing
//return queryable.getColumn(name, true);
int count = 0;
if (aElem.hasChildNodes()) {
NodeList subConcatNodes = aElem.getChildNodes();
Vector colVec = new Vector();
for (int j=0; j < subConcatNodes.getLength(); j++) {
Node node = subConcatNodes.item(j);
String nodeName = node.getNodeName();
if (nodeName.equals("#text")) {
// do nothing
} else {
count++;
colVec.add(getSelectColumn(queryable,(Element) node,
colHldr));
}
}
if (colVec.size() > function.getMaxCols()) {
throw new ActionException("String function
"+aElem.getNodeName()+" can only have "+function.getMaxCols()+" child columns");
}
Column[] cols = new Column[colVec.size()];
colVec.copyInto(cols);
function.initialize(cols);
return new DefaultContrivedStringFunctionColumn(as,function);
} else {
throw new ActionException("String function
"+aElem.getNodeName()+" must have child column");
}
}
protected Column getIntegerColumnFromIntegerFunction(AbstractQueryable
queryable, Element aElem,
NumericFunction function, ContrivedColumnNameHolder colHldr)
throws ActionException {
String as = aElem.getAttribute("as");
if (as == null) {
as = colHldr.getNextColumn();
}
// TODO as might be missing
//return queryable.getColumn(name, true);
int count = 0;
if (aElem.hasChildNodes()) {
NodeList subConcatNodes = aElem.getChildNodes();
Vector colVec = new Vector();
for (int j=0; j < subConcatNodes.getLength(); j++) {
Node node = subConcatNodes.item(j);
String nodeName = node.getNodeName();
if (nodeName.equals("#text")) {
// do nothing
} else {
count++;
colVec.add(getSelectColumn(queryable,(Element) node,
colHldr));
}
}
if (colVec.size() > function.getMaxCols() | colVec.size() <
function.getMinCols() ) {
throw new ActionException("Numeric function
"+aElem.getNodeName()+" must have between "+function.getMinCols()+" and
"+function.getMaxCols()+" ");
}
Column[] cols = new Column[colVec.size()];
colVec.copyInto(cols);
function.initialize(cols);
return new DefaultContrivedIntegerFunctionColumn(as,function);
} else {
throw new ActionException("Numeric function
"+aElem.getNodeName()+" must have child column");
}
}
}
1.6 +23 -0
jakarta-avalon-cornerstone/apps/db/src/scripts/lxsql/Test2.script
Index: Test2.script
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/scripts/lxsql/Test2.script,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- Test2.script 2001/12/18 23:34:33 1.5
+++ Test2.script 2001/12/19 10:45:46 1.6
@@ -108,5 +108,28 @@
</from>
</simple-select>
+### VIEW 1 (contrived field) ##!
+
+<create-view name="FlintstonesView2" on="Flintstones">
+ <columns>
+ <concat>
+ <const value="Warner Bros character "/>
+ <column name="forename"/>
+ <const value=" "/>
+ <column name="surname"/>
+ </concat>
+ </columns>
+</create-view>
+
+### SELECT 4 (all rows) ##!
+
+<simple-select>
+ <columns>
+ <column name="*"/>
+ </columns>
+ <from>
+ <table name="FlintstonesView2"/>
+ </from>
+</simple-select>
###
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>