From 0cfc6cf5ecffc63ec1a722d460db98b9fa594187 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Colin=20de=20Verdi=C3=A8re?= Date: Wed, 31 May 2023 20:59:09 +0200 Subject: [PATCH 1/2] Fix #300 same table referenced twice in children Retrieve every foreign key constraint in a list to build filter --- pgsync/base.py | 6 +++--- pgsync/sync.py | 13 ++++++------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/pgsync/base.py b/pgsync/base.py index 3e13c0b8..e75f6e7c 100644 --- a/pgsync/base.py +++ b/pgsync/base.py @@ -95,16 +95,16 @@ def foreign_key_constraint(self, model) -> dict: constraints: dict = {} for foreign_key in model.foreign_keys: referred_table: str = str(foreign_key.constraint.referred_table) - constraints.setdefault(referred_table, {}) + constraints.setdefault(referred_table, []) if foreign_key.constraint.column_keys: if foreign_key.constraint.column_keys[0] in self.data: - constraints[referred_table] = { + constraints[referred_table].append({ "local": foreign_key.constraint.column_keys[0], "remote": foreign_key.column.name, "value": self.data[ foreign_key.constraint.column_keys[0] ], - } + }) return constraints diff --git a/pgsync/sync.py b/pgsync/sync.py index 0be437b5..54b8f7f7 100644 --- a/pgsync/sync.py +++ b/pgsync/sync.py @@ -518,13 +518,12 @@ def _through_node_resolver( """ foreign_key_constraint = payload.foreign_key_constraint(node.model) if self.tree.root.name in foreign_key_constraint: - filters.append( - { - foreign_key_constraint[self.tree.root.name][ - "remote" - ]: foreign_key_constraint[self.tree.root.name]["value"] - } - ) + for constraint in foreign_key_constraint[self.tree.root.name]: + filters.append( + { + constraint["remote"]: constraint["value"] + } + ) return filters def _insert_op( From 7d12a1d858696b2d2dbc4f069032ed2f517b18be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Colin=20de=20Verdi=C3=A8re?= Date: Thu, 1 Jun 2023 09:37:53 +0200 Subject: [PATCH 2/2] Fix comment --- pgsync/base.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pgsync/base.py b/pgsync/base.py index e75f6e7c..55cbe224 100644 --- a/pgsync/base.py +++ b/pgsync/base.py @@ -80,16 +80,16 @@ def data(self) -> dict: def foreign_key_constraint(self, model) -> dict: """ { - 'public.customer': { referred table with a fully qualified name + 'public.customer': [{ referred table with a fully qualified name 'local': 'customer_id', 'remote': 'id', 'value': 1 - }, - 'public.group': { referred table with a fully qualified name + }], + 'public.group': [{ referred table with a fully qualified name 'local': 'group_id', 'remote': 'id', 'value': 1 - } + }] } """ constraints: dict = {}