Skip to content

Commit

Permalink
Add key and version to IndexReference
Browse files Browse the repository at this point in the history
  • Loading branch information
pontusmelke committed Mar 13, 2018
1 parent 6c20367 commit a849450
Show file tree
Hide file tree
Showing 10 changed files with 101 additions and 18 deletions.
Expand Up @@ -58,5 +58,17 @@ public int[] properties()
{
return new int[0];
}

@Override
public String providerKey()
{
return null;
}

@Override
public String providerVersion()
{
return null;
}
};
}
Expand Up @@ -30,4 +30,8 @@ public interface IndexReference
int label();

int[] properties();

String providerKey();

String providerVersion();
}
Expand Up @@ -31,7 +31,6 @@
import org.neo4j.values.storable.Values;

import static java.util.concurrent.TimeUnit.MINUTES;
import static java.util.concurrent.TimeUnit.SECONDS;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertEquals;
Expand Down Expand Up @@ -107,6 +106,8 @@ void createTestGraph( GraphDatabaseService graphDb )
}

protected abstract void createCompositeIndex( GraphDatabaseService graphDb, String label, String... properties ) throws Exception;
protected abstract String providerKey();
protected abstract String providerVersion();

@Test
public void shouldPerformExactLookup() throws Exception
Expand Down Expand Up @@ -553,6 +554,18 @@ public void shouldGetNoIndex()
assertEquals( "just bad", CapableIndexReference.NO_INDEX, schemaRead.index( badLabel, badProp ) );
}

@Test
public void shouldGetVersionAndKeyFromIndexReference() throws Exception
{
// Given
int label = token.nodeLabel( "Node" );
int prop = token.propertyKey( "prop" );
CapableIndexReference index = schemaRead.index( label, prop );

assertEquals( providerKey(), index.providerKey() );
assertEquals( providerVersion(), index.providerVersion() );
}

@Test
public void shouldNotFindDeletedNodeInIndexScan() throws Exception
{
Expand Down
Expand Up @@ -17,26 +17,31 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.neo4j.kernel.impl.newapi;
package org.neo4j.kernel.impl.api.store;

import org.neo4j.internal.kernel.api.CapableIndexReference;
import org.neo4j.internal.kernel.api.IndexCapability;
import org.neo4j.internal.kernel.api.IndexOrder;
import org.neo4j.internal.kernel.api.IndexValueCapability;
import org.neo4j.kernel.api.index.IndexProvider;
import org.neo4j.values.storable.ValueGroup;

class DefaultCapableIndexReference implements CapableIndexReference
{
private final int label;
private final int[] properties;
private final boolean unique;
private final IndexProvider.Descriptor providerDescriptor;
private final IndexCapability capability;

DefaultCapableIndexReference( boolean unique, IndexCapability indexCapability, int label, int... properties )
DefaultCapableIndexReference( boolean unique, IndexCapability indexCapability,
IndexProvider.Descriptor providerDescriptor, int label,
int... properties )
{
this.unique = unique;
this.capability = indexCapability;
this.label = label;
this.providerDescriptor = providerDescriptor;
this.properties = properties;
}

Expand All @@ -58,6 +63,18 @@ public int[] properties()
return properties;
}

@Override
public String providerKey()
{
return providerDescriptor.getKey();
}

@Override
public String providerVersion()
{
return providerDescriptor.getVersion();
}

@Override
public IndexOrder[] orderCapability( ValueGroup... valueGroups )
{
Expand Down
Expand Up @@ -31,7 +31,7 @@
import org.neo4j.cursor.Cursor;
import org.neo4j.graphdb.TransactionFailureException;
import org.neo4j.helpers.collection.Iterators;
import org.neo4j.internal.kernel.api.IndexCapability;
import org.neo4j.internal.kernel.api.CapableIndexReference;
import org.neo4j.internal.kernel.api.InternalIndexState;
import org.neo4j.internal.kernel.api.exceptions.EntityNotFoundException;
import org.neo4j.internal.kernel.api.exceptions.LabelNotFoundKernelException;
Expand All @@ -50,6 +50,7 @@
import org.neo4j.kernel.api.schema.index.SchemaIndexDescriptor;
import org.neo4j.kernel.impl.api.DegreeVisitor;
import org.neo4j.kernel.impl.api.RelationshipVisitor;
import org.neo4j.kernel.impl.api.index.IndexProxy;
import org.neo4j.kernel.impl.api.index.IndexingService;
import org.neo4j.kernel.impl.core.IteratingPropertyReceiver;
import org.neo4j.kernel.impl.core.LabelTokenHolder;
Expand Down Expand Up @@ -242,10 +243,15 @@ public IndexProvider.Descriptor indexGetProviderDescriptor( SchemaIndexDescripto
return indexService.getIndexProxy( descriptor.schema() ).getProviderDescriptor();
}

@Override
public IndexCapability indexGetCapability( SchemaIndexDescriptor descriptor ) throws IndexNotFoundKernelException
public CapableIndexReference indexReference( SchemaIndexDescriptor descriptor ) throws IndexNotFoundKernelException
{
return indexService.getIndexProxy( descriptor.schema() ).getIndexCapability();
boolean unique = descriptor.type() == SchemaIndexDescriptor.Type.UNIQUE;
LabelSchemaDescriptor schema = descriptor.schema();
IndexProxy indexProxy = indexService.getIndexProxy( schema );

return new DefaultCapableIndexReference( unique, indexProxy.getIndexCapability(),
indexProxy.getProviderDescriptor(), schema.getLabelId(),
schema.getPropertyIds() );
}

@Override
Expand Down
Expand Up @@ -28,7 +28,6 @@
import org.neo4j.function.Suppliers.Lazy;
import org.neo4j.helpers.collection.Iterators;
import org.neo4j.internal.kernel.api.CapableIndexReference;
import org.neo4j.internal.kernel.api.IndexCapability;
import org.neo4j.internal.kernel.api.IndexReference;
import org.neo4j.internal.kernel.api.InternalIndexState;
import org.neo4j.internal.kernel.api.exceptions.ProcedureException;
Expand Down Expand Up @@ -286,13 +285,9 @@ public Iterator<CapableIndexReference> indexesGetForLabel( int labelId )

CapableIndexReference indexGetCapability( SchemaIndexDescriptor schemaIndexDescriptor )
{
boolean unique = schemaIndexDescriptor.type() == SchemaIndexDescriptor.Type.UNIQUE;
try
{
IndexCapability indexCapability = storeReadLayer.indexGetCapability( schemaIndexDescriptor );
return new DefaultCapableIndexReference( unique, indexCapability, schemaIndexDescriptor.schema()
.getLabelId(),
schemaIndexDescriptor.schema().getPropertyIds() );
return storeReadLayer.indexReference( schemaIndexDescriptor );
}
catch ( IndexNotFoundKernelException e )
{
Expand Down
Expand Up @@ -28,7 +28,7 @@
import org.neo4j.collection.primitive.PrimitiveLongIterator;
import org.neo4j.collection.primitive.PrimitiveLongResourceIterator;
import org.neo4j.cursor.Cursor;
import org.neo4j.internal.kernel.api.IndexCapability;
import org.neo4j.internal.kernel.api.CapableIndexReference;
import org.neo4j.internal.kernel.api.InternalIndexState;
import org.neo4j.internal.kernel.api.exceptions.EntityNotFoundException;
import org.neo4j.internal.kernel.api.exceptions.LabelNotFoundKernelException;
Expand Down Expand Up @@ -166,13 +166,13 @@ long indexGetCommittedId( SchemaIndexDescriptor index )
IndexProvider.Descriptor indexGetProviderDescriptor( SchemaIndexDescriptor descriptor ) throws IndexNotFoundKernelException;

/**
* Return capability of stored index.
* Return index reference of a stored index.
*
* @param descriptor {@link LabelSchemaDescriptor} to get capability for.
* @return {@link IndexCapability} for index.
* @param descriptor {@link LabelSchemaDescriptor} to get provider reference for.
* @return {@link IndexProvider.Descriptor} for index.
* @throws IndexNotFoundKernelException if index not found.
*/
IndexCapability indexGetCapability( SchemaIndexDescriptor descriptor ) throws IndexNotFoundKernelException;
CapableIndexReference indexReference( SchemaIndexDescriptor descriptor ) throws IndexNotFoundKernelException;

/**
* @param descriptor {@link LabelSchemaDescriptor} to get population progress for.
Expand Down
Expand Up @@ -26,4 +26,16 @@ public ReadTestSupport newTestSupport()
{
return new ReadTestSupport();
}

@Override
protected String providerKey()
{
return "in-memory-index";
}

@Override
protected String providerVersion()
{
return "1.0";
}
}
Expand Up @@ -31,4 +31,16 @@ public ReadTestSupport newTestSupport()
readTestSupport.addSetting( GraphDatabaseSettings.enable_native_schema_index, Settings.FALSE );
return readTestSupport;
}

@Override
protected String providerKey()
{
return "lucene";
}

@Override
protected String providerVersion()
{
return "1.0";
}
}
Expand Up @@ -31,4 +31,16 @@ public ReadTestSupport newTestSupport()
readTestSupport.addSetting( GraphDatabaseSettings.enable_native_schema_index, Settings.TRUE );
return readTestSupport;
}

@Override
protected String providerKey()
{
return "lucene+native";
}

@Override
protected String providerVersion()
{
return "1.0";
}
}

0 comments on commit a849450

Please sign in to comment.