@Override public int hashCode() { return this.getName().hashCode(); }
static GlobalUniqueIndex instantiateGlobalUniqueIndex(Topology topology, String name) { return new GlobalUniqueIndex(topology, name); }
@Override public String toString() { return toJson().toString(); }
@SuppressWarnings("OptionalGetWithoutIsPresent") static GlobalUniqueIndex createGlobalUniqueIndex(SqlgGraph sqlgGraph, Topology topology, String globalUniqueIndexName, Set<PropertyColumn> properties) { //all PropertyColumns must be for the same PropertyType PropertyType propertyType = properties.iterator().next().getPropertyType(); Map<String, PropertyType> valueColumn = new HashMap<>(); valueColumn.put(GLOBAL_UNIQUE_INDEX_RECORD_ID, PropertyType.STRING); valueColumn.put(GLOBAL_UNIQUE_INDEX_PROPERTY_NAME, PropertyType.STRING); valueColumn.put(GLOBAL_UNIQUE_INDEX_VALUE, propertyType); VertexLabel vertexLabel = topology.getGlobalUniqueIndexSchema().ensureVertexLabelExist(globalUniqueIndexName, valueColumn); PropertyColumn valuePropertyColumn = vertexLabel.getProperty(GLOBAL_UNIQUE_INDEX_VALUE).get(); PropertyColumn recordIdColumn = vertexLabel.getProperty(GLOBAL_UNIQUE_INDEX_RECORD_ID).get(); PropertyColumn propertyColumn = vertexLabel.getProperty(GLOBAL_UNIQUE_INDEX_PROPERTY_NAME).get(); vertexLabel.ensureIndexExists(IndexType.UNIQUE, Collections.singletonList(valuePropertyColumn)); vertexLabel.ensureIndexExists(IndexType.UNIQUE, Arrays.asList(recordIdColumn, propertyColumn)); GlobalUniqueIndex globalUniqueIndex = new GlobalUniqueIndex(topology, globalUniqueIndexName, properties); topology.getGlobalUniqueIndexSchema().globalUniqueIndexes.put(globalUniqueIndex.getName(),globalUniqueIndex); TopologyManager.addGlobalUniqueIndex(sqlgGraph, globalUniqueIndexName, properties); globalUniqueIndex.committed = false; return globalUniqueIndex; }
for (GlobalUniqueIndex globalUniqueIndex : this.getGlobalUniqueIndexes()) { Map<String, PropertyType> properties = new LinkedHashMap<String, PropertyType>() {{ put(GlobalUniqueIndex.GLOBAL_UNIQUE_INDEX_VALUE, globalUniqueIndex.getProperties().stream().findAny().orElseThrow(IllegalStateException::new).getPropertyType()); put(GlobalUniqueIndex.GLOBAL_UNIQUE_INDEX_RECORD_ID, PropertyType.STRING); put(GlobalUniqueIndex.GLOBAL_UNIQUE_INDEX_PROPERTY_NAME, PropertyType.STRING); }}; result.put(Schema.GLOBAL_UNIQUE_INDEX_SCHEMA + "." + Topology.VERTEX_PREFIX + globalUniqueIndex.getName(), properties);
GlobalUniqueIndex globalUniqueIndex = this.globalUniqueIndexes.get(globalUniqueIndexName); if (globalUniqueIndex == null) { globalUniqueIndex = GlobalUniqueIndex.instantiateGlobalUniqueIndex(getTopology(), globalUniqueIndexName); getTopology().fire(globalUniqueIndex, "", TopologyChangeAction.CREATE); properties.add(propertyColumnOptional.get()); globalUniqueIndex.addGlobalUniqueProperties(properties); this.globalUniqueIndexes.put(globalUniqueIndexName, globalUniqueIndex);
public GlobalUniqueIndex ensureGlobalUniqueIndexExist(final Set<PropertyColumn> properties) { String globalUniqueIndexName = GlobalUniqueIndex.globalUniqueIndexName(this.topology, properties); Optional<GlobalUniqueIndex> globalIndexOptional = this.getGlobalUniqueIndex(globalUniqueIndexName); if (!globalIndexOptional.isPresent()) { //take any property properties.iterator().next().getParentLabel().getSchema().getTopology().lock(); globalIndexOptional = this.getGlobalUniqueIndex(globalUniqueIndexName); if (!globalIndexOptional.isPresent()) { GlobalUniqueIndex globalUniqueIndex = GlobalUniqueIndex.createGlobalUniqueIndex(this.sqlgGraph, this.topology, globalUniqueIndexName, properties); this.uncommittedGlobalUniqueIndexes.put(globalUniqueIndexName, globalUniqueIndex); this.getTopology().fire(globalUniqueIndex, "", TopologyChangeAction.CREATE); return globalUniqueIndex; } else { return globalIndexOptional.get(); } } else { return globalIndexOptional.get(); } }
for (Iterator<Map.Entry<String, GlobalUniqueIndex>> it = this.uncommittedGlobalUniqueIndexes.entrySet().iterator(); it.hasNext(); ) { Map.Entry<String, GlobalUniqueIndex> entry = it.next(); entry.getValue().afterRollback(); it.remove(); globalUniqueIndex.afterRollback();
globalUniqueIndex.afterCommit();
@SuppressWarnings("OptionalGetWithoutIsPresent") static GlobalUniqueIndex createGlobalUniqueIndex(SqlgGraph sqlgGraph, Topology topology, String globalUniqueIndexName, Set<PropertyColumn> properties) { //all PropertyColumns must be for the same PropertyType PropertyType propertyType = properties.iterator().next().getPropertyType(); Map<String, PropertyType> valueColumn = new HashMap<>(); valueColumn.put(GLOBAL_UNIQUE_INDEX_RECORD_ID, PropertyType.STRING); valueColumn.put(GLOBAL_UNIQUE_INDEX_PROPERTY_NAME, PropertyType.STRING); valueColumn.put(GLOBAL_UNIQUE_INDEX_VALUE, propertyType); VertexLabel vertexLabel = topology.getGlobalUniqueIndexSchema().ensureVertexLabelExist(globalUniqueIndexName, valueColumn); PropertyColumn valuePropertyColumn = vertexLabel.getProperty(GLOBAL_UNIQUE_INDEX_VALUE).get(); PropertyColumn recordIdColumn = vertexLabel.getProperty(GLOBAL_UNIQUE_INDEX_RECORD_ID).get(); PropertyColumn propertyColumn = vertexLabel.getProperty(GLOBAL_UNIQUE_INDEX_PROPERTY_NAME).get(); vertexLabel.ensureIndexExists(IndexType.UNIQUE, Collections.singletonList(valuePropertyColumn)); vertexLabel.ensureIndexExists(IndexType.UNIQUE, Arrays.asList(recordIdColumn, propertyColumn)); GlobalUniqueIndex globalUniqueIndex = new GlobalUniqueIndex(topology, globalUniqueIndexName, properties); topology.getGlobalUniqueIndexSchema().globalUniqueIndexes.put(globalUniqueIndex.getName(),globalUniqueIndex); TopologyManager.addGlobalUniqueIndex(sqlgGraph, globalUniqueIndexName, properties); globalUniqueIndex.committed = false; return globalUniqueIndex; }
for (GlobalUniqueIndex globalUniqueIndex : this.getGlobalUniqueIndexes()) { Map<String, PropertyType> properties = new LinkedHashMap<String, PropertyType>() {{ put(GlobalUniqueIndex.GLOBAL_UNIQUE_INDEX_VALUE, globalUniqueIndex.getProperties().stream().findAny().orElseThrow(IllegalStateException::new).getPropertyType()); put(GlobalUniqueIndex.GLOBAL_UNIQUE_INDEX_RECORD_ID, PropertyType.STRING); put(GlobalUniqueIndex.GLOBAL_UNIQUE_INDEX_PROPERTY_NAME, PropertyType.STRING); }}; result.put(Schema.GLOBAL_UNIQUE_INDEX_SCHEMA + "." + Topology.VERTEX_PREFIX + globalUniqueIndex.getName(), properties);
GlobalUniqueIndex globalUniqueIndex = this.globalUniqueIndexes.get(globalUniqueIndexName); if (globalUniqueIndex == null) { globalUniqueIndex = GlobalUniqueIndex.instantiateGlobalUniqueIndex(getTopology(), globalUniqueIndexName); getTopology().fire(globalUniqueIndex, "", TopologyChangeAction.CREATE); properties.add(propertyColumnOptional.get()); globalUniqueIndex.addGlobalUniqueProperties(properties); this.globalUniqueIndexes.put(globalUniqueIndexName, globalUniqueIndex);
public GlobalUniqueIndex ensureGlobalUniqueIndexExist(final Set<PropertyColumn> properties) { String globalUniqueIndexName = GlobalUniqueIndex.globalUniqueIndexName(this.topology, properties); Optional<GlobalUniqueIndex> globalIndexOptional = this.getGlobalUniqueIndex(globalUniqueIndexName); if (!globalIndexOptional.isPresent()) { //take any property properties.iterator().next().getParentLabel().getSchema().getTopology().lock(); globalIndexOptional = this.getGlobalUniqueIndex(globalUniqueIndexName); if (!globalIndexOptional.isPresent()) { GlobalUniqueIndex globalUniqueIndex = GlobalUniqueIndex.createGlobalUniqueIndex(this.sqlgGraph, this.topology, globalUniqueIndexName, properties); this.uncommittedGlobalUniqueIndexes.put(globalUniqueIndexName, globalUniqueIndex); this.getTopology().fire(globalUniqueIndex, "", TopologyChangeAction.CREATE); return globalUniqueIndex; } else { return globalIndexOptional.get(); } } else { return globalIndexOptional.get(); } }
for (Iterator<Map.Entry<String, GlobalUniqueIndex>> it = this.uncommittedGlobalUniqueIndexes.entrySet().iterator(); it.hasNext(); ) { Map.Entry<String, GlobalUniqueIndex> entry = it.next(); entry.getValue().afterRollback(); it.remove(); globalUniqueIndex.afterRollback();
globalUniqueIndex.afterCommit();
@Override public int hashCode() { return this.getName().hashCode(); }
for (Vertex globalUniqueIndexVertex : globalUniqueIndexVertices) { String globalUniqueIndexName = globalUniqueIndexVertex.value("name"); GlobalUniqueIndex globalUniqueIndex = GlobalUniqueIndex.instantiateGlobalUniqueIndex(this, globalUniqueIndexName); getGlobalUniqueIndexSchema().globalUniqueIndexes.put(globalUniqueIndexName, globalUniqueIndex); globalUniqueIndex.addGlobalUniqueProperties(guiPropertyColumns);
@Override public String toString() { return toJson().toString(); }
static GlobalUniqueIndex instantiateGlobalUniqueIndex(Topology topology, String name) { return new GlobalUniqueIndex(topology, name); }
private static void updateGlobalUniqueIndex(SqlgGraph sqlgGraph, GlobalUniqueIndex globalUniqueIndex, RecordId recordId, Pair<PropertyColumn, Object> propertyColumnObjectPair) { List<Vertex> globalUniqueIndexVertexes = sqlgGraph.globalUniqueIndexes() .V().hasLabel(Schema.GLOBAL_UNIQUE_INDEX_SCHEMA + "." + globalUniqueIndex.getName()) .has(GlobalUniqueIndex.GLOBAL_UNIQUE_INDEX_RECORD_ID, recordId.toString()) .has(GlobalUniqueIndex.GLOBAL_UNIQUE_INDEX_PROPERTY_NAME, propertyColumnObjectPair.getKey().getName()) .toList(); Preconditions.checkState(globalUniqueIndexVertexes.size() <= 1, "More than one GlobalUniqueIndex for %s and recordId %s found", Schema.GLOBAL_UNIQUE_INDEX_SCHEMA + "." + globalUniqueIndex.getName(), recordId.toString()); if (!globalUniqueIndexVertexes.isEmpty()) { Vertex globalUniqueIndexVertex = globalUniqueIndexVertexes.get(0); globalUniqueIndexVertex.property(GlobalUniqueIndex.GLOBAL_UNIQUE_INDEX_VALUE, propertyColumnObjectPair.getValue()); } else { //This happens if the property is not present at all in which case the entry in the GlobalUniqueIndex table has not been created yet. sqlgGraph.addVertex( T.label, Schema.GLOBAL_UNIQUE_INDEX_SCHEMA + "." + globalUniqueIndex.getName(), GlobalUniqueIndex.GLOBAL_UNIQUE_INDEX_VALUE, propertyColumnObjectPair.getValue(), GlobalUniqueIndex.GLOBAL_UNIQUE_INDEX_RECORD_ID, recordId.toString(), GlobalUniqueIndex.GLOBAL_UNIQUE_INDEX_PROPERTY_NAME, propertyColumnObjectPair.getKey().getName() ); } }