check orders
This commit is contained in:
8
.github/workflows/test-package.yml
vendored
8
.github/workflows/test-package.yml
vendored
@ -51,14 +51,14 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
python -m pip install --upgrade pip
|
python -m pip install --upgrade pip
|
||||||
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
|
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
|
- name: Run mysql
|
||||||
env:
|
env:
|
||||||
DATABASE_URL: "mysql://username:password@127.0.0.1:3306/testsuite"
|
DATABASE_URL: "mysql://username:password@127.0.0.1:3306/testsuite"
|
||||||
run: bash scripts/test.sh
|
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
|
- name: Run sqlite
|
||||||
env:
|
env:
|
||||||
DATABASE_URL: "sqlite:///testsuite"
|
DATABASE_URL: "sqlite:///testsuite"
|
||||||
|
|||||||
@ -173,7 +173,7 @@ class Query:
|
|||||||
limit_qry
|
limit_qry
|
||||||
)
|
)
|
||||||
limit_qry = limit_qry.group_by(qry_text)
|
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 = LimitQuery(limit_count=self.limit_count).apply(limit_qry)
|
||||||
limit_qry = OffsetQuery(query_offset=self.query_offset).apply(limit_qry)
|
limit_qry = OffsetQuery(query_offset=self.query_offset).apply(limit_qry)
|
||||||
limit_action = FilterAction(
|
limit_action = FilterAction(
|
||||||
|
|||||||
@ -281,7 +281,7 @@ class QuerySet:
|
|||||||
limit_raw_sql=self.limit_sql_raw,
|
limit_raw_sql=self.limit_sql_raw,
|
||||||
)
|
)
|
||||||
exp = qry.build_select_expression()
|
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
|
return exp
|
||||||
|
|
||||||
def filter( # noqa: A003
|
def filter( # noqa: A003
|
||||||
|
|||||||
@ -132,6 +132,11 @@ async def test_sort_order_on_main_model():
|
|||||||
assert songs[1].name == "Song 2"
|
assert songs[1].name == "Song 2"
|
||||||
assert songs[2].name == "Song 3"
|
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)
|
await Song.objects.create(name="Song 4", sort_order=1)
|
||||||
|
|
||||||
songs = await Song.objects.order_by(["sort_order", "name"]).all()
|
songs = await Song.objects.order_by(["sort_order", "name"]).all()
|
||||||
@ -169,27 +174,27 @@ async def test_sort_order_on_related_model():
|
|||||||
|
|
||||||
owner = (
|
owner = (
|
||||||
await Owner.objects.select_related("toys")
|
await Owner.objects.select_related("toys")
|
||||||
.order_by("toys__name")
|
.order_by("toys__name")
|
||||||
.filter(name="Zeus")
|
.filter(name="Zeus")
|
||||||
.get()
|
.get()
|
||||||
)
|
)
|
||||||
assert owner.toys[0].name == "Toy 1"
|
assert owner.toys[0].name == "Toy 1"
|
||||||
assert owner.toys[1].name == "Toy 4"
|
assert owner.toys[1].name == "Toy 4"
|
||||||
|
|
||||||
owner = (
|
owner = (
|
||||||
await Owner.objects.select_related("toys")
|
await Owner.objects.select_related("toys")
|
||||||
.order_by("-toys__name")
|
.order_by("-toys__name")
|
||||||
.filter(name="Zeus")
|
.filter(name="Zeus")
|
||||||
.get()
|
.get()
|
||||||
)
|
)
|
||||||
assert owner.toys[0].name == "Toy 4"
|
assert owner.toys[0].name == "Toy 4"
|
||||||
assert owner.toys[1].name == "Toy 1"
|
assert owner.toys[1].name == "Toy 1"
|
||||||
|
|
||||||
owners = (
|
owners = (
|
||||||
await Owner.objects.select_related("toys")
|
await Owner.objects.select_related("toys")
|
||||||
.order_by("-toys__name")
|
.order_by("-toys__name")
|
||||||
.filter(name__in=["Zeus", "Hermes"])
|
.filter(name__in=["Zeus", "Hermes"])
|
||||||
.all()
|
.all()
|
||||||
)
|
)
|
||||||
assert owners[0].toys[0].name == "Toy 6"
|
assert owners[0].toys[0].name == "Toy 6"
|
||||||
assert owners[0].toys[1].name == "Toy 5"
|
assert owners[0].toys[1].name == "Toy 5"
|
||||||
@ -203,9 +208,9 @@ async def test_sort_order_on_related_model():
|
|||||||
|
|
||||||
owners = (
|
owners = (
|
||||||
await Owner.objects.select_related("toys")
|
await Owner.objects.select_related("toys")
|
||||||
.order_by("-toys__name")
|
.order_by("-toys__name")
|
||||||
.filter(name__in=["Zeus", "Hermes"])
|
.filter(name__in=["Zeus", "Hermes"])
|
||||||
.all()
|
.all()
|
||||||
)
|
)
|
||||||
assert owners[0].toys[0].name == "Toy 7"
|
assert owners[0].toys[0].name == "Toy 7"
|
||||||
assert owners[0].toys[1].name == "Toy 4"
|
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].toys[1].name == "Toy 5"
|
||||||
assert owners[1].name == "Hermes"
|
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
|
@pytest.mark.asyncio
|
||||||
async def test_sort_order_on_many_to_many():
|
async def test_sort_order_on_many_to_many():
|
||||||
@ -245,9 +256,9 @@ async def test_sort_order_on_many_to_many():
|
|||||||
|
|
||||||
user = (
|
user = (
|
||||||
await User.objects.select_related("cars")
|
await User.objects.select_related("cars")
|
||||||
.filter(name="Mark")
|
.filter(name="Mark")
|
||||||
.order_by("cars__name")
|
.order_by("cars__name")
|
||||||
.get()
|
.get()
|
||||||
)
|
)
|
||||||
assert user.cars[0].name == "Buggy"
|
assert user.cars[0].name == "Buggy"
|
||||||
assert user.cars[1].name == "Ferrari"
|
assert user.cars[1].name == "Ferrari"
|
||||||
@ -256,9 +267,9 @@ async def test_sort_order_on_many_to_many():
|
|||||||
|
|
||||||
user = (
|
user = (
|
||||||
await User.objects.select_related("cars")
|
await User.objects.select_related("cars")
|
||||||
.filter(name="Mark")
|
.filter(name="Mark")
|
||||||
.order_by("-cars__name")
|
.order_by("-cars__name")
|
||||||
.get()
|
.get()
|
||||||
)
|
)
|
||||||
assert user.cars[3].name == "Buggy"
|
assert user.cars[3].name == "Buggy"
|
||||||
assert user.cars[2].name == "Ferrari"
|
assert user.cars[2].name == "Ferrari"
|
||||||
@ -274,8 +285,8 @@ async def test_sort_order_on_many_to_many():
|
|||||||
|
|
||||||
users = (
|
users = (
|
||||||
await User.objects.select_related(["cars__factory"])
|
await User.objects.select_related(["cars__factory"])
|
||||||
.order_by(["-cars__factory__name", "cars__name"])
|
.order_by(["-cars__factory__name", "cars__name"])
|
||||||
.all()
|
.all()
|
||||||
)
|
)
|
||||||
|
|
||||||
assert users[0].name == "Julie"
|
assert users[0].name == "Julie"
|
||||||
@ -321,8 +332,8 @@ async def test_sort_order_with_aliases():
|
|||||||
|
|
||||||
aliases = (
|
aliases = (
|
||||||
await AliasTest.objects.select_related("nested")
|
await AliasTest.objects.select_related("nested")
|
||||||
.order_by("-nested__name")
|
.order_by("-nested__name")
|
||||||
.all()
|
.all()
|
||||||
)
|
)
|
||||||
assert aliases[0].nested.name == "Try4"
|
assert aliases[0].nested.name == "Try4"
|
||||||
assert aliases[1].nested.name == "Try3"
|
assert aliases[1].nested.name == "Try3"
|
||||||
|
|||||||
Reference in New Issue
Block a user