diff --git a/querybuilder/atoms/relations.py b/querybuilder/atoms/relations.py index 59f9cd0a720b2f851aba8433f0d49cb3ff2ab9d9..68ded344cf43861d3852ca10175bd61ec0bdaab2 100644 --- a/querybuilder/atoms/relations.py +++ b/querybuilder/atoms/relations.py @@ -283,7 +283,7 @@ class Aliased(Named): ( qbcolumns.name_column(c, self.column_aliases[i]) if i in self.column_aliases - else c + else qbcolumns.name_column(c, relation_name=self.name) for i, c in enumerate(self.subrelation.columns) ) ) @@ -327,6 +327,8 @@ class Aliased(Named): def __getstate__(self): state = super().__getstate__() + state["subrelation"] = self.subrelation + state["column_aliases"] = self.column_aliases state["columns"] = None # maybe a little ugly? return state diff --git a/querybuilder/tests/atoms/test_relations.py b/querybuilder/tests/atoms/test_relations.py index d3615132dd0c0a93a1111e4f190b4b16ecb14502..7e9087e9773212b1dac089579fad9d02022a99e2 100644 --- a/querybuilder/tests/atoms/test_relations.py +++ b/querybuilder/tests/atoms/test_relations.py @@ -302,7 +302,7 @@ class TestAliased: expected_columns = ( qbcolumns.Named(int, "a"), - subrel.columns[1], + qbcolumns.Named(int, "b", relation_name="bar"), qbcolumns.Named(int, "c"), ) diff --git a/querybuilder/tests/drivers/sql/test_tokenizer.py b/querybuilder/tests/drivers/sql/test_tokenizer.py index 11cc7db04ab89422c0bd778baa57f0c66a918d9c..6f7c78ba4bb048762a52187f82d5009507bc78c9 100644 --- a/querybuilder/tests/drivers/sql/test_tokenizer.py +++ b/querybuilder/tests/drivers/sql/test_tokenizer.py @@ -1601,4 +1601,6 @@ class TestSQLTokenizer: rel = qbrelations.Aliased(subrel, "bar", column_aliases={1: "col"}) - assert rel == self.tk.transform(rel) + transrel = self.tk.transform(rel) + + assert rel == transrel diff --git a/querybuilder/tests/drivers/sqlite/test_sqlite_tokenizer.py b/querybuilder/tests/drivers/sqlite/test_sqlite_tokenizer.py index d5bcef937179fdfed09edb7d7c364f71c13d095d..3e9640a44e0ea7beb0b433faf1af6645a43fc26e 100644 --- a/querybuilder/tests/drivers/sqlite/test_sqlite_tokenizer.py +++ b/querybuilder/tests/drivers/sqlite/test_sqlite_tokenizer.py @@ -132,3 +132,16 @@ class TestSqliteTokenizer(parent_suite.TestSQLTokenizer): assert qbcolumns.False_() == naming_relation.where for i, c in enumerate(naming_relation.columns): assert expected_column_names[i] == c.name + + def test_transform_aliased_relation_with_column_aliases(self): + column_names = ("x", "b", "z") + columns = tuple(qbcolumns.Named(int, name) for name in column_names) + + subrel = qbrelations.Named("foo", columns=columns) + + rel = qbrelations.Aliased(subrel, "bar", column_aliases={1: "col"}) + + transrel = self.tk.transform(rel) + + assert rel.name == transrel.name + assert rel.schema_name == transrel.schema_name