/** * Register a new internal procedure defined with annotations on a java class. * @param proc the procedure class */ public void registerProcedure( Class<?> proc ) throws KernelException { registerProcedure( proc, false ); }
/** * Register a new internal procedure defined with annotations on a java class. * @param proc the procedure class * @param overrideCurrentImplementation set to true if procedures within this class should override older procedures with the same name */ public void registerProcedure( Class<?> proc, boolean overrideCurrentImplementation ) throws KernelException { registerProcedure( proc, overrideCurrentImplementation, null ); }
public void registerProcedures( Procedures procedures, ProcedureConfig procedureConfig ) throws KernelException { procedures.registerProcedure( org.neo4j.kernel.builtinprocs.BuiltInProcedures.class ); procedures.registerProcedure( org.neo4j.kernel.builtinprocs.TokenProcedures.class ); procedures.registerProcedure( org.neo4j.kernel.builtinprocs.BuiltInDbmsProcedures.class ); procedures.registerBuiltInFunctions( org.neo4j.kernel.builtinprocs.BuiltInFunctions.class ); registerTemporalFunctions( procedures, procedureConfig ); registerEditionSpecificProcedures( procedures ); }
@SuppressWarnings( "deprecation" ) public void applyTo( Procedures procedures ) throws KernelException { for ( Class<?> cls : procs ) { procedures.registerProcedure( cls ); } for ( Class<?> cls : functions ) { procedures.registerFunction( cls ); } for ( Class<?> cls : aggregationFunctions ) { procedures.registerAggregationFunction( cls ); } } }
public static AutoCloseable setupDataCollector( Procedures procedures, JobScheduler jobScheduler, Kernel kernel, Monitors monitors, ValueMapper.JavaMapper valueMapper ) throws KernelException { Preconditions.checkState( kernel != null, "Kernel was null" ); DataCollector dataCollector = new DataCollector( kernel, jobScheduler, monitors, valueMapper ); procedures.registerComponent( DataCollector.class, ctx -> dataCollector, false ); procedures.registerProcedure( DataCollectorProcedures.class ); return dataCollector; } }
@Test public void shouldFailCompileProcedureWithReadConflict() throws Throwable { exception.expect( ProcedureException.class ); exception.expectMessage( "Conflicting procedure annotation, cannot use PerformsWrites and mode" ); procs.registerProcedure( ProcedureWithReadConflictAnnotation.class ); }
@Test public void deprecatedProcedureResultField() throws Exception { db().getDependencyResolver().provideDependency( Procedures.class ).get().registerProcedure( TestProcedures.class ); Stream.of( "CYPHER 3.5" ).forEach( version -> assertNotifications( version + "explain CALL changedProc() YIELD oldField RETURN oldField", containsItem( deprecatedProcedureReturnFieldWarning ) ) ); }
@Test public void shouldFailCompileProcedureWithDBMSConflict() throws Throwable { exception.expect( ProcedureException.class ); exception.expectMessage( "Conflicting procedure annotation, cannot use PerformsWrites and mode" ); procs.registerProcedure( ProcedureWithDBMSConflictAnnotation.class ); }
@Test public void shouldBeAbleToUseResultsOfPointProcedureAsInputToDistanceFunction() throws Exception { // given procedure that produces a point Procedures procedures = graphDb.getDependencyResolver().resolveDependency( Procedures.class ); procedures.registerProcedure( PointProcs.class ); // when calling procedure that produces a point Result result = graphDb.execute( "CALL spatial.point(144.317718, -37.031738) YIELD point " + "RETURN distance(point({longitude: 144.317718, latitude: -37.031738}), point) AS dist" ); // then Double dist = (Double) result.next().get( "dist" ); assertThat( dist, equalTo( 0.0 ) ); }
@Test public void shouldFailCompileProcedureWithWriteConflict() throws Throwable { exception.expect( ProcedureException.class ); exception.expectMessage( "Conflicting procedure annotation, cannot use PerformsWrites and mode" ); procs.registerProcedure( ProcedureWithWriteConflictAnnotation.class ); }
@Test public void shouldFailCompileProcedureWithSchemaConflict() throws Throwable { exception.expect( ProcedureException.class ); exception.expectMessage( "Conflicting procedure annotation, cannot use PerformsWrites and mode" ); procs.registerProcedure( ProcedureWithSchemaConflictAnnotation.class ); }
@Test public void shouldBeAbleToUseResultsOfPointGeometryProcedureAsInputToDistanceFunction() throws Exception { // given procedure that produces a point Procedures procedures = graphDb.getDependencyResolver().resolveDependency( Procedures.class ); procedures.registerProcedure( PointProcs.class ); // when calling procedure that produces a point Result result = graphDb.execute( "CALL spatial.pointGeometry(144.317718, -37.031738) YIELD geometry " + "RETURN distance(point({longitude: 144.317718, latitude: -37.031738}), geometry) AS dist" ); // then Object dist1 = result.next().get( "dist" ); Double dist = (Double) dist1; assertThat( dist, equalTo( 0.0 ) ); }
@Test public void deprecatedProcedureCalls() throws Exception { db().getDependencyResolver().provideDependency( Procedures.class ).get().registerProcedure( TestProcedures.class ); Stream.of( "CYPHER 3.1", "CYPHER 3.5" ).forEach( version -> { assertNotifications( version + "explain CALL oldProc()", containsItem( deprecatedProcedureWarning ) ); assertNotifications( version + "explain CALL oldProc() RETURN 1", containsItem( deprecatedProcedureWarning ) ); } ); }
procs.registerProcedure( BuiltInProcedures.class ); procs.registerProcedure( BuiltInDbmsProcedures.class );
@Override public void setup( Dependencies dependencies ) throws KernelException { Config config = dependencies.config(); Procedures procedures = dependencies.procedures(); LogProvider logProvider = dependencies.logService().getUserLogProvider(); FileSystemAbstraction fileSystem = dependencies.fileSystem(); final UserRepository userRepository = getUserRepository( config, logProvider, fileSystem ); final UserRepository initialUserRepository = getInitialUserRepository( config, logProvider, fileSystem ); final PasswordPolicy passwordPolicy = new BasicPasswordPolicy(); authManager = new BasicAuthManager( userRepository, passwordPolicy, Clocks.systemClock(), initialUserRepository, config ); life.add( dependencies.dependencySatisfier().satisfyDependency( authManager ) ); procedures.registerComponent( UserManager.class, ctx -> authManager, false ); procedures.registerProcedure( AuthProcedures.class ); }
dependencies.procedures().registerProcedure( FulltextProcedures.class );
public static void registerProcedure(GraphDatabaseService db, Class<?>...procedures) throws KernelException { Procedures proceduresService = ((GraphDatabaseAPI) db).getDependencyResolver().resolveDependency(Procedures.class); for (Class<?> procedure : procedures) { proceduresService.registerProcedure(procedure,true); proceduresService.registerFunction(procedure, true); proceduresService.registerAggregationFunction(procedure, true); } }
/** * Register a new internal procedure defined with annotations on a java class. * @param proc the procedure class */ public void registerProcedure( Class<?> proc ) throws KernelException { registerProcedure( proc, false ); }
public void registerProcedures( Procedures procedures, ProcedureConfig procedureConfig ) throws KernelException { procedures.registerProcedure( org.neo4j.kernel.builtinprocs.BuiltInProcedures.class ); procedures.registerProcedure( org.neo4j.kernel.builtinprocs.TokenProcedures.class ); procedures.registerProcedure( org.neo4j.kernel.builtinprocs.BuiltInDbmsProcedures.class ); procedures.registerBuiltInFunctions( org.neo4j.kernel.builtinprocs.BuiltInFunctions.class ); registerTemporalFunctions( procedures, procedureConfig ); registerEditionSpecificProcedures( procedures ); }
@Override public void registerEditionSpecificProcedures( Procedures procedures ) throws KernelException { procedures.registerProcedure( org.neo4j.kernel.enterprise.builtinprocs.BuiltInProcedures.class ); procedures.register( new EdgeRoleProcedure() ); }