@Override public void cleanForReuse() { // close the old statement reference after the statement has been "upgraded" // to either a schema data or a schema statement, so that the locks are "handed over". statement.queryRegistration().unregisterExecutingQuery( executingQuery ); statement.close(); statement = txBridge.get(); statement.queryRegistration().registerExecutingQuery( executingQuery ); }
@Override public TransactionalContext getOrBeginNewIfClosed() { checkNotTerminated(); if ( !isOpen ) { transaction = graph.beginTransaction( transactionType, securityContext ); kernelTransaction = txBridge.getKernelTransactionBoundToThisThread( true ); statement = kernelTransaction.acquireStatement(); statement.queryRegistration().registerExecutingQuery( executingQuery ); isOpen = true; } return this; }
@Override public final Neo4jTransactionalContext newContext( ClientConnectionInfo clientConnection, InternalTransaction tx, String queryText, MapValue queryParameters ) { Statement initialStatement = statementSupplier.get(); ClientConnectionInfo connectionWithUserName = clientConnection.withUsername( tx.securityContext().subject().username() ); ExecutingQuery executingQuery = initialStatement.queryRegistration().startQueryExecution( connectionWithUserName, queryText, queryParameters ); return contextCreator.create( tx, initialStatement, executingQuery ); } }
KernelTransaction.Type type = KernelTransaction.Type.implicit; QueryRegistryOperations registryOperations = mock( QueryRegistryOperations.class ); when( statement.queryRegistration() ).thenReturn( registryOperations ); when( statementBridge.get() ).thenReturn( statement ); when( kernelTransaction.securityContext() ).thenReturn( loginContext.authorize( s -> -1, GraphDatabaseSettings.DEFAULT_DATABASE_NAME ) );
@Override public void close( boolean success ) { if ( isOpen ) { try { statement.queryRegistration().unregisterExecutingQuery( executingQuery ); statement.close(); if ( success ) { transaction.success(); } else { transaction.failure(); } transaction.close(); } finally { statement = null; kernelTransaction = null; transaction = null; isOpen = false; } } }
initialKTX, secondKTX ); when( secondStatement.queryRegistration() ).thenReturn( secondQueryRegistry );
when( executingQuery.queryParameters() ).thenReturn( EMPTY_MAP ); Mockito.doThrow( RuntimeException.class ).when( initialTransaction ).close(); when( initialStatement.queryRegistration() ).thenReturn( initialQueryRegistry ); when( queryService.beginTransaction( transactionType, securityContext ) ).thenReturn( secondTransaction ); when( txBridge.getKernelTransactionBoundToThisThread( true ) ).thenReturn( initialKTX, initialKTX, secondKTX ); when( txBridge.get() ).thenReturn( secondStatement ); when( secondStatement.queryRegistration() ).thenReturn( secondQueryRegistry );
private void runTransaction( LoginContext loginContext, Map<String,Object> metaData ) { try ( Transaction transaction = db.beginTransaction( KernelTransaction.Type.explicit, loginContext ); Statement statement = db.getDependencyResolver().resolveDependency( ThreadToStatementContextBridge.class ).get() ) { statement.queryRegistration().setMetaData( metaData ); db.createNode(); transaction.success(); } }
QueryRegistryOperations oldQueryRegistryOperations = statement.queryRegistration(); Statement oldStatement = statement; InternalTransaction oldTransaction = transaction; kernelTransaction = txBridge.getKernelTransactionBoundToThisThread( true ); statement = kernelTransaction.acquireStatement(); statement.queryRegistration().registerExecutingQuery( executingQuery ); txBridge.unbindTransactionFromCurrentThread();
@Override public void cleanForReuse() { // close the old statement reference after the statement has been "upgraded" // to either a schema data or a schema statement, so that the locks are "handed over". statement.queryRegistration().unregisterExecutingQuery( executingQuery ); statement.close(); statement = txBridge.get(); statement.queryRegistration().registerExecutingQuery( executingQuery ); }
@Description( "Attaches a map of data to the transaction. The data will be printed when listing queries, and " + "inserted into the query log." ) @Procedure( name = "dbms.setTXMetaData", mode = DBMS ) public void setTXMetaData( @Name( value = "data" ) Map<String,Object> data ) { securityContext.assertCredentialsNotExpired(); int totalCharSize = data.entrySet().stream() .mapToInt( e -> e.getKey().length() + e.getValue().toString().length() ) .sum(); if ( totalCharSize >= HARD_CHAR_LIMIT ) { throw new IllegalArgumentException( format( "Invalid transaction meta-data, expected the total number of chars for " + "keys and values to be less than %d, got %d", HARD_CHAR_LIMIT, totalCharSize ) ); } try ( Statement statement = getCurrentTx().acquireStatement() ) { statement.queryRegistration().setMetaData( data ); } }
@Description( "Provides attached transaction metadata." ) @Procedure( name = "dbms.getTXMetaData", mode = DBMS ) public Stream<MetadataResult> getTXMetaData() { securityContext.assertCredentialsNotExpired(); try ( Statement statement = getCurrentTx().acquireStatement() ) { return Stream.of( statement.queryRegistration().getMetaData() ).map( MetadataResult::new ); } }
@Override public final Neo4jTransactionalContext newContext( ClientConnectionInfo clientConnection, InternalTransaction tx, String queryText, MapValue queryParameters ) { Statement initialStatement = statementSupplier.get(); ClientConnectionInfo connectionWithUserName = clientConnection.withUsername( tx.securityContext().subject().username() ); ExecutingQuery executingQuery = initialStatement.queryRegistration().startQueryExecution( connectionWithUserName, queryText, queryParameters ); return contextCreator.create( tx, initialStatement, executingQuery ); } }
@Override public TransactionalContext getOrBeginNewIfClosed() { checkNotTerminated(); if ( !isOpen ) { transaction = graph.beginTransaction( transactionType, securityContext ); kernelTransaction = txBridge.getKernelTransactionBoundToThisThread( true ); statement = kernelTransaction.acquireStatement(); statement.queryRegistration().registerExecutingQuery( executingQuery ); isOpen = true; } return this; }
@Override public void close( boolean success ) { if ( isOpen ) { try { statement.queryRegistration().unregisterExecutingQuery( executingQuery ); statement.close(); if ( success ) { transaction.success(); } else { transaction.failure(); } transaction.close(); } finally { statement = null; kernelTransaction = null; transaction = null; isOpen = false; } } }
QueryRegistryOperations oldQueryRegistryOperations = statement.queryRegistration(); Statement oldStatement = statement; InternalTransaction oldTransaction = transaction; kernelTransaction = txBridge.getKernelTransactionBoundToThisThread( true ); statement = kernelTransaction.acquireStatement(); statement.queryRegistration().registerExecutingQuery( executingQuery ); txBridge.unbindTransactionFromCurrentThread();