hammant 01/12/18 15:34:33
Modified: apps/db/src/java/org/apache/avalon/db/basic/actions
BasicCriteria.java
apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql
BasicLXSQLHandler.java
BasicLXSQLSelectSimpleHandler.java
BasicLXSQLUpdateRowsHandler.java
apps/db/src/java/org/apache/avalon/db/functions
Function.java NumericFunction.java
apps/db/src/java/org/apache/avalon/db/functions/impl
ConcatFunction.java LowerCaseStringFunction.java
SubStringFunction.java TrimStringFunction.java
UpperCaseStringFunction.java
apps/db/src/scripts/lxsql Test2.script
Added: apps/db/src/java/org/apache/avalon/db/basic/handlers
ContrivedColumnNameHolder.java
apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql
BasicLXSQLSecondaryHandler.java
Log:
functions in set in updates now works.
Revision Changes Path
1.4 +17 -1
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/actions/BasicCriteria.java
Index: BasicCriteria.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/actions/BasicCriteria.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- BasicCriteria.java 2001/12/02 14:45:57 1.3
+++ BasicCriteria.java 2001/12/18 23:34:32 1.4
@@ -37,13 +37,23 @@
private String[] mTablenames;
private String mMatchingInstructions = "callBack.rowMatches(row,
true);\n";
private String mUnMatchingInstructions = "callBack.rowMatches(row,
false);\n";
+ private Column[] mTempColumns;
- public BasicCriteria(String Criteria, String matchingInstructions,
String unMatchingInstructions) {
+ public BasicCriteria(String Criteria, String matchingInstructions,
+ String unMatchingInstructions, Column[] tempColumns) {
this(Criteria);
mMatchingInstructions = matchingInstructions;
mUnMatchingInstructions = unMatchingInstructions;
+ mTempColumns = tempColumns;
}
+ public BasicCriteria(String Criteria, String matchingInstructions,
+ String unMatchingInstructions) {
+ this(Criteria);
+ mMatchingInstructions = matchingInstructions;
+ mUnMatchingInstructions = unMatchingInstructions;
+ }
+
public BasicCriteria(String Criteria) {
try {
setupLogger(this);
@@ -81,6 +91,9 @@
rh.addBean("iterator",rowIterator);
rh.addBean("callBack",callBack);
+ if (mTempColumns != null) {
+ rh.addBean("tempColumns",mTempColumns);
+ }
rh.addBean("columnCheckLeft",columnCheckLeft);
rh.addBean("columnCheckRight",columnCheckRight);
rh.addBean("testHelper",testHelper);
@@ -126,6 +139,9 @@
rh.addBean("row",row);
rh.addBean("callBack",mh);
+ if (mTempColumns != null) {
+ rh.addBean("tempColumns",mTempColumns);
+ }
rh.addBean("columnCheckRight",columnCheckRight);
rh.addBean("columnCheckLeft",columnCheckLeft);
TestHelper testHelper = new TestHelper();
1.1
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/ContrivedColumnNameHolder.java
Index: ContrivedColumnNameHolder.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;
public class ContrivedColumnNameHolder {
int mColNumber;
public String getNextColumn() {
return "C" + mColNumber++;
}
}
1.5 +5 -1
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLHandler.java
Index: BasicLXSQLHandler.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLHandler.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- BasicLXSQLHandler.java 2001/12/03 11:18:35 1.4
+++ BasicLXSQLHandler.java 2001/12/18 23:34:33 1.5
@@ -20,7 +20,7 @@
*
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
- * @version $Revision: 1.4 $
+ * @version $Revision: 1.5 $
*/
public abstract class BasicLXSQLHandler extends AbstractRequestHandler {
@@ -38,4 +38,8 @@
super(databasePersistor);
mParser = parser;
}
+
+
+
+
}
1.13 +5 -145
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.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- BasicLXSQLSelectSimpleHandler.java 2001/12/18 20:21:26 1.12
+++ BasicLXSQLSelectSimpleHandler.java 2001/12/18 23:34:33 1.13
@@ -10,6 +10,7 @@
import org.apache.avalon.db.basic.parser.BasicLXSQLParserManager;
import org.apache.avalon.db.basic.actions.BasicSelectSimple;
import org.apache.avalon.db.basic.actions.BasicCriteria;
+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;
@@ -52,9 +53,9 @@
*
* @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.12 $
+ * @version $Revision: 1.13 $
*/
-public class BasicLXSQLSelectSimpleHandler extends BasicLXSQLHandler {
+public class BasicLXSQLSelectSimpleHandler extends
BasicLXSQLSecondaryHandler {
/**
* Constructor BasicLXSQLSelectSimpleHandler
@@ -141,6 +142,7 @@
if (subRootNodes.item(i).hasChildNodes()) {
NodeList subColumnsNodes =
subRootNodes.item(i).getChildNodes();
Vector colVec = new Vector();
+ ContrivedColumnNameHolder colHldr = new
ContrivedColumnNameHolder();
for (int j=0; j < subColumnsNodes.getLength(); j++) {
String nodeName =
subColumnsNodes.item(j).getNodeName();
if (nodeName.equals("#text")) {
@@ -153,7 +155,7 @@
colVec.add(cs[f]);
}
} else {
- colVec.add(getSelectColumn(queryable
,(Element) subColumnsNodes.item(j)));
+ colVec.add(getSelectColumn(queryable
,(Element) subColumnsNodes.item(j), colHldr));
}
}
}
@@ -168,149 +170,7 @@
return cols;
}
- private boolean isAllColumns(Element elem) {
- String nodeName = elem.getNodeName();
- if (nodeName.equals("column")) {
- String name = elem.getAttribute("name");
- if (name.equals("*")) {
- return true;
- }
- }
- return false;
- }
-
- private Column getSelectColumn(AbstractQueryable queryable, Element
elem) throws ActionException {
-
- String nodeName = elem.getNodeName();
-
- if (nodeName.equals("column")) {
- return getSelectColumnColumn(queryable, elem);
- } else if (nodeName.equals("concat")) {
- return getSelectColumnConcat(queryable, elem);
- } else if (nodeName.equals("const")) {
- return getSelectColumnConst(queryable, elem);
- } else if (nodeName.equals("trim")) {
- return getStringColumnFromStringFunction(queryable, elem, new
TrimStringFunction());
- } else if (nodeName.equals("lowercase")) {
- return getStringColumnFromStringFunction(queryable, elem, new
LowerCaseStringFunction());
- } else if (nodeName.equals("uppercase")) {
- return getStringColumnFromStringFunction(queryable, elem, new
UpperCaseStringFunction());
- } else if (nodeName.equals("position")) {
- return getIntegerColumnFromIntegerFunction(queryable, elem, new
PositionFunction());
- } else if (nodeName.equals("addition")) {
- return getIntegerColumnFromIntegerFunction(queryable, elem, new
IntegerAdditionFunction());
- } else if (nodeName.equals("subtraction")) {
- return getIntegerColumnFromIntegerFunction(queryable, elem, new
IntegerSubtractionFunction());
- } else if (nodeName.equals("multiplication")) {
- return getIntegerColumnFromIntegerFunction(queryable, elem, new
IntegerMultiplicationFunction());
- } else if (nodeName.equals("division")) {
- return getIntegerColumnFromIntegerFunction(queryable, elem, new
IntegerDivisionFunction());
- } else {
- throw new ActionException("Unknown node type '"+nodeName+"'
under 'columns'");
- }
-
-
- }
-
- private Column getSelectColumnColumn(AbstractQueryable queryable,
Element elem) throws ActionException {
- String name = elem.getAttribute("name");
- return queryable.getColumn(name, true);
- }
-
- private Column getSelectColumnConcat(AbstractQueryable queryable,
Element concatElem) throws ActionException {
- String as = concatElem.getAttribute("as");
- // TODO as might be missing
- //return queryable.getColumn(name, true);
- if (concatElem.hasChildNodes()) {
- NodeList subConcatNodes = concatElem.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 {
- colVec.add(getSelectColumn(queryable,(Element) node));
- }
- }
- Column[] cols = new Column[colVec.size()];
- colVec.copyInto(cols);
- ConcatFunction cf = new ConcatFunction();
- cf.initialize(cols);
- return new DefaultContrivedStringFunctionColumn(as,cf);
- } else {
- throw new ActionException("concat must have child elements");
- }
- }
- private Column getSelectColumnConst(AbstractQueryable queryable, Element
elem) throws ActionException {
- String value = elem.getAttribute("value");
- // TODO more types
- try {
- return new
DefaultIntegerConstantColumn("TODO",Integer.parseInt(value));
- } catch (java.lang.NumberFormatException nfe) {
- return new DefaultStringConstantColumn("TODO",value);
- }
-
- }
-
- private Column getStringColumnFromStringFunction(AbstractQueryable
queryable, Element aElem, StringFunction function) throws ActionException {
- String as = aElem.getAttribute("as");
- // 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));
- }
- }
- if (colVec.size() > 1) {
- throw new ActionException("String function
"+aElem.getNodeName()+" can only have one child column");
- }
- function.initialize((Column) colVec.elementAt(0));
- return new DefaultContrivedStringFunctionColumn(as,function);
- } else {
- throw new ActionException("String function
"+aElem.getNodeName()+" must have child column");
- }
- }
-
- private Column getIntegerColumnFromIntegerFunction(AbstractQueryable
queryable, Element aElem, NumericFunction function) throws ActionException {
- String as = aElem.getAttribute("as");
- // 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));
- }
- }
- 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.13 +47 -11
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.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- BasicLXSQLUpdateRowsHandler.java 2001/12/06 00:54:45 1.12
+++ BasicLXSQLUpdateRowsHandler.java 2001/12/18 23:34:33 1.13
@@ -11,6 +11,7 @@
import org.apache.avalon.db.basic.parser.BasicLXSQLParserManager;
import org.apache.avalon.db.basic.actions.BasicUpdateRows;
import org.apache.avalon.db.basic.actions.BasicCriteria;
+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;
@@ -28,15 +29,17 @@
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
+import java.util.Vector;
+
/**
* Class BasicLXSQLUpdateRowsHandler
*
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
- * @version $Revision: 1.12 $
+ * @version $Revision: 1.13 $
*/
-public class BasicLXSQLUpdateRowsHandler extends BasicLXSQLHandler {
+public class BasicLXSQLUpdateRowsHandler extends BasicLXSQLSecondaryHandler {
/**
* Constructor BasicLXSQLUpdateRowsHandler
@@ -69,24 +72,33 @@
Element rootElement = doc.getDocumentElement();
String queryableStr = rootElement.getAttribute("from");
AbstractConstituentQueryable queryable =
(AbstractConstituentQueryable) mDatabasePersistor.getQueryable(queryableStr);
+
+ ContrivedColumnNameHolder colHldr = new ContrivedColumnNameHolder();
- String matchingInstructions = null;
+ StringBuffer instructionBuffer = new StringBuffer();
+ Vector temporaryColumns = new Vector();
NodeList subRootNodes = rootElement.getChildNodes();
for (int i=0; i < subRootNodes.getLength(); i++) {
if(subRootNodes.item(i).getNodeName().equals("updates")) {
- matchingInstructions = getMatchingInstructions((Element)
subRootNodes.item(i));
+ setMatchingInstructions(queryable, colHldr,
temporaryColumns, instructionBuffer, (Element) subRootNodes.item(i));
}
}
BasicLXSQLCriteriaHelper basicCriteriaHelper = new
BasicLXSQLCriteriaHelper(rootElement);
basicCriteriaHelper.enableLogging(super.getLogger());
+ Column[] cols = new Column[temporaryColumns.size()];
+ temporaryColumns.copyInto(cols);
+
+ System.out.println(">>> " + instructionBuffer.toString());
+
+
UpdateRows action = new BasicUpdateRows(
(AbstractConstituentQueryable) queryable,
new BasicCriteria(
basicCriteriaHelper.getCriteria(),
- matchingInstructions, "")
+ instructionBuffer.toString(),
"", cols)
);
mParser.initializeAction(action);
@@ -95,26 +107,50 @@
return new WriteReply(action.getRecordCount());
}
- private String getMatchingInstructions(Element updatesElement) throws
ActionException {
+ private void setMatchingInstructions(AbstractQueryable abstractQueryable,
+ ContrivedColumnNameHolder colHldr, Vector temporaryColumns,
+ StringBuffer instructionBuffer, Element updatesElement) throws
ActionException {
NodeList subUpdatesNodes = updatesElement.getChildNodes();
- StringBuffer instructionBuffer = new StringBuffer();
for (int i=0; i < subUpdatesNodes.getLength(); i++) {
String nodeName = subUpdatesNodes.item(i).getNodeName();
if (nodeName.equals("set")) {
- setSetInstruction((Element) subUpdatesNodes.item(i),
instructionBuffer);
+ setSetInstruction(abstractQueryable, colHldr, (Element)
subUpdatesNodes.item(i),
+ instructionBuffer, temporaryColumns);
} else if(nodeName.equals("#text")) {
// ignore
} else {
throw new ActionException("Element 'set' is the only element
allowed beneath 'updates'");
}
}
- return instructionBuffer.toString();
}
- private void setSetInstruction(Element setElement, StringBuffer
instructionBuffer) throws ActionException {
+ private void setSetInstruction(AbstractQueryable abstractQueryable,
ContrivedColumnNameHolder colHldr, Element setElement,
+ StringBuffer instructionBuffer,
+ Vector tempColumns) throws ActionException {
String name = setElement.getAttribute("name");
String value = setElement.getAttribute("value");
- instructionBuffer.append("row.setValue('"+name+"','" + value +
"');\n");
+ if (!value.equals("")) {
+ instructionBuffer.append("row.setValue('"+name+"','" + value +
"');\n");
+ } else {
+ NodeList subSetNodes = setElement.getChildNodes();
+ Column col = null;
+ int ct = 0;
+ for (int i=0; i < subSetNodes.getLength(); i++) {
+ String nodeName = subSetNodes.item(i).getNodeName();
+ if(nodeName.equals("#text")) {
+ // do nothing
+ } else {
+ ct++;
+ col = getSelectColumn(abstractQueryable,(Element)
subSetNodes.item(i),colHldr);
+ }
+ }
+ if (ct < 1 | ct > 1) {
+ throw new ActionException("For element 'set' either attribute
'value' must be specified or there must be columns as sub elements");
+ }
+ int ix = tempColumns.size(); // this will be the next index used
+ tempColumns.add(col);
+
instructionBuffer.append("row.setValue('"+name+"',tempColumns["+ix+"].getValue(row));\n");
+ }
}
}
1.1
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLSecondaryHandler.java
Index: BasicLXSQLSecondaryHandler.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 BasicLXSQLSecondaryHandler
*
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
* @version $Revision: 1.1 $
*/
public abstract class BasicLXSQLSecondaryHandler extends BasicLXSQLHandler {
/**
* Constructor BasicLXSQLSecondaryHandler
*
*
* @param parser
* @param databasePersistor
*
*/
public BasicLXSQLSecondaryHandler(BasicLXSQLParserManager parser,
DatabasePersistor databasePersistor) {
super(parser, databasePersistor);
}
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.8 +4 -1
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/functions/Function.java
Index: Function.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/functions/Function.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- Function.java 2001/12/18 14:24:53 1.7
+++ Function.java 2001/12/18 23:34:33 1.8
@@ -17,10 +17,13 @@
*
* @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.7 $
+ * @version * $Revision: 1.8 $
*/
public interface Function {
void initialize(Column columns);
void initialize(Column[] columns);
Object getValue(Row row);
+
+ int getMinCols();
+ int getMaxCols();
}
1.3 +1 -4
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/functions/NumericFunction.java
Index: NumericFunction.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/functions/NumericFunction.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- NumericFunction.java 2001/12/18 19:25:24 1.2
+++ NumericFunction.java 2001/12/18 23:34:33 1.3
@@ -15,14 +15,11 @@
* Interface NumericFunction
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
- * @version * $Revision: 1.2 $
+ * @version * $Revision: 1.3 $
*/
public interface NumericFunction extends Function {
int getIntValue(Row row);
long getLongValue(Row row);
float getFloatValue(Row row);
double getDoubleValue(Row row);
-
- int getMinCols();
- int getMaxCols();
}
1.5 +8 -1
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/functions/impl/ConcatFunction.java
Index: ConcatFunction.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/functions/impl/ConcatFunction.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ConcatFunction.java 2001/12/01 10:49:44 1.4
+++ ConcatFunction.java 2001/12/18 23:34:33 1.5
@@ -16,7 +16,7 @@
* Class ConcatFunction
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
- * @version $Revision: 1.4 $
+ * @version $Revision: 1.5 $
*/
public class ConcatFunction extends AbstractStringFunction {
@@ -35,6 +35,13 @@
maxLength+= sTyp.getMaxLength();
}
return maxLength;
+ }
+
+ public int getMinCols() {
+ return 2;
+ }
+ public int getMaxCols() {
+ return 99;
}
}
1.5 +9 -1
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/functions/impl/LowerCaseStringFunction.java
Index: LowerCaseStringFunction.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/functions/impl/LowerCaseStringFunction.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- LowerCaseStringFunction.java 2001/12/18 14:24:53 1.4
+++ LowerCaseStringFunction.java 2001/12/18 23:34:33 1.5
@@ -17,7 +17,7 @@
* Class LowerCaseStringFunction
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
- * @version $Revision: 1.4 $
+ * @version $Revision: 1.5 $
*/
public class LowerCaseStringFunction extends AbstractStringFunction {
@@ -39,4 +39,12 @@
StringColumn sTyp = (StringColumn) mColumns[0];
return sTyp.getMaxLength();
}
+
+ public int getMinCols() {
+ return 1;
+ }
+ public int getMaxCols() {
+ return 1;
+ }
+
}
1.4 +8 -1
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/functions/impl/SubStringFunction.java
Index: SubStringFunction.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/functions/impl/SubStringFunction.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- SubStringFunction.java 2001/12/01 10:49:44 1.3
+++ SubStringFunction.java 2001/12/18 23:34:33 1.4
@@ -15,7 +15,7 @@
* Class SubStringFunction
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
- * @version $Revision: 1.3 $
+ * @version $Revision: 1.4 $
*/
public class SubStringFunction extends AbstractStringFunction {
@@ -40,6 +40,13 @@
public int getMaxLength() {
return mLen;
+ }
+
+ public int getMinCols() {
+ return 1;
+ }
+ public int getMaxCols() {
+ return 1;
}
}
1.4 +8 -1
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/functions/impl/TrimStringFunction.java
Index: TrimStringFunction.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/functions/impl/TrimStringFunction.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- TrimStringFunction.java 2001/12/01 10:49:44 1.3
+++ TrimStringFunction.java 2001/12/18 23:34:33 1.4
@@ -17,7 +17,7 @@
* Class TrimStringFunction
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
- * @version $Revision: 1.3 $
+ * @version $Revision: 1.4 $
*/
public class TrimStringFunction extends AbstractStringFunction {
@@ -28,6 +28,13 @@
public int getMaxLength() {
StringColumn sTyp = (StringColumn) mColumns[0];
return sTyp.getMaxLength();
+ }
+
+ public int getMinCols() {
+ return 1;
+ }
+ public int getMaxCols() {
+ return 1;
}
}
1.5 +8 -1
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/functions/impl/UpperCaseStringFunction.java
Index: UpperCaseStringFunction.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/functions/impl/UpperCaseStringFunction.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- UpperCaseStringFunction.java 2001/12/18 14:24:53 1.4
+++ UpperCaseStringFunction.java 2001/12/18 23:34:33 1.5
@@ -17,7 +17,7 @@
* Class UpperCaseStringFunction
*
* @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
- * @version $Revision: 1.4 $
+ * @version $Revision: 1.5 $
*/
public class UpperCaseStringFunction extends AbstractStringFunction {
@@ -38,6 +38,13 @@
public int getMaxLength() {
StringColumn sTyp = (StringColumn) mColumns[0];
return sTyp.getMaxLength();
+ }
+
+ public int getMinCols() {
+ return 1;
+ }
+ public int getMaxCols() {
+ return 1;
}
}
1.5 +29 -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.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- Test2.script 2001/12/18 20:21:26 1.4
+++ Test2.script 2001/12/18 23:34:33 1.5
@@ -79,5 +79,34 @@
</from>
</simple-select>
+### UPDATE 1 ( funky update ) ##!
+
+<update-rows from="Flintstones">
+ <updates>
+ <set name="surname">
+ <concat>
+ <const value="O`"/>
+ <column name="surname"/>
+ </concat>
+ </set>
+ </updates>
+ <where>
+ <condition expr="age>60"/>
+ </where>
+</update-rows>
+
+### SELECT 4 (all rows) ##!
+
+<simple-select>
+ <columns>
+ <column name="forename"/>
+ <column name="surname"/>
+ <column name="age"/>
+ </columns>
+ <from>
+ <table name="Flintstones"/>
+ </from>
+</simple-select>
+
###
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>