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 ); }
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 ); }
/// <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); }
/// <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 OperationSpec { OpCode = OpCode.SubArrayPushFirst, Path = path, Value = value, PathFlags = pathFlags, DocFlags = docFlags }); 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> /// 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> /// 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)) { throw new ArgumentException("Path cannot be empty for an ArrayInsert."); } _commands.Enqueue(new OperationSpec { OpCode = OpCode.SubArrayInsert, Path = path, Value = value, PathFlags = pathFlags, DocFlags = docFlags }); return(this); }
/// <summary> /// Replaces an element or value within 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 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 Replace.</exception> public IMutateInBuilder <TDocument> Replace(string path, object value, SubdocPathFlags pathFlags, SubdocDocFlags docFlags = SubdocDocFlags.None) { if (string.IsNullOrWhiteSpace(path)) { ThrowHelper.ThrowArgumentException("Path cannot be empty for an Upsert.", nameof(path)); } _commands.Enqueue(new MutateInSpec { OpCode = OpCode.SubReplace, 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 MutateInSpec { OpCode = OpCode.SubArrayInsert, Path = path, Value = values, PathFlags = pathFlags, DocFlags = docFlags, RemoveBrackets = true }); 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 MutateInSpec { OpCode = OpCode.SubArrayAddUnique, Path = path, Value = value, PathFlags = pathflags, DocFlags = docFlags }); return(this); }