Search in sources :

Example 1 with IndexField

use of org.janusgraph.graphdb.types.IndexField in project janusgraph by JanusGraph.

the class ManagementSystem method addIndexKey.

@Override
public void addIndexKey(final JanusGraphIndex index, final PropertyKey key, Parameter... parameters) {
    Preconditions.checkArgument(index != null && key != null && index instanceof JanusGraphIndexWrapper && !(key instanceof BaseKey), "Need to provide valid index and key");
    if (parameters == null)
        parameters = new Parameter[0];
    IndexType indexType = ((JanusGraphIndexWrapper) index).getBaseIndex();
    Preconditions.checkArgument(indexType instanceof MixedIndexType, "Can only add keys to an external index, not %s", index.name());
    Preconditions.checkArgument(indexType instanceof IndexTypeWrapper && key instanceof JanusGraphSchemaVertex && ((IndexTypeWrapper) indexType).getSchemaBase() instanceof JanusGraphSchemaVertex);
    JanusGraphSchemaVertex indexVertex = (JanusGraphSchemaVertex) ((IndexTypeWrapper) indexType).getSchemaBase();
    for (IndexField field : indexType.getFieldKeys()) Preconditions.checkArgument(!field.getFieldKey().equals(key), "Key [%s] has already been added to index %s", key.name(), index.name());
    // Assemble parameters
    boolean addMappingParameter = !ParameterType.MAPPED_NAME.hasParameter(parameters);
    Parameter[] extendedParas = new Parameter[parameters.length + 1 + (addMappingParameter ? 1 : 0)];
    System.arraycopy(parameters, 0, extendedParas, 0, parameters.length);
    int arrPosition = parameters.length;
    if (addMappingParameter)
        extendedParas[arrPosition++] = ParameterType.MAPPED_NAME.getParameter(graph.getIndexSerializer().getDefaultFieldName(key, parameters, indexType.getBackingIndexName()));
    extendedParas[arrPosition] = ParameterType.STATUS.getParameter(key.isNew() ? SchemaStatus.ENABLED : SchemaStatus.INSTALLED);
    addSchemaEdge(indexVertex, key, TypeDefinitionCategory.INDEX_FIELD, extendedParas);
    updateSchemaVertex(indexVertex);
    indexType.resetCache();
    // Check to see if the index supports this
    if (!graph.getIndexSerializer().supports((MixedIndexType) indexType, ParameterIndexField.of(key, parameters))) {
        throw new JanusGraphException("Could not register new index field '" + key.name() + "' with index backend as the data type, cardinality or parameter combination is not supported.");
    }
    try {
        IndexSerializer.register((MixedIndexType) indexType, key, transaction.getTxHandle());
    } catch (BackendException e) {
        throw new JanusGraphException("Could not register new index field with index backend", e);
    }
    if (!indexVertex.isNew())
        updatedTypes.add(indexVertex);
    if (!key.isNew())
        updateIndex(index, SchemaAction.REGISTER_INDEX);
}
Also used : MixedIndexType(org.janusgraph.graphdb.types.MixedIndexType) JanusGraphException(org.janusgraph.core.JanusGraphException) BaseKey(org.janusgraph.graphdb.types.system.BaseKey) BackendException(org.janusgraph.diskstorage.BackendException) IndexTypeWrapper(org.janusgraph.graphdb.types.indextype.IndexTypeWrapper) Parameter(org.janusgraph.core.schema.Parameter) JanusGraphSchemaVertex(org.janusgraph.graphdb.types.vertices.JanusGraphSchemaVertex) IndexType(org.janusgraph.graphdb.types.IndexType) CompositeIndexType(org.janusgraph.graphdb.types.CompositeIndexType) MixedIndexType(org.janusgraph.graphdb.types.MixedIndexType) IndexField(org.janusgraph.graphdb.types.IndexField) ParameterIndexField(org.janusgraph.graphdb.types.ParameterIndexField)

Example 2 with IndexField

use of org.janusgraph.graphdb.types.IndexField in project janusgraph by JanusGraph.

the class IndexHelper method getQuery.

public static GraphCentricQueryBuilder getQuery(CompositeIndexType index, Object[] values, StandardJanusGraphTx tx) {
    Preconditions.checkArgument(index != null && values != null && values.length > 0 && tx != null);
    Preconditions.checkArgument(values.length == index.getFieldKeys().length);
    GraphCentricQueryBuilder gb = tx.query();
    IndexField[] fields = index.getFieldKeys();
    for (int i = 0; i < fields.length; i++) {
        IndexField f = fields[i];
        Object value = values[i];
        Preconditions.checkNotNull(value);
        PropertyKey key = f.getFieldKey();
        Preconditions.checkArgument(key.dataType().equals(value.getClass()), "Incompatible data types for: " + value);
        gb.has(key, Cmp.EQUAL, value);
    }
    if (index.hasSchemaTypeConstraint()) {
        gb.has(ImplicitKey.LABEL, Cmp.EQUAL, index.getSchemaTypeConstraint().name());
    }
    return gb;
}
Also used : GraphCentricQueryBuilder(org.janusgraph.graphdb.query.graph.GraphCentricQueryBuilder) IndexField(org.janusgraph.graphdb.types.IndexField) PropertyKey(org.janusgraph.core.PropertyKey)

Example 3 with IndexField

use of org.janusgraph.graphdb.types.IndexField in project janusgraph by JanusGraph.

the class IndexTypeWrapper method getField.

@Override
public IndexField getField(PropertyKey key) {
    Map<PropertyKey, IndexField> result = fieldMap;
    if (result == null) {
        ImmutableMap.Builder<PropertyKey, IndexField> b = ImmutableMap.builder();
        for (IndexField f : getFieldKeys()) b.put(f.getFieldKey(), f);
        result = b.build();
        fieldMap = result;
    }
    assert result != null;
    return result.get(key);
}
Also used : IndexField(org.janusgraph.graphdb.types.IndexField) PropertyKey(org.janusgraph.core.PropertyKey) ImmutableMap(com.google.common.collect.ImmutableMap)

Aggregations

IndexField (org.janusgraph.graphdb.types.IndexField)3 PropertyKey (org.janusgraph.core.PropertyKey)2 ImmutableMap (com.google.common.collect.ImmutableMap)1 JanusGraphException (org.janusgraph.core.JanusGraphException)1 Parameter (org.janusgraph.core.schema.Parameter)1 BackendException (org.janusgraph.diskstorage.BackendException)1 GraphCentricQueryBuilder (org.janusgraph.graphdb.query.graph.GraphCentricQueryBuilder)1 CompositeIndexType (org.janusgraph.graphdb.types.CompositeIndexType)1 IndexType (org.janusgraph.graphdb.types.IndexType)1 MixedIndexType (org.janusgraph.graphdb.types.MixedIndexType)1 ParameterIndexField (org.janusgraph.graphdb.types.ParameterIndexField)1 IndexTypeWrapper (org.janusgraph.graphdb.types.indextype.IndexTypeWrapper)1 BaseKey (org.janusgraph.graphdb.types.system.BaseKey)1 JanusGraphSchemaVertex (org.janusgraph.graphdb.types.vertices.JanusGraphSchemaVertex)1