コード例 #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="QueryItem"/> class.
        /// </summary>
        /// <param name="entry">The entry to generate the query from.</param>
        public QueryItem(DocumentEntry entry)
        {
            _key = entry.Key;

            if (entry.ValueType != DocumentEntryType.Document)
            {
                _parts.Add(new QueryItemPart(QueryItemPartType.Equal, entry));
                return;
            }

            foreach (var item in entry.ValueAsDocument)
            {
                GenerateQueryItem(item.Key, item.Value);
            }
        }
コード例 #2
0
        /// <summary>
        /// Checks if a is less then or equal to b.
        /// </summary>
        /// <param name="a">The left side of the operator.</param>
        /// <param name="b">The right side of the operator.</param>
        /// <returns>The result of the operator.</returns>
        private bool LessThenEqualTo(DocumentEntry a, DocumentEntry b)
        {
            if (a.ValueType != b.ValueType)
            {
                return(false);
            }

            switch (a.ValueType)
            {
            case DocumentEntryType.Float:
                return(a.ValueAsFloat <= b.ValueAsFloat);

            case DocumentEntryType.Integer:
                return(a.ValueAsInteger <= b.ValueAsInteger);

            case DocumentEntryType.String:
                return(string.Compare(a.ValueAsString, b.ValueAsString, StringComparison.Ordinal) <= 0);

            default:
                return(false);
            }
        }
コード例 #3
0
        /// <summary>
        /// Checks if a is greater then b.
        /// </summary>
        /// <param name="a">The left side of the operator.</param>
        /// <param name="b">The right side of the operator.</param>
        /// <returns>The result of the operator.</returns>
        private bool GreaterThen(DocumentEntry a, DocumentEntry b)
        {
            if (a.ValueType != b.ValueType)
            {
                return(false);
            }

            switch (a.ValueType)
            {
            case DocumentEntryType.Float:
                return(a.ValueAsFloat > b.ValueAsFloat);

            case DocumentEntryType.Integer:
                return(a.ValueAsInteger > b.ValueAsInteger);

            case DocumentEntryType.String:
                return(string.Compare(a.ValueAsString, b.ValueAsString, StringComparison.Ordinal) > 0);

            default:
                return(false);
            }
        }
コード例 #4
0
 /// <summary>
 /// Initializes a new instance of the <see cref="QueryItemPart"/> struct.
 /// </summary>
 /// <param name="type">The type of the value.</param>
 /// <param name="value">The value to be compared against.</param>
 public QueryItemPart(QueryItemPartType type, DocumentEntry value)
     : this()
 {
     Type  = type;
     Value = value;
 }
コード例 #5
0
        /// <summary>
        /// Generates a query item from a document entry and adds it to the parts list.
        /// </summary>
        /// <param name="key">The entry's key.</param>
        /// <param name="value">The entry's value.</param>
        private void GenerateQueryItem(string key, DocumentEntry value)
        {
            switch (key)
            {
            case "lt":
                if (value.ValueType == DocumentEntryType.Array ||
                    value.ValueType == DocumentEntryType.Boolean ||
                    value.ValueType == DocumentEntryType.Document)
                {
                    throw new QueryException("DocumentEntryType \"" +
                                             Enum.GetName(typeof(DocumentEntryType), value.ValueType) +
                                             "\" is not supported on the \"lt\" query.");
                }

                _parts.Add(new QueryItemPart(QueryItemPartType.LessThen, value));
                break;

            case "lte":
                if (value.ValueType == DocumentEntryType.Array ||
                    value.ValueType == DocumentEntryType.Boolean ||
                    value.ValueType == DocumentEntryType.Document)
                {
                    throw new QueryException("DocumentEntryType \"" +
                                             Enum.GetName(typeof(DocumentEntryType), value.ValueType) +
                                             "\" is not supported on the \"lte\" query.");
                }

                _parts.Add(new QueryItemPart(QueryItemPartType.LessThenEqualTo, value));
                break;

            case "eq":
                _parts.Add(new QueryItemPart(QueryItemPartType.Equal, value));
                break;

            case "neq":
                _parts.Add(new QueryItemPart(QueryItemPartType.NotEqual, value));
                break;

            case "gt":
                if (value.ValueType == DocumentEntryType.Array ||
                    value.ValueType == DocumentEntryType.Boolean ||
                    value.ValueType == DocumentEntryType.Document)
                {
                    throw new QueryException("DocumentEntryType \"" +
                                             Enum.GetName(typeof(DocumentEntryType), value.ValueType) +
                                             "\" is not supported on the \"gt\" query.");
                }

                _parts.Add(new QueryItemPart(QueryItemPartType.GreaterThen, value));
                break;

            case "gte":
                if (value.ValueType == DocumentEntryType.Array ||
                    value.ValueType == DocumentEntryType.Boolean ||
                    value.ValueType == DocumentEntryType.Document)
                {
                    throw new QueryException("DocumentEntryType \"" +
                                             Enum.GetName(typeof(DocumentEntryType), value.ValueType) +
                                             "\" is not supported on the \"gte\" query.");
                }

                _parts.Add(new QueryItemPart(QueryItemPartType.GreaterThenEqualTo, value));
                break;

            case "in":
                if (value.ValueType == DocumentEntryType.Array ||
                    value.ValueType == DocumentEntryType.Document)
                {
                    throw new QueryException("DocumentEntryType \"" +
                                             Enum.GetName(typeof(DocumentEntryType), value.ValueType) +
                                             "\" is not supported on the \"in\" query.");
                }

                _parts.Add(new QueryItemPart(QueryItemPartType.Contains, value));
                break;

            case "nin":
                if (value.ValueType == DocumentEntryType.Array ||
                    value.ValueType == DocumentEntryType.Document)
                {
                    throw new QueryException("DocumentEntryType \"" +
                                             Enum.GetName(typeof(DocumentEntryType), value.ValueType) +
                                             "\" is not supported on the \"nin\" query.");
                }

                _parts.Add(new QueryItemPart(QueryItemPartType.NotContains, value));
                break;

            default:
                throw new QueryException("Invalid query entry.");
            }
        }