This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user