Skip to content

Commit 82dda7b

Browse files
authored
update remaining cypher CALL subqueries to new format (#6512)
1 parent 379171c commit 82dda7b

File tree

7 files changed

+69
-60
lines changed

7 files changed

+69
-60
lines changed

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ def render_match(self) -> str:
5555
@staticmethod
5656
def _render_sub_query_per_rel_type_update_active(rel_type: str, rel_def: FieldInfo) -> str:
5757
subquery = [
58-
"WITH peer_node, rb, active_attr",
5958
"WITH peer_node, rb, active_attr",
6059
f'WHERE type(rb) = "{rel_type}"',
6160
]
@@ -72,7 +71,6 @@ def _render_sub_query_per_rel_type_update_active(rel_type: str, rel_def: FieldIn
7271
@staticmethod
7372
def _render_sub_query_per_rel_type_create_new(rel_type: str, rel_def: FieldInfo) -> str:
7473
subquery = [
75-
"WITH peer_node, rb, active_attr, new_attr",
7674
"WITH peer_node, rb, active_attr, new_attr",
7775
f'WHERE type(rb) = "{rel_type}"',
7876
]
@@ -158,7 +156,7 @@ async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> No
158156
}
159157
WITH a1 as active_attr, r1 as rb, p1 as peer_node, new_attr
160158
WHERE rb.status = "active"
161-
CALL {
159+
CALL (peer_node, rb, active_attr, new_attr){
162160
%(sub_query_create_all)s
163161
}
164162
WITH p2 as peer_node, rb, new_attr, active_attr
@@ -167,7 +165,7 @@ async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> No
167165

168166
if not (self.branch.is_default or self.branch.is_global):
169167
query = """
170-
CALL {
168+
CALL (peer_node, rb, active_attr) {
171169
%(sub_query_update_all)s
172170
}
173171
WITH p2 as peer_node, rb, new_attr

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

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ def render_where(self) -> str:
5555
@staticmethod
5656
def _render_sub_query_per_rel_type(rel_name: str, rel_type: str, direction: GraphRelDirection) -> str:
5757
subquery = [
58-
f"WITH peer_node, {rel_name}, element_to_delete",
5958
f"WITH peer_node, {rel_name}, element_to_delete",
6059
f'WHERE type({rel_name}) = "{rel_type}"',
6160
]
@@ -67,28 +66,32 @@ def _render_sub_query_per_rel_type(rel_name: str, rel_type: str, direction: Grap
6766
return "\n".join(subquery)
6867

6968
@classmethod
70-
def _render_sub_query_out(cls) -> str:
69+
def _render_sub_query_out(cls) -> tuple[str, str]:
70+
rel_name = "rel_outband"
71+
sub_query_out_args = f"peer_node, {rel_name}, element_to_delete"
7172
sub_queries_out = [
7273
cls._render_sub_query_per_rel_type(
73-
rel_name="rel_outband", rel_type=rel_type, direction=GraphRelDirection.OUTBOUND
74+
rel_name=rel_name, rel_type=rel_type, direction=GraphRelDirection.OUTBOUND
7475
)
7576
for rel_type, rel_def in GraphNodeRelationships.model_fields.items()
7677
if rel_def.default.direction in [GraphRelDirection.OUTBOUND, GraphRelDirection.EITHER]
7778
]
7879
sub_query_out = "\nUNION\n".join(sub_queries_out)
79-
return sub_query_out
80+
return sub_query_out, sub_query_out_args
8081

8182
@classmethod
82-
def _render_sub_query_in(cls) -> str:
83+
def _render_sub_query_in(cls) -> tuple[str, str]:
84+
rel_name = "rel_inband"
85+
sub_query_in_args = f"peer_node, {rel_name}, element_to_delete"
8386
sub_queries_in = [
8487
cls._render_sub_query_per_rel_type(
85-
rel_name="rel_inband", rel_type=rel_type, direction=GraphRelDirection.INBOUND
88+
rel_name=rel_name, rel_type=rel_type, direction=GraphRelDirection.INBOUND
8689
)
8790
for rel_type, rel_def in GraphNodeRelationships.model_fields.items()
8891
if rel_def.default.direction in [GraphRelDirection.INBOUND, GraphRelDirection.EITHER]
8992
]
9093
sub_query_in = "\nUNION\n".join(sub_queries_in)
91-
return sub_query_in
94+
return sub_query_in, sub_query_in_args
9295

9396
async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> None: # noqa: ARG002
9497
branch_filter, branch_params = self.branch.get_query_filter_path(at=self.at.to_string())
@@ -108,8 +111,8 @@ async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> No
108111
"from": self.at.to_string(),
109112
}
110113

111-
sub_query_out = self._render_sub_query_out()
112-
sub_query_in = self._render_sub_query_in()
114+
sub_query_out, sub_query_out_args = self._render_sub_query_out()
115+
sub_query_in, sub_query_in_args = self._render_sub_query_in()
113116

114117
self.add_to_query(self.render_match())
115118
self.add_to_query(self.render_where())
@@ -138,7 +141,7 @@ async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> No
138141
}
139142
WITH n1 as element_to_delete, rel_outband1 as rel_outband, p1 as peer_node
140143
WHERE rel_outband.status = "active"
141-
CALL {
144+
CALL (%(sub_query_out_args)s) {
142145
%(sub_query_out)s
143146
}
144147
WITH p2 as peer_node, rel_outband, element_to_delete
@@ -157,7 +160,7 @@ async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> No
157160
}
158161
WITH n1 as element_to_delete, rel_inband1 as rel_inband, p1 as peer_node
159162
WHERE rel_inband.status = "active"
160-
CALL {
163+
CALL (%(sub_query_in_args)s) {
161164
%(sub_query_in)s
162165
}
163166
WITH p2 as peer_node, rel_inband, element_to_delete
@@ -169,5 +172,7 @@ async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> No
169172
"branch_filter": branch_filter,
170173
"sub_query_out": sub_query_out,
171174
"sub_query_in": sub_query_in,
175+
"sub_query_out_args": sub_query_out_args,
176+
"sub_query_in_args": sub_query_in_args,
172177
}
173178
self.add_to_query(query)

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

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ def render_match(self) -> str:
4747
@staticmethod
4848
def _render_sub_query_per_rel_type(rel_name: str, rel_type: str, rel_dir: GraphRelDirection) -> str:
4949
subquery = [
50-
f"WITH peer_node, {rel_name}, active_node, new_node",
5150
f"WITH peer_node, {rel_name}, active_node, new_node",
5251
f'WHERE type({rel_name}) = "{rel_type}"',
5352
]
@@ -81,28 +80,28 @@ def _render_sub_query_per_rel_type(rel_name: str, rel_type: str, rel_dir: GraphR
8180
return "\n".join(subquery)
8281

8382
@classmethod
84-
def _render_sub_query_out(cls) -> str:
83+
def _render_sub_query_out(cls) -> tuple[str, str]:
84+
rel_name = "rel_outband"
85+
sub_query_out_args = f"peer_node, {rel_name}, active_node, new_node"
8586
sub_queries_out = [
86-
cls._render_sub_query_per_rel_type(
87-
rel_name="rel_outband", rel_type=rel_type, rel_dir=GraphRelDirection.OUTBOUND
88-
)
87+
cls._render_sub_query_per_rel_type(rel_name=rel_name, rel_type=rel_type, rel_dir=GraphRelDirection.OUTBOUND)
8988
for rel_type, field_info in GraphNodeRelationships.model_fields.items()
9089
if field_info.default.direction in (GraphRelDirection.OUTBOUND, GraphRelDirection.EITHER)
9190
]
9291
sub_query_out = "\nUNION\n".join(sub_queries_out)
93-
return sub_query_out
92+
return sub_query_out, sub_query_out_args
9493

9594
@classmethod
96-
def _render_sub_query_in(cls) -> str:
95+
def _render_sub_query_in(cls) -> tuple[str, str]:
96+
rel_name = "rel_inband"
97+
sub_query_in_args = f"peer_node, {rel_name}, active_node, new_node"
9798
sub_queries_in = [
98-
cls._render_sub_query_per_rel_type(
99-
rel_name="rel_inband", rel_type=rel_type, rel_dir=GraphRelDirection.INBOUND
100-
)
99+
cls._render_sub_query_per_rel_type(rel_name=rel_name, rel_type=rel_type, rel_dir=GraphRelDirection.INBOUND)
101100
for rel_type, field_info in GraphNodeRelationships.model_fields.items()
102101
if field_info.default.direction in (GraphRelDirection.INBOUND, GraphRelDirection.EITHER)
103102
]
104103
sub_query_in = "\nUNION\n".join(sub_queries_in)
105-
return sub_query_in
104+
return sub_query_in, sub_query_in_args
106105

107106
async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> None: # noqa: ARG002
108107
branch_filter, branch_params = self.branch.get_query_filter_path(at=self.at.to_string())
@@ -126,8 +125,8 @@ async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> No
126125
"from": self.at.to_string(),
127126
}
128127

129-
sub_query_out = self._render_sub_query_out()
130-
sub_query_in = self._render_sub_query_in()
128+
sub_query_out, sub_query_out_args = self._render_sub_query_out()
129+
sub_query_in, sub_query_in_args = self._render_sub_query_in()
131130

132131
self.add_to_query(self.render_match())
133132

@@ -155,7 +154,7 @@ async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> No
155154
}
156155
WITH n1 as active_node, rel_outband1 as rel_outband, p1 as peer_node, new_node
157156
WHERE rel_outband.status = "active" AND rel_outband.to IS NULL
158-
CALL {
157+
CALL (%(sub_query_out_args)s) {
159158
%(sub_query_out)s
160159
}
161160
WITH p2 as peer_node, rel_outband, active_node, new_node
@@ -174,7 +173,7 @@ async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> No
174173
}
175174
WITH n1 as active_node, rel_inband1 as rel_inband, p1 as peer_node, new_node
176175
WHERE rel_inband.status = "active" AND rel_inband.to IS NULL
177-
CALL {
176+
CALL (%(sub_query_in_args)s) {
178177
%(sub_query_in)s
179178
}
180179
WITH p2 as peer_node, rel_inband, active_node, new_node
@@ -188,5 +187,7 @@ async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> No
188187
"labels": ":".join(self.new_node.labels),
189188
"sub_query_out": sub_query_out,
190189
"sub_query_in": sub_query_in,
190+
"sub_query_out_args": sub_query_out_args,
191+
"sub_query_in_args": sub_query_in_args,
191192
}
192193
self.add_to_query(query)

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

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ def render_match(self) -> str:
4747
@staticmethod
4848
def _render_sub_query_per_rel_type(rel_name: str, rel_type: str, direction: GraphRelDirection) -> str:
4949
subquery = [
50-
f"WITH peer_node, {rel_name}, active_rel, new_rel",
5150
f"WITH peer_node, {rel_name}, active_rel, new_rel",
5251
f'WHERE type({rel_name}) = "{rel_type}"',
5352
]
@@ -61,28 +60,32 @@ def _render_sub_query_per_rel_type(rel_name: str, rel_type: str, direction: Grap
6160
return "\n".join(subquery)
6261

6362
@classmethod
64-
def _render_sub_query_out(cls) -> str:
63+
def _render_sub_query_out(cls) -> tuple[str, str]:
64+
rel_name = "rel_outband"
65+
sub_query_out_args = f"peer_node, {rel_name}, active_rel, new_rel"
6566
sub_queries_out = [
6667
cls._render_sub_query_per_rel_type(
67-
rel_name="rel_outband", rel_type=rel_type, direction=GraphRelDirection.OUTBOUND
68+
rel_name=rel_name, rel_type=rel_type, direction=GraphRelDirection.OUTBOUND
6869
)
6970
for rel_type, rel_def in GraphRelationshipRelationships.model_fields.items()
7071
if rel_def.default.direction in [GraphRelDirection.OUTBOUND, GraphRelDirection.EITHER]
7172
]
7273
sub_query_out = "\nUNION\n".join(sub_queries_out)
73-
return sub_query_out
74+
return sub_query_out, sub_query_out_args
7475

7576
@classmethod
76-
def _render_sub_query_in(cls) -> str:
77+
def _render_sub_query_in(cls) -> tuple[str, str]:
78+
rel_name = "rel_inband"
79+
sub_query_in_args = f"peer_node, {rel_name}, active_rel, new_rel"
7780
sub_queries_in = [
7881
cls._render_sub_query_per_rel_type(
79-
rel_name="rel_inband", rel_type=rel_type, direction=GraphRelDirection.INBOUND
82+
rel_name=rel_name, rel_type=rel_type, direction=GraphRelDirection.INBOUND
8083
)
8184
for rel_type, rel_def in GraphRelationshipRelationships.model_fields.items()
8285
if rel_def.default.direction in [GraphRelDirection.INBOUND, GraphRelDirection.EITHER]
8386
]
8487
sub_query_in = "\nUNION\n".join(sub_queries_in)
85-
return sub_query_in
88+
return sub_query_in, sub_query_in_args
8689

8790
async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> None: # noqa: ARG002
8891
branch_filter, branch_params = self.branch.get_query_filter_path(at=self.at.to_string())
@@ -109,8 +112,8 @@ async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> No
109112
"from": self.at.to_string(),
110113
}
111114

112-
sub_query_out = self._render_sub_query_out()
113-
sub_query_in = self._render_sub_query_in()
115+
sub_query_out, sub_query_out_args = self._render_sub_query_out()
116+
sub_query_in, sub_query_in_args = self._render_sub_query_in()
114117

115118
self.add_to_query(self.render_match())
116119

@@ -138,7 +141,7 @@ async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> No
138141
}
139142
WITH n1 as active_rel, rel_inband1 as rel_inband, p1 as peer_node, new_rel
140143
WHERE rel_inband.status = "active"
141-
CALL {
144+
CALL (%(sub_query_in_args)s) {
142145
%(sub_query_in)s
143146
}
144147
WITH p2 as peer_node, rel_inband, active_rel, new_rel
@@ -157,7 +160,7 @@ async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> No
157160
}
158161
WITH n1 as active_rel, rel_outband1 as rel_outband, p1 as peer_node, new_rel
159162
WHERE rel_outband.status = "active"
160-
CALL {
163+
CALL (%(sub_query_out_args)s) {
161164
%(sub_query_out)s
162165
}
163166
WITH p2 as peer_node, rel_outband, active_rel, new_rel
@@ -169,5 +172,7 @@ async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> No
169172
"branch_filter": branch_filter,
170173
"sub_query_out": sub_query_out,
171174
"sub_query_in": sub_query_in,
175+
"sub_query_in_args": sub_query_in_args,
176+
"sub_query_out_args": sub_query_out_args,
172177
}
173178
self.add_to_query(query)

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> No
5050

5151
def render_sub_query_per_rel_type(rel_type: str, rel_def: FieldInfo) -> str:
5252
subquery = [
53-
"WITH peer_node, rb, active_attr",
5453
"WITH peer_node, rb, active_attr",
5554
f'WHERE type(rb) = "{rel_type}"',
5655
]
@@ -105,7 +104,7 @@ def render_sub_query_per_rel_type(rel_type: str, rel_def: FieldInfo) -> str:
105104
}
106105
WITH a1 as active_attr, r1 as rb, p1 as peer_node
107106
WHERE rb.status = "active"
108-
CALL {
107+
CALL (peer_node, rb, active_attr) {
109108
%(sub_query_all)s
110109
}
111110
WITH p2 as peer_node, rb, active_attr

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

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ def render_sub_query_per_rel_type(
2121
rel_def: FieldInfo,
2222
) -> str:
2323
subquery = [
24-
f"WITH peer_node, {rel_name}, active_node",
2524
f"WITH peer_node, {rel_name}, active_node",
2625
f'WHERE type({rel_name}) = "{rel_type}"',
2726
]
@@ -90,7 +89,7 @@ class NodeRemoveMigrationQueryIn(NodeRemoveMigrationBaseQuery):
9089
insert_return: bool = False
9190

9291
def render_node_remove_query(self, branch_filter: str) -> str:
93-
sub_query = self.render_sub_query_in()
92+
sub_query, sub_query_args = self.render_sub_query_in()
9493
query = """
9594
// Process Inbound Relationship
9695
WITH active_node
@@ -104,27 +103,29 @@ def render_node_remove_query(self, branch_filter: str) -> str:
104103
}
105104
WITH n1 as active_node, rel_inband1 as rel_inband, p1 as peer_node
106105
WHERE rel_inband.status = "active"
107-
CALL {
106+
CALL (%(sub_query_args)s) {
108107
%(sub_query)s
109108
}
110109
WITH p2 as peer_node, rel_inband, active_node
111110
FOREACH (i in CASE WHEN rel_inband.branch IN ["-global-", $branch] THEN [1] ELSE [] END |
112111
SET rel_inband.to = $current_time
113112
)
114-
""" % {"sub_query": sub_query, "branch_filter": branch_filter}
113+
""" % {"sub_query": sub_query, "sub_query_args": sub_query_args, "branch_filter": branch_filter}
115114
return query
116115

117-
def render_sub_query_in(self) -> str:
116+
def render_sub_query_in(self) -> tuple[str, str]:
117+
rel_name = "rel_inband"
118+
sub_query_in_args = f"peer_node, {rel_name}, active_node"
118119
sub_queries_in = [
119120
self.render_sub_query_per_rel_type(
120-
rel_name="rel_inband",
121+
rel_name=rel_name,
121122
rel_type=rel_type,
122123
rel_def=rel_def,
123124
)
124125
for rel_type, rel_def in GraphNodeRelationships.model_fields.items()
125126
]
126127
sub_query_in = "\nUNION\n".join(sub_queries_in)
127-
return sub_query_in
128+
return sub_query_in, sub_query_in_args
128129

129130
def get_nbr_migrations_executed(self) -> int:
130131
return 0
@@ -135,7 +136,7 @@ class NodeRemoveMigrationQueryOut(NodeRemoveMigrationBaseQuery):
135136
insert_return: bool = False
136137

137138
def render_node_remove_query(self, branch_filter: str) -> str:
138-
sub_query = self.render_sub_query_out()
139+
sub_query, sub_query_args = self.render_sub_query_out()
139140
query = """
140141
// Process Outbound Relationship
141142
WITH active_node
@@ -149,27 +150,29 @@ def render_node_remove_query(self, branch_filter: str) -> str:
149150
}
150151
WITH n1 as active_node, rel_outband1 as rel_outband, p1 as peer_node
151152
WHERE rel_outband.status = "active"
152-
CALL {
153+
CALL (%(sub_query_args)s) {
153154
%(sub_query)s
154155
}
155156
FOREACH (i in CASE WHEN rel_outband.branch IN ["-global-", $branch] THEN [1] ELSE [] END |
156157
SET rel_outband.to = $current_time
157158
)
158-
""" % {"sub_query": sub_query, "branch_filter": branch_filter}
159+
""" % {"sub_query": sub_query, "sub_query_args": sub_query_args, "branch_filter": branch_filter}
159160

160161
return query
161162

162-
def render_sub_query_out(self) -> str:
163+
def render_sub_query_out(self) -> tuple[str, str]:
164+
rel_name = "rel_outband"
165+
sub_query_out_args = f"peer_node, {rel_name}, active_node"
163166
sub_queries_out = [
164167
self.render_sub_query_per_rel_type(
165-
rel_name="rel_outband",
168+
rel_name=rel_name,
166169
rel_type=rel_type,
167170
rel_def=rel_def,
168171
)
169172
for rel_type, rel_def in GraphNodeRelationships.model_fields.items()
170173
]
171174
sub_query_out = "\nUNION\n".join(sub_queries_out)
172-
return sub_query_out
175+
return sub_query_out, sub_query_out_args
173176

174177
def get_nbr_migrations_executed(self) -> int:
175178
return self.num_of_results

0 commit comments

Comments
 (0)