@Test( expected = IllegalArgumentException.class ) public void batchTokenCreateMustThrowOnArraysOfDifferentLengths() { holder.getOrCreateIds( new String[3], new int[2] ); }
if ( type == EntityType.NODE ) tokenHolders.labelTokens().getOrCreateIds( entityTokens, entityTokenIds ); tokenHolders.relationshipTypeTokens().getOrCreateIds( entityTokens, entityTokenIds );
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; } } }
@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 ); }
@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 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; } } }