froehlich    01/11/14 11:04:51

  Modified:    apps/db/src/java/org/apache/avalon/db/basic/actions
                        BasicSelect.java
  Log:
  equal is working now
  
  Revision  Changes    Path
  1.24      +70 -38    
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.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- BasicSelect.java  2001/11/14 17:05:32     1.23
  +++ BasicSelect.java  2001/11/14 19:04:51     1.24
  @@ -28,11 +28,8 @@
   import org.w3c.dom.Element;
   import org.w3c.dom.NodeList;
   
  -import java.util.Vector;
  -import java.util.Iterator;
  -import java.util.StringTokenizer;
  +import java.util.*;
   
  -
   /**
    * This class represents a the BasicSelect action impl.
    * @author Gerhard Froehlich <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
  @@ -41,6 +38,7 @@
    */
   public class BasicSelect extends AbstractAction implements 
Select,ParameterAdaptable,LogEnabled {
   
  +    private static Hashtable mOperators;
       private RowSet mRowSet;
       private Columns mColumns;
       private Element mRootElement;
  @@ -51,11 +49,16 @@
       private BasicTable mTable = null;
       private Column[] mCols;
       private String[] mTablenames;
  -
  -    final static String OPERATORS[][] = {
  -                                            {"=","<",">","<>","like"},
  -                                            
{"mequals","smaller","greater","unequal","like"}
  -                                         };
  +    static {
  +        mOperators = new Hashtable();
  +        addOperator("=","mequal");
  +        addOperator(">","greater");
  +        addOperator("<","smaller");
  +        addOperator("<>","unequal");
  +    }
  +    private static void addOperator(String operator, String method) {
  +        mOperators.put(operator,method);
  +    }
   
   
       /**
  @@ -98,7 +101,7 @@
                       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 );
  +                        getLogger().debug("row.getValue(mCols[" + j + "]=" + 
o);
                           selectedRow[j] = o;
                       }
                       selectedRows.add(selectedRow);
  @@ -276,7 +279,6 @@
           sb.append(getIndent(indent) + ")\n");
       }
   
  -
       private void parseWhereConditionTerm(Element element, StringBuffer sb, 
int indent) {
           try {
               getLogger().debug("parseWhereConditionTerm(): found condition");
  @@ -300,30 +302,77 @@
           String[] strarr = null;
           String[] result = null;
           String method = null;
  -
  -        for (int i=0; i<OPERATORS.length; i++) {
  -            strarr = StringUtils.split(expr,OPERATORS[0][i]);
  -            if(strarr.length > 1) {
  -                method = OPERATORS[i+1][0];
  -                result = strarr;
  +        String operator = null;
  +        getLogger().debug("expr=" + expr);
  +        try {
  +            Enumeration enum = mOperators.keys();
  +            while(enum.hasMoreElements()) {
  +                operator = (String)enum.nextElement();
  +                getLogger().debug("matching operator = " + operator);
  +                getLogger().debug("matching function = " + 
mOperators.get(operator));
  +                StringTokenizer strtok = new StringTokenizer(expr,operator);
  +                strarr = new String[strtok.countTokens()];
  +                int cnt = 0;
  +                while(strtok.hasMoreElements()) {
  +                    String s = (String)strtok.nextElement();
  +                    getLogger().debug("s=" + s);
  +                    strarr[cnt] = s;
  +                    cnt++;
  +                }
  +                if(strarr.length > 1) {
  +                    method = (String)mOperators.get(operator);
  +                    getLogger().debug("matched function = " + method);
  +                    result = strarr;
  +                }
               }
  +            method = "my." + method + "(row.getValue(\"" + result[0] + 
"\"),\"" + result[1] + "\")";
  +            getLogger().debug("method=" + method);
  +        } catch (Exception e) {
  +            getLogger().error("composeExpr(): Exception",e);
           }
  -        method = "my." + method + "(row.getValue(\"" + result[0] + "\"),\"" 
+ result[1] + "\")";
  -        getLogger().debug("method=" + method);
           return method;
       }
   
  -
       private NodeList getSubRootNodes(Element rootElement) {
           return rootElement.getChildNodes();
       }
   
  -    public boolean mequals(String leftexpr,String rightexpr) {
  +    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;
  +    }
  +
  +    public boolean mequal(String leftexpr,String rightexpr) throws 
ActionException {
           getLogger().debug("leftexpr=" + leftexpr);
           getLogger().debug("rightexpr=" + rightexpr);
           return leftexpr.equals(rightexpr);
       }
   
  +    public boolean smaller(String leftexpr,String rightexpr) throws 
ActionException {
  +       throw new ActionException("operation not supported ");
  +    }
  +
  +    public boolean greater(String leftexpr,String rightexpr) throws 
ActionException {
  +        throw new ActionException("operation not supported ");
  +    }
  +
  +    public boolean unequal(String leftexpr,String rightexpr) throws 
ActionException {
  +        return !leftexpr.equals(rightexpr);
  +    }
  +
  +    public boolean like(String leftexpr,String rightexpr) throws 
ActionException {
  +        throw new ActionException("operation not supported ");
  +    }
  +
       public void execute(Object[] params) throws ActionException {
           getLogger().debug("select execute prepared");
       }
  @@ -355,21 +404,4 @@
       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;
  -    }
  -
   }
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to