This commit is contained in:
2020-02-14 19:12:13 +00:00
parent 00fa8126da
commit fdac6f7565

View File

@@ -19,25 +19,26 @@ namespace AyaNova.DataList
return "";
}
StringBuilder sb = new StringBuilder();
//List to compile each columns where clause fragment for later assembly into sql query
List<string> ColumnWhereClauses = new List<string>();
//bugbug too many paranthesis:
//" where (((awidget.name Like 'DateOpEqualityFilterWorks%')) AND ((awidget.startdate >='1968-03-12T18:00:00.0000000' AND awidget.startdate <='1968-03-12T18:00:00.9990000Z'))"
//StringBuilder sb = new StringBuilder();
bool ThisIsTheFirstColumnWhereGroup = true;
//iterate the list view fields and concatenate a sql query from it
//// [{key:"COLUMN UNIQUE KEY ID",sort:"-" or "+",filter:{any:true/false,items:[{FILTER OBJECT SEE BELOW}]} }, {key:"second column unique key"},{...etc...}]
for (int i = 0; i < listViewArray.Count; i++)
{
StringBuilder sb = new StringBuilder();
var cm = listViewArray[i];
//skip it if sort is not defined
//skip it if FILTER is not defined
if (cm["filter"] == null)
{
continue;
}
//Yup there's at least one filter here for this column
sb.Append("(");
//Get some info about this column / field
var fld = cm["fld"].Value<string>();
@@ -60,33 +61,47 @@ namespace AyaNova.DataList
IsOrFilter = cm["filter"]["any"].Value<bool>();
}
//Is there more than one filter for this column?
if (filterItems.Count > 1)
{
//Yup, so put the whole group in paranthesis
sb.Append("(");
}
//Iterate filter items building this WHERE segment
bool ThisIsTheFirstFilterItemForThisColumn = true;
var ThereAreMultipleFilterItems = filterItems.Count > 1;
for (int y = 0; y < filterItems.Count; y++)
{
//Put this item in parenthesis
// sb.Append("(");
var filterItem = (JObject)filterItems[y];
//close or open another parenthetic group
//Is this the first filter item of multiple for this field?
if (ThisIsTheFirstFilterItemForThisColumn && ThereAreMultipleFilterItems)
{
//Yup, so put the entire where group for this field in parenthesis
sb.Append("(");
}
//Is this a subsequent filter for this column?
if (!ThisIsTheFirstFilterItemForThisColumn)
{
//Close last filter item and start new one
if (IsOrFilter)
sb.Append(") OR (");
else
sb.Append(") AND (");
}
//gather filter data
var filterItem = (JObject)filterItems[y];
var opType = filterItem["op"].Value<string>();
List<string> tagList = new List<string>();
string val = string.Empty;
bool IsPossibleIdValue = filterItem["value"].Type == JTokenType.Integer;
if (filterItem["value"].Type != JTokenType.Array)
val = filterItem["value"].Value<string>();
else
{
tagList = filterItem["value"].ToObject<List<String>>();
}
//prep for possible ID field filter instead
string columnNameToFilter = string.Empty;
UiFieldDataType DataTypeToFilter = UiFieldDataType.NoType;
@@ -104,38 +119,43 @@ namespace AyaNova.DataList
DataTypeToFilter = (UiFieldDataType)dataType;
columnNameToFilter = DataListField.GetSqlValueColumnName();
}
//Append this filter's criteria
sb.Append(DataFilterToColumnCriteria(columnNameToFilter, DataTypeToFilter, opType, val, tagList, userId));
//close this item parenthesis
if (y < filterItems.Count - 1)
{
if (IsOrFilter)
sb.Append(") OR (");
else
sb.Append(") AND (");
}
// else
// {
// sb.Append(")");
// }
ThisIsTheFirstFilterItemForThisColumn = false;
}
if (filterItems.Count > 1)
//we've done at least one now
ThisIsTheFirstColumnWhereGroup = false;
if (ThereAreMultipleFilterItems)
{
//close this group
//The whole thing was in a group so close this group
sb.Append(")");
}
ColumnWhereClauses.Add(sb.ToString());
if (i < listViewArray.Count - 1)
{
sb.Append(") AND ");
}
}
if (sb.Length == 0)
if (ColumnWhereClauses.Count == 0)
return string.Empty;
else
return " where " + sb.ToString() + ")";
{
StringBuilder sb = new StringBuilder();
sb.Append(" where ");
for (int i = 0; i < ColumnWhereClauses.Count; i++)
{
sb.Append("(");
sb.Append(ColumnWhereClauses[i]);
sb.Append(")");
if (i < ColumnWhereClauses.Count-1)
{
sb.Append(" AND ");
}
}
return sb.ToString();
}
}
/// <summary>