示例#1
0
        public void Test_Encoding()
        {
            var options = new QueryOptions("SELECT * FROM `Default`").Encoding(Encoding.Utf8);
            var result  = options.GetFormValues();

            Assert.Equal("UTF-8", result["encoding"]);
        }
        public async Task QueryInterpolatedAsync_OptionsAction_BuildsQuery()
        {
            // Arrange
            QueryOptions options = null;
            var          cluster = CreateMockQueryCapturingCluster <dynamic>(queryOptions =>
            {
                options = queryOptions;
            });

            // Act

            var type  = "person";
            var limit = 10;
            await cluster.QueryInterpolatedAsync <dynamic>(o => o.Timeout(TimeSpan.FromMinutes(1)),
                                                           $"SELECT x FROM default WHERE type = {type} LIMIT {limit}");

            // Assert

            Assert.NotNull(options);
            Assert.False(options.IsAdHoc);
            Assert.Equal(TimeSpan.FromMinutes(1), options.TimeoutValue);

            Assert.Equal("SELECT x FROM default WHERE type = $1 LIMIT $2", options.StatementValue);

            Assert.True(options.GetFormValues().TryGetValue("args", out var args));
            var argsArray = Assert.IsType <List <object> >(args);

            Assert.Equal(2, argsArray.Count);
            Assert.Equal(type, argsArray[0]);
            Assert.Equal(limit, argsArray[1]);
        }
        public async Task QueryInterpolatedAsync_IncomingOptions_BuildsQuery()
        {
            // Arrange

            var options = new QueryOptions().ScanConsistency(QueryScanConsistency.RequestPlus);

            QueryOptions forwardedOptions = null;
            var          cluster          = CreateMockQueryCapturingCluster <dynamic>(queryOptions =>
            {
                forwardedOptions = queryOptions;
            });

            // Act

            var type  = "person";
            var limit = 10;
            await cluster.QueryInterpolatedAsync <dynamic>(options,
                                                           $"SELECT x FROM default WHERE type = {type} LIMIT {limit}");

            // Assert

            Assert.Same(options, forwardedOptions);

            Assert.Equal("SELECT x FROM default WHERE type = $1 LIMIT $2", options.StatementValue);

            Assert.True(options.GetFormValues().TryGetValue("args", out var args));
            var argsArray = Assert.IsType <List <object> >(args);

            Assert.Equal(2, argsArray.Count);
            Assert.Equal(type, argsArray[0]);
            Assert.Equal(limit, argsArray[1]);
        }
示例#4
0
        public void Test_FlexIndex_When_Default_Sends_Nothing()
        {
            var options = new QueryOptions("SELECT * FROM WHAT").FlexIndex(false);

            var values = options.GetFormValues();

            Assert.False(values.Keys.Contains("use_fts"));
        }
示例#5
0
        public void Test_FlexIndex_When_True_Sends_Parameter()
        {
            var options = new QueryOptions("SELECT * FROM WHAT").FlexIndex(true);

            var values = options.GetFormValues();

            Assert.Equal(true, actual: values["use_fts"]);
        }
示例#6
0
        public void Test_QueryContext_Is_NotNull()
        {
            var options = new QueryOptions("SELECT * FROM WHAT")
            {
                QueryContext = "namespace:bucket:scope:collection"
            };
            var args = options.GetFormValues();

            Assert.Equal("namespace:bucket:scope:collection", args["query_context"]);
        }
示例#7
0
        public void Test_Query_With_NamedParameters()
        {
            var options = new QueryOptions("SELECT * FROM `$bucket` WHERE name=$name").
                          Parameter("bucket", "default").
                          Parameter("name", "bill");

            var values = options.GetFormValues();

            Assert.Equal("default", values["$bucket"]);
            Assert.Equal("bill", values["$name"]);
        }
示例#8
0
        public void Test_Query_With_PositionParameters()
        {
            var options = new QueryOptions("SELECT * FROM `$1` WHERE name=$2").
                          Parameter("default").
                          Parameter("bill");

            var values = options.GetFormValues();
            var args   = (List <object>)values["args"];

            Assert.Equal("default", args[0]);
            Assert.Equal("bill", args[1]);
        }
        public void Test_CloneIdUsedAlready()
        {
            var cts           = new CancellationTokenSource();
            var mutationState = new MutationState();

            mutationState.Add(new MutationResult(0, TimeSpan.FromSeconds(10), new MutationToken("default", 1, 1, 1)));
            var options = new QueryOptions().
                          AdHoc(true).AutoExecute(true).
                          CancellationToken(cts.Token).
                          ClientContextId("clientid").
                          ConsistentWith(mutationState).
                          FlexIndex(true).
                          MaxServerParallelism(1).
                          Metrics(true).
                          Parameter(1).
                          Parameter("name", "value").
                          PipelineBatch(1).
                          PipelineCap(1).
                          PreserveExpiry(true).
                          Profile(QueryProfile.Off).
                          Raw("foo", "bar").
                          Readonly(true).
                          ScanCap(1).
                          ScanWait(TimeSpan.FromSeconds(10)).
                          Timeout(TimeSpan.FromMilliseconds(1)).
                          Statement("SELECT 1;").
                          ScanCap(1);

            var newOptions = options.CloneIfUsedAlready();
            var newValues  = newOptions.GetFormValues();
            var oldValues  = options.GetFormValues();

            Assert.Equal(newValues.Count, oldValues.Count);
            Assert.Equal(newValues["max_parallelism"], oldValues["max_parallelism"]);
            Assert.Equal(newValues["statement"], oldValues["statement"]);
            Assert.Equal(newValues["timeout"], oldValues["timeout"]);
            Assert.Equal(newValues["readonly"], oldValues["readonly"]);
            Assert.Equal(newValues["metrics"], oldValues["metrics"]);
            Assert.Equal(newValues["$name"], oldValues["$name"]);
            Assert.Equal(newValues["args"], oldValues["args"]);
            Assert.Equal(newValues["scan_consistency"], oldValues["scan_consistency"]);
            Assert.Equal(newValues["scan_vectors"], oldValues["scan_vectors"]);
            Assert.Equal(newValues["scan_wait"], oldValues["scan_wait"]);
            Assert.Equal(newValues["scan_cap"], oldValues["scan_cap"]);
            Assert.Equal(newValues["pipeline_batch"], oldValues["pipeline_batch"]);
            Assert.Equal(newValues["pipeline_cap"], oldValues["pipeline_cap"]);
            Assert.Equal(newValues["preserve_expiry"], oldValues["preserve_expiry"]);
            Assert.Equal(newValues["foo"], oldValues["foo"]);
            Assert.Equal(newValues["auto_execute"], oldValues["auto_execute"]);
            Assert.Equal(newValues["client_context_id"], oldValues["client_context_id"]);
            Assert.Equal(newValues["use_fts"], oldValues["use_fts"]);
        }
        public async System.Threading.Tasks.Task Test_Collections_QueryOps()
        {
            var bucket = await _fixture.Cluster.BucketAsync("default").ConfigureAwait(false);

            var collectionManager = (CollectionManager)bucket.Collections;
            var scopeName         = "query_test_scope2";
            var collectionName    = "query_test_collection2";
            var docId             = "mydoc2";
            var collectionSpec    = new CollectionSpec(scopeName, collectionName);

            await DropScopeAndCollectionIfExists(scopeName, collectionSpec, collectionManager);

            try
            {
                await collectionManager.CreateScopeAsync(scopeName).ConfigureAwait(false);

                await collectionManager.CreateCollectionAsync(collectionSpec).ConfigureAwait(false);

                var scope = await bucket.ScopeAsync(scopeName);

                var collection = await scope.CollectionAsync(collectionName);

                var task = await collection.InsertAsync(docId, new { }).ConfigureAwait(false);

                var options =
                    new QueryOptions("select * from `" + collectionName + "` where meta().id=\"" + docId + "\"")
                {
                    QueryContext = "namespace:bucket:scope:collection"
                };
                var args = options.GetFormValues();
                Assert.Equal("namespace:bucket:scope:collection", args["query_context"]);
                options = new QueryOptions("SELECT * FROM `$bucket` WHERE collectionName=$name")
                          .Parameter("bucket", "default").Parameter("collectionName", "query_test_collection2");

                var values = options.GetFormValues();
                Assert.Equal("default", values["$bucket"]);
                Assert.Equal("query_test_collection2", values["$collectionName"]);
            }
            catch (CouchbaseException e)
            {
            }
            finally
            {
                await DropScopeAndCollectionIfExists(scopeName, collectionSpec, collectionManager);
            }
        }
        public async System.Threading.Tasks.Task Test_Collections_QueryOptionsAsync()
        {
            var bucket = await _fixture.Cluster.BucketAsync("default").ConfigureAwait(false);

            var collectionManager = (CollectionManager)bucket.Collections;
            var scopeName         = "query_test_scope1";
            var collectionName    = "query_test_collection1";
            var docId             = "mydoc1";
            var collectionSpec    = new CollectionSpec(scopeName, collectionName);

            await DropScopeAndCollectionIfExists(scopeName, collectionSpec, collectionManager);

            try
            {
                await collectionManager.CreateScopeAsync(scopeName).ConfigureAwait(false);

                await collectionManager.CreateCollectionAsync(collectionSpec).ConfigureAwait(false);

                var collectionExistsResult = await collectionManager.CollectionExistsAsync(collectionSpec).ConfigureAwait(false);

                Assert.True(collectionExistsResult);

                var scope = await bucket.ScopeAsync(scopeName);

                var collection = await scope.CollectionAsync(collectionName);

                var task = await collection.InsertAsync(docId, new { }).ConfigureAwait(false);

                var options = new QueryOptions("select * from `" + collectionName + "` where meta().id=\"" + docId + "\"")
                {
                    QueryContext = "namespace:bucket:scope:collection"
                };
                var args = options.GetFormValues();
                Assert.Equal("namespace:bucket:scope:collection", args["query_context"]);
            }
            finally
            {
                await DropScopeIfExists(scopeName, collectionManager);
            }
        }
        public void GetFormValues_ScanVector_CorrectValues()
        {
            // Arrange

            var token1 = new MutationToken("WHAT", 105, 105, 945678);
            var token2 = new MutationToken("WHAT", 105, 105, 955555);
            var token3 = new MutationToken("WHAT", 210, 210, 12345);

            var state = new MutationState()
                        .Add(
                // ReSharper disable PossibleUnintendedReferenceComparison
                Mock.Of <IMutationResult>(m => m.MutationToken == token1),
                Mock.Of <IMutationResult>(m => m.MutationToken == token2),
                Mock.Of <IMutationResult>(m => m.MutationToken == token3));
            // ReSharper restore PossibleUnintendedReferenceComparison

            var options = new QueryOptions("SELECT * FROM WHAT")
                          .ConsistentWith(state);

            // Assert

            var values = options.GetFormValues();

            var vectors       = (Dictionary <string, Dictionary <string, ScanVectorComponent> >)values["scan_vectors"] !;
            var bucketVectors = vectors["WHAT"];

            var vBucketComponent1 = bucketVectors["105"];

            Assert.Equal(955555L, vBucketComponent1.SequenceNumber);
            Assert.Equal(105, vBucketComponent1.VBucketUuid);

            var vBucketComponent2 = bucketVectors["210"];

            Assert.Equal(12345L, vBucketComponent2.SequenceNumber);
            Assert.Equal(210, vBucketComponent2.VBucketUuid);
        }