public static MetaEdge from(SchemaTable outSchemaTable, SqlgVertex outVertex, SqlgVertex inVertex) { return new MetaEdge(outSchemaTable, outVertex.schema + "." + outVertex.table, inVertex.schema + "." + inVertex.table); }
void removeEdge(String schema, String table, SqlgEdge edge) { SchemaTable schemaTable = SchemaTable.of(schema, table); //check it the edge is in the newly inserted cache MetaEdge metaEdge = MetaEdge.from(schemaTable, edge.getOutVertex(), edge.getInVertex()); Pair<SortedSet<String>, Map<SqlgEdge, Triple<SqlgVertex, SqlgVertex, Map<String, Object>>>> sqlgEdgeTripleMap = this.edgeCache.get(metaEdge); if (sqlgEdgeTripleMap != null && sqlgEdgeTripleMap.getRight().containsKey(edge)) { sqlgEdgeTripleMap.getRight().remove(edge); } else { List<SqlgEdge> edges = this.removeEdgeCache.get(schemaTable); if (edges == null) { edges = new ArrayList<>(); this.removeEdgeCache.put(schemaTable, edges); } edges.add(edge); } }
SchemaTable outSchemaTable = SchemaTable.from(sqlgGraph, metaEdge.getOutLabel()); SchemaTable inSchemaTable = SchemaTable.from(sqlgGraph, metaEdge.getInLabel()); EdgeLabel edgeLabel = sqlgGraph.getTopology().getEdgeLabel(metaEdge.getSchemaTable().getSchema(), metaEdge.getSchemaTable().getTable()).orElseThrow(() -> new IllegalStateException(String.format("EdgeLabel not found for %s.%s", metaEdge.getSchemaTable().getSchema(), metaEdge.getSchemaTable().getTable()))); VertexLabel outVertexLabel = sqlgGraph.getTopology().getVertexLabel(outSchemaTable.getSchema(), outSchemaTable.getTable()).orElseThrow(() -> new IllegalStateException(String.format("VertexLabel not found for %s.%s", outSchemaTable.getSchema(), outSchemaTable.getTable()))); VertexLabel inVertexLabel = sqlgGraph.getTopology().getVertexLabel(inSchemaTable.getSchema(), inSchemaTable.getTable()).orElseThrow(() -> new IllegalStateException(String.format("VertexLabel not found for %s.%s", inSchemaTable.getSchema(), inSchemaTable.getTable()))); Map<String, PropertyType> propertyTypeMap = sqlgGraph.getTopology().getTableFor(metaEdge.getSchemaTable().withPrefix(EDGE_PREFIX)); SortedSet<String> columns = triples.getLeft(); Map<SqlgEdge, Triple<SqlgVertex, SqlgVertex, Map<String, Object>>> rows = triples.getRight(); sql.append(sqlgGraph.getSqlDialect().maybeWrapInQoutes(metaEdge.getSchemaTable().getSchema())); sql.append("."); sql.append(sqlgGraph.getSqlDialect().maybeWrapInQoutes(EDGE_PREFIX + metaEdge.getSchemaTable().getTable())); sql.append(" ("); .getSchema(metaEdge.getSchemaTable().getSchema()).orElseThrow(() -> new IllegalStateException(String.format("Schema %s not found", metaEdge.getSchemaTable().getSchema()))) .getEdgeLabel(metaEdge.getSchemaTable().getTable()).orElseThrow(() -> new IllegalStateException(String.format("EdgeLabel %s not found", metaEdge.getSchemaTable().getTable()))) .getProperties(); sql.append(sqlgGraph.getSqlDialect().maybeWrapInQoutes(metaEdge.getOutLabel() + OUT_VERTEX_COLUMN_END)); } else { int j = 1; for (String identifier : outVertexLabel.getIdentifiers()) { sql.append(sqlgGraph.getSqlDialect().maybeWrapInQoutes(metaEdge.getOutLabel() + "." + identifier + OUT_VERTEX_COLUMN_END)); if (j++ < outVertexLabel.getIdentifiers().size()) { sql.append(", "); sql.append(sqlgGraph.getSqlDialect().maybeWrapInQoutes(metaEdge.getInLabel() + IN_VERTEX_COLUMN_END)); } else {
SchemaTable outSchemaTable = SchemaTable.from(sqlgGraph, metaEdge.getOutLabel()); SchemaTable inSchemaTable = SchemaTable.from(sqlgGraph, metaEdge.getInLabel()); this.outVertexLabel = sqlgGraph.getTopology().getVertexLabel(outSchemaTable.getSchema(), outSchemaTable.getTable()).orElseThrow(() -> new IllegalStateException(String.format("VertexLabel not found for %s.%s", outSchemaTable.getSchema(), outSchemaTable.getTable()))); this.inVertexLabel = sqlgGraph.getTopology().getVertexLabel(inSchemaTable.getSchema(), inSchemaTable.getTable()).orElseThrow(() -> new IllegalStateException(String.format("VertexLabel not found for %s.%s", inSchemaTable.getSchema(), inSchemaTable.getTable()))); bulkCopy.addColumnMapping(i, metaEdge.getInLabel() + Topology.IN_VERTEX_COLUMN_END); this.columnMetadata.put(i++, new ColumnMetadata( metaEdge.getInLabel() + Topology.IN_VERTEX_COLUMN_END, sqlgGraph.getSqlDialect().propertyTypeToJavaSqlType(PropertyType.LONG)[0], 0, } else { for (String identifier : inVertexLabel.getIdentifiers()) { bulkCopy.addColumnMapping(i, metaEdge.getInLabel() + "." + identifier + Topology.IN_VERTEX_COLUMN_END); PropertyType propertyType = inVertexLabel.getProperty(identifier).orElseThrow(() -> new IllegalStateException(String.format("BUG: Did not find the identifier property %s.", identifier))).getPropertyType(); this.columnMetadata.put(i++, new ColumnMetadata( metaEdge.getInLabel() + "." + identifier + Topology.IN_VERTEX_COLUMN_END, sqlgGraph.getSqlDialect().propertyTypeToJavaSqlType(propertyType)[0], 0, bulkCopy.addColumnMapping(i, metaEdge.getOutLabel() + Topology.OUT_VERTEX_COLUMN_END); this.columnMetadata.put(i++, new ColumnMetadata( metaEdge.getOutLabel() + Topology.OUT_VERTEX_COLUMN_END, sqlgGraph.getSqlDialect().propertyTypeToJavaSqlType(PropertyType.LONG)[0], 0, for (String identifier : outVertexLabel.getIdentifiers()) { PropertyType propertyType = outVertexLabel.getProperty(identifier).orElseThrow(() -> new IllegalStateException(String.format("BUG: Did not find the identifier property %s.", identifier))).getPropertyType(); bulkCopy.addColumnMapping(i, metaEdge.getOutLabel() + "." + identifier + Topology.OUT_VERTEX_COLUMN_END);
Map<String, PropertyColumn> propertyColumnMap = sqlgGraph.getTopology().getPropertiesFor(metaEdge.getSchemaTable().withPrefix(EDGE_PREFIX)); Map<SqlgEdge, Triple<SqlgVertex, SqlgVertex, Map<String, Object>>> rows = triples.getRight();
SchemaTable outSchemaTable = SchemaTable.from(sqlgGraph, metaEdge.getOutLabel()); SchemaTable inSchemaTable = SchemaTable.from(sqlgGraph, metaEdge.getInLabel()); EdgeLabel edgeLabel = sqlgGraph.getTopology().getEdgeLabel(metaEdge.getSchemaTable().getSchema(), metaEdge.getSchemaTable().getTable()).orElseThrow(() -> new IllegalStateException(String.format("EdgeLabel not found for %s.%s", metaEdge.getSchemaTable().getSchema(), metaEdge.getSchemaTable().getTable()))); VertexLabel outVertexLabel = sqlgGraph.getTopology().getVertexLabel(outSchemaTable.getSchema(), outSchemaTable.getTable()).orElseThrow(() -> new IllegalStateException(String.format("VertexLabel not found for %s.%s", outSchemaTable.getSchema(), outSchemaTable.getTable()))); VertexLabel inVertexLabel = sqlgGraph.getTopology().getVertexLabel(inSchemaTable.getSchema(), inSchemaTable.getTable()).orElseThrow(() -> new IllegalStateException(String.format("VertexLabel not found for %s.%s", inSchemaTable.getSchema(), inSchemaTable.getTable()))); Map<String, PropertyType> propertyTypeMap = sqlgGraph.getTopology().getTableFor(metaEdge.getSchemaTable().withPrefix(EDGE_PREFIX)); SortedSet<String> columns = triples.getLeft(); Map<SqlgEdge, Triple<SqlgVertex, SqlgVertex, Map<String, Object>>> rows = triples.getRight(); sql.append(sqlgGraph.getSqlDialect().maybeWrapInQoutes(metaEdge.getSchemaTable().getSchema())); sql.append("."); sql.append(sqlgGraph.getSqlDialect().maybeWrapInQoutes(EDGE_PREFIX + metaEdge.getSchemaTable().getTable())); sql.append(" ("); .getSchema(metaEdge.getSchemaTable().getSchema()).orElseThrow(() -> new IllegalStateException(String.format("Schema %s not found", metaEdge.getSchemaTable().getSchema()))) .getEdgeLabel(metaEdge.getSchemaTable().getTable()).orElseThrow(() -> new IllegalStateException(String.format("EdgeLabel %s not found", metaEdge.getSchemaTable().getTable()))) .getProperties(); sql.append(sqlgGraph.getSqlDialect().maybeWrapInQoutes(metaEdge.getOutLabel() + OUT_VERTEX_COLUMN_END)); } else { int j = 1; for (String identifier : outVertexLabel.getIdentifiers()) { sql.append(sqlgGraph.getSqlDialect().maybeWrapInQoutes(metaEdge.getOutLabel() + "." + identifier + OUT_VERTEX_COLUMN_END)); if (j++ < outVertexLabel.getIdentifiers().size()) { sql.append(", "); sql.append(sqlgGraph.getSqlDialect().maybeWrapInQoutes(metaEdge.getInLabel() + IN_VERTEX_COLUMN_END)); } else {
Map<String, PropertyColumn> propertyColumnMap = sqlgGraph.getTopology().getPropertiesFor(metaEdge.getSchemaTable().withPrefix(EDGE_PREFIX)); Map<SqlgEdge, Triple<SqlgVertex, SqlgVertex, Map<String, Object>>> rows = triples.getRight();
@Override public void flushEdgeGlobalUniqueIndexes(SqlgGraph sqlgGraph, Map<MetaEdge, Pair<SortedSet<String>, Map<SqlgEdge, Triple<SqlgVertex, SqlgVertex, Map<String, Object>>>>> edgeCache) { for (MetaEdge metaEdge : edgeCache.keySet()) { Pair<SortedSet<String>, Map<SqlgEdge, Triple<SqlgVertex, SqlgVertex, Map<String, Object>>>> triples = edgeCache.get(metaEdge); Map<SqlgEdge, Triple<SqlgVertex, SqlgVertex, Map<String, Object>>> edgeMap = triples.getRight(); Map<String, PropertyColumn> propertyColumnMap = sqlgGraph.getTopology().getPropertiesFor(metaEdge.getSchemaTable().withPrefix(EDGE_PREFIX)); for (Map.Entry<String, PropertyColumn> propertyColumnEntry : propertyColumnMap.entrySet()) { PropertyColumn propertyColumn = propertyColumnEntry.getValue(); for (GlobalUniqueIndex globalUniqueIndex : propertyColumn.getGlobalUniqueIndices()) { try { Connection connection = sqlgGraph.tx().getConnection(); SQLServerConnection sqlServerConnection = connection.unwrap(SQLServerConnection.class); try (SQLServerBulkCopy bulkCopy = new SQLServerBulkCopy(sqlServerConnection)) { bulkCopy.setDestinationTableName(sqlgGraph.getSqlDialect().maybeWrapInQoutes(Schema.GLOBAL_UNIQUE_INDEX_SCHEMA) + "." + sqlgGraph.getSqlDialect().maybeWrapInQoutes(VERTEX_PREFIX + globalUniqueIndex.getName()) ); bulkCopy.writeToServer(new SQLServerEdgeGlobalUniqueIndexBulkRecord(bulkCopy, sqlgGraph, edgeMap, propertyColumn)); } } catch (SQLException e) { throw new RuntimeException(e); } } } } }
void removeEdge(String schema, String table, SqlgEdge edge) { SchemaTable schemaTable = SchemaTable.of(schema, table); //check it the edge is in the newly inserted cache MetaEdge metaEdge = MetaEdge.from(schemaTable, edge.getOutVertex(), edge.getInVertex()); Pair<SortedSet<String>, Map<SqlgEdge, Triple<SqlgVertex, SqlgVertex, Map<String, Object>>>> sqlgEdgeTripleMap = this.edgeCache.get(metaEdge); if (sqlgEdgeTripleMap != null && sqlgEdgeTripleMap.getRight().containsKey(edge)) { sqlgEdgeTripleMap.getRight().remove(edge); } else { List<SqlgEdge> edges = this.removeEdgeCache.get(schemaTable); if (edges == null) { edges = new ArrayList<>(); this.removeEdgeCache.put(schemaTable, edges); } edges.add(edge); } }
public static MetaEdge from(SchemaTable outSchemaTable, SqlgVertex outVertex, SqlgVertex inVertex) { return new MetaEdge(outSchemaTable, outVertex.schema + "." + outVertex.table, inVertex.schema + "." + inVertex.table); }
try { for (MetaEdge metaEdge : edgeCache.keySet()) { SchemaTable schemaTable = metaEdge.getSchemaTable(); EdgeLabel edgeLabel = sqlgGraph.getTopology().getEdgeLabel(schemaTable.getSchema(), schemaTable.getTable()).orElseThrow(() -> new IllegalStateException(String.format("EdgeLabel not found for %s.%s", schemaTable.getSchema(), schemaTable.getTable()))); Pair<SortedSet<String>, Map<SqlgEdge, Triple<SqlgVertex, SqlgVertex, Map<String, Object>>>> triples = edgeCache.get(metaEdge);
MetaEdge metaEdge = MetaEdge.from(schemaTable, sqlgEdge.getOutVertex(), sqlgEdge.getInVertex()); Pair<SortedSet<String>, Map<SqlgEdge, Triple<SqlgVertex, SqlgVertex, Map<String, Object>>>> triples = this.edgeCache.get(metaEdge); if (triples != null) {
MetaEdge metaEdge = MetaEdge.from(schemaTable, sqlgEdge.getOutVertex(), sqlgEdge.getInVertex()); Pair<SortedSet<String>, Map<SqlgEdge, Triple<SqlgVertex, SqlgVertex, Map<String, Object>>>> triples = this.edgeCache.get(metaEdge); if (triples != null) {
boolean removeProperty(SqlgProperty sqlgProperty, String key) { SqlgElement sqlgElement = (SqlgElement) sqlgProperty.element(); SchemaTable schemaTable = SchemaTable.of(sqlgElement.getSchema(), sqlgElement.getTable()); if (Vertex.class.isAssignableFrom(sqlgElement.getClass())) { Pair<SortedSet<String>, Map<SqlgVertex, Map<String, Object>>> triples = this.vertexCache.get(schemaTable); if (triples != null) { Map<String, Object> triple = triples.getRight().get(sqlgElement); if (triple != null) { triple.remove(key); return true; } } } else { SqlgEdge sqlgEdge = (SqlgEdge)sqlgElement; MetaEdge metaEdge = MetaEdge.from(schemaTable, sqlgEdge.getOutVertex(), sqlgEdge.getInVertex()); Pair<SortedSet<String>, Map<SqlgEdge, Triple<SqlgVertex, SqlgVertex, Map<String, Object>>>> triples = this.edgeCache.get(metaEdge); if (triples != null) { Triple<SqlgVertex, SqlgVertex, Map<String, Object>> triple = triples.getRight().get(sqlgElement); if (triple != null) { triple.getRight().remove(key); return true; } } } return false; }
boolean removeProperty(SqlgProperty sqlgProperty, String key) { SqlgElement sqlgElement = (SqlgElement) sqlgProperty.element(); SchemaTable schemaTable = SchemaTable.of(sqlgElement.getSchema(), sqlgElement.getTable()); if (Vertex.class.isAssignableFrom(sqlgElement.getClass())) { Pair<SortedSet<String>, Map<SqlgVertex, Map<String, Object>>> triples = this.vertexCache.get(schemaTable); if (triples != null) { Map<String, Object> triple = triples.getRight().get(sqlgElement); if (triple != null) { triple.remove(key); return true; } } } else { SqlgEdge sqlgEdge = (SqlgEdge)sqlgElement; MetaEdge metaEdge = MetaEdge.from(schemaTable, sqlgEdge.getOutVertex(), sqlgEdge.getInVertex()); Pair<SortedSet<String>, Map<SqlgEdge, Triple<SqlgVertex, SqlgVertex, Map<String, Object>>>> triples = this.edgeCache.get(metaEdge); if (triples != null) { Triple<SqlgVertex, SqlgVertex, Map<String, Object>> triple = triples.getRight().get(sqlgElement); if (triple != null) { triple.getRight().remove(key); return true; } } } return false; }
VertexLabel inVertexLabel = sqlgGraph.getTopology().getVertexLabel(inSchemaTable.getSchema(), inSchemaTable.getTable()).orElseThrow(() -> new IllegalStateException(String.format("VertexLabel not found for %s.%s", inSchemaTable.getSchema(), inSchemaTable.getTable()))); EdgeLabel edgeLabel = sqlgGraph.getTopology().getEdgeLabel(outSchemaTable.getSchema(), sqlgEdge.getTable()).orElseThrow(() -> new IllegalStateException(String.format("EdgeLabel not found for %s.%s", outSchemaTable.getSchema(), sqlgEdge.getTable()))); MetaEdge metaEdge = MetaEdge.from(outSchemaTable, outVertex, inVertex); if (!streaming) { Pair<SortedSet<String>, Map<SqlgEdge, Triple<SqlgVertex, SqlgVertex, Map<String, Object>>>> triples = this.edgeCache.get(metaEdge);
VertexLabel inVertexLabel = sqlgGraph.getTopology().getVertexLabel(inSchemaTable.getSchema(), inSchemaTable.getTable()).orElseThrow(() -> new IllegalStateException(String.format("VertexLabel not found for %s.%s", inSchemaTable.getSchema(), inSchemaTable.getTable()))); EdgeLabel edgeLabel = sqlgGraph.getTopology().getEdgeLabel(outSchemaTable.getSchema(), sqlgEdge.getTable()).orElseThrow(() -> new IllegalStateException(String.format("EdgeLabel not found for %s.%s", outSchemaTable.getSchema(), sqlgEdge.getTable()))); MetaEdge metaEdge = MetaEdge.from(outSchemaTable, outVertex, inVertex); if (!streaming) { Pair<SortedSet<String>, Map<SqlgEdge, Triple<SqlgVertex, SqlgVertex, Map<String, Object>>>> triples = this.edgeCache.get(metaEdge);