From 9c1dc0cf2aa2ffd02992a75fb747a03edf7faba6 Mon Sep 17 00:00:00 2001
From: Viktor Kovtun <viktor.kovtun@id.ethz.ch>
Date: Tue, 22 Sep 2020 16:48:50 +0200
Subject: [PATCH] SSDM-10151 Added extra parentheses to the "IS NOT NULL"
 checks because in certain cases the conditions may fail when there boolean
 "OR" afterwards.

---
 .../condition/AnyPropertySearchConditionTranslator.java     | 4 +++-
 .../condition/BooleanFieldSearchConditionTranslator.java    | 4 +++-
 .../condition/DateFieldSearchConditionTranslator.java       | 4 ++--
 .../condition/NumberFieldSearchConditionTranslator.java     | 3 ++-
 .../condition/StringFieldSearchConditionTranslator.java     | 6 +++++-
 5 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/search/translator/condition/AnyPropertySearchConditionTranslator.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/search/translator/condition/AnyPropertySearchConditionTranslator.java
index 88cbccf077e..9ed1909b0dc 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/search/translator/condition/AnyPropertySearchConditionTranslator.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/search/translator/condition/AnyPropertySearchConditionTranslator.java
@@ -78,7 +78,7 @@ public class AnyPropertySearchConditionTranslator implements IConditionTranslato
         final String entityTypesSubTableAlias = joinInformation.getSubTableAlias();
 
         sqlBuilder.append(entityTypesSubTableAlias).append(PERIOD).append(joinInformation.getSubTableIdField())
-                .append(SP).append(IS_NOT_NULL).append(SP).append(AND).append(SP);
+                .append(SP).append(IS_NOT_NULL).append(SP).append(AND).append(SP).append(LP);
 
         if (value.getClass() != AnyStringValue.class)
         {
@@ -104,6 +104,8 @@ public class AnyPropertySearchConditionTranslator implements IConditionTranslato
         {
             sqlBuilder.append(TRUE);
         }
+
+        sqlBuilder.append(RP);
     }
 
     private static void appendSamplePropertyComparison(final StringBuilder sqlBuilder,
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/search/translator/condition/BooleanFieldSearchConditionTranslator.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/search/translator/condition/BooleanFieldSearchConditionTranslator.java
index 6eced66c415..f7614d2b90e 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/search/translator/condition/BooleanFieldSearchConditionTranslator.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/search/translator/condition/BooleanFieldSearchConditionTranslator.java
@@ -97,7 +97,7 @@ public class BooleanFieldSearchConditionTranslator implements IConditionTranslat
         final String entityTypesSubTableAlias = joinInformation.getSubTableAlias();
 
         sqlBuilder.append(entityTypesSubTableAlias).append(PERIOD).append(joinInformation.getSubTableIdField())
-                .append(SP).append(IS_NOT_NULL).append(SP).append(AND).append(SP);
+                .append(SP).append(IS_NOT_NULL).append(SP).append(AND).append(SP).append(LP);
 
         if (value != null)
         {
@@ -118,6 +118,8 @@ public class BooleanFieldSearchConditionTranslator implements IConditionTranslat
                     .append(BOOLEAN).append(SP).append(EQ).append(SP).append(QU).append(SP).append(END);
             args.add(value);
         }
+
+        sqlBuilder.append(RP);
     }
 
 }
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/search/translator/condition/DateFieldSearchConditionTranslator.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/search/translator/condition/DateFieldSearchConditionTranslator.java
index 43d1d970ed1..ec4fc842f7e 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/search/translator/condition/DateFieldSearchConditionTranslator.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/search/translator/condition/DateFieldSearchConditionTranslator.java
@@ -112,7 +112,7 @@ public class DateFieldSearchConditionTranslator implements IConditionTranslator<
                 final String entityTypesSubTableAlias = joinInformation.getSubTableAlias();
 
                 sqlBuilder.append(entityTypesSubTableAlias).append(PERIOD).append(joinInformation.getSubTableIdField())
-                        .append(SP).append(IS_NOT_NULL).append(SP).append(AND).append(SP);
+                        .append(SP).append(IS_NOT_NULL).append(SP).append(AND).append(SP).append(LP);
 
                 sqlBuilder.append(CASE);
                 String casting = dataTypeByPropertyName.get(propertyName);
@@ -139,7 +139,7 @@ public class DateFieldSearchConditionTranslator implements IConditionTranslator<
                     throw new UserFailureException("Property " + propertyName + " is neither of data type "
                             + DataType.DATE + " nor " + DataType.TIMESTAMP + ".");
                 }
-                sqlBuilder.append(SP).append(ELSE).append(SP).append(false).append(SP).append(END);
+                sqlBuilder.append(SP).append(ELSE).append(SP).append(false).append(SP).append(END).append(RP);
 
                 break;
             }
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/search/translator/condition/NumberFieldSearchConditionTranslator.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/search/translator/condition/NumberFieldSearchConditionTranslator.java
index 1b98b3b2084..54058ba1980 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/search/translator/condition/NumberFieldSearchConditionTranslator.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/search/translator/condition/NumberFieldSearchConditionTranslator.java
@@ -133,7 +133,7 @@ public class NumberFieldSearchConditionTranslator implements IConditionTranslato
         final String entityTypesSubTableAlias = joinInformation.getSubTableAlias();
 
         sqlBuilder.append(entityTypesSubTableAlias).append(PERIOD).append(joinInformation.getSubTableIdField())
-                .append(SP).append(IS_NOT_NULL).append(SP).append(AND).append(SP);
+                .append(SP).append(IS_NOT_NULL).append(SP).append(AND).append(SP).append(LP);
 
         if (value != null)
         {
@@ -171,6 +171,7 @@ public class NumberFieldSearchConditionTranslator implements IConditionTranslato
 
             sqlBuilder.append(SP).append(ELSE).append(SP).append(false).append(SP).append(END);
         }
+        sqlBuilder.append(RP);
     }
 
 }
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/search/translator/condition/StringFieldSearchConditionTranslator.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/search/translator/condition/StringFieldSearchConditionTranslator.java
index d33706d0dae..c4190827297 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/search/translator/condition/StringFieldSearchConditionTranslator.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/search/translator/condition/StringFieldSearchConditionTranslator.java
@@ -100,7 +100,7 @@ public class StringFieldSearchConditionTranslator implements IConditionTranslato
                 final String entityTypesSubTableAlias = joinInformation.getSubTableAlias();
 
                 sqlBuilder.append(entityTypesSubTableAlias).append(PERIOD).append(joinInformation.getSubTableIdField())
-                        .append(SP).append(IS_NOT_NULL).append(SP).append(AND).append(SP);
+                        .append(SP).append(IS_NOT_NULL).append(SP).append(AND).append(SP).append(LP);
 
                 final String casting;
                 if (value.getClass() != AnyStringValue.class)
@@ -117,6 +117,7 @@ public class StringFieldSearchConditionTranslator implements IConditionTranslato
                             BooleanFieldSearchConditionTranslator.translateBooleanProperty(tableMapper, args,
                                     sqlBuilder, aliases, convertStringValueToBooleanValue(value), propertyName,
                                     internalProperty);
+                            sqlBuilder.append(RP);
                             return;
                         }
 
@@ -127,6 +128,7 @@ public class StringFieldSearchConditionTranslator implements IConditionTranslato
 
                             NumberFieldSearchConditionTranslator.translateNumberProperty(tableMapper, args, sqlBuilder,
                                     aliases, convertStringValueToNumberValue(value), propertyName, internalProperty);
+                            sqlBuilder.append(RP);
                             return;
                         }
 
@@ -143,6 +145,7 @@ public class StringFieldSearchConditionTranslator implements IConditionTranslato
                                     dataType, tableMapper, convertStringValueToDateValue(value), aliases, null,
                                     bareDateValue, propertyName, internalProperty, entityTypesSubTableAlias);
                             sqlBuilder.append(SP).append(END);
+                            sqlBuilder.append(RP);
                             return;
                         }
                     }
@@ -211,6 +214,7 @@ public class StringFieldSearchConditionTranslator implements IConditionTranslato
 
                     sqlBuilder.append(SP).append(END);
                 }
+                sqlBuilder.append(RP);
                 break;
             }
 
-- 
GitLab