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/14 18:05:33 UTC
cvs commit: jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl AbstractColumn.java
hammant 01/11/14 09:05:33
Modified: apps/db/src/java/org/apache/avalon/db/basic/actions
BasicCreateQueryable.java BasicSelect.java
apps/db/src/java/org/apache/avalon/db/basic/data
BasicTable.java
apps/db/src/java/org/apache/avalon/db/data Column.java
apps/db/src/java/org/apache/avalon/db/data/impl
AbstractColumn.java
Log:
Columns are producers of data
Revision Changes Path
1.7 +4 -3 jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/actions/BasicCreateQueryable.java
Index: BasicCreateQueryable.java
===================================================================
RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/actions/BasicCreateQueryable.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- BasicCreateQueryable.java 2001/11/14 02:47:22 1.6
+++ BasicCreateQueryable.java 2001/11/14 17:05:32 1.7
@@ -37,7 +37,7 @@
*
*
* @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
- * @version $Revision: 1.6 $
+ * @version $Revision: 1.7 $
*/
public abstract class BasicCreateQueryable extends AbstractAction implements CreateTable {
@@ -58,7 +58,7 @@
NodeList subColumnsNodes = subRootNodes.item(f).getChildNodes();
for (int x = 0 ; x < subColumnsNodes.getLength(); x++) {
if (subColumnsNodes.item(x).getNodeName().equals("column")) {
- columns.add(createColumn(subColumnsNodes.item(x)));
+ columns.add(createColumn(subColumnsNodes.item(x), x));
} else {
throw new ActionException("Only 'column' allowed as a node under 'columns' node");
}
@@ -75,7 +75,7 @@
}
- protected Column createColumn(Node columnNode) throws ActionException {
+ protected Column createColumn(Node columnNode, int ix) throws ActionException {
String sqlFieldType = columnNode.getAttributes().getNamedItem("type").getNodeValue();
String fieldName = columnNode.getAttributes().getNamedItem("name").getNodeValue();
Column column = null;
@@ -101,6 +101,7 @@
} else {
throw new ActionException("Column type " + sqlFieldType + " not recognised");
}
+ column.setIndex(ix);
return column;
}
}
1.23 +28 -16 jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/actions/BasicSelect.java
Index: BasicSelect.java
===================================================================
RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/actions/BasicSelect.java,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -r1.22 -r1.23
--- BasicSelect.java 2001/11/14 15:57:07 1.22
+++ BasicSelect.java 2001/11/14 17:05:32 1.23
@@ -20,6 +20,8 @@
import org.apache.avalon.db.utils.RhinoHelper;
import org.apache.avalon.db.utils.StringUtils;
import org.apache.avalon.db.data.ValidationException;
+import org.apache.avalon.db.data.Table;
+import org.apache.avalon.db.data.Column;
import org.apache.avalon.framework.logger.LogEnabled;
@@ -47,7 +49,7 @@
private int mParamCount;
private StringBuffer mWhereBuffer = new StringBuffer();
private BasicTable mTable = null;
- private String[] mCols;
+ private Column[] mCols;
private String[] mTablenames;
final static String OPERATORS[][] = {
@@ -67,8 +69,8 @@
public void initialize() throws ActionException {
getLogger().debug("BasicSelect.initialize()");
- mCols = parseSelect(mRootElement);
mTablenames = parseFrom(mRootElement);
+ mCols = convertColumns(parseSelect(mRootElement));
parseLXSQL(mRootElement);
getLogger().debug("cols.length=" + mCols.length);
getLogger().debug("tablenames.length=" + mTablenames.length);
@@ -91,20 +93,13 @@
/** iterate rows and select only the needed cols */
BasicRow row = (BasicRow)it.next();
if (testRow(row)) {
- if(((String)mCols[0]).equals("*")) {
- getLogger().debug("wildcard select");
- selectedRow = new Object[row.getColumsLength()];
- for (int j=0; j < row.getColumsLength(); j++) {
- selectedRow[j] = row.getValue(j);
- }
- } else {
- getLogger().debug("specific select=" + mCols);
- selectedRow = new Object[mCols.length];
- for (int j=0; j < mCols.length; j++) {
- getLogger().debug("mCols[" + j + "]=" + mCols[j]);
- getLogger().debug("row.getValue(mCols[" + j + "]=" + row.getValue(mCols[j]));
- selectedRow[j] = row.getValue(mCols[j]);
- }
+ getLogger().debug("specific select=" + mCols);
+ selectedRow = new Object[mCols.length];
+ for (int j=0; j < mCols.length; j++) {
+ getLogger().debug("mCols[" + j + "]=" + mCols[j]);
+ Object o = mCols[j].getValue(row);
+ getLogger().debug("mCols[j].getValue(row) j=" + j + ", " + o );
+ selectedRow[j] = o;
}
selectedRows.add(selectedRow);
}
@@ -360,4 +355,21 @@
public void setParamCount(int i) {
this.mParamCount = i;
}
+
+ protected Column[] convertColumns(String[] columnNames) {
+
+ BasicTable table = (BasicTable)mDatabasePersistor.getQueryable(mTablenames[0]);
+
+ //TODO * could be with other contrived columns
+ if (columnNames[0].equals("*")) {
+ return table.getColumns();
+ }
+
+ Column[] columns = new Column[columnNames.length];
+ for ( int i = 0; i < columnNames.length; i++ ) {
+ columns[i] = table.getColumn(columnNames[i], false);
+ }
+ return columns;
+ }
+
}
1.8 +9 -1 jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/data/BasicTable.java
Index: BasicTable.java
===================================================================
RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/data/BasicTable.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- BasicTable.java 2001/11/13 17:58:00 1.7
+++ BasicTable.java 2001/11/14 17:05:32 1.8
@@ -26,7 +26,11 @@
throw new RuntimeException("Column " + columnName + " not found");
}
+
public Column getColumn(String columnName) {
+ return this.getColumn(columnName, true);
+ }
+ public Column getColumn(String columnName, boolean throwExcpt) {
Column col = null;
for (int x = 0; x < mColumns.length; x++) {
@@ -37,7 +41,11 @@
if(col != null) {
return col;
} else {
- throw new RuntimeException("Column " + columnName + " not found");
+ if (throwExcpt) {
+ throw new RuntimeException("Column " + columnName + " not found");
+ } else {
+ return null;
+ }
}
}
}
1.8 +3 -1 jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/Column.java
Index: Column.java
===================================================================
RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/Column.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- Column.java 2001/11/13 09:25:42 1.7
+++ Column.java 2001/11/14 17:05:33 1.8
@@ -14,12 +14,14 @@
*
* @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
* @author Gerhard Froehlich <a href="mailto:g-froehlich@gmx.de">g-froehlich@gmx.de</a>
- * @version * $Revision: 1.7 $
+ * @version * $Revision: 1.8 $
*/
public interface Column extends Nameable {
void test(Object obj) throws ValidationException;
Object convertFromString(String str) throws ValidationException;
+ Object getValue(Row row);
+ void setIndex(int ix);
String getSQLType();
String getJavaType();
1.2 +12 -1 jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/AbstractColumn.java
Index: AbstractColumn.java
===================================================================
RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/AbstractColumn.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- AbstractColumn.java 2001/11/12 23:09:56 1.1
+++ AbstractColumn.java 2001/11/14 17:05:33 1.2
@@ -13,6 +13,7 @@
import org.apache.avalon.db.data.Table;
import org.apache.avalon.db.data.Queryable;
import org.apache.avalon.db.data.Column;
+import org.apache.avalon.db.data.Row;
/**
@@ -21,13 +22,14 @@
*
* @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
* @author Gerhard Froehlich <a href="mailto:g-froehlich@gmx.de">g-froehlich@gmx.de</a>*
- * @version $Revision: 1.1 $
+ * @version $Revision: 1.2 $
*/
public abstract class AbstractColumn implements Column {
protected String mName;
protected String mSqlType;
protected String mJavaType;
+ protected int mIndex = -1;
/**
* Constructor AbstractColumn
@@ -43,6 +45,15 @@
mName = name;
mSqlType = sqlType;
mJavaType = javaType;
+ }
+
+ // TODO can be overriden, or should be overridden
+ public Object getValue(Row row) {
+ return row.getValue(mIndex);
+ }
+
+ public void setIndex(int ix) {
+ mIndex = ix;
}
/**
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>