Skip to content

Commit

Permalink
Merge pull request #14 from henadzit/fix/query-copying
Browse files Browse the repository at this point in the history
fix: query copying
  • Loading branch information
waketzheng authored Nov 25, 2024
2 parents c9b8d17 + 87a948c commit 469fc1c
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 1 deletion.
4 changes: 3 additions & 1 deletion pypika/queries.py
Original file line number Diff line number Diff line change
Expand Up @@ -757,7 +757,6 @@ def __init__(
def __copy__(self) -> "Self":
newone = type(self).__new__(type(self))
newone.__dict__.update(self.__dict__)
newone._select_star_tables = copy(self._select_star_tables)
newone._from = copy(self._from)
newone._with = copy(self._with)
newone._selects = copy(self._selects)
Expand All @@ -768,6 +767,9 @@ def __copy__(self) -> "Self":
newone._joins = copy(self._joins)
newone._unions = copy(self._unions)
newone._updates = copy(self._updates)
newone._select_star_tables = copy(self._select_star_tables)
newone._on_conflict_fields = copy(self._on_conflict_fields)
newone._on_conflict_do_updates = copy(self._on_conflict_do_updates)
return newone

@builder
Expand Down
34 changes: 34 additions & 0 deletions tests/test_query.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import unittest
from copy import copy

from pypika import Case, Query, Tables, Tuple, functions
from pypika.dialects import (
Expand Down Expand Up @@ -175,3 +176,36 @@ def test_query_builders_have_reference_to_correct_query_class(self):

with self.subTest("SQLLiteQueryBuilder"):
self.assertEqual(SQLLiteQuery, SQLLiteQueryBuilder.QUERY_CLS)

def test_query_builder_copy(self):
qb = QueryBuilder()
qb2 = copy(qb)

self.assertIsNot(qb, qb2)
self.assertEqual(qb, qb2)
self.assertEqual(qb._select_star_tables, qb2._select_star_tables)
self.assertIsNot(qb._select_star_tables, qb2._select_star_tables)
self.assertEqual(qb._from, qb2._from)
self.assertIsNot(qb._from, qb2._from)
self.assertEqual(qb._with, qb2._with)
self.assertIsNot(qb._with, qb2._with)
self.assertEqual(qb._selects, qb2._selects)
self.assertIsNot(qb._selects, qb2._selects)
self.assertEqual(qb._columns, qb2._columns)
self.assertIsNot(qb._columns, qb2._columns)
self.assertEqual(qb._values, qb2._values)
self.assertIsNot(qb._values, qb2._values)
self.assertEqual(qb._groupbys, qb2._groupbys)
self.assertIsNot(qb._groupbys, qb2._groupbys)
self.assertEqual(qb._orderbys, qb2._orderbys)
self.assertIsNot(qb._orderbys, qb2._orderbys)
self.assertEqual(qb._joins, qb2._joins)
self.assertIsNot(qb._joins, qb2._joins)
self.assertEqual(qb._unions, qb2._unions)
self.assertIsNot(qb._unions, qb2._unions)
self.assertEqual(qb._updates, qb2._updates)
self.assertIsNot(qb._updates, qb2._updates)
self.assertEqual(qb._on_conflict_fields, qb2._on_conflict_fields)
self.assertIsNot(qb._on_conflict_fields, qb2._on_conflict_fields)
self.assertEqual(qb._on_conflict_do_updates, qb2._on_conflict_do_updates)
self.assertIsNot(qb._on_conflict_do_updates, qb2._on_conflict_do_updates)

0 comments on commit 469fc1c

Please sign in to comment.