This commit is contained in:
@@ -19,25 +19,26 @@ namespace AyaNova.DataList
|
|||||||
return "";
|
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:
|
//StringBuilder sb = new StringBuilder();
|
||||||
//" where (((awidget.name Like 'DateOpEqualityFilterWorks%')) AND ((awidget.startdate >='1968-03-12T18:00:00.0000000' AND awidget.startdate <='1968-03-12T18:00:00.9990000Z'))"
|
|
||||||
|
bool ThisIsTheFirstColumnWhereGroup = true;
|
||||||
|
|
||||||
//iterate the list view fields and concatenate a sql query from it
|
//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...}]
|
//// [{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++)
|
for (int i = 0; i < listViewArray.Count; i++)
|
||||||
{
|
{
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
var cm = listViewArray[i];
|
var cm = listViewArray[i];
|
||||||
//skip it if sort is not defined
|
//skip it if FILTER is not defined
|
||||||
if (cm["filter"] == null)
|
if (cm["filter"] == null)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Yup there's at least one filter here for this column
|
|
||||||
sb.Append("(");
|
|
||||||
|
|
||||||
//Get some info about this column / field
|
//Get some info about this column / field
|
||||||
var fld = cm["fld"].Value<string>();
|
var fld = cm["fld"].Value<string>();
|
||||||
@@ -60,33 +61,47 @@ namespace AyaNova.DataList
|
|||||||
IsOrFilter = cm["filter"]["any"].Value<bool>();
|
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
|
//Iterate filter items building this WHERE segment
|
||||||
|
bool ThisIsTheFirstFilterItemForThisColumn = true;
|
||||||
|
var ThereAreMultipleFilterItems = filterItems.Count > 1;
|
||||||
|
|
||||||
for (int y = 0; y < filterItems.Count; y++)
|
for (int y = 0; y < filterItems.Count; y++)
|
||||||
{
|
{
|
||||||
//Put this item in parenthesis
|
//close or open another parenthetic group
|
||||||
// sb.Append("(");
|
|
||||||
var filterItem = (JObject)filterItems[y];
|
|
||||||
|
|
||||||
|
//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>();
|
var opType = filterItem["op"].Value<string>();
|
||||||
List<string> tagList = new List<string>();
|
List<string> tagList = new List<string>();
|
||||||
string val = string.Empty;
|
string val = string.Empty;
|
||||||
|
|
||||||
bool IsPossibleIdValue = filterItem["value"].Type == JTokenType.Integer;
|
bool IsPossibleIdValue = filterItem["value"].Type == JTokenType.Integer;
|
||||||
|
|
||||||
if (filterItem["value"].Type != JTokenType.Array)
|
if (filterItem["value"].Type != JTokenType.Array)
|
||||||
val = filterItem["value"].Value<string>();
|
val = filterItem["value"].Value<string>();
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
tagList = filterItem["value"].ToObject<List<String>>();
|
tagList = filterItem["value"].ToObject<List<String>>();
|
||||||
}
|
}
|
||||||
|
|
||||||
//prep for possible ID field filter instead
|
//prep for possible ID field filter instead
|
||||||
string columnNameToFilter = string.Empty;
|
string columnNameToFilter = string.Empty;
|
||||||
UiFieldDataType DataTypeToFilter = UiFieldDataType.NoType;
|
UiFieldDataType DataTypeToFilter = UiFieldDataType.NoType;
|
||||||
@@ -104,38 +119,43 @@ namespace AyaNova.DataList
|
|||||||
DataTypeToFilter = (UiFieldDataType)dataType;
|
DataTypeToFilter = (UiFieldDataType)dataType;
|
||||||
columnNameToFilter = DataListField.GetSqlValueColumnName();
|
columnNameToFilter = DataListField.GetSqlValueColumnName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Append this filter's criteria
|
||||||
sb.Append(DataFilterToColumnCriteria(columnNameToFilter, DataTypeToFilter, opType, val, tagList, userId));
|
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(")");
|
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;
|
return string.Empty;
|
||||||
else
|
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>
|
/// <summary>
|
||||||
|
|||||||
Reference in New Issue
Block a user