details:   https://code.openbravo.com/erp/devel/pi/rev/506b45ab88e4
changeset: 18558:506b45ab88e4
user:      Shankar Balachandran <shankar.balachandran <at> openbravo.com>
date:      Sun Oct 28 18:50:13 2012 +0100
summary:   Fixes Issue 0022007 : Handling null values in filter by identifiers.

Added a new method replaceValueWithJoins to handle cases where joins are formed 
but the property path is used to compare with values.
For eg., instead of join_4.description, e.product.attributeSetValue.description 
is used in the where clause which results in exception when nullobjects are sub 
referenced.

diffstat:

 
modules/org.openbravo.service.json/src/org/openbravo/service/json/AdvancedQueryBuilder.java
 |  36 ++++++++-
 1 files changed, 31 insertions(+), 5 deletions(-)

diffs (68 lines):

diff -r 2785dcc9cf21 -r 506b45ab88e4 
modules/org.openbravo.service.json/src/org/openbravo/service/json/AdvancedQueryBuilder.java
--- 
a/modules/org.openbravo.service.json/src/org/openbravo/service/json/AdvancedQueryBuilder.java
       Mon Nov 19 12:21:21 2012 +0100
+++ 
b/modules/org.openbravo.service.json/src/org/openbravo/service/json/AdvancedQueryBuilder.java
       Sun Oct 28 18:50:13 2012 +0100
@@ -708,7 +708,7 @@
         && (operator.equals(OPERATOR_GREATERTHAN) || 
operator.equals(OPERATOR_GREATEROREQUAL)
             || operator.equals(OPERATOR_IGREATERTHAN) || 
operator.equals(OPERATOR_IGREATEROREQUAL)
             || operator.equals(OPERATOR_GREATERTHANFIElD) || operator
-            .equals(OPERATOR_GREATEROREQUALFIELD));
+              .equals(OPERATOR_GREATEROREQUALFIELD));
   }
 
   private boolean isLesserOperator(String operator) {
@@ -716,7 +716,7 @@
         && (operator.equals(OPERATOR_LESSTHAN) || 
operator.equals(OPERATOR_LESSOREQUAL)
             || operator.equals(OPERATOR_ILESSTHAN) || 
operator.equals(OPERATOR_ILESSOREQUAL)
             || operator.equals(OPERATOR_LESSTHANFIELD) || operator
-            .equals(OPERATOR_LESSOREQUALFIElD));
+              .equals(OPERATOR_LESSOREQUALFIElD));
   }
 
   private String computeLeftWhereClauseForIdentifier(Property property, String 
key,
@@ -1188,10 +1188,10 @@
               + " from " + prop.getTranslationProperty().getEntity().getName() 
+ " as t where t."
               + prop.getTrlParentProperty().getName() + " = "
               + prefix.substring(0, prefix.lastIndexOf('.')) + " and 
t.language.language='"
-              + OBContext.getOBContext().getLanguage().getLanguage() + "')), 
to_char(" + prefix
-              + prop.getName() + "), '')");
+              + OBContext.getOBContext().getLanguage().getLanguage() + "')), 
to_char("
+              + replaceValueWithJoins(prefix + prop.getName()) + "), '')");
         } else {
-          sb.append("COALESCE(to_char(" + prefix + prop.getName() + "),'')");
+          sb.append("COALESCE(to_char(" + replaceValueWithJoins(prefix + 
prop.getName()) + "),'')");
         }
 
       } else {
@@ -1205,6 +1205,32 @@
     return "(" + sb.toString() + ")";
   }
 
+  /*
+   * To handle cases where joins are formed but the property path is used to 
compare with values.
+   * For eg., instead of join_4.description, 
e.product.attributeSetValue.description is used in
+   * where clause which results in exception when null objects are sub 
referenced.Refer issue
+   * https://issues.openbravo.com/view.php?id=22007
+   */
+  private String replaceValueWithJoins(String value) {
+    String query = value;
+    String compare = value.substring(0, value.lastIndexOf(DalUtil.DOT));
+    String properties[] = value.split("\\.");
+    if (properties.length > 2) {
+      for (JoinDefinition join : joinDefinitions) {
+        if (compare.contains("join")) {
+          if (properties[0].equalsIgnoreCase(join.ownerAlias)) {
+            return join.joinAlias + DalUtil.DOT + properties[properties.length 
- 1];
+          }
+        } else {
+          if (compare.equalsIgnoreCase(getMainAlias() + DalUtil.DOT + 
join.property)) {
+            return join.joinAlias + DalUtil.DOT + properties[properties.length 
- 1];
+          }
+        }
+      }
+    }
+    return query;
+  }
+
   /**
    * @return true if one of the filter parameters is the {@link 
JsonConstants#ORG_PARAMETER}.
    */

------------------------------------------------------------------------------
Monitor your physical, virtual and cloud infrastructure from a single
web console. Get in-depth insight into apps, servers, databases, vmware,
SAP, cloud infrastructure, etc. Download 30-day Free Trial.
Pricing starts from $795 for 25 servers or applications!
http://p.sf.net/sfu/zoho_dev2dev_nov
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to