This commit is contained in:
2021-09-10 17:52:40 +00:00
parent 8b16a73dc0
commit d0b5bf8ceb

View File

@@ -107,12 +107,14 @@ namespace AyaNova.DataList
private static string DataFilterToColumnCriteria(string SqlColumnNameToFilter, UiFieldDataType DataType, string sOperator, string sValue, DateTimeOffset clientTimeStamp)
{
StringBuilder sb = new StringBuilder();
//Column name
sb.Append(SqlColumnNameToFilter);
sb.Append(" ");
//handle null values separately
if (sValue == "*NULL*")
{
//Column name
sb.Append(SqlColumnNameToFilter); //case doesn't matter for null searches
sb.Append(" ");
switch (DataType)
{
//ALL TEXT TYPES
@@ -146,38 +148,74 @@ namespace AyaNova.DataList
else
{
//non null value
//Special addition to handle nulls
bool ForceToLower = false;
//Force to LOWER case if it's a text data type and filter case sensitive is false
if (ServerGlobalBizSettings.Cache.FilterCaseSensitive)
{
switch (DataType)
{
//ALL TEXT TYPES
case UiFieldDataType.Text:
case UiFieldDataType.PhoneNumber:
case UiFieldDataType.EmailAddress:
case UiFieldDataType.HTTP:
ForceToLower = true;
break;
}
}
//Handle nulls and also insert the column name into the query in case sensitive fashion
switch (sOperator)
{
case DataListFilterComparisonOperator.Equality:
//no change on equals for nulls
//no specific addition on equals for nulls, just column name for below
if (ForceToLower)
sb.Append($"lower('{SqlColumnNameToFilter}') ");
else
sb.Append($"{SqlColumnNameToFilter} ");
break;
case DataListFilterComparisonOperator.GreaterThan:
//no change on greater than for nulls
//no specific addition on greater than for nulls
//(nulls are going to be assumed to be always at the
//less than end of the scale)
//less than end of the scale) so just include column name
break;
case DataListFilterComparisonOperator.GreaterThanOrEqualTo:
//no change on greater than for nulls
//(nulls are going to be assumed to be always at the
//less than end of the scale)
if (ForceToLower)
sb.Append($"lower('{SqlColumnNameToFilter}') ");
else
sb.Append($"{SqlColumnNameToFilter} ");
break;
case DataListFilterComparisonOperator.LessThan:
sb.Append($"{SqlColumnNameToFilter} ");
sb.Append("Is Null OR ");
sb.Append(SqlColumnNameToFilter);
if (ForceToLower)
sb.Append($"lower('{SqlColumnNameToFilter}')");
else
sb.Append(SqlColumnNameToFilter);
sb.Append(" ");
break;
case DataListFilterComparisonOperator.LessThanOrEqualTo:
sb.Append($"{SqlColumnNameToFilter} ");
sb.Append("Is Null OR ");
sb.Append(SqlColumnNameToFilter);
if (ForceToLower)
sb.Append($"lower('{SqlColumnNameToFilter}')");
else
sb.Append(SqlColumnNameToFilter);
sb.Append(" ");
break;
case DataListFilterComparisonOperator.NotEqual:
sb.Append($"{SqlColumnNameToFilter} ");
//This is the big one:
sb.Append("Is Null OR ");
sb.Append(SqlColumnNameToFilter);
if (ForceToLower)
sb.Append($"lower('{SqlColumnNameToFilter}')");
else
sb.Append(SqlColumnNameToFilter);
sb.Append(" ");
break;
}
@@ -205,21 +243,24 @@ namespace AyaNova.DataList
switch (sOperator)
{
case DataListFilterComparisonOperator.Equality:
sb.Append("='");
sb.Append(sValue);
sb.Append("'");
if (ServerGlobalBizSettings.Cache.FilterCaseSensitive)
sb.Append($"= '{sValue}'");
else
sb.Append($"= lower('{sValue}')");
break;
case DataListFilterComparisonOperator.GreaterThan:
sb.Append(">'");
sb.Append(sValue);
sb.Append("'");
if (ServerGlobalBizSettings.Cache.FilterCaseSensitive)
sb.Append($"> '{sValue}'");
else
sb.Append($"> lower('{sValue}')");
break;
case DataListFilterComparisonOperator.GreaterThanOrEqualTo:
sb.Append(">='");
sb.Append(sValue);
sb.Append("'");
if (ServerGlobalBizSettings.Cache.FilterCaseSensitive)
sb.Append($">= '{sValue}'");
else
sb.Append($">= lower('{sValue}')");
break;
case DataListFilterComparisonOperator.LessThan: