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)
|
private static string DataFilterToColumnCriteria(string SqlColumnNameToFilter, UiFieldDataType DataType, string sOperator, string sValue, DateTimeOffset clientTimeStamp)
|
||||||
{
|
{
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
//Column name
|
|
||||||
sb.Append(SqlColumnNameToFilter);
|
|
||||||
sb.Append(" ");
|
|
||||||
//handle null values separately
|
//handle null values separately
|
||||||
if (sValue == "*NULL*")
|
if (sValue == "*NULL*")
|
||||||
{
|
{
|
||||||
|
//Column name
|
||||||
|
sb.Append(SqlColumnNameToFilter); //case doesn't matter for null searches
|
||||||
|
sb.Append(" ");
|
||||||
|
|
||||||
switch (DataType)
|
switch (DataType)
|
||||||
{
|
{
|
||||||
//ALL TEXT TYPES
|
//ALL TEXT TYPES
|
||||||
@@ -146,38 +148,74 @@ namespace AyaNova.DataList
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
//non null value
|
//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)
|
switch (sOperator)
|
||||||
{
|
{
|
||||||
case DataListFilterComparisonOperator.Equality:
|
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;
|
break;
|
||||||
case DataListFilterComparisonOperator.GreaterThan:
|
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
|
//(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;
|
break;
|
||||||
case DataListFilterComparisonOperator.GreaterThanOrEqualTo:
|
case DataListFilterComparisonOperator.GreaterThanOrEqualTo:
|
||||||
//no change on greater than for nulls
|
//no change on greater than for nulls
|
||||||
//(nulls are going to be assumed to be always at the
|
//(nulls are going to be assumed to be always at the
|
||||||
//less than end of the scale)
|
//less than end of the scale)
|
||||||
|
if (ForceToLower)
|
||||||
|
sb.Append($"lower('{SqlColumnNameToFilter}') ");
|
||||||
|
else
|
||||||
|
sb.Append($"{SqlColumnNameToFilter} ");
|
||||||
break;
|
break;
|
||||||
case DataListFilterComparisonOperator.LessThan:
|
case DataListFilterComparisonOperator.LessThan:
|
||||||
|
sb.Append($"{SqlColumnNameToFilter} ");
|
||||||
sb.Append("Is Null OR ");
|
sb.Append("Is Null OR ");
|
||||||
sb.Append(SqlColumnNameToFilter);
|
if (ForceToLower)
|
||||||
|
sb.Append($"lower('{SqlColumnNameToFilter}')");
|
||||||
|
else
|
||||||
|
sb.Append(SqlColumnNameToFilter);
|
||||||
sb.Append(" ");
|
sb.Append(" ");
|
||||||
break;
|
break;
|
||||||
case DataListFilterComparisonOperator.LessThanOrEqualTo:
|
case DataListFilterComparisonOperator.LessThanOrEqualTo:
|
||||||
|
sb.Append($"{SqlColumnNameToFilter} ");
|
||||||
sb.Append("Is Null OR ");
|
sb.Append("Is Null OR ");
|
||||||
sb.Append(SqlColumnNameToFilter);
|
if (ForceToLower)
|
||||||
|
sb.Append($"lower('{SqlColumnNameToFilter}')");
|
||||||
|
else
|
||||||
|
sb.Append(SqlColumnNameToFilter);
|
||||||
sb.Append(" ");
|
sb.Append(" ");
|
||||||
break;
|
break;
|
||||||
case DataListFilterComparisonOperator.NotEqual:
|
case DataListFilterComparisonOperator.NotEqual:
|
||||||
|
sb.Append($"{SqlColumnNameToFilter} ");
|
||||||
//This is the big one:
|
//This is the big one:
|
||||||
sb.Append("Is Null OR ");
|
sb.Append("Is Null OR ");
|
||||||
sb.Append(SqlColumnNameToFilter);
|
if (ForceToLower)
|
||||||
|
sb.Append($"lower('{SqlColumnNameToFilter}')");
|
||||||
|
else
|
||||||
|
sb.Append(SqlColumnNameToFilter);
|
||||||
sb.Append(" ");
|
sb.Append(" ");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -205,21 +243,24 @@ namespace AyaNova.DataList
|
|||||||
switch (sOperator)
|
switch (sOperator)
|
||||||
{
|
{
|
||||||
case DataListFilterComparisonOperator.Equality:
|
case DataListFilterComparisonOperator.Equality:
|
||||||
sb.Append("='");
|
if (ServerGlobalBizSettings.Cache.FilterCaseSensitive)
|
||||||
sb.Append(sValue);
|
sb.Append($"= '{sValue}'");
|
||||||
sb.Append("'");
|
else
|
||||||
|
sb.Append($"= lower('{sValue}')");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DataListFilterComparisonOperator.GreaterThan:
|
case DataListFilterComparisonOperator.GreaterThan:
|
||||||
sb.Append(">'");
|
if (ServerGlobalBizSettings.Cache.FilterCaseSensitive)
|
||||||
sb.Append(sValue);
|
sb.Append($"> '{sValue}'");
|
||||||
sb.Append("'");
|
else
|
||||||
|
sb.Append($"> lower('{sValue}')");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DataListFilterComparisonOperator.GreaterThanOrEqualTo:
|
case DataListFilterComparisonOperator.GreaterThanOrEqualTo:
|
||||||
sb.Append(">='");
|
if (ServerGlobalBizSettings.Cache.FilterCaseSensitive)
|
||||||
sb.Append(sValue);
|
sb.Append($">= '{sValue}'");
|
||||||
sb.Append("'");
|
else
|
||||||
|
sb.Append($">= lower('{sValue}')");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DataListFilterComparisonOperator.LessThan:
|
case DataListFilterComparisonOperator.LessThan:
|
||||||
|
|||||||
Reference in New Issue
Block a user