use of com.alibaba.maxgraph.sdkcommon.schema.EdgeKind in project GraphScope by alibaba.
the class GraphWriter method addUpdateEdgeOperation.
private void addUpdateEdgeOperation(OperationBatch.Builder batchBuilder, GraphSchema schema, DataRecord dataRecord) {
EdgeId edgeId;
EdgeKind edgeKind;
GraphElement edgeDef;
EdgeTarget edgeTarget = dataRecord.getEdgeTarget();
Map<String, Object> properties = dataRecord.getProperties();
if (edgeTarget != null) {
edgeId = edgeTarget.getEdgeId();
edgeKind = edgeTarget.getEdgeKind();
edgeDef = schema.getElement(edgeKind.getEdgeLabelId().getId());
} else {
EdgeRecordKey edgeRecordKey = dataRecord.getEdgeRecordKey();
VertexRecordKey srcVertexRecordKey = edgeRecordKey.getSrcVertexRecordKey();
VertexRecordKey dstVertexRecordKey = edgeRecordKey.getDstVertexRecordKey();
String label = edgeRecordKey.getLabel();
edgeDef = schema.getElement(label);
GraphElement srcVertexDef = schema.getElement(srcVertexRecordKey.getLabel());
GraphElement dstVertexDef = schema.getElement(dstVertexRecordKey.getLabel());
int labelId = edgeDef.getLabelId();
Map<Integer, PropertyValue> srcVertexPkVals = parseRawProperties(srcVertexDef, srcVertexRecordKey.getProperties());
long srcVertexHashId = getHashId(srcVertexDef.getLabelId(), srcVertexPkVals, srcVertexDef);
Map<Integer, PropertyValue> dstVertexPkVals = parseRawProperties(dstVertexDef, dstVertexRecordKey.getProperties());
long dstVertexHashId = getHashId(dstVertexDef.getLabelId(), dstVertexPkVals, dstVertexDef);
long edgeInnerId = edgeRecordKey.getEdgeInnerId();
edgeId = new EdgeId(new VertexId(srcVertexHashId), new VertexId(dstVertexHashId), edgeInnerId);
edgeKind = EdgeKind.newBuilder().setEdgeLabelId(new LabelId(labelId)).setSrcVertexLabelId(new LabelId(srcVertexDef.getLabelId())).setDstVertexLabelId(new LabelId(dstVertexDef.getLabelId())).build();
}
Map<Integer, PropertyValue> propertyVals = parseRawProperties(edgeDef, properties);
batchBuilder.addOperation(new UpdateEdgeOperation(edgeId, edgeKind, propertyVals, true));
batchBuilder.addOperation(new UpdateEdgeOperation(edgeId, edgeKind, propertyVals, false));
}
use of com.alibaba.maxgraph.sdkcommon.schema.EdgeKind in project GraphScope by alibaba.
the class CommitDataLoadExecutor method execute.
@Override
public DdlResult execute(ByteString ddlBlob, GraphDef graphDef, int partitionCount) throws InvalidProtocolBufferException {
CommitDataLoadPb commitDataLoadPb = CommitDataLoadPb.parseFrom(ddlBlob);
DataLoadTargetPb dataLoadTargetPb = commitDataLoadPb.getTarget();
DataLoadTarget dataLoadTarget = DataLoadTarget.parseProto(dataLoadTargetPb);
String label = dataLoadTarget.getLabel();
String srcLabel = dataLoadTarget.getSrcLabel();
String dstLabel = dataLoadTarget.getDstLabel();
long version = graphDef.getSchemaVersion();
if (!graphDef.hasLabel(label)) {
throw new DdlException("label [" + label + "] not exists, schema version [" + version + "]");
}
GraphDef.Builder graphDefBuilder = GraphDef.newBuilder(graphDef);
TypeDef typeDef = graphDef.getTypeDef(label);
DataLoadTarget.Builder targetBuilder = DataLoadTarget.newBuilder(dataLoadTarget);
if (srcLabel == null || srcLabel.isEmpty()) {
// Vertex type
if (typeDef.getTypeEnum() != TypeEnum.VERTEX) {
throw new DdlException("invalid data load target [" + dataLoadTarget + "], label is not a vertex");
}
targetBuilder.setLabelId(typeDef.getLabelId());
} else {
// Edge kind
if (typeDef.getTypeEnum() != TypeEnum.EDGE) {
throw new DdlException("invalid data load target [" + dataLoadTarget + "], label is not an edge");
}
EdgeKind.Builder edgeKindBuilder = EdgeKind.newBuilder();
LabelId edgeLabelId = graphDef.getLabelId(label);
if (edgeLabelId == null) {
throw new DdlException("invalid edgeLabel [" + label + "], schema version [" + version + "]");
}
edgeKindBuilder.setEdgeLabelId(edgeLabelId);
targetBuilder.setLabelId(edgeLabelId.getId());
LabelId srcVertexLabelId = graphDef.getLabelId(srcLabel);
if (srcVertexLabelId == null) {
throw new DdlException("invalid srcVertexLabel [" + srcLabel + "], schema version [" + version + "]");
}
edgeKindBuilder.setSrcVertexLabelId(srcVertexLabelId);
targetBuilder.setSrcLabelId(srcVertexLabelId.getId());
LabelId dstVertexLabelId = graphDef.getLabelId(dstLabel);
if (dstVertexLabelId == null) {
throw new DdlException("invalid dstVertexLabel [" + dstLabel + "], schema version [" + version + "]");
}
edgeKindBuilder.setDstVertexLabelId(dstVertexLabelId);
targetBuilder.setDstLabelId(dstVertexLabelId.getId());
EdgeKind edgeKind = edgeKindBuilder.build();
if (!graphDef.hasEdgeKind(edgeKind)) {
throw new DdlException("invalid data load target [" + dataLoadTarget + "], edgeKind not exists");
}
}
version++;
graphDefBuilder.setVersion(version);
GraphDef newGraphDef = graphDefBuilder.build();
List<Operation> operations = new ArrayList<>(partitionCount);
for (int i = 0; i < partitionCount; i++) {
operations.add(new CommitDataLoadOperation(i, version, CommitDataLoadPb.newBuilder().setTableIdx(commitDataLoadPb.getTableIdx()).setTarget(targetBuilder.build().toProto()).build()));
}
return new DdlResult(newGraphDef, operations);
}
Aggregations