Esempio n. 1
0
        /// <summary>
        /// Create index based on expression predicate
        /// </summary>
        private Index CreateIndex(BsonExpressionType type, string name, BsonValue value)
        {
            switch (type)
            {
            case BsonExpressionType.Equal: return(new IndexEquals(name, value));

            case BsonExpressionType.Between: return(new IndexRange(name, value.AsArray[0], value.AsArray[1], true, true, Query.Ascending));

            case BsonExpressionType.Like: return(new IndexLike(name, value.AsString, Query.Ascending));

            case BsonExpressionType.GreaterThan: return(new IndexRange(name, value, BsonValue.MaxValue, false, true, Query.Ascending));

            case BsonExpressionType.GreaterThanOrEqual: return(new IndexRange(name, value, BsonValue.MaxValue, true, true, Query.Ascending));

            case BsonExpressionType.LessThan: return(new IndexRange(name, BsonValue.MinValue, value, true, false, Query.Ascending));

            case BsonExpressionType.LessThanOrEqual: return(new IndexRange(name, BsonValue.MinValue, value, true, true, Query.Ascending));

            case BsonExpressionType.NotEqual: return(new IndexScan(name, x => x.CompareTo(value) != 0, Query.Ascending));

            case BsonExpressionType.In: return(value.IsArray ?
                                               (Index) new IndexIn(name, value.AsArray, Query.Ascending) :
                                               (Index) new IndexEquals(name, value));

            default: return(null);
            }
        }
Esempio n. 2
0
 /// <summary>
 /// Create index based on expression predicate
 /// </summary>
 private Index CreateIndex(BsonExpressionType type, string name, BsonValue value)
 {
     return
         (type == BsonExpressionType.Equal ? Idx.EQ(name, value) :
          type == BsonExpressionType.Between ? Idx.Between(name, value.AsArray[0], value.AsArray[1]) :
          type == BsonExpressionType.Like ? Idx.Like(name, value.AsString) :
          type == BsonExpressionType.GreaterThan ? Idx.GT(name, value) :
          type == BsonExpressionType.GreaterThanOrEqual ? Idx.GTE(name, value) :
          type == BsonExpressionType.LessThan ? Idx.LT(name, value) :
          type == BsonExpressionType.LessThanOrEqual ? Idx.LTE(name, value) :
          type == BsonExpressionType.NotEqual ? Idx.Not(name, value) :
          type == BsonExpressionType.In ? (value.IsArray ? Idx.In(name, value.AsArray) : Idx.EQ(name, value)) :
          null);
 }
Esempio n. 3
0
 internal static LiteException InvalidExpressionType(BsonExpression expr, BsonExpressionType type)
 {
     return(new LiteException(INVALID_EXPRESSION_TYPE, "Expression '{0}' must be a {1} type.", expr.Source, type));
 }