Author: fancy
Date: Wed May 28 15:19:31 2008
New Revision: 661124

URL: http://svn.apache.org/viewvc?rev=661124&view=rev
Log:
OPENJPA-612 Add support for calculating update value in QueryImpl.updateInMemory
Help comitting patch provided by Fay Wang
Add support for in-memory string function evulation

Modified:
    
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreQuery.java
    
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/AbstractVal.java
    
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Args.java
    
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Concat.java
    
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/IndexOf.java
    
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/StringLength.java
    
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Substring.java
    
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/ToLowerCase.java
    
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/ToUpperCase.java
    
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Trim.java
    
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Val.java

Modified: 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreQuery.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreQuery.java?rev=661124&r1=661123&r2=661124&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreQuery.java
 (original)
+++ 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreQuery.java
 Wed May 28 15:19:31 2008
@@ -680,104 +680,238 @@
         return sql.prepareStatement(conn);
     }    
 
-    public Object evaluate(Object value, Object ob, Object[] params,
+    public Object evaluate(Object value, Object ob, Object[] params, 
         OpenJPAStateManager sm) {
-        if (value instanceof org.apache.openjpa.jdbc.kernel.exps.Math) {
-            org.apache.openjpa.jdbc.kernel.exps.Math mathVal =
-                (org.apache.openjpa.jdbc.kernel.exps.Math) value;
-
-            Val value1 = mathVal.getVal1();
-            Object val1 = getValue(value1, ob, params, sm);
-            Class c1 = value1.getType();
-
-            Val value2 = mathVal.getVal2();
-            Object val2 = getValue(value2, ob, params, sm);
-            Class c2 = value2.getType();
-
-            String op = mathVal.getOperation();
-
-            if (op.equals(org.apache.openjpa.jdbc.kernel.exps.Math.ADD))
-                return Filters.add(val1, c1, val2, c2);
-            else if (op.equals(
-                    org.apache.openjpa.jdbc.kernel.exps.Math.SUBTRACT))
-                return Filters.subtract(val1, c1, val2, c2);
-            else if (op.equals(
-                    org.apache.openjpa.jdbc.kernel.exps.Math.MULTIPLY))
-                return Filters.multiply(val1, c1, val2, c2);
-            else if (op.equals(
-                    org.apache.openjpa.jdbc.kernel.exps.Math.DIVIDE))
-                return Filters.divide(val1, c1, val2, c2);
-            else if (op.equals(org.apache.openjpa.jdbc.kernel.exps.Math.MOD))
-                return Filters.mod(val1, c1, val2, c2);
+        int id = 0;
+        if (value instanceof org.apache.openjpa.jdbc.kernel.exps.Val)
+            id = ((org.apache.openjpa.jdbc.kernel.exps.Val)value).getId();
+        else
+            throw new UnsupportedException(); 
+
+        switch(id) {
+        case Val.MATH_VAL:
+            return handleMathVal(value, ob, params, sm);
+        case Val.CONCAT_VAL:
+            return handleConcatVal(value, ob, params, sm);
+        case Val.SUBSTRING_VAL:
+            return handleSubstringVal(value, ob, params, sm);
+        case Val.ARGS_VAL:
+            return handleArgsVal(value, ob, params, sm);
+        case Val.LOWER_VAL:
+            return handleLowerVal(value, ob, params, sm);
+        case Val.UPPER_VAL:
+            return handleUpperVal(value, ob, params, sm);
+        case Val.LENGTH_VAL:
+            return handleLengthVal(value, ob, params, sm);
+        case Val.TRIM_VAL:
+            return handleTrimVal(value, ob, params, sm);
+        case Val.INDEXOF_VAL:
+            return handleIndexOfVal(value, ob, params, sm);
+        default:    
             throw new UnsupportedException();
         }
+    }
+
+    private Object handleMathVal(Object value, Object ob, Object[] params, 
+        OpenJPAStateManager sm) {
+        org.apache.openjpa.jdbc.kernel.exps.Math mathVal =
+            (org.apache.openjpa.jdbc.kernel.exps.Math) value;
+        Val value1 = mathVal.getVal1();
+        Object val1 = getValue(value1, ob, params, sm);
+        Class c1 = value1.getType();
+
+        Val value2 = mathVal.getVal2();
+        Object val2 = getValue(value2, ob, params, sm);
+        Class c2 = value2.getType();
+
+        String op = mathVal.getOperation();
+        if (op.equals(org.apache.openjpa.jdbc.kernel.exps.Math.ADD)) 
+            return Filters.add(val1, c1, val2, c2);
+        else if (op.equals(
+                org.apache.openjpa.jdbc.kernel.exps.Math.SUBTRACT))
+            return Filters.subtract(val1, c1, val2, c2);
+        else if (op.equals(
+                org.apache.openjpa.jdbc.kernel.exps.Math.MULTIPLY)) 
+            return Filters.multiply(val1, c1, val2, c2);
+        else if (op.equals(
+                org.apache.openjpa.jdbc.kernel.exps.Math.DIVIDE)) 
+            return Filters.divide(val1, c1, val2, c2);
+        else if (op.equals(org.apache.openjpa.jdbc.kernel.exps.Math.MOD)) 
+            return Filters.mod(val1, c1, val2, c2);
         throw new UnsupportedException();
     }
 
-    private Object getValue(Object ob, FieldMapping fmd,
+    private Object handleConcatVal(Object value, Object ob, Object[] params,
         OpenJPAStateManager sm) {
-        int i = fmd.getIndex();
-        switch (fmd.getDeclaredTypeCode()) {
-            case JavaTypes.BOOLEAN:
-                return sm.fetchBooleanField(i);
-            case JavaTypes.BYTE:
-                return sm.fetchByteField(i);
-            case JavaTypes.CHAR:
-                return sm.fetchCharField(i);
-            case JavaTypes.DOUBLE:
-                return sm.fetchDoubleField(i);
-            case JavaTypes.FLOAT:
-                return sm.fetchFloatField(i);
-            case JavaTypes.INT:
-                return sm.fetchIntField(i);
-            case JavaTypes.LONG:
-                return sm.fetchLongField(i);
-            case JavaTypes.SHORT:
-                return sm.fetchShortField(i);
-            case JavaTypes.STRING:
-                return sm.fetchStringField(i);
-            case JavaTypes.DATE:
-            case JavaTypes.NUMBER:
-            case JavaTypes.BOOLEAN_OBJ:
-            case JavaTypes.BYTE_OBJ:
-            case JavaTypes.CHAR_OBJ:
-            case JavaTypes.DOUBLE_OBJ:
-            case JavaTypes.FLOAT_OBJ:
-            case JavaTypes.INT_OBJ:
-            case JavaTypes.LONG_OBJ:
-            case JavaTypes.SHORT_OBJ:
-            case JavaTypes.BIGDECIMAL:
-            case JavaTypes.BIGINTEGER:
-            case JavaTypes.LOCALE:
-            case JavaTypes.OBJECT:
-            case JavaTypes.OID:
-                return sm.fetchObjectField(i);
-            default:
-                throw new UnsupportedException();
+        org.apache.openjpa.jdbc.kernel.exps.Concat concatVal =
+            (org.apache.openjpa.jdbc.kernel.exps.Concat)value;
+        Val value1 = concatVal.getVal1();
+        Object val1 = getValue(value1, ob, params, sm);
+
+        Val value2 = concatVal.getVal2();
+        Object val2 = getValue(value2, ob, params, sm);
+        return new StringBuffer(100).append(val1).append(val2).toString();
+    }
+
+    private Object handleSubstringVal(Object value, Object ob, Object[] params,
+        OpenJPAStateManager sm) {
+        org.apache.openjpa.jdbc.kernel.exps.Substring substrVal =
+            (org.apache.openjpa.jdbc.kernel.exps.Substring) value;
+        Val value1 = substrVal.getVal1();
+        String val1 = (String) getValue(value1, ob, params, sm);
+
+        Val value2 = substrVal.getVal2();
+        Object val2 = getValue(value2, ob, params, sm);
+
+        org.apache.openjpa.kernel.exps.Value[] valAry2 = 
+            (org.apache.openjpa.kernel.exps.Value[]) val2;
+        Object arg1 = getValue(valAry2[0], ob, params, sm); //starting pos
+        Object arg2 = getValue(valAry2[1], ob, params, sm); // length
+        int startIdx = ((Long) arg1).intValue();
+        int length = ((Long) arg2).intValue();
+        int endIdx = startIdx + length;
+        return val1.substring(startIdx, endIdx);
+    }
+
+    private Object handleArgsVal(Object value, Object ob, Object[] params, 
+        OpenJPAStateManager sm) {
+        org.apache.openjpa.jdbc.kernel.exps.Args argsVal = 
+            (org.apache.openjpa.jdbc.kernel.exps.Args) value;
+        return argsVal.getValues();
+    }
+
+    private Object handleLowerVal(Object value, Object ob, Object[] params, 
+        OpenJPAStateManager sm) {
+        org.apache.openjpa.jdbc.kernel.exps.ToLowerCase lowerVal = 
+            (org.apache.openjpa.jdbc.kernel.exps.ToLowerCase) value;
+        Val val = lowerVal.getValue();
+        return ((String) getValue(val, ob, params, sm)).toLowerCase();
+    }
+
+    private Object handleUpperVal(Object value, Object ob, Object[] params, 
+        OpenJPAStateManager sm){
+        org.apache.openjpa.jdbc.kernel.exps.ToUpperCase upperVal = 
+            (org.apache.openjpa.jdbc.kernel.exps.ToUpperCase) value;
+        Val val = upperVal.getValue();
+        return ((String) getValue(val, ob, params, sm)).toUpperCase();
+    }
+
+    private Object handleLengthVal(Object value, Object ob, Object[] params, 
+        OpenJPAStateManager sm){
+        org.apache.openjpa.jdbc.kernel.exps.StringLength strLenVal = 
+            (org.apache.openjpa.jdbc.kernel.exps.StringLength) value;
+        Val val = strLenVal.getValue();
+        return ((String) getValue(val, ob, params, sm)).length();
+    }
+
+    private Object handleTrimVal(Object value, Object ob, Object[] params, 
+        OpenJPAStateManager sm) {
+        org.apache.openjpa.jdbc.kernel.exps.Trim trimVal = 
+            (org.apache.openjpa.jdbc.kernel.exps.Trim) value;
+        Val val = trimVal.getVal();
+        String valStr = (String) getValue(val, ob, params, sm);
+        Val trimChar = trimVal.getTrimChar();
+        char trimCharObj = ((String) getValue(trimChar, ob, params, sm)).
+            charAt(0);
+        Boolean where = trimVal.getWhere();
+        if (where == null) { //trim both
+            return trimLeading(trimTrailing(valStr, trimCharObj), trimCharObj);
+        } else if (where.booleanValue()) { // trim leading
+            return trimLeading(valStr, trimCharObj);
+        } else { // trim trailing
+            return trimTrailing(valStr, trimCharObj);
         }
     }
 
-    private Object eval(Object ob, Object value, Object[] params,
-        OpenJPAStateManager sm) {
-        Object val = null;
-        if (value instanceof Literal)
-            val = ((Literal) value).getValue();
-        else if (value instanceof Constant)
-            val = ((Constant) value).getValue(params);
-        else
-            val = evaluate(value, ob, params, sm);
+    private String trimLeading(String value, char trimChar) {
+        int startIdx = 0;
+        int len = value.length();
+        for (int i = 0; i < len; i++) {
+            if (value.charAt(i) != trimChar) {
+                startIdx = i;
+                break;
+            }
+        }
+        return value.substring(startIdx);
+    }
 
-        return val;
+    private String trimTrailing(String value, char trimChar) {
+        int endIdx = 0;
+        int len = value.length();
+        for (int i = len-1; i >= 0; i--) {
+            if (value.charAt(i) != trimChar) {
+                endIdx = i;
+                break;
+            }
+        }
+        return value.substring(0, endIdx+1);
+    }
+
+    private Object handleIndexOfVal(Object value, Object ob, Object[] params,
+        OpenJPAStateManager sm) {
+        org.apache.openjpa.jdbc.kernel.exps.IndexOf locateVal = 
+            (org.apache.openjpa.jdbc.kernel.exps.IndexOf) value;
+        String val1 = (String) getValue(locateVal.getVal1(), ob, params, sm);
+        Val[] val2 = (Val[]) getValue(locateVal.getVal2(), ob, params, sm);
+        String strVal = (String)getValue(val2[0], ob, params, sm);
+        int idx = ((Long) getValue(val2[1], ob, params, sm)).intValue();
+        return strVal.indexOf(val1, idx);
     }
 
     private Object getValue(Object value, Object ob, Object[] params,
         OpenJPAStateManager sm) {
-        if (value instanceof org.apache.openjpa.jdbc.kernel.exps.Math)
-            return evaluate(value, ob, params, sm);
-        else if (value instanceof PCPath) {
-            FieldMapping fm = (FieldMapping)((PCPath)value).last();
+        if (value instanceof PCPath) {
+            FieldMapping fm = (FieldMapping)((PCPath) value).last();
             return getValue(ob, fm, sm);
-        } else
-            return eval(ob, value, params, sm);
+        } else if (value instanceof Literal) {
+            return ((Literal) value).getValue();
+        } else if (value instanceof Constant) {
+            return ((Constant) value).getValue(params);
+        } else {
+            return evaluate(value, ob, params, sm);
+        }
+    }
+
+    private Object getValue(Object ob, FieldMapping fmd,
+        OpenJPAStateManager sm) {
+        int i = fmd.getIndex();
+        switch (fmd.getDeclaredTypeCode()) {
+        case JavaTypes.BOOLEAN:
+            return sm.fetchBooleanField(i);
+        case JavaTypes.BYTE:
+            return sm.fetchByteField(i);
+        case JavaTypes.CHAR:
+            return sm.fetchCharField(i);
+        case JavaTypes.DOUBLE:
+            return sm.fetchDoubleField(i);
+        case JavaTypes.FLOAT:
+            return sm.fetchFloatField(i);
+        case JavaTypes.INT:
+            return sm.fetchIntField(i);
+        case JavaTypes.LONG:
+            return sm.fetchLongField(i);
+        case JavaTypes.SHORT:
+            return sm.fetchShortField(i);
+        case JavaTypes.STRING:
+            return sm.fetchStringField(i);
+        case JavaTypes.DATE:
+        case JavaTypes.NUMBER:
+        case JavaTypes.BOOLEAN_OBJ:
+        case JavaTypes.BYTE_OBJ:
+        case JavaTypes.CHAR_OBJ:
+        case JavaTypes.DOUBLE_OBJ:
+        case JavaTypes.FLOAT_OBJ:
+        case JavaTypes.INT_OBJ:
+        case JavaTypes.LONG_OBJ:
+        case JavaTypes.SHORT_OBJ:
+        case JavaTypes.BIGDECIMAL:
+        case JavaTypes.BIGINTEGER:
+        case JavaTypes.LOCALE:
+        case JavaTypes.OBJECT:
+        case JavaTypes.OID:
+            return sm.fetchObjectField(i);
+        default:
+            throw new UnsupportedException();
+        }
     }
 }

Modified: 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/AbstractVal.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/AbstractVal.java?rev=661124&r1=661123&r2=661124&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/AbstractVal.java
 (original)
+++ 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/AbstractVal.java
 Wed May 28 15:19:31 2008
@@ -81,5 +81,9 @@
         visitor.enter(this);
         visitor.exit(this);
     }
+
+    public int getId() {
+        return Val.VAL;
+    }
 }
 

Modified: 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Args.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Args.java?rev=661124&r1=661123&r2=661124&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Args.java
 (original)
+++ 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Args.java
 Wed May 28 15:19:31 2008
@@ -194,4 +194,8 @@
             _args[i].acceptVisit(visitor);
         visitor.exit(this);
     }
+
+    public int getId() {
+        return Val.ARGS_VAL;
+    }
 }

Modified: 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Concat.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Concat.java?rev=661124&r1=661123&r2=661124&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Concat.java
 (original)
+++ 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Concat.java
 Wed May 28 15:19:31 2008
@@ -35,7 +35,7 @@
  *
  * @author Marc Prud'hommeaux
  */
-class Concat
+public class Concat
     extends AbstractVal {
 
     private final Val _val1;
@@ -50,6 +50,14 @@
         _val2 = val2;
     }
 
+    public Val getVal1() {
+        return _val1;
+    }
+
+    public Val getVal2() {
+        return _val2;
+    }
+
     public ClassMetaData getMetaData() {
         return _meta;
     }
@@ -145,5 +153,9 @@
         _val2.acceptVisit(visitor);
         visitor.exit(this);
     }
+
+    public int getId() {
+        return Val.CONCAT_VAL;
+    }
 }
 

Modified: 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/IndexOf.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/IndexOf.java?rev=661124&r1=661123&r2=661124&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/IndexOf.java
 (original)
+++ 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/IndexOf.java
 Wed May 28 15:19:31 2008
@@ -33,7 +33,7 @@
  *
  * @author Abe White
  */
-class IndexOf
+public class IndexOf
     extends AbstractVal {
 
     private final Val _val1;
@@ -49,6 +49,13 @@
         _val2 = val2;
     }
 
+    public Val getVal1() {
+        return _val1;
+    }
+
+    public Val getVal2() {
+        return _val2;
+    }
     public ClassMetaData getMetaData() {
         return _meta;
     }
@@ -141,5 +148,9 @@
         _val2.acceptVisit(visitor);
         visitor.exit(this);
     }
+
+    public int getId() {
+        return Val.INDEXOF_VAL;
+    }
 }
 

Modified: 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/StringLength.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/StringLength.java?rev=661124&r1=661123&r2=661124&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/StringLength.java
 (original)
+++ 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/StringLength.java
 Wed May 28 15:19:31 2008
@@ -27,7 +27,7 @@
  *
  * @author Marc Prud'hommeaux
  */
-class StringLength
+public class StringLength
     extends StringFunction {
 
     private Class _cast = null;
@@ -61,5 +61,9 @@
         getValue().appendTo(sel, ctx, state, buf, index);
         buf.append(func.substring(idx + 3));
     }
+
+    public int getId() {
+        return Val.LENGTH_VAL;
+    }
 }
 

Modified: 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Substring.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Substring.java?rev=661124&r1=661123&r2=661124&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Substring.java
 (original)
+++ 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Substring.java
 Wed May 28 15:19:31 2008
@@ -33,7 +33,7 @@
  *
  * @author Abe White
  */
-class Substring
+public class Substring
     extends AbstractVal {
 
     private final Val _val1;
@@ -48,6 +48,14 @@
         _val2 = val2;
     }
 
+    public Val getVal1() {
+        return _val1;
+    }
+
+    public Val getVal2() {
+        return _val2;
+    }
+
     public ClassMetaData getMetaData() {
         return _meta;
     }
@@ -137,5 +145,9 @@
         _val2.acceptVisit(visitor);
         visitor.exit(this);
     }
+
+    public int getId() {
+        return Val.SUBSTRING_VAL;
+    }
 }
 

Modified: 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/ToLowerCase.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/ToLowerCase.java?rev=661124&r1=661123&r2=661124&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/ToLowerCase.java
 (original)
+++ 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/ToLowerCase.java
 Wed May 28 15:19:31 2008
@@ -27,7 +27,7 @@
  *
  * @author Abe White
  */
-class ToLowerCase
+public class ToLowerCase
     extends StringFunction {
 
     /**
@@ -50,4 +50,8 @@
         getValue().appendTo(sel, ctx, state, buf, index);
         buf.append(func.substring(idx + 3));
     }
+
+    public int getId() {
+        return Val.LOWER_VAL;
+    }
 }

Modified: 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/ToUpperCase.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/ToUpperCase.java?rev=661124&r1=661123&r2=661124&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/ToUpperCase.java
 (original)
+++ 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/ToUpperCase.java
 Wed May 28 15:19:31 2008
@@ -27,7 +27,7 @@
  *
  * @author Abe White
  */
-class ToUpperCase
+public class ToUpperCase
     extends StringFunction {
 
     /**
@@ -50,5 +50,9 @@
         getValue().appendTo(sel, ctx, state, buf, index);
         buf.append(func.substring(idx + 3));
     }
+
+    public int getId() {
+        return Val.UPPER_VAL;
+    }
 }
 

Modified: 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Trim.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Trim.java?rev=661124&r1=661123&r2=661124&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Trim.java
 (original)
+++ 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Trim.java
 Wed May 28 15:19:31 2008
@@ -36,7 +36,7 @@
  *
  * @author Marc Prud'hommeaux
  */
-class Trim
+public class Trim
     extends AbstractVal {
 
     private final Val _val;
@@ -53,6 +53,18 @@
         _where = where;
     }
 
+    public Val getVal() {
+        return _val;
+    }
+
+    public Val getTrimChar() {
+        return _trimChar;
+    }
+
+    public Boolean getWhere(){
+        return _where;
+    }
+
     public ClassMetaData getMetaData() {
         return _meta;
     }
@@ -195,5 +207,9 @@
         _trimChar.acceptVisit(visitor);
         visitor.exit(this);
     }
+
+    public int getId() {
+        return Val.TRIM_VAL;
+    }
 }
 

Modified: 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Val.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Val.java?rev=661124&r1=661123&r2=661124&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Val.java
 (original)
+++ 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Val.java
 Wed May 28 15:19:31 2008
@@ -51,6 +51,18 @@
      */
     public final int FORCE_OUTER = 2 << 2; 
 
+    public final int VAL = 0;
+    public final int MATH_VAL = 1;
+    public final int CONCAT_VAL = 2;
+    public final int SUBSTRING_VAL = 3;
+    public final int UPPER_VAL = 4;
+    public final int LOWER_VAL = 5;
+    public final int TRIM_VAL = 6;
+    public final int LENGTH_VAL = 7;
+    public final int LOCATE_VAL = 8;
+    public final int ARGS_VAL = 9;
+    public final int INDEXOF_VAL = 10;
+
     /**
      * Initialize the value. This method should recursively initialize any
      * sub-values. 
@@ -144,4 +156,6 @@
      */
     public void appendIsNotNull(Select sel, ExpContext ctx, ExpState state, 
         SQLBuffer sql);
+
+    public int getId();
 }


Reply via email to