diff --git a/server/AyaNova/DataList/DataListSqlFilterCriteriaBuilder.cs b/server/AyaNova/DataList/DataListSqlFilterCriteriaBuilder.cs index 81637fe5..378ef621 100644 --- a/server/AyaNova/DataList/DataListSqlFilterCriteriaBuilder.cs +++ b/server/AyaNova/DataList/DataListSqlFilterCriteriaBuilder.cs @@ -966,9 +966,9 @@ namespace AyaNova.DataList StringBuilder sbTemp = new StringBuilder(); sbTemp = sbTemp.Append("ARRAY["); List normalizedTags = TagBiz.NormalizeTags(sValue.Split(',').ToList()); - if (normalizedTags.Count == 0) + if (normalizedTags.Count == 0) throw new System.ArgumentNullException("DataListSqlFilterCriteriaBuilder::TagDataFilterToColumnCriteria - NO tags were provided for filtering"); - + foreach (string s in normalizedTags) sbTemp.Append($"'{s}',"); PostgresTagArrayFragment = sbTemp.ToString().TrimEnd(','); @@ -977,26 +977,12 @@ namespace AyaNova.DataList switch (sOperator) { case DataListFilterComparisonOperator.Equality: - { - //WHERE ARRAY['green'::varchar(255)] <@ tags and array_length(tags,1) = 1 - StringBuilder sbTags = new StringBuilder(); - sbTags.Append("@> array["); - //Note: with listOptions change to split filter and view the tags are now in sValue as a string of comma delimited strings so split them out here - List normalizedTags = TagBiz.NormalizeTags(sValue.Split(',').ToList()); - foreach (string s in normalizedTags) - { - - sbTags.Append($"'{s}',"); - } - sb.Append(sbTags.ToString().TrimEnd(',')); - sb.Append("::varchar(255)]"); - } - break; + //ARRAY['green'::varchar(255)] <@ tags and array_length(tags,1) = 1 + return $"{PostgresTagArrayFragment} <@ {SqlColumnNameToFilter} AND ARRAY_LENGTH({SqlColumnNameToFilter},1) = {normalizedTags.Count}"; case DataListFilterComparisonOperator.NotEqual: - sb.Append("<>'"); - sb.Append(sValue); - sb.Append("'"); - break; + //NOT (ARRAY['green'::varchar(255)] <@ tags and array_length(tags,1) = 1) + return $"NOT ({PostgresTagArrayFragment} <@ {SqlColumnNameToFilter} AND ARRAY_LENGTH({SqlColumnNameToFilter},1) = {normalizedTags.Count})"; + case DataListFilterComparisonOperator.NotContains: sb.Append("Not Like '%");