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