public string AddTransaction(IAsyncTransaction transation)
        {
            var key = ProtocolObjectManager.GenerateUniqueIdString();

            Transactions.Add(key, transation);
            return(key);
        }
            private static async Task <long> MatchPersonNodeAsync(IAsyncTransaction tx, string name)
            {
                var result = await tx.RunAsync("MATCH (a:Person {name: $name}) RETURN id(a)", new { name });


                return((await result.SingleAsync())[0].As <long>());
            }
Пример #3
0
 public BoltNeo4jTransaction(IAsyncSession session, IAsyncTransaction transaction, string database)
 {
     Database          = database;
     DriverTransaction = transaction;
     Session           = session;
     IsOpen            = true;
     Id = Guid.NewGuid();
 }
Пример #4
0
        protected internal static IAsyncTransaction GetAsyncTransaction(IAsyncTransaction transaction)
        {
            if (transaction != null && !(transaction is AsyncTransactionWrapper))
            {
                return(new AsyncTransactionWrapper(transaction));
            }

            return(transaction);
        }
        public static async Task UpdateAsync(this IAsyncTransaction tx, string scope, long value)
        {
            var parameters = new Dictionary <string, object>
            {
                { "scope", scope },
                { "value", value }
            };

            await tx.RunAsync(Query.Update, parameters).ConfigureAwait(false);
        }
 private async Task RunCypher(IAsyncTransaction tx, string cypher, Dictionary <string, object> parameters = null)
 {
     if (parameters != null)
     {
         await tx.RunAsync(cypher, parameters);
     }
     else
     {
         await tx.RunAsync(cypher);
     }
 }
Пример #7
0
 private static async Task DbCleanup(this IAsyncTransaction transaction)
 {
     //            await transaction.RunAsync(@"
     //MATCH (n)
     //WHERE NOT (n)<--()
     //AND NOT ""Independant"" IN LABELS(n)
     //OPTIONAL MATCH(n2:ParentRequired)<--(n)
     //OPTIONAL MATCH(n3:ParentRequired)<--(n2)
     //DETACH DELETE n, n2, n3
     //            ");
 }
        public static async Task InitialiseAsync(this IAsyncTransaction tx)
        {
            await tx.RunAsync(Query.UniqueScopeConstraint).ConfigureAwait(false);

            if (Neo4jOptions.UseNeo4jEnterprise)
            {
                await tx.RunAsync(Query.ScopeExistsConstraint).ConfigureAwait(false);

                await tx.RunAsync(Query.ValueExistsConstraint).ConfigureAwait(false);
            }
        }
        public static async Task <TEntity> GetNodeAsync <TEntity>(
            this IAsyncTransaction asyncTransaction,
            long nodeId) where TEntity : class
        {
            var parameters = new Neo4jParameters()
                             .WithValue("p1", nodeId);

            var resultCursor = await asyncTransaction.RunAsync(Constants.Statement.GetNode, parameters)
                               .ConfigureAwait(false);

            return(await resultCursor.MapSingleAsync <TEntity>().ConfigureAwait(false));
        }
Пример #10
0
        private void BuildTransaction()
        {
            lock (locker)
            {
                if (transaction != null)
                {
                    return;
                }

                transaction = new SqlAsyncTransaction(connection);
            }
        }
Пример #11
0
            public Task <T> Work(IAsyncTransaction txc)
            {
                Interlocked.Increment(ref _invocations);

                Thread.Sleep(_delay);

                if (_failures.MoveNext())
                {
                    return(Task.FromException <T>(_failures.Current));
                }

                return(Task.FromResult(_result));
            }
        public static async Task <long> NextIdAsync(this IAsyncTransaction tx, string scope)
        {
            var parameters = new Dictionary <string, object>
            {
                { "scope", scope }
            };

            var cursor = await tx.RunAsync(Query.NextId, parameters).ConfigureAwait(false);

            var record = await cursor.SingleAsync().ConfigureAwait(false);

            return(record[0].As <long>());
        }
Пример #13
0
        //TODO: Who uses this constructor??
        public BoltNeo4jTransaction(Version version, IDriver driver, IEnumerable <string> bookmarks, string database, bool isWrite = true)
        {
            Database  = database;
            Bookmarks = bookmarks?.ToList();
            Session   = driver.AsyncSession(version, database, isWrite, Bookmarks);

            var tx = Session.BeginTransactionAsync();

            tx.Wait();
            DriverTransaction = tx.Result;
            IsOpen            = true;
            Id = Guid.NewGuid();
        }
            private async Task <int> SelectEmployee(IAsyncTransaction tx, string name)
            {
                try
                {
                    var result = await tx.RunAsync("SELECT * FROM Employees WHERE name = $name", new { name });

                    return((await result.SingleAsync())["employee_number"].As <int>());
                }
                catch (ClientException ex)
                {
                    Output.WriteLine(ex.Message);
                    return(-1);
                }
            }
        private async Task <List <IRecord> > RunCypherWithResults(IAsyncTransaction tx, string cypher, Dictionary <string, object> parameters = null)
        {
            IResultCursor result;

            if (parameters != null)
            {
                result = await tx.RunAsync(cypher, parameters);
            }
            else
            {
                result = await tx.RunAsync(cypher);
            }

            return(await result?.ToListAsync());
        }
Пример #16
0
        internal static async Task <List <T> > ReadTransactionAsList <T>(this IAsyncTransaction tx, string query, object parameters, Func <IResultCursor, T> conversionFunction)
        {
            var cursor = await tx.RunAsync(query, parameters);

            var fetched = await cursor.FetchAsync();

            var output = new List <T>();

            while (fetched)
            {
                output.Add(conversionFunction(cursor));
                fetched = await cursor.FetchAsync();
            }

            return(output);
        }
        public static async Task <IResultCursor> SetNodeAsync <TEntity>(
            this IAsyncTransaction asyncTransaction,
            TEntity entity) where TEntity : class
        {
            var nodeId = EntityAccessor.GetNodeId(entity);

            if (nodeId == null)
            {
                throw new InvalidOperationException(Constants.NodeIdUnspecifiedMessage);
            }

            var parameters = new Neo4jParameters()
                             .WithValue("p1", nodeId)
                             .WithEntity("p2", entity);

            return(await asyncTransaction.RunAsync(Constants.Statement.SetNode, parameters)
                   .ConfigureAwait(false));
        }
        public override async Task Process()
        {
            try
            {
                var sessionContainer = (NewSession)ObjManager.GetObject(data.sessionId);
                await sessionContainer.Session.ReadTransactionAsync(async t =>
                {
                    Transaction = t;
                    await AysncVoidReturn();
                });

                //TODO.... it looks like the go backend  processes further messages to handle a retryable state
                //then returns a RetryableDone in amoungst the other returns....talk to peter.
            }
            catch (Exception ex)
            {
                throw new Exception($"Failed to Process TransactionRun protocol object, failed with - {ex.Message}");
            }
        }
Пример #19
0
        public void SetUp()
        {
            _driver      = Substitute.For <IDriver>();
            _session     = Substitute.For <IAsyncSession>();
            _transaction = Substitute.For <IAsyncTransaction>();

            _repository = new GraphRepository(new GraphDbSettingsBuilder()
                                              .Build(),
                                              new CypherBuilderFactory(),
                                              _driver);

            _driver
            .AsyncSession()
            .Returns(_session);

            _session
            .When(_ => _.WriteTransactionAsync(Arg.Any <Func <IAsyncTransaction, Task> >()))
            .Do(_ => _.ArgAt <Func <IAsyncTransaction, Task> >(0).Invoke(_transaction));

            _session
            .When(_ => _.ReadTransactionAsync(Arg.Any <Func <IAsyncTransaction, Task <List <IRecord> > > >()))
            .Do(_ => _.ArgAt <Func <IAsyncTransaction, Task <List <IRecord> > > >(0).Invoke(_transaction));
        }
Пример #20
0
 public TransactionWrapper(IAsyncTransaction transaction, Func <IResultCursor, Task <string> > resultHandler)
 {
     Transaction   = transaction;
     ResultHandler = resultHandler;
 }
Пример #21
0
 public static Task<IResultCursor> RunAsync(this IAsyncTransaction transaction, CypherQuery query, IGraphClient gc)
 {
     return transaction.RunAsync(query.QueryText, query.ToNeo4jDriverParameters(gc));
 }
 private static Task CreatePersonNodeAsync(IAsyncTransaction tx, string name)
 {
     return(tx.RunAsync("CREATE (a:Person {name: $name})", new { name }));
 }
Пример #23
0
 public static async Task InitialiseUniqueIdsAsync(this IAsyncTransaction transaction)
 {
     await transaction.InitialiseAsync().ConfigureAwait(false);
 }
Пример #24
0
        public static void GetDriverAndSession(out IDriver driver, out IAsyncSession session, out IAsyncTransaction transaction)
        {
            var mockNode = Substitute.For <INode>();

            mockNode["Name"].Returns("Value");
            mockNode.Labels.Returns(new List <string> {
                "Node"
            });
            mockNode.Properties.Returns(new Dictionary <string, object> {
                { "Name", "Value" }
            });

            var mockRecord = Substitute.For <IRecord>();

            mockRecord.Keys.Returns(new List <string> {
                "Node"
            });
            mockRecord["Node"].Returns(mockNode);
            mockRecord.Values["Node"].Returns(mockNode);

            var mockStatementResult = new TestStatementResult(new List <IRecord>(new[] { mockRecord }));

            var mockTransaction = Substitute.For <IAsyncTransaction>();

            mockTransaction.RunAsync(Arg.Any <string>(), Arg.Any <IDictionary <string, object> >()).Returns(mockStatementResult);

            var task = Task.FromResult(mockTransaction);

            task.Result.Should().NotBe(null);

            var mockSession = Substitute.For <IAsyncSession>();
            var dbmsReturn  = GetDbmsComponentsResponse();

            mockSession.RunAsync("CALL dbms.components()").Returns(dbmsReturn);
            mockSession.BeginTransactionAsync().Returns(Task.FromResult(mockTransaction));
            mockSession.BeginTransactionAsync(Arg.Any <Action <TransactionConfigBuilder> >()).Returns(Task.FromResult(mockTransaction));

            var mockDriver = Substitute.For <IDriver>();

            mockDriver.AsyncSession().Returns(mockSession);
            mockDriver.AsyncSession(Arg.Any <Action <SessionConfigBuilder> >()).Returns(mockSession);


            driver      = mockDriver;
            session     = mockSession;
            transaction = mockTransaction;
        }
 internal NeoTransactionContext(IDriver driver, NeoContextEngine executingEngine, IAsyncTransaction transaction) : base(driver, executingEngine)
 {
     this.transaction = transaction;
 }
Пример #26
0
 public static async Task UpdateUniqueIdAsync(this IAsyncTransaction transaction, string scope, long value)
 {
     await transaction.UpdateAsync(scope, value).ConfigureAwait(false);
 }
Пример #27
0
 public static async Task <long> NextUniqueIdAsync(this IAsyncTransaction transaction, string scope)
 {
     return(await transaction.NextIdAsync(scope).ConfigureAwait(false));
 }
Пример #28
0
 public InternalRxTransaction(IAsyncTransaction transaction)
 {
     _transaction = transaction;
 }
Пример #29
0
        public static void GetAndConnectGraphClient(out IGraphClient graphClient, out IDriver driver, out IAsyncSession session, out IAsyncTransaction transaction)
        {
            GetDriverAndSession(out driver, out session, out transaction);
            var client = new BoltGraphClient(driver);

            client.ConnectAsync().Wait();

            driver.ClearReceivedCalls();
            session.ClearReceivedCalls();
            graphClient = client;
        }