@SuppressWarnings("OptionalGetWithoutIsPresent") static String globalUniqueIndexName(Topology topology, Set<PropertyColumn> properties) { List<PropertyColumn> propertyColumns = new ArrayList<>(properties); propertyColumns.sort(Comparator.comparing(PropertyColumn::getName)); String name = propertyColumns.stream().map(p -> p.getParentLabel().getLabel() + "_" + p.getName()).reduce((a, b) -> a + "_" + b).get(); if (("gui_schema_V_A" + name).length() > 50) { name = "globalUniqueIndex_" + topology.getGlobalUniqueIndexes().size(); } return name; }
@SuppressWarnings("OptionalGetWithoutIsPresent") static String globalUniqueIndexName(Topology topology, Set<PropertyColumn> properties) { List<PropertyColumn> propertyColumns = new ArrayList<>(properties); propertyColumns.sort(Comparator.comparing(PropertyColumn::getName)); String name = propertyColumns.stream().map(p -> p.getParentLabel().getLabel() + "_" + p.getName()).reduce((a, b) -> a + "_" + b).get(); if (("gui_schema_V_A" + name).length() > 50) { name = "globalUniqueIndex_" + topology.getGlobalUniqueIndexes().size(); } return name; }
void afterRollback() { Preconditions.checkState(this.getParentLabel().getSchema().getTopology().isSqlWriteLockHeldByCurrentThread(), "PropertyColumn.afterRollback must hold the write lock"); this.uncommittedGlobalUniqueIndices.clear(); }
void afterRollback() { Preconditions.checkState(this.getParentLabel().getSchema().getTopology().isSqlWriteLockHeldByCurrentThread(), "PropertyColumn.afterRollback must hold the write lock"); this.uncommittedGlobalUniqueIndices.clear(); }
Optional<JsonNode> toNotifyJson() { Preconditions.checkState(this.topology.isSqlWriteLockHeldByCurrentThread(), "GlobalUniqueIndex toNotifyJson() may only be called is the lock is held."); ObjectNode result = new ObjectNode(Topology.OBJECT_MAPPER.getNodeFactory()); ArrayNode propertyArrayNode = new ArrayNode(Topology.OBJECT_MAPPER.getNodeFactory()); for (PropertyColumn property : this.uncommittedProperties) { ObjectNode objectNode = property.toNotifyJson(); objectNode.put("schemaName", property.getParentLabel().getSchema().getName()); objectNode.put("abstractLabelLabel", property.getParentLabel().getLabel()); propertyArrayNode.add(objectNode); } result.put("name", getName()); result.set("uncommittedProperties", propertyArrayNode); return Optional.of(result); }
Optional<JsonNode> toNotifyJson() { Preconditions.checkState(this.topology.isSqlWriteLockHeldByCurrentThread(), "GlobalUniqueIndex toNotifyJson() may only be called is the lock is held."); ObjectNode result = new ObjectNode(Topology.OBJECT_MAPPER.getNodeFactory()); ArrayNode propertyArrayNode = new ArrayNode(Topology.OBJECT_MAPPER.getNodeFactory()); for (PropertyColumn property : this.uncommittedProperties) { ObjectNode objectNode = property.toNotifyJson(); objectNode.put("schemaName", property.getParentLabel().getSchema().getName()); objectNode.put("abstractLabelLabel", property.getParentLabel().getLabel()); propertyArrayNode.add(objectNode); } result.put("name", getName()); result.set("uncommittedProperties", propertyArrayNode); return Optional.of(result); }
/** * JSON representation of committed state * @return */ private JsonNode toJson(){ ObjectNode result = new ObjectNode(Topology.OBJECT_MAPPER.getNodeFactory()); ArrayNode propertyArrayNode = new ArrayNode(Topology.OBJECT_MAPPER.getNodeFactory()); for (PropertyColumn property : this.properties) { ObjectNode objectNode = property.toNotifyJson(); objectNode.put("schemaName", property.getParentLabel().getSchema().getName()); objectNode.put("abstractLabelLabel", property.getParentLabel().getLabel()); propertyArrayNode.add(objectNode); } result.put("name", getName()); result.set("properties", propertyArrayNode); return result; }
/** * JSON representation of committed state * @return */ private JsonNode toJson(){ ObjectNode result = new ObjectNode(Topology.OBJECT_MAPPER.getNodeFactory()); ArrayNode propertyArrayNode = new ArrayNode(Topology.OBJECT_MAPPER.getNodeFactory()); for (PropertyColumn property : this.properties) { ObjectNode objectNode = property.toNotifyJson(); objectNode.put("schemaName", property.getParentLabel().getSchema().getName()); objectNode.put("abstractLabelLabel", property.getParentLabel().getLabel()); propertyArrayNode.add(objectNode); } result.put("name", getName()); result.set("properties", propertyArrayNode); return result; }
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(); } }
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 (PropertyColumn property : properties) { String elementLabel = property.getParentLabel().getLabel(); List<Vertex> uniquePropertyConstraintProperty; if (property.getParentLabel() instanceof VertexLabel) { uniquePropertyConstraintProperty = traversalSource.V() .hasLabel(SQLG_SCHEMA + "." + SQLG_SCHEMA_VERTEX_LABEL) .in(SQLG_SCHEMA_OUT_EDGES_EDGE) .in(SQLG_SCHEMA_SCHEMA_VERTEX_EDGE) .has("name", property.getParentLabel().getSchema().getName()) .<Vertex>select("a") .toSet(); if (edges.size() == 0) { throw new IllegalStateException(String.format("Found no edge for %s.%s", property.getParentLabel().getSchema().getName(), elementLabel)); throw new IllegalStateException(String.format("Found more than one edge for %s.%s", property.getParentLabel().getSchema().getName(), elementLabel)); throw new IllegalStateException(String.format("Found no Property for %s.%s.%s", property.getParentLabel().getSchema().getName(), property.getParentLabel().getLabel(), property.getName()));
); for (PropertyColumn property : properties) { String elementLabel = property.getParentLabel().getLabel(); List<Vertex> uniquePropertyConstraintProperty; if (property.getParentLabel() instanceof VertexLabel) { uniquePropertyConstraintProperty = traversalSource.V() .hasLabel(SQLG_SCHEMA + "." + SQLG_SCHEMA_VERTEX_LABEL) .in(SQLG_SCHEMA_OUT_EDGES_EDGE) .in(SQLG_SCHEMA_SCHEMA_VERTEX_EDGE) .has("name", property.getParentLabel().getSchema().getName()) .<Vertex>select("a") .toSet(); if (edges.size() == 0) { throw new IllegalStateException(String.format("Found no edge for %s.%s", property.getParentLabel().getSchema().getName(), elementLabel)); throw new IllegalStateException(String.format("Found more than one edge for %s.%s", property.getParentLabel().getSchema().getName(), elementLabel)); throw new IllegalStateException(String.format("Found no Property for %s.%s.%s", property.getParentLabel().getSchema().getName(), property.getParentLabel().getLabel(), property.getName()));