Beispiel #1
0
        public void Exists_For_Xattr_Sets_Correct_Flag()
        {
            const SubdocPathFlags pathFlags = SubdocPathFlags.Xattr;
            const SubdocDocFlags  docFlags  = SubdocDocFlags.InsertDocument;

            var mockResult = new Mock <IDocumentFragment <dynamic> >();

            var mockedInvoker = new Mock <ISubdocInvoker>();

            mockedInvoker.Setup(x => x.Invoke(It.IsAny <LookupInBuilder <dynamic> >()))
            .Returns(mockResult.Object);

            var lookupBuilder = new LookupInBuilder <dynamic>(mockedInvoker.Object, () => new DefaultSerializer(), "mykey");

            var result = lookupBuilder.Exists("path", pathFlags, docFlags)
                         .Execute();

            Assert.AreSame(mockResult.Object, result);
            mockedInvoker.Verify(
                invoker => invoker.Invoke(It.Is <LookupInBuilder <dynamic> >(
                                              builder =>
                                              builder.FirstSpec().OpCode == OperationCode.SubExist &&
                                              builder.FirstSpec().Path == "path" &&
                                              builder.FirstSpec().PathFlags == pathFlags &&
                                              builder.FirstSpec().DocFlags == docFlags)
                                          ), Times.Once
                );
        }
        public void ArrayInsert_Multiple_For_Xattr_Sets_Correct_Flag()
        {
            const SubdocPathFlags pathFlags = SubdocPathFlags.Xattr;
            const SubdocDocFlags  docFlags  = SubdocDocFlags.InsertDocument;

            var mockResult = new Mock <IDocumentFragment <dynamic> >();

            var mockedInvoker = new Mock <ISubdocInvoker>();

            mockedInvoker.Setup(x => x.Invoke(It.IsAny <MutateInBuilder <dynamic> >()))
            .Returns(mockResult.Object);

            var mutateBuilder = new MutateInBuilder <dynamic>(mockedInvoker.Object, () => new DefaultSerializer(), "mykey");

            var value  = new object[] { 1, 2, 3 };
            var result = mutateBuilder.ArrayInsert("path", pathFlags, docFlags, value)
                         .Execute();

            Assert.AreSame(mockResult.Object, result);
            mockedInvoker.Verify(
                invoker => invoker.Invoke(It.Is <MutateInBuilder <dynamic> >(
                                              builder =>
                                              builder.FirstSpec().OpCode == OperationCode.SubArrayInsert &&
                                              builder.FirstSpec().Path == "path" &&
                                              builder.FirstSpec().PathFlags == pathFlags &&
                                              builder.FirstSpec().DocFlags == docFlags &&
                                              builder.FirstSpec().Value == value
                                              )
                                          ), Times.Once
                );
        }
 /// <summary>
 /// Gets the value at a specified path.
 /// </summary>
 /// <param name="path">The path.</param>
 /// <param name="pathFlags">The Subdoc pathFlags.</param>
 /// <param name="docFlags">The document flags.</param>
 /// <returns>
 /// A <see cref="T:Couchbase.Core.ILookupInBuilder`1" /> implementation reference for chaining operations.
 /// </returns>
 public ILookupInBuilder<TDocument> Get(string path, SubdocPathFlags pathFlags, SubdocDocFlags docFlags = SubdocDocFlags.None)
 {
     _commands.Enqueue(new LookupInSpec
     {
         Path = path,
         OpCode = OpCode.SubGet,
         PathFlags = pathFlags,
         DocFlags = docFlags
     });
     return this;
 }
 /// <summary>
 /// Checks for the existence of a given N1QL path.
 /// </summary>
 /// <param name="path">The path.</param>
 /// <param name="pathFlags">The Subdoc pathFlags.</param>
 /// <param name="docFlags">The document flags.</param>
 /// <returns>
 /// A <see cref="T:Couchbase.Core.ILookupInBuilder`1" /> implementation reference for chaining operations.
 /// </returns>
 public ILookupInBuilder <TDocument> Exists(string path, SubdocPathFlags pathFlags, SubdocDocFlags docFlags = SubdocDocFlags.None)
 {
     _commands.Enqueue(new OperationSpec
     {
         Path      = path,
         OpCode    = OperationCode.SubExist,
         PathFlags = pathFlags,
         DocFlags  = docFlags
     });
     return(this);
 }
Beispiel #5
0
 public MutateInOptions WithFlags(SubdocDocFlags flags)
 {
     Flags = flags;
     return(this);
 }
        /// <summary>
        /// Performs an arithmetic operation on a numeric value in a document.
        /// </summary>
        /// <param name="path">A string (N1QL syntax) used to specify a location within the document.</param>
        /// <param name="delta">The value to increment or decrement the original value by.</param>
        /// <param name="pathFlags">The path flags.</param>
        /// <param name="docFlags">The document flags. Defaults to <see cref="F:SubdocDocFlags.None"/>.</param>
        /// <returns>
        /// An <see cref="T:Couchbase.Core.IMutateInBuilder`1" /> reference for chaining operations.
        /// </returns>
        /// <exception cref="System.ArgumentException">Path cannot be empty for a Counter.</exception>
        public IMutateInBuilder <TDocument> Counter(string path, long delta, SubdocPathFlags pathFlags, SubdocDocFlags docFlags = SubdocDocFlags.None)
        {
            if (string.IsNullOrWhiteSpace(path))
            {
                throw new ArgumentException("Path cannot be empty for a Counter.");
            }

            _commands.Enqueue(new OperationSpec
            {
                OpCode    = OpCode.SubCounter,
                Path      = path,
                Value     = delta,
                PathFlags = pathFlags,
                DocFlags  = docFlags
            });

            return(this);
        }
        /// <summary>
        /// Adds a value to an array if the value does not already exist in the array.
        /// </summary>
        /// <param name="path">A string (N1QL syntax) used to specify a location within the document.</param>
        /// <param name="value">A unique value.</param>
        /// <param name="pathflags">The path flags.</param>
        /// <param name="docFlags">The document flags. Defaults to <see cref="F:SubdocDocFlags.None"/>.</param>
        /// <returns>
        /// An <see cref="T:Couchbase.Core.IMutateInBuilder`1" /> reference for chaining operations.
        /// </returns>
        public IMutateInBuilder <TDocument> ArrayAddUnique(string path, object value, SubdocPathFlags pathflags, SubdocDocFlags docFlags = SubdocDocFlags.None)
        {
            _commands.Enqueue(new OperationSpec
            {
                OpCode    = OpCode.SubArrayAddUnique,
                Path      = path,
                Value     = value,
                PathFlags = pathflags,
                DocFlags  = docFlags
            });

            return(this);
        }
        /// <summary>
        /// Inserts one or more values at a given position within an array. The position is indicated as part of the path.
        /// </summary>
        /// <param name="path">A string (N1QL syntax) used to specify a location within the document.</param>
        /// <param name="pathFlags">The path flags.</param>
        /// <param name="docFlags">The document flags. Defaults to <see cref="F:SubdocDocFlags.None"/>.</param>
        /// <param name="values">One or more values.</param>
        /// <returns>
        /// An <see cref="T:Couchbase.Core.IMutateInBuilder`1" /> reference for chaining operations.
        /// </returns>
        /// <exception cref="System.ArgumentException">Path cannot be empty for an ArrayInsert.</exception>
        public IMutateInBuilder <TDocument> ArrayInsert(string path, SubdocPathFlags pathFlags, SubdocDocFlags docFlags, params object[] values)
        {
            if (string.IsNullOrWhiteSpace(path))
            {
                throw new ArgumentException("Path cannot be empty for an ArrayInsert.");
            }

            _commands.Enqueue(new OperationSpec
            {
                OpCode         = OpCode.SubArrayInsert,
                Path           = path,
                Value          = values,
                PathFlags      = pathFlags,
                DocFlags       = docFlags,
                RemoveBrackets = true
            });

            return(this);
        }
        /// <summary>
        /// Inserts one or more values to the beginning of an array in a JSON document at a given path.
        /// </summary>
        /// <param name="path">A string (N1QL syntax) used to specify a location within the document.</param>
        /// <param name="pathFlags">The path flags.</param>
        /// <param name="docFlags">The document flags. Defaults to <see cref="F:SubdocDocFlags.None"/>.</param>
        /// <param name="values">One or more values.</param>
        /// <returns>
        /// An <see cref="T:Couchbase.Core.IMutateInBuilder`1" /> reference for chaining operations.
        /// </returns>
        public IMutateInBuilder <TDocument> ArrayPrepend(string path, SubdocPathFlags pathFlags, SubdocDocFlags docFlags, params object[] values)
        {
            _commands.Enqueue(new OperationSpec
            {
                OpCode         = OpCode.SubArrayPushFirst,
                Path           = path,
                Value          = values,
                PathFlags      = pathFlags,
                DocFlags       = docFlags,
                RemoveBrackets = true
            });

            return(this);
        }
        /// <summary>
        /// Removes an element or value from a JSON document at a given path.
        /// </summary>
        /// <param name="path">A string (N1QL syntax) used to specify a location within the document.</param>
        /// <param name="pathFlags">The path flags.</param>
        /// <param name="docFlags">The document pathFlags. Defaults to <see cref="F:SubdocDocFlags.None"/>.</param>
        /// <returns> An <see cref="T:Couchbase.Core.IMutateInBuilder`1" /> reference for chaining operations. </returns>
        /// <exception cref="System.ArgumentException">Path cannot be empty for a Remove.</exception>
        public IMutateInBuilder <TDocument> Remove(string path, SubdocPathFlags pathFlags, SubdocDocFlags docFlags = SubdocDocFlags.None)
        {
            if (string.IsNullOrWhiteSpace(path))
            {
                throw new ArgumentException("Path cannot be empty for an Remove.");
            }

            _commands.Enqueue(new OperationSpec
            {
                OpCode    = OpCode.SubDelete,
                Path      = path,
                PathFlags = pathFlags,
                DocFlags  = docFlags
            });

            return(this);
        }
        /// <summary>
        /// Inserts or updates an element within or into a JSON document at a given path.
        /// </summary>
        /// <param name="path">A string (N1QL syntax) used to specify a location within the document.</param>
        /// <param name="value">An array value, dictionary entry, scalar or any other valid JSON item.</param>
        /// <param name="pathFlags">The path flags.</param>
        /// <param name="docFlags">The document pathFlags. Defaults to <see cref="F:SubdocDocFlags.None"/>.</param>
        /// <returns>An <see cref="T:Couchbase.Core.IMutateInBuilder`1" /> reference for chaining operations.</returns>
        /// <exception cref="System.ArgumentException">Path cannot be empty for an Upsert.</exception>
        public IMutateInBuilder <TDocument> Upsert(string path, object value, SubdocPathFlags pathFlags, SubdocDocFlags docFlags = SubdocDocFlags.None)
        {
            if (string.IsNullOrWhiteSpace(path))
            {
                throw new ArgumentException("Path cannot be empty for an Upsert.");
            }

            _commands.Enqueue(new OperationSpec
            {
                OpCode    = OpCode.SubDictUpsert,
                Path      = path,
                Value     = value,
                PathFlags = pathFlags,
                DocFlags  = docFlags
            });

            return(this);
        }
Beispiel #12
0
        /// <summary>
        /// Inserts a value to the beginning of an array in a JSON document at a given path.
        /// </summary>
        /// <param name="path">A string (N1QL syntax) used to specify a location within the document.</param>
        /// <param name="value">An array value.</param>
        /// <param name="pathFlags">The path flags.</param>
        /// <param name="docFlags">The document flags. Defaults to <see cref="F:SubdocDocFlags.None"/>.</param>
        /// <returns>
        /// An <see cref="T:Couchbase.Core.IMutateInBuilder`1" /> reference for chaining operations.
        /// </returns>
        public IMutateInBuilder <TDocument> ArrayPrepend(string path, object value, SubdocPathFlags pathFlags, SubdocDocFlags docFlags = SubdocDocFlags.None)
        {
            _commands.Enqueue(new MutateInSpec
            {
                OpCode    = OpCode.SubArrayPushFirst,
                Path      = path,
                Value     = value,
                PathFlags = pathFlags,
                DocFlags  = docFlags
            });

            return(this);
        }
Beispiel #13
0
        /// <summary>
        /// Inserts a value at a given position within an array. The position is indicated as part of the path.
        /// </summary>
        /// <param name="path">A string (N1QL syntax) used to specify a location within the document.</param>
        /// <param name="value">A value.</param>
        /// <param name="pathFlags">The path flags.</param>
        /// <param name="docFlags">The document flags. Defaults to <see cref="F:SubdocDocFlags.None"/>.</param>
        /// <returns>
        /// An <see cref="T:Couchbase.Core.IMutateInBuilder`1" /> reference for chaining operations.
        /// </returns>
        /// <exception cref="System.ArgumentException">Path cannot be empty for an ArrayInsert.</exception>
        public IMutateInBuilder <TDocument> ArrayInsert(string path, object value, SubdocPathFlags pathFlags, SubdocDocFlags docFlags = SubdocDocFlags.None)
        {
            if (string.IsNullOrWhiteSpace(path))
            {
                ThrowHelper.ThrowArgumentException("Path cannot be empty for an ArrayInsert.", nameof(path));
            }

            _commands.Enqueue(new MutateInSpec
            {
                OpCode    = OpCode.SubArrayInsert,
                Path      = path,
                Value     = value,
                PathFlags = pathFlags,
                DocFlags  = docFlags
            });

            return(this);
        }