From e8329c0dcd030c44158395c934193c4163a7eef5 Mon Sep 17 00:00:00 2001 From: collerek Date: Sun, 7 Mar 2021 14:10:35 +0100 Subject: [PATCH] check orders --- .github/workflows/test-package.yml | 8 ++--- ormar/queryset/query.py | 2 +- ormar/queryset/queryset.py | 2 +- tests/test_order_by.py | 55 ++++++++++++++++++------------ 4 files changed, 39 insertions(+), 28 deletions(-) diff --git a/.github/workflows/test-package.yml b/.github/workflows/test-package.yml index 4d92a32..00a1be1 100644 --- a/.github/workflows/test-package.yml +++ b/.github/workflows/test-package.yml @@ -51,14 +51,14 @@ jobs: run: | python -m pip install --upgrade pip if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - - name: Run postgres - env: - DATABASE_URL: "postgresql://username:password@localhost:5432/testsuite" - run: bash scripts/test.sh - name: Run mysql env: DATABASE_URL: "mysql://username:password@127.0.0.1:3306/testsuite" run: bash scripts/test.sh + - name: Run postgres + env: + DATABASE_URL: "postgresql://username:password@localhost:5432/testsuite" + run: bash scripts/test.sh - name: Run sqlite env: DATABASE_URL: "sqlite:///testsuite" diff --git a/ormar/queryset/query.py b/ormar/queryset/query.py index 9ba9dcc..74f449a 100644 --- a/ormar/queryset/query.py +++ b/ormar/queryset/query.py @@ -173,7 +173,7 @@ class Query: limit_qry ) limit_qry = limit_qry.group_by(qry_text) - limit_qry = OrderQuery(sorted_orders=self.sorted_orders).apply(limit_qry) + # limit_qry = OrderQuery(sorted_orders=self.sorted_orders).apply(limit_qry) limit_qry = LimitQuery(limit_count=self.limit_count).apply(limit_qry) limit_qry = OffsetQuery(query_offset=self.query_offset).apply(limit_qry) limit_action = FilterAction( diff --git a/ormar/queryset/queryset.py b/ormar/queryset/queryset.py index e84b67d..844ec19 100644 --- a/ormar/queryset/queryset.py +++ b/ormar/queryset/queryset.py @@ -281,7 +281,7 @@ class QuerySet: limit_raw_sql=self.limit_sql_raw, ) exp = qry.build_select_expression() - # print("\n", exp.compile(compile_kwargs={"literal_binds": True})) + print("\n", exp.compile(compile_kwargs={"literal_binds": True})) return exp def filter( # noqa: A003 diff --git a/tests/test_order_by.py b/tests/test_order_by.py index bbb6385..c735e68 100644 --- a/tests/test_order_by.py +++ b/tests/test_order_by.py @@ -132,6 +132,11 @@ async def test_sort_order_on_main_model(): assert songs[1].name == "Song 2" assert songs[2].name == "Song 3" + songs = await Song.objects.order_by("name").limit(2).all() + assert len(songs) == 2 + assert songs[0].name == "Song 1" + assert songs[1].name == "Song 2" + await Song.objects.create(name="Song 4", sort_order=1) songs = await Song.objects.order_by(["sort_order", "name"]).all() @@ -169,27 +174,27 @@ async def test_sort_order_on_related_model(): owner = ( await Owner.objects.select_related("toys") - .order_by("toys__name") - .filter(name="Zeus") - .get() + .order_by("toys__name") + .filter(name="Zeus") + .get() ) assert owner.toys[0].name == "Toy 1" assert owner.toys[1].name == "Toy 4" owner = ( await Owner.objects.select_related("toys") - .order_by("-toys__name") - .filter(name="Zeus") - .get() + .order_by("-toys__name") + .filter(name="Zeus") + .get() ) assert owner.toys[0].name == "Toy 4" assert owner.toys[1].name == "Toy 1" owners = ( await Owner.objects.select_related("toys") - .order_by("-toys__name") - .filter(name__in=["Zeus", "Hermes"]) - .all() + .order_by("-toys__name") + .filter(name__in=["Zeus", "Hermes"]) + .all() ) assert owners[0].toys[0].name == "Toy 6" assert owners[0].toys[1].name == "Toy 5" @@ -203,9 +208,9 @@ async def test_sort_order_on_related_model(): owners = ( await Owner.objects.select_related("toys") - .order_by("-toys__name") - .filter(name__in=["Zeus", "Hermes"]) - .all() + .order_by("-toys__name") + .filter(name__in=["Zeus", "Hermes"]) + .all() ) assert owners[0].toys[0].name == "Toy 7" assert owners[0].toys[1].name == "Toy 4" @@ -216,6 +221,12 @@ async def test_sort_order_on_related_model(): assert owners[1].toys[1].name == "Toy 5" assert owners[1].name == "Hermes" + toys = await Toy.objects.select_related('owner').order_by('owner__name').limit( + 2).all() + assert len(toys) == 2 + assert toys[0].name == 'Toy 2' + assert toys[1].name == 'Toy 3' + @pytest.mark.asyncio async def test_sort_order_on_many_to_many(): @@ -245,9 +256,9 @@ async def test_sort_order_on_many_to_many(): user = ( await User.objects.select_related("cars") - .filter(name="Mark") - .order_by("cars__name") - .get() + .filter(name="Mark") + .order_by("cars__name") + .get() ) assert user.cars[0].name == "Buggy" assert user.cars[1].name == "Ferrari" @@ -256,9 +267,9 @@ async def test_sort_order_on_many_to_many(): user = ( await User.objects.select_related("cars") - .filter(name="Mark") - .order_by("-cars__name") - .get() + .filter(name="Mark") + .order_by("-cars__name") + .get() ) assert user.cars[3].name == "Buggy" assert user.cars[2].name == "Ferrari" @@ -274,8 +285,8 @@ async def test_sort_order_on_many_to_many(): users = ( await User.objects.select_related(["cars__factory"]) - .order_by(["-cars__factory__name", "cars__name"]) - .all() + .order_by(["-cars__factory__name", "cars__name"]) + .all() ) assert users[0].name == "Julie" @@ -321,8 +332,8 @@ async def test_sort_order_with_aliases(): aliases = ( await AliasTest.objects.select_related("nested") - .order_by("-nested__name") - .all() + .order_by("-nested__name") + .all() ) assert aliases[0].nested.name == "Try4" assert aliases[1].nested.name == "Try3"