private static String tokenById( TokenHolder tokenHolder, int tokenId, String tokenName ) { try { return tokenHolder.getTokenById( tokenId ).name(); } catch ( TokenNotFoundException e ) { // Ignore errors from reading key } return format( "%s[%d]", tokenName, tokenId ); } }
private int getOrCreatePropertyKeyId( String name ) { return tokenHolders.propertyKeyTokens().getOrCreateId( name ); }
private void getOrCreateForNames( TokenHolder tokenHolder, String[] names, int[] ids ) throws IllegalTokenNameException { ktx.assertOpen(); assertSameLength( names, ids ); for ( int i = 0; i < names.length; i++ ) { ids[i] = tokenHolder.getIdByName( checkValidTokenName( names[i] ) ); if ( ids[i] == NO_TOKEN ) { ktx.assertAllows( AccessMode::allowsTokenCreates, "Token create" ); tokenHolder.getOrCreateIds( names, ids ); return; } } }
private int getOrCreateForName( TokenHolder tokens, String name ) throws IllegalTokenNameException { ktx.assertOpen(); int id = tokens.getIdByName( checkValidTokenName( name ) ); if ( id != NO_TOKEN ) { return id; } ktx.assertAllows( AccessMode::allowsTokenCreates, "Token create" ); return tokens.getOrCreateId( name ); }
private void initialTokensABC() throws KernelException { holder.setInitialTokens( asList( token( "a", 1 ), token( "b", 2 ) ) ); when( creator.createToken( "c" ) ).thenReturn( 3 ); assertThat( holder.getOrCreateId( "c" ), is( 3 ) ); }
@Test public void batchTokenCreateMustDeduplicateTokenCreates() throws Exception { initialTokensABC(); AtomicInteger nextId = new AtomicInteger( 42 ); mockAssignNewTokenIdsInBatch( nextId ); // NOTE: the existing 'b', and the missing 'X', tokens are in here twice: String[] names = new String[]{"b", "b", "X", "a", "X", "c"}; int[] ids = new int[names.length]; holder.getOrCreateIds( names, ids ); assertThat( ids.length, is( 6 ) ); assertThat( ids[0], is( 2 ) ); assertThat( ids[1], is( 2 ) ); assertThat( ids[2], is( 42 ) ); assertThat( ids[3], is( 1 ) ); assertThat( ids[4], is( 42 ) ); assertThat( ids[5], is( 3 ) ); assertThat( nextId.get(), is( 43 ) ); // And this should not throw. holder.getTokenById( 42 ); }
@Override public void start() throws Throwable { neoStores.makeStoreOk(); tokenHolders.propertyKeyTokens().setInitialTokens( neoStores.getPropertyKeyTokenStore().getTokens() ); tokenHolders.relationshipTypeTokens().setInitialTokens( neoStores.getRelationshipTypeTokenStore().getTokens() ); tokenHolders.labelTokens().setInitialTokens( neoStores.getLabelTokenStore().getTokens() ); neoStores.startCountStore(); // TODO: move this to counts store lifecycle loadSchemaCache(); indexingService.start(); labelScanStore.start(); idController.start(); }
@Override public int relationshipType( String name ) { ktx.assertOpen(); return tokenHolders.relationshipTypeTokens().getIdByName( name ); }
@Test public void shouldClearTokensAsPartOfInitialTokenLoading() { // GIVEN holder.setInitialTokens( asList( token( "one", 1 ), token( "two", 2 ) ) ); assertTokens( holder.getAllTokens(), token( "one", 1 ), token( "two", 2 ) ); // WHEN holder.setInitialTokens( asList( token( "two", 2 ), token( "three", 3 ), token( "four", 4 ) ) ); // THEN assertTokens( holder.getAllTokens(), token( "two", 2 ), token( "three", 3 ), token( "four", 4 ) ); }
@Test public void batchTokenGetMustReturnWhetherThereWereUnresolvedTokens() { holder.setInitialTokens( asList( token( "a", 1 ), token( "b", 2 ) ) ); String[] names; int[] ids; names = new String[]{"a", "X", "b"}; ids = new int[]{-1, -1, -1}; assertTrue( holder.getIdsByNames( names, ids ) ); assertThat( ids[0], is( 1 ) ); assertThat( ids[1], is( -1 ) ); assertThat( ids[2], is( 2 ) ); names = new String[]{"a", "b"}; ids = new int[]{-1, -1}; assertFalse( holder.getIdsByNames( names, ids ) ); assertThat( ids[0], is( 1 ) ); assertThat( ids[1], is( 2 ) ); }
@Override public Iterator<NamedToken> labelsGetAllTokens() { ktx.assertOpen(); return tokenHolders.labelTokens().getAllTokens().iterator(); }
@Test( expected = IllegalArgumentException.class ) public void batchTokenCreateMustThrowOnArraysOfDifferentLengths() { holder.getOrCreateIds( new String[3], new int[2] ); }
@Override public void addRelationshipTypeToken( NamedToken type ) { tokenHolders.relationshipTypeTokens().addToken( type ); }
@Test public void batchTokenCreateMustIgnoreExistingTokens() throws Exception { initialTokensABC(); AtomicInteger nextId = new AtomicInteger( 42 ); mockAssignNewTokenIdsInBatch( nextId ); String[] names = new String[]{"b", "X", "a", "Y", "c"}; int[] ids = new int[names.length]; holder.getOrCreateIds( names, ids ); assertThat( ids.length, is( 5 ) ); assertThat( ids[0], is( 2 ) ); assertThat( ids[1], isOneOf( 42, 43 ) ); assertThat( ids[2], is( 1 ) ); assertThat( ids[3], isOneOf( 42, 43 ) ); assertThat( ids[4], is( 3 ) ); assertThat( nextId.get(), is( 44 ) ); // And these should not throw. holder.getTokenById( 42 ); holder.getTokenById( 43 ); }
private int getOrCreateForName( TokenHolder tokens, String name ) throws IllegalTokenNameException { ktx.assertOpen(); int id = tokens.getIdByName( checkValidTokenName( name ) ); if ( id != NO_TOKEN ) { return id; } ktx.assertAllows( AccessMode::allowsTokenCreates, "Token create" ); return tokens.getOrCreateId( name ); }
tokenHolders.propertyKeyTokens().setInitialTokens( neoStores.getPropertyKeyTokenStore().getTokens() ); tokenHolders.labelTokens().setInitialTokens( neoStores.getLabelTokenStore().getTokens() ); tokenHolders.relationshipTypeTokens().setInitialTokens( neoStores.getRelationshipTypeTokenStore().getTokens() );
@Override public int nodeLabel( String name ) { ktx.assertOpen(); return tokenHolders.labelTokens().getIdByName( name ); }
@Override public Iterator<NamedToken> relationshipTypesGetAllTokens() { ktx.assertOpen(); return tokenHolders.relationshipTypeTokens().getAllTokens().iterator(); }
if ( type == EntityType.NODE ) tokenHolders.labelTokens().getOrCreateIds( entityTokens, entityTokenIds ); tokenHolders.relationshipTypeTokens().getOrCreateIds( entityTokens, entityTokenIds );
@Override public void addLabelToken( NamedToken label ) { tokenHolders.labelTokens().addToken( label ); }