Example #1
0
        /// <summary>
        /// Composes the filter used to search.
        /// </summary>
        /// <returns></returns>
        private FilterDefinition <BsonDocument> ComposeFilter()
        {
            FilterDefinition <BsonDocument> filter = null;

            for (int j = 0; j < QueryLists.Count; j++)
            {
                FilterDefinition <BsonDocument> rowFilter = null;
                RowEquivilators rowE = QueryLists[j][0].CombineRowsValue;
                int             i    = 0;
                try
                {
                    rowFilter = QueryLists[j][0].ToString();
                    for (i = 1; i < QueryLists[j].Count; i++)
                    {
                        rowFilter = CombineFilters(rowFilter, QueryLists[j][i].ToString(), rowE, false);
                    }
                }
                catch (NullReferenceException)
                {
                    throw new QueryImproperLayoutException(j, i, string.Empty);
                }

                if (filter == null)
                {
                    filter = rowFilter;
                }
                else
                {
                    bool isEnd = (j == QueryLists.Count - 1);
                    filter = CombineFilters(filter, rowFilter, QueryLists[j][QueryLists[j].Count - 1].CombineRowsValue, isEnd);
                }
            }

            return(filter);
        }
Example #2
0
        /// <summary>
        /// Combines fitlers.
        /// </summary>
        /// <param name="filter1"></param>
        /// <param name="filter2"></param>
        /// <param name="equivilator"></param>
        /// <param name="isEnd"></param>
        /// <returns></returns>
        private FilterDefinition <BsonDocument> CombineFilters(FilterDefinition <BsonDocument> filter1,
                                                               FilterDefinition <BsonDocument> filter2, RowEquivilators equivilator, bool isEnd)
        {
            switch (equivilator)
            {
            case RowEquivilators.And:
                filter1 &= filter2;
                break;

            case RowEquivilators.Or:
                filter1 |= filter2;
                break;

            case RowEquivilators.None:
                if (!isEnd)
                {
                    throw new QueryImproperLayoutException(0, 0, (object)RowEquivilators.None);
                }

                break;
            }

            return(filter1);
        }
 public UpdateValueType(RowEquivilators row) => Row = row;