Skip to content

Commit fb541fc

Browse files
committed
Clean CYPHER query
1 parent 6ff8590 commit fb541fc

File tree

3 files changed

+35
-28
lines changed

3 files changed

+35
-28
lines changed

backend/infrahub/core/migrations/query/node_duplicate.py

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,16 @@ def render_match(self) -> str:
4848

4949
@staticmethod
5050
def _render_sub_query_per_rel_type(
51-
rel_name: str, rel_type: str, rel_def: FieldInfo, direction: GraphRelDirection
51+
rel_name: str,
52+
rel_type: str,
53+
rel_def: FieldInfo,
5254
) -> str:
5355
subquery = [
5456
f"WITH peer_node, {rel_name}, active_node, new_node",
5557
f"WITH peer_node, {rel_name}, active_node, new_node",
5658
f'WHERE type({rel_name}) = "{rel_type}"',
5759
]
58-
if rel_def.default.direction in [direction, GraphRelDirection.EITHER]:
60+
if rel_def.default.direction in [GraphRelDirection.OUTBOUND, GraphRelDirection.EITHER]:
5961
subquery.append(f"""
6062
CREATE (new_node)-[new_active_edge:{rel_type} $rel_props_new ]->(peer_node)
6163
SET new_active_edge.branch = CASE WHEN {rel_name}.branch = "-global-" THEN "-global-" ELSE $branch END
@@ -66,7 +68,7 @@ def _render_sub_query_per_rel_type(
6668
SET deleted_edge.branch = CASE WHEN {rel_name}.branch = "-global-" THEN "-global-" ELSE $branch END
6769
SET deleted_edge.branch_level = CASE WHEN {rel_name}.branch = "-global-" THEN {rel_name}.branch_level ELSE $branch_level END
6870
""")
69-
elif rel_def.default.direction in [direction, GraphRelDirection.EITHER]:
71+
elif rel_def.default.direction in [GraphRelDirection.INBOUND, GraphRelDirection.EITHER]:
7072
subquery.append(f"""
7173
CREATE (new_node)<-[new_active_edge:{rel_type} $rel_props_new ]-(peer_node)
7274
SET new_active_edge.branch = CASE WHEN {rel_name}.branch = "-global-" THEN "-global-" ELSE $branch END
@@ -84,7 +86,9 @@ def _render_sub_query_per_rel_type(
8486
def _render_sub_query_out(cls) -> str:
8587
sub_queries_out = [
8688
cls._render_sub_query_per_rel_type(
87-
rel_name="rel_outband", rel_type=rel_type, rel_def=rel_def, direction=GraphRelDirection.OUTBOUND
89+
rel_name="rel_outband",
90+
rel_type=rel_type,
91+
rel_def=rel_def,
8892
)
8993
for rel_type, rel_def in GraphNodeRelationships.model_fields.items()
9094
]
@@ -95,7 +99,9 @@ def _render_sub_query_out(cls) -> str:
9599
def _render_sub_query_in(cls) -> str:
96100
sub_queries_in = [
97101
cls._render_sub_query_per_rel_type(
98-
rel_name="rel_inband", rel_type=rel_type, rel_def=rel_def, direction=GraphRelDirection.INBOUND
102+
rel_name="rel_inband",
103+
rel_type=rel_type,
104+
rel_def=rel_def,
99105
)
100106
for rel_type, rel_def in GraphNodeRelationships.model_fields.items()
101107
]
@@ -140,7 +146,7 @@ async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> No
140146
LIMIT 1
141147
}
142148
WITH n1 as active_node, r1 as rb
143-
WHERE rb.status = "active" AND rb.to IS NULL
149+
WHERE rb.status = "active"
144150
CREATE (new_node:Node:%(labels)s { uuid: active_node.uuid, kind: $new_node.kind, namespace: $new_node.namespace, branch_support: $new_node.branch_support })
145151
WITH active_node, new_node
146152
// Process Outbound Relationship
@@ -159,10 +165,10 @@ async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> No
159165
%(sub_query_out)s
160166
}
161167
WITH p2 as peer_node, rel_outband, active_node, new_node
162-
FOREACH (i in CASE WHEN rel_outband.branch = "-global-" or rel_outband.branch = $branch THEN [1] ELSE [] END |
168+
FOREACH (i in CASE WHEN rel_outband.branch IN ["-global-", $branch] THEN [1] ELSE [] END |
163169
SET rel_outband.to = $current_time
164170
)
165-
WITH peer_node, rel_outband, active_node, new_node
171+
WITH active_node, new_node
166172
MATCH (active_node)<-[]-(peer)
167173
CALL {
168174
WITH active_node, peer

backend/infrahub/core/migrations/schema/node_remove.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,23 @@
1515

1616
class NodeRemoveMigrationBaseQuery(MigrationQuery):
1717
def render_sub_query_per_rel_type(
18-
self, rel_name: str, rel_type: str, rel_def: FieldInfo, direction: GraphRelDirection
18+
self,
19+
rel_name: str,
20+
rel_type: str,
21+
rel_def: FieldInfo,
1922
) -> str:
2023
subquery = [
2124
f"WITH peer_node, {rel_name}, active_node",
2225
f"WITH peer_node, {rel_name}, active_node",
2326
f'WHERE type({rel_name}) = "{rel_type}"',
2427
]
25-
if rel_def.default.direction in [direction, GraphRelDirection.EITHER]:
28+
if rel_def.default.direction in [GraphRelDirection.OUTBOUND, GraphRelDirection.EITHER]:
2629
subquery.append(f"""
2730
CREATE (active_node)-[edge:{rel_type} $rel_props ]->(peer_node)
2831
SET edge.branch = CASE WHEN {rel_name}.branch = "-global-" THEN "-global-" ELSE $branch END
2932
SET edge.branch_level = CASE WHEN {rel_name}.branch = "-global-" THEN {rel_name}.branch_level ELSE $branch_level END
3033
""")
31-
elif rel_def.default.direction in [direction, GraphRelDirection.EITHER]:
34+
elif rel_def.default.direction in [GraphRelDirection.INBOUND, GraphRelDirection.EITHER]:
3235
subquery.append(f"""
3336
CREATE (active_node)<-[edge:{rel_type} $rel_props ]-(peer_node)
3437
SET edge.branch = CASE WHEN {rel_name}.branch = "-global-" THEN "-global-" ELSE $branch END
@@ -116,7 +119,9 @@ def render_node_remove_query(self, branch_filter: str) -> str:
116119
def render_sub_query_in(self) -> str:
117120
sub_queries_in = [
118121
self.render_sub_query_per_rel_type(
119-
rel_name="rel_inband", rel_type=rel_type, rel_def=rel_def, direction=GraphRelDirection.INBOUND
122+
rel_name="rel_inband",
123+
rel_type=rel_type,
124+
rel_def=rel_def,
120125
)
121126
for rel_type, rel_def in GraphNodeRelationships.model_fields.items()
122127
]
@@ -150,7 +155,7 @@ def render_node_remove_query(self, branch_filter: str) -> str:
150155
CALL {
151156
%(sub_query)s
152157
}
153-
FOREACH (i in CASE WHEN rel_outband.branch = "-global-" or rel_outband.branch = $branch THEN [1] ELSE [] END |
158+
FOREACH (i in CASE WHEN rel_outband.branch IN ["-global-", $branch] THEN [1] ELSE [] END |
154159
SET rel_outband.to = $current_time
155160
)
156161
""" % {"sub_query": sub_query, "branch_filter": branch_filter}
@@ -160,7 +165,9 @@ def render_node_remove_query(self, branch_filter: str) -> str:
160165
def render_sub_query_out(self) -> str:
161166
sub_queries_out = [
162167
self.render_sub_query_per_rel_type(
163-
rel_name="rel_outband", rel_type=rel_type, rel_def=rel_def, direction=GraphRelDirection.OUTBOUND
168+
rel_name="rel_outband",
169+
rel_type=rel_type,
170+
rel_def=rel_def,
164171
)
165172
for rel_type, rel_def in GraphNodeRelationships.model_fields.items()
166173
]

backend/tests/helpers/db_validation.py

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -55,20 +55,14 @@ async def query_init(self, db: InfrahubDatabase, **kwargs: Any) -> None:
5555
// Return the result based on conditions
5656
WITH
5757
CASE
58-
WHEN nb_edges_on_correct_branch <> nb_edges
59-
THEN "nb_edges: " + nb_edges + " VS nb_edges_on_correct_branch: " + nb_edges_on_correct_branch
60-
ELSE
61-
CASE
62-
WHEN nb_edges = 1 AND nb_active_no_to_edges <> 1
63-
THEN "1 edge but nb_active_no_to_edges: " + nb_active_no_to_edges
64-
ELSE
65-
CASE
66-
WHEN nb_edges = 2 AND NOT (nb_active_with_to_edges = 1 AND nb_deleted_edges = 1
67-
AND active_with_to_edges[0].to = deleted_edges[0].from)
68-
THEN "2 edges but they are invalid"
69-
ELSE "Edges state is correct"
70-
END
71-
END
58+
WHEN nb_edges_on_correct_branch <> nb_edges
59+
THEN "nb_edges: " + nb_edges + " VS nb_edges_on_correct_branch: " + nb_edges_on_correct_branch
60+
WHEN nb_edges = 1 AND nb_active_no_to_edges <> 1
61+
THEN "1 edge but nb_active_no_to_edges: " + nb_active_no_to_edges
62+
WHEN nb_edges = 2 AND NOT (nb_active_with_to_edges = 1 AND nb_deleted_edges = 1
63+
AND active_with_to_edges[0].to = deleted_edges[0].from)
64+
THEN "2 edges but they are invalid"
65+
ELSE "Edges state is correct"
7266
END AS res
7367
"""
7468

0 commit comments

Comments
 (0)