コード例 #1
0
        public Task <BsonValue> RunScriptAsync(string command, CancellationToken cancellationToken)
        {
            var script       = new BsonJavaScript(command);
            var operation    = new EvalOperation(_database.DatabaseNamespace, script, null);
            var writeBinding = new WritableServerBinding(_client.Cluster, NoCoreSession.NewHandle());

            return(operation.ExecuteAsync(writeBinding, CancellationToken.None));
        }
コード例 #2
0
 private async static Task ClearData(ICluster cluster)
 {
     using (var binding = new WritableServerBinding(cluster))
     {
         var commandOp = new DropDatabaseOperation(__collection.DatabaseNamespace, __messageEncoderSettings);
         await commandOp.ExecuteAsync(binding, CancellationToken.None);
     }
 }
コード例 #3
0
 private void ClearData(ICluster cluster)
 {
     using (var binding = new WritableServerBinding(cluster, NoCoreSession.NewHandle()))
     {
         var commandOp = new DropDatabaseOperation(_collection.DatabaseNamespace, _messageEncoderSettings);
         commandOp.Execute(binding, CancellationToken.None);
     }
 }
コード例 #4
0
        // public methods
        /// <inheritdoc/>
        public sealed override async Task DropDatabaseAsync(string name, CancellationToken cancellationToken = default(CancellationToken))
        {
            var messageEncoderSettings = GetMessageEncoderSettings();
            var operation = new DropDatabaseOperation(new DatabaseNamespace(name), messageEncoderSettings);

            using (var binding = new WritableServerBinding(_cluster))
            {
                await _operationExecutor.ExecuteWriteOperationAsync(binding, operation, cancellationToken).ConfigureAwait(false);
            }
        }
コード例 #5
0
        // public methods
        /// <inheritdoc/>
        public sealed override void DropDatabase(string name, CancellationToken cancellationToken = default(CancellationToken))
        {
            var messageEncoderSettings = GetMessageEncoderSettings();
            var operation = new DropDatabaseOperation(new DatabaseNamespace(name), messageEncoderSettings);

            using (var binding = new WritableServerBinding(_cluster))
            {
                _operationExecutor.ExecuteWriteOperation(binding, operation, cancellationToken);
            }
        }
コード例 #6
0
 private void InsertData(ICluster cluster)
 {
     using (var binding = new WritableServerBinding(cluster, NoCoreSession.NewHandle()))
     {
         for (int i = 0; i < 100; i++)
         {
             Insert(binding, new BsonDocument("i", i));
         }
     }
 }
コード例 #7
0
 private async Task InsertData(ICluster cluster)
 {
     using (var binding = new WritableServerBinding(cluster))
     {
         for (int i = 0; i < 100; i++)
         {
             await Insert(binding, new BsonDocument("i", i));
         }
     }
 }
コード例 #8
0
        protected async Task <BsonValue> EvalAsync(string javascript)
        {
            var function = new BsonJavaScript(javascript);
            var op       = new EvalOperation(this._database.DatabaseNamespace, function, null);

            using (var writeBinding = new WritableServerBinding(this._client.Cluster, new CoreSessionHandle(NoCoreSession.Instance)))
            {
                return(await op.ExecuteAsync(writeBinding, CancellationToken.None));
            }
        }
コード例 #9
0
        private void DropView(CollectionNamespace viewNamespace)
        {
            var operation = new DropCollectionOperation(viewNamespace, CoreTestConfiguration.MessageEncoderSettings);

            using (var session = CoreTestConfiguration.StartSession(_cluster))
                using (var binding = new WritableServerBinding(_cluster, session.Fork()))
                    using (var bindingHandle = new ReadWriteBindingHandle(binding))
                    {
                        operation.Execute(bindingHandle, CancellationToken.None);
                    }
        }
コード例 #10
0
        /// <summary>
        /// Evaluates the specified javascript within a MongoDb database.
        /// </summary>
        /// <param name="database">MongoDb Database to execute the javascript.</param>
        /// <param name="javascript">Javascript to execute.</param>
        /// <param name="args">Optional arguments that can be provided to the javascript function to execute.</param>
        /// <returns>A <see cref="BsonValue" /> result.</returns>
        public static BsonValue Eval(this IMongoDatabase database, string javascript, IEnumerable <BsonValue> args = null)
        {
            var op = GetEvalOperation(database, javascript, args);

            using (var sessionHandle = new CoreSessionHandle(NoCoreSession.Instance))
            {
                using (var writeBinding = new WritableServerBinding(database.Client.Cluster, sessionHandle))
                {
                    return(op.Execute(writeBinding, CancellationToken.None));
                }
            }
        }
コード例 #11
0
        private void DropDatabase()
        {
            var operation = new DropDatabaseOperation(
                new DatabaseNamespace(__databaseName),
                new MessageEncoderSettings());

            using (var binding = new WritableServerBinding(__cluster))
            {
                operation.ExecuteAsync(binding, TimeSpan.FromSeconds(10), CancellationToken.None)
                .GetAwaiter()
                .GetResult();
            }
        }
コード例 #12
0
        public async Task <BsonValue> ExecuteScriptAsync(string javascript)
        {
            var           function = new BsonJavaScript(javascript);
            EvalOperation op       = new EvalOperation(database.DatabaseNamespace, function, new MessageEncoderSettings {
            });

            using (var writeBinding = new WritableServerBinding(database.Client.Cluster, new CoreSessionHandle(NoCoreSession.Instance)))
            {
                var result = await op.ExecuteAsync(writeBinding, CancellationToken.None);

                return(result);
            }
        }
コード例 #13
0
        /// <summary>
        /// Evaluates the specified javascript within a MongoDb database
        /// </summary>
        /// <param name="database">MongoDb Database to execute the javascript</param>
        /// <param name="javascript">Javascript to execute</param>
        /// <param name="args">Optional arguments that can be provided to the javascript function to execute</param>
        /// <returns>A <see cref="BsonValue" /> result</returns>
        public static BsonValue Eval(this IMongoDatabase database, string javascript, IEnumerable <BsonValue> args = null)
        {
            var client = database.Client as MongoClient;

            if (client == null)
            {
                throw new ArgumentException("Client is not a MongoClient");
            }

            var op = GetEvalOperation(database, javascript, args);

            using (var writeBinding = new WritableServerBinding(client.Cluster, new CoreSessionHandle(NoCoreSession.Instance)))
            {
                return(op.Execute(writeBinding, CancellationToken.None));
            }
        }
コード例 #14
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="text"></param>
        /// <returns></returns>
        public async Task <BsonValue> EvalAsync(string text)
        {
            var client = _database as MongoClient;

            if (client == null)
            {
                throw new ArgumentException("Client is not a MongoClient");
            }

            var function = new BsonJavaScript(text);
            var op       = new EvalOperation(_database.DatabaseNamespace, function, null);

            using (var writeBinding = new WritableServerBinding(client.Cluster, new CoreSessionHandle(NoCoreSession.Instance)))
            {
                return(await op.ExecuteAsync(writeBinding, CancellationToken.None));
            }
        }
コード例 #15
0
        public IActionResult RunScript(string query)
        {
            if (string.IsNullOrEmpty(query))
                return Json(new { Result = false, Message = "Empty query!" });

            try
            {
                var bscript = new BsonJavaScript(query);
                var operation = new EvalOperation(_mongoDBContext.Database().DatabaseNamespace, bscript, null);
                var writeBinding = new WritableServerBinding(_mongoDBContext.Database().Client.Cluster, NoCoreSession.NewHandle());
                var result = operation.Execute(writeBinding, CancellationToken.None);
                var xx = result["_ns"];
                return Json(new { Result = true, Message = result.ToString() });
            }
            catch (Exception ex)
            {
                return Json(new { Result = false, Message = ex.Message });
            }
        }
コード例 #16
0
        protected void VerifySessionIdWasSentWhenSupported <TResult>(
            Func <WritableServerBinding, CancellationToken, Task <TResult> > executeAsync,
            Func <WritableServerBinding, CancellationToken, TResult> execute,
            string commandName,
            bool async)
        {
            var eventCapturer = new EventCapturer().Capture <CommandStartedEvent>(e => e.CommandName == commandName);

            using (var cluster = CoreTestConfiguration.CreateCluster(b => b.Subscribe(eventCapturer)))
            {
                using (var session = CoreTestConfiguration.StartSession(cluster))
                    using (var binding = new WritableServerBinding(cluster, session))
                    {
                        var cancellationToken = new CancellationTokenSource().Token;
                        if (async)
                        {
                            executeAsync(binding, cancellationToken).GetAwaiter().GetResult();
                        }
                        else
                        {
                            execute(binding, cancellationToken);
                        }

                        var commandStartedEvent = (CommandStartedEvent)eventCapturer.Next();
                        var command             = commandStartedEvent.Command;
                        if (session.Id == null)
                        {
                            command.Contains("lsid").Should().BeFalse();
                        }
                        else
                        {
                            command["lsid"].Should().Be(session.Id);
                        }
                        session.ReferenceCount().Should().Be(1);
                    }
            }
        }
コード例 #17
0
        private async Task DoWork(ICluster cluster)
        {
            var rand = new Random();

            using (var binding = new WritableServerBinding(cluster))
            {
                while (!_cancellationTokenSource.IsCancellationRequested)
                {
                    var i = rand.Next(0, 10000);
                    IReadOnlyList <BsonDocument> docs;
                    using (var cursor = await Query(binding, new BsonDocument("i", i)))
                    {
                        try
                        {
                            if (await cursor.MoveNextAsync(_cancellationTokenSource.Token))
                            {
                                docs = cursor.Current.ToList();
                            }
                            else
                            {
                                docs = null;
                            }
                            //Console.Write(".");
                        }
                        catch
                        {
                            Console.Write("+");
                            continue;
                        }
                    }


                    if (docs == null || docs.Count == 0)
                    {
                        try
                        {
                            await Insert(binding, new BsonDocument().Add("i", i));

                            //Console.Write(".");
                        }
                        catch (Exception)
                        {
                            Console.Write("*");
                        }
                    }
                    else
                    {
                        try
                        {
                            var filter = new BsonDocument("_id", docs[0]["_id"]);
                            var update = new BsonDocument("$set", new BsonDocument("i", i + 1));
                            await Update(binding, filter, update);

                            //Console.Write(".");
                        }
                        catch (Exception)
                        {
                            Console.Write("*");
                        }
                    }
                }
            }
        }
コード例 #18
0
        private async static Task DoWork(ICluster cluster, CancellationToken cancellationToken)
        {
            var rand = new Random();

            using (var binding = new WritableServerBinding(cluster))
                while (!cancellationToken.IsCancellationRequested)
                {
                    var i = rand.Next(0, 10000);
                    IReadOnlyList <BsonDocument> docs;
                    IAsyncCursor <BsonDocument>  enumerator = null;
                    try
                    {
                        enumerator = await Query(binding, new BsonDocument("i", i)).ConfigureAwait(false);

                        if (await enumerator.MoveNextAsync().ConfigureAwait(false))
                        {
                            docs = enumerator.Current.ToList();
                        }
                        else
                        {
                            docs = null;
                        }
                        //Console.Write(".");
                    }
                    catch (Exception)
                    {
                        Console.Write("+");
                        continue;
                    }
                    finally
                    {
                        if (enumerator != null)
                        {
                            enumerator.Dispose();
                        }
                    }

                    if (docs == null || docs.Count == 0)
                    {
                        try
                        {
                            await Insert(binding, new BsonDocument().Add("i", i)).ConfigureAwait(false);

                            //Console.Write(".");
                        }
                        catch (Exception)
                        {
                            Console.Write("*");
                        }
                    }
                    else
                    {
                        try
                        {
                            var criteria = new BsonDocument("_id", docs[0]["_id"]);
                            var update   = new BsonDocument("$set", new BsonDocument("i", i + 1));
                            await Update(binding, criteria, update).ConfigureAwait(false);

                            //Console.Write(".");
                        }
                        catch (Exception)
                        {
                            Console.Write("*");
                        }
                    }
                }
        }
コード例 #19
0
        private IWriteBindingHandle CreateReadWriteBinding(IClientSessionHandle session)
        {
            var binding = new WritableServerBinding(_cluster, session.WrappedCoreSession.Fork());

            return(new ReadWriteBindingHandle(binding));
        }
コード例 #20
0
        private static IReadWriteBindingHandle CreateReadWriteBinding(ICoreSessionHandle session)
        {
            var binding = new WritableServerBinding(__cluster.Value, session.Fork());

            return(new ReadWriteBindingHandle(binding));
        }