public override void Execute(TContext context)
        {
            var summary = default(IResultSummary);
            var error   = default(Exception);

            try
            {
                using (var session = NewSession(AccessMode.Write, context))
                {
                    using (var txc = BeginTransaction(session, context))
                    {
                        summary = txc.Run("CREATE ()").Consume();

                        txc.Success();
                    }

                    context.Bookmark = session.LastBookmark;
                }
            }
            catch (Exception exc)
            {
                error = exc;
                if (!_test.HandleWriteFailure(error, context))
                {
                    throw;
                }
            }

            if (error == null && summary != null)
            {
                summary.Counters.NodesCreated.Should().Be(1);
                context.NodeCreated();
            }
        }
        public override async Task ExecuteAsync(TContext context)
        {
            var session = NewSession(AccessMode.Write, context);

            await BeginTransaction(session, context)
            .SelectMany(txc => txc
                        .Run("CREATE ()")
                        .Summary()
                        .Catch((Exception error) =>
                               !_test.HandleWriteFailure(error, context)
                            ? txc.Rollback <IResultSummary>().Concat(Observable.Throw <IResultSummary>(error))
                            : txc.Rollback <IResultSummary>()
                               )
                        .Concat(txc.Commit <IResultSummary>())
                        .Select(summary =>
            {
                summary.Counters.NodesCreated.Should().Be(1);
                context.NodeCreated();
                return(summary);
            })
                        .Finally(() =>
            {
                if (session.LastBookmark != null)
                {
                    context.Bookmark = session.LastBookmark;
                }
            })
                        ).SingleOrDefaultAsync()
            .CatchAndThrow(_ => session.Close <IResultSummary>())
            .Concat(session.Close <IResultSummary>());
        }
예제 #3
0
        public override async Task ExecuteAsync(TContext context)
        {
            var summary = default(IResultSummary);
            var error   = default(Exception);

            var session = NewSession(AccessMode.Write, context);

            try
            {
                var txc = await BeginTransaction(session, context);

                try
                {
                    var cursor = await txc.RunAsync("CREATE ()");

                    summary = await cursor.SummaryAsync();

                    await txc.CommitAsync();
                }
                catch
                {
                    await txc.RollbackAsync();

                    throw;
                }

                context.Bookmark = session.LastBookmark;
            }
            catch (Exception exc)
            {
                error = exc;
                if (!_test.HandleWriteFailure(error, context))
                {
                    throw;
                }
            }
            finally
            {
                await session.CloseAsync();
            }

            if (error == null && summary != null)
            {
                summary.Counters.NodesCreated.Should().Be(1);
                context.NodeCreated();
            }
        }