imbajin commented on code in PR #683:
URL:
https://github.com/apache/incubator-hugegraph-toolchain/pull/683#discussion_r2458903906
##########
hugegraph-loader/src/main/java/org/apache/hugegraph/loader/HugeGraphLoader.java:
##########
@@ -153,11 +270,286 @@ private void createSchema() {
throw new LoadException("Failed to read schema file '%s'", e,
options.schema);
}
- groovyExecutor.execute(script, client);
+
+ if (!options.shorterIDConfigs.isEmpty()) {
+ for (ShortIdConfig config : options.shorterIDConfigs) {
+ PropertyKey propertyKey =
client.schema().propertyKey(config.getIdFieldName())
+ .ifNotExist()
+
.dataType(config.getIdFieldType())
+ .build();
+ client.schema().addPropertyKey(propertyKey);
+ }
+ groovyExecutor.execute(script, client);
+ List<VertexLabel> vertexLabels =
client.schema().getVertexLabels();
+ for (VertexLabel vertexLabel : vertexLabels) {
+ ShortIdConfig config;
+ if ((config =
options.getShortIdConfig(vertexLabel.name())) != null) {
+ config.setLabelID(vertexLabel.id());
+ IndexLabel indexLabel = client.schema()
+
.indexLabel(config.getVertexLabel() + "By" +
+
config.getIdFieldName())
+
.onV(config.getVertexLabel())
+
.by(config.getIdFieldName())
+ .secondary()
+ .ifNotExist()
+ .build();
+ client.schema().addIndexLabel(indexLabel);
+ }
+ }
+ } else {
+ groovyExecutor.execute(script, client);
+ }
+ }
+
+ // create schema for Graph Source
+ List<InputStruct> structs = this.mapping.structs();
+ for (InputStruct struct : structs) {
+ if (SourceType.GRAPH.equals(struct.input().type())) {
+ GraphSource graphSouce = (GraphSource) struct.input();
+ if (StringUtils.isEmpty(graphSouce.getPdPeers())) {
+ graphSouce.setPdPeers(this.options.pdPeers);
+ }
+ if (StringUtils.isEmpty(graphSouce.getMetaEndPoints())) {
+ graphSouce.setMetaEndPoints(this.options.metaEndPoints);
+ }
+ if (StringUtils.isEmpty(graphSouce.getCluster())) {
+ graphSouce.setCluster(this.options.cluster);
+ }
+ if (StringUtils.isEmpty(graphSouce.getUsername())) {
+ graphSouce.setUsername(this.options.username);
+ }
+ if (StringUtils.isEmpty(graphSouce.getPassword())) {
+ graphSouce.setPassword(this.options.password);
+ }
+
+ GraphSource graphSource = (GraphSource) struct.input();
+ createGraphSourceSchema(graphSource);
+ }
}
+
this.context.updateSchemaCache();
}
+ /**
+ * create schema like graphdb when source is graphdb;
+ *
+ * @param graphSource
+ */
+ private void createGraphSourceSchema(GraphSource graphSource) {
+
+ try (HugeClient sourceClient = graphSource.createHugeClient();
+ HugeClient client = HugeClientHolder.create(this.options, false))
{
+
Review Comment:
🧹 **代码重复**: `createGraphSourceVertexLabel` 和 `createGraphSourceEdgeLabel`
方法有大量重复代码。
**建议**: 提取公共逻辑到私有辅助方法:
```java
private <T> void processSelectedLabels(
List<T> labels,
Map<String, SeletedLabelDes> selectedMap,
Function<T, String> nameGetter,
Function<T, List<String>> propertiesGetter) {
// 公共的选择和过滤逻辑
}
```
这样可以减少约 100 行重复代码,提高可维护性。
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]