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