Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

tests: Use direct values instead of raw SQL #117

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Commits on Jan 18, 2021

  1. tests: Use direct values instead of raw SQL

    Supersedes disqus#11.
    
    In order to prevent (-1) from being masked by BitField.get_prep_value
    and converted to 15 (0xf), the test code uses a direct SQL statement.
    Its implementation has a few peculiarities that may be undesirable:
    
    - It uses an Django internal API, the Field.column attribute.  Granted,
      this package already uses a lot of internal APIs, and Field.column
      is highly unlikely to change.  However, in general using less internal
      APIs is better for future compatibility.
    
    - Using low-level API misses a lot of code paths that could have been
      tested.
    
    - Neither db_table nor db_column is escaped.  In case we later
      incorporate tests involving pathological SQL object identifiers, we
      have to further use quote_name, which is not exactly public API
      either.
    
    Instead, we use models.Value() with an explicit output_field, which
    still avoids BitField.get_prep_value and inserts the value directly.
    
    Further, directly assign to __dict__ so that the BitFieldCreator
    descriptor's __set__ method is bypassed and the value is assigned
    unchanged.
    iamahuman committed Jan 18, 2021
    Configuration menu
    Copy the full SHA
    cf96c2d View commit details
    Browse the repository at this point in the history