Skip to content

Fix deferred loading#90

Merged
millerdev merged 1 commit intodimagi:masterfrom
Mogost:deferred-loading
Apr 29, 2024
Merged

Fix deferred loading#90
millerdev merged 1 commit intodimagi:masterfrom
Mogost:deferred-loading

Conversation

@Mogost
Copy link
Contributor

@Mogost Mogost commented Apr 26, 2024

django-cte currently does not respect deferred loading (defer/only) specified on With query and causes an error in the case when you try to use something like

cte = With(Model.objects.only("id"))
queryset = cte.queryset().with_cte(cte)
Stacktrace
Traceback (most recent call last):
  File "/Users/user/.pyenv/versions/3.11.3/envs/django-cte/lib/python3.11/site-packages/django/db/backends/utils.py", line 105, in _execute
    return self.cursor.execute(sql, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/user/.pyenv/versions/3.11.3/envs/django-cte/lib/python3.11/site-packages/django/db/backends/sqlite3/base.py", line 329, in execute
    return super().execute(query, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
sqlite3.OperationalError: no such column: cte.region_id

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/Users/user/work/django-cte/tests/test_manager.py", line 118, in test_cte_queryset_with_only
    self.assertEqual([x.id for x in orders], [1])
                     ^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/user/.pyenv/versions/3.11.3/envs/django-cte/lib/python3.11/site-packages/django/db/models/query.py", line 400, in __iter__
    self._fetch_all()
  File "/Users/user/.pyenv/versions/3.11.3/envs/django-cte/lib/python3.11/site-packages/django/db/models/query.py", line 1928, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/user/.pyenv/versions/3.11.3/envs/django-cte/lib/python3.11/site-packages/django/db/models/query.py", line 91, in __iter__
    results = compiler.execute_sql(
              ^^^^^^^^^^^^^^^^^^^^^
  File "/Users/user/.pyenv/versions/3.11.3/envs/django-cte/lib/python3.11/site-packages/django/db/models/sql/compiler.py", line 1562, in execute_sql
    cursor.execute(sql, params)
  File "/Users/user/.pyenv/versions/3.11.3/envs/django-cte/lib/python3.11/site-packages/django/db/backends/utils.py", line 79, in execute
    return self._execute_with_wrappers(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/user/.pyenv/versions/3.11.3/envs/django-cte/lib/python3.11/site-packages/django/db/backends/utils.py", line 92, in _execute_with_wrappers
    return executor(sql, params, many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/user/.pyenv/versions/3.11.3/envs/django-cte/lib/python3.11/site-packages/django/db/backends/utils.py", line 100, in _execute
    with self.db.wrap_database_errors:
  File "/Users/user/.pyenv/versions/3.11.3/envs/django-cte/lib/python3.11/site-packages/django/db/utils.py", line 91, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/Users/user/.pyenv/versions/3.11.3/envs/django-cte/lib/python3.11/site-packages/django/db/backends/utils.py", line 105, in _execute
    return self.cursor.execute(sql, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/user/.pyenv/versions/3.11.3/envs/django-cte/lib/python3.11/site-packages/django/db/backends/sqlite3/base.py", line 329, in execute
    return super().execute(query, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
django.db.utils.OperationalError: no such column: cte.region_id

@millerdev millerdev merged commit 3d4fffe into dimagi:master Apr 29, 2024
@millerdev
Copy link
Contributor

Thanks for the fix.

@Mogost Mogost deleted the deferred-loading branch April 29, 2024 17:34
@Mogost Mogost restored the deferred-loading branch April 29, 2024 17:55
@Mogost Mogost deleted the deferred-loading branch June 9, 2024 17:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants