private static Id readEntryId(String id) { return IdUtil.readString(id); }
private static String writeEntryId(Id id) { return IdUtil.writeString(id); }
@Override protected List<Object> idColumnValue(Id id) { EdgeId edgeId; if (!(id instanceof EdgeId)) { String[] idParts = EdgeId.split(id); if (idParts.length == 1) { // Delete edge by label return Arrays.asList((Object[]) idParts); } id = IdUtil.readString(id.asString()); edgeId = EdgeId.parse(id.asString()); } else { edgeId = (EdgeId) id; } E.checkState(edgeId.direction() == this.direction, "Can't query %s edges from %s edges table", edgeId.direction(), this.direction); List<Object> list = new ArrayList<>(5); list.add(IdUtil.writeString(edgeId.ownerVertexId())); list.add(edgeId.direction().code()); list.add(edgeId.edgeLabelId().asLong()); list.add(edgeId.sortValues()); list.add(IdUtil.writeString(edgeId.otherVertexId())); return list; }
@Override protected List<Object> idColumnValue(Id id) { EdgeId edgeId; if (!(id instanceof EdgeId)) { String[] idParts = EdgeId.split(id); if (idParts.length == 1) { // Delete edge by label return Arrays.asList((Object[]) idParts); } id = IdUtil.readString(id.asString()); edgeId = EdgeId.parse(id.asString()); } else { edgeId = (EdgeId) id; } E.checkState(edgeId.direction() == this.direction, "Can't query %s edges from %s edges table", edgeId.direction(), this.direction); List<Object> list = new ArrayList<>(5); list.add(IdUtil.writeString(edgeId.ownerVertexId())); list.add(edgeId.direction().code()); list.add(edgeId.edgeLabelId().asLong()); list.add(edgeId.sortValues()); list.add(IdUtil.writeString(edgeId.otherVertexId())); return list; }
protected final List<Object> idColumnValue(EdgeId edgeId) { List<Object> list = new ArrayList<>(5); list.add(IdUtil.writeString(edgeId.ownerVertexId())); list.add(edgeId.direction().code()); list.add(edgeId.edgeLabelId().asLong()); list.add(edgeId.sortValues()); list.add(IdUtil.writeString(edgeId.otherVertexId())); return list; }
public static EdgeId parse(String id) throws NotFoundException { String[] idParts = SplicingIdGenerator.split(id); if (!(idParts.length == 4 || idParts.length == 5)) { throw new NotFoundException("Edge id must be formatted as 4~5 parts" + ", but got '%s'", id); } try { if (idParts.length == 4) { Id ownerVertexId = IdUtil.readString(idParts[0]); Id edgeLabelId = IdGenerator.of(Long.parseLong(idParts[1])); String sortValues = idParts[2]; Id otherVertexId = IdUtil.readString(idParts[3]); return new EdgeId(ownerVertexId, Directions.OUT, edgeLabelId, sortValues, otherVertexId); } else { assert idParts.length == 5; Id ownerVertexId = IdUtil.readString(idParts[0]); HugeType direction = HugeType.fromString(idParts[1]); Id edgeLabelId = IdGenerator.of(Long.parseLong(idParts[2])); String sortValues = idParts[3]; Id otherVertexId = IdUtil.readString(idParts[4]); return new EdgeId(ownerVertexId, Directions.convert(direction), edgeLabelId, sortValues, otherVertexId); } } catch (Exception e) { throw new NotFoundException("Invalid format of edge id '%s'", id); } }
@Override protected List<Object> idColumnValue(Id id) { EdgeId edgeId; if (!(id instanceof EdgeId)) { String[] idParts = EdgeId.split(id); if (idParts.length == 1) { // Delete edge by label return Arrays.asList((Object[]) idParts); } id = IdUtil.readString(id.asString()); edgeId = EdgeId.parse(id.asString()); } else { edgeId = (EdgeId) id; } E.checkState(edgeId.direction() == this.direction, "Can't query %s edges from %s edges table", edgeId.direction(), this.direction); List<Object> list = new ArrayList<>(5); list.add(IdUtil.writeString(edgeId.ownerVertexId())); list.add(edgeId.direction().code()); list.add(edgeId.edgeLabelId().asLong()); list.add(edgeId.sortValues()); list.add(IdUtil.writeString(edgeId.otherVertexId())); return list; }
@Override public String asString() { if (this.cache != null) { return this.cache; } if (this.directed) { this.cache = SplicingIdGenerator.concat( IdUtil.writeString(this.ownerVertexId), this.direction.type().string(), this.edgeLabelId.asString(), this.sortValues, IdUtil.writeString(this.otherVertexId)); } else { this.cache = SplicingIdGenerator.concat( IdUtil.writeString(this.sourceVertexId()), this.edgeLabelId.asString(), this.sortValues, IdUtil.writeString(this.targetVertexId())); } return this.cache; }
@Override protected List<Object> idColumnValue(Id id) { EdgeId edgeId; if (!(id instanceof EdgeId)) { String[] idParts = EdgeId.split(id); if (idParts.length == 1) { // Delete edge by label return Arrays.asList((Object[]) idParts); } id = IdUtil.readString(id.asString()); edgeId = EdgeId.parse(id.asString()); } else { edgeId = (EdgeId) id; } E.checkState(edgeId.direction() == this.direction, "Can't query %s edges from %s edges table", edgeId.direction(), this.direction); return idColumnValue(edgeId); }
@Override protected List<Object> idColumnValue(Id id) { EdgeId edgeId; if (!(id instanceof EdgeId)) { String[] idParts = EdgeId.split(id); if (idParts.length == 1) { // Delete edge by label return Arrays.asList((Object[]) idParts); } id = IdUtil.readString(id.asString()); edgeId = EdgeId.parse(id.asString()); } else { edgeId = (EdgeId) id; } E.checkState(edgeId.direction() == this.direction, "Can't query %s edges from %s edges table", edgeId.direction(), this.direction); List<Object> list = new ArrayList<>(5); list.add(IdUtil.writeString(edgeId.ownerVertexId())); list.add(edgeId.direction().code()); list.add(edgeId.edgeLabelId().asLong()); list.add(edgeId.sortValues()); list.add(IdUtil.writeString(edgeId.otherVertexId())); return list; }
@Override protected Id writeQueryId(HugeType type, Id id) { if (type.isEdge()) { if (!(id instanceof EdgeId)) { id = EdgeId.parse(id.asString()); } } else if (type.isGraph()) { id = IdGenerator.of(IdUtil.writeString(id)); } return id; }
Id rawId = IdUtil.readString(idValue); EdgeId id = EdgeId.parse(rawId.asString()).directed(true); assert id.direction() == Directions.OUT;
protected TableBackendEntry.Row formatEdge(HugeEdge edge) { EdgeId id = edge.idWithDirection(); TableBackendEntry.Row row = new TableBackendEntry.Row(edge.type(), id); // Id: ownerVertex + direction + edge-label + sortValues + otherVertex row.column(HugeKeys.OWNER_VERTEX, IdUtil.writeString(id.ownerVertexId())); row.column(HugeKeys.DIRECTION, id.direction().code()); row.column(HugeKeys.LABEL, id.edgeLabelId().asLong()); row.column(HugeKeys.SORT_VALUES, id.sortValues()); row.column(HugeKeys.OTHER_VERTEX, IdUtil.writeString(id.otherVertexId())); this.formatProperties(edge, row); return row; }
private static Id readEntryId(String id) { return IdUtil.readString(id); }
/** * Append data to label index table */ private static void appendLabelIndex(CassandraSessionPool.Session session, String table, CassandraBackendEntry.Row entry) { Update update = QueryBuilder.update(table); update.with(QueryBuilder.append(ELEMENT_IDS, IdUtil.writeString(entry.id()))); update.where(CassandraTable.formatEQ(HugeKeys.LABEL, entry.column(HugeKeys.LABEL))); session.add(update); }
@Override public HugeIndex readIndex(HugeGraph graph, ConditionQuery query, BackendEntry backendEntry) { E.checkNotNull(graph, "serializer graph"); if (backendEntry == null) { return null; } TableBackendEntry entry = this.convertEntry(backendEntry); Object indexValues = entry.column(HugeKeys.FIELD_VALUES); Number indexLabelId = entry.column(HugeKeys.INDEX_LABEL_ID); Set<String> elemIds = this.parseIndexElemIds(entry); IndexLabel indexLabel = graph.indexLabel(this.toId(indexLabelId)); HugeIndex index = new HugeIndex(indexLabel); index.fieldValues(indexValues); for (String id : elemIds) { index.elementIds(IdUtil.readString(id)); } return index; }
/** * Remove data from label index table */ private static void removeLabelIndex(CassandraSessionPool.Session session, String table, CassandraBackendEntry.Row entry) { Update update = QueryBuilder.update(table); Object label = entry.column(HugeKeys.LABEL); if (label == null) { // Maybe delete edges by edge label(passed by id) assert entry.id().asString().indexOf(':') < 0 : entry; return; } update.with(QueryBuilder.remove(ELEMENT_IDS, IdUtil.writeString(entry.id()))); update.where(CassandraTable.formatEQ(HugeKeys.LABEL, label)); session.add(update); }
@Override public HugeVertex readVertex(HugeGraph graph, BackendEntry backendEntry) { E.checkNotNull(graph, "serializer graph"); if (backendEntry == null) { return null; } TextBackendEntry entry = this.convertEntry(backendEntry); // Parse label String labelId = entry.column(this.formatSyspropName(HugeKeys.LABEL)); VertexLabel label = VertexLabel.NONE; if (labelId != null) { label = graph.vertexLabel(readId(labelId)); } Id id = IdUtil.readString(entry.id().asString()); HugeVertex vertex = new HugeVertex(graph, id, label); // Parse all properties or edges of a Vertex for (String name : entry.columnNames()) { this.parseColumn(name, entry.column(name), vertex); } return vertex; }
@Override public BackendEntry writeVertex(HugeVertex vertex) { TableBackendEntry entry = newBackendEntry(vertex); entry.column(HugeKeys.ID, IdUtil.writeString(vertex.id())); entry.column(HugeKeys.LABEL, vertex.schemaLabel().id().asLong()); // Add all properties of a Vertex this.formatProperties(vertex, entry.row()); return entry; }
@Override public HugeVertex readVertex(HugeGraph graph, BackendEntry backendEntry) { E.checkNotNull(graph, "serializer graph"); if (backendEntry == null) { return null; } TableBackendEntry entry = this.convertEntry(backendEntry); assert entry.type().isVertex(); Id id = IdUtil.readString(entry.column(HugeKeys.ID)); Number label = entry.column(HugeKeys.LABEL); VertexLabel vertexLabel = VertexLabel.NONE; if (label != null) { vertexLabel = graph.vertexLabel(this.toId(label)); } HugeVertex vertex = new HugeVertex(graph, id, vertexLabel); // Parse all properties of a Vertex this.parseProperties(vertex, entry.row()); // Parse all edges of a Vertex for (TableBackendEntry.Row edge : entry.subRows()) { this.parseEdge(edge, vertex, graph); } return vertex; }