public OIndex build(final ODatabaseDocumentTx db) { checkState(!propertyNames.isEmpty(), "At least one property is required"); checkState(propertyTypes.size() == propertyNames.size(), "A type must be defined for each property"); List<OCollate> collates = null; if (caseInsensitive) { collates = Lists.transform(propertyNames, n -> new OCaseInsensitiveCollate()); } ODocument metadata = new ODocument(); if (ignoreNullValues) { metadata.field("ignoreNullValues", true); } OIndexDefinition indexDefinition = OIndexDefinitionFactory.createIndexDefinition(type, propertyNames, propertyTypes, collates, indexType.name(), null); return db.getMetadata().getIndexManager().createIndex(name, indexType.name(), indexDefinition, type.getPolymorphicClusterIds(), null, metadata.fields() > 0 ? metadata : null); } }
public OIndex<?> createIndex(final String name, String type, final OProgressListener progressListener, ODocument metadata, String algorithm, final String... fields) { if (type == null) throw new IllegalArgumentException("Index type is null"); type = type.toUpperCase(Locale.ENGLISH); if (fields.length == 0) { throw new OIndexException("List of fields to index cannot be empty."); } final String localName = this.name; final int[] localPolymorphicClusterIds = polymorphicClusterIds; for (final String fieldToIndex : fields) { final String fieldName = decodeClassName(OIndexDefinitionFactory.extractFieldName(fieldToIndex)); if (!fieldName.equals("@rid") && !existsProperty(fieldName)) throw new OIndexException( "Index with name '" + name + "' cannot be created on class '" + localName + "' because the field '" + fieldName + "' is absent in class definition"); } final OIndexDefinition indexDefinition = OIndexDefinitionFactory .createIndexDefinition(this, Arrays.asList(fields), extractFieldTypes(fields), null, type, algorithm); return getDatabase().getMetadata().getIndexManager() .createIndex(name, type, indexDefinition, localPolymorphicClusterIds, progressListener, metadata, algorithm); }
private OIndex<?> getoIndex(OClass oClass, String[] fields, String engine, ODatabase database, List<OCollate> collatesList, ODocument metadataDoc) { OIndex<?> idx; if ((keyTypes == null || keyTypes.size() == 0) && collatesList == null) { idx = oClass.createIndex(name.getValue(), type.getStringValue(), null, metadataDoc, engine, fields); } else { final List<OType> fieldTypeList; if (keyTypes == null || keyTypes.size() == 0 && fields.length > 0) { for (final String fieldName : fields) { if (!fieldName.equals("@rid") && !oClass.existsProperty(fieldName)) throw new OIndexException( "Index with name : '" + name.getValue() + "' cannot be created on class : '" + oClass.getName() + "' because field: '" + fieldName + "' is absent in class definition."); } fieldTypeList = ((OClassImpl) oClass).extractFieldTypes(fields); } else fieldTypeList = keyTypes.stream().map(x -> OType.valueOf(x.getStringValue())).collect(Collectors.toList()); final OIndexDefinition idxDef = OIndexDefinitionFactory .createIndexDefinition(oClass, Arrays.asList(fields), fieldTypeList, collatesList, type.getStringValue(), null); idx = database.getMetadata().getIndexManager() .createIndex(name.getValue(), type.getStringValue(), idxDef, oClass.getPolymorphicClusterIds(), null, metadataDoc, engine); } return idx; }
.createIndexDefinition(oClass, Arrays.asList(fields), fieldTypeList, collatesList, indexType.toString(), null);