#35077: Quering with int that has bigint in database no longer working.
-------------------------------------+-------------------------------------
               Reporter:  Matej      |          Owner:  nobody
  Spiller Muys                       |
                   Type:  Bug        |         Status:  new
              Component:  Database   |        Version:  5.0
  layer (models, ORM)                |
               Severity:  Normal     |       Keywords:  regression
           Triage Stage:             |      Has patch:  0
  Unreviewed                         |
    Needs documentation:  0          |    Needs tests:  0
Patch needs improvement:  0          |  Easy pickings:  0
                  UI/UX:  0          |
-------------------------------------+-------------------------------------
 If you have table with bigint column in DB but field is defined as int
 (implicit auto field) it no longer selects the value from the database.
 It silently returns 0 records without any warning. In 4.2 it returned all
 the records regardless of defined type.
 Database that is used is mysql 8.

 {{{
 class BalanceSessionStatus(models.Model):
     class Meta(object):
         db_table = 'market_balancesession_status'
         app_label = 'market'
         default_permissions = ('add',)

     status = models.PositiveSmallIntegerField(null=False)
     created_at = models.DateTimeField(null=False, auto_now=True)


 insert_id = 5
 # insert_id = 1477468537765888

 market_models.BalanceSessionStatus(
     id=insert_id,
     status=0,
 ).save()

 assert
 market_models.BalanceSessionStatus.objects.filter(id=insert_id).exists()
 }}}

 Table is created with:
 {{{
 CREATE TABLE `market_balancesession_status` (
   `id` bigint NOT NULL,
   `status` tinyint NOT NULL,
   `created_at` datetime(6) NOT NULL,
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
 }}}

 It works with id = 5 but fails with 1477468537765888. But in 4.2 it
 worked.

 Same for 4.2 and 5.0
 {{{
 DEBUG    tests.readonly:readonly.py:98 (0.003) UPDATE
 `market_balancesession_status` SET `status` = 0, `created_at` =
 '2024-01-01 18:38:57.105947' WHERE `market_balancesession_status`.`id` =
 5; args=(0, '2024-01-01 18:38:57.105947', 5)
 DEBUG    tests.readonly:readonly.py:98 (0.002) INSERT INTO
 `market_balancesession_status` (`id`, `status`, `created_at`) VALUES (5,
 0, '2024-01-01 18:38:57.122702'); args=[5, 0, '2024-01-01
 18:38:57.122702']
 DEBUG    tests.readonly:readonly.py:98 (0.002) SELECT 1 AS `a` FROM
 `market_balancesession_status` WHERE `market_balancesession_status`.`id` =
 5 LIMIT 1; args=(1, 5)
 }}}

 5.x (for 1477468537765888)
 {{{
 DEBUG    tests.readonly:readonly.py:98 (0.003) INSERT INTO
 `market_balancesession_status` (`id`, `status`, `created_at`) VALUES
 (1477468537765888, 0, '2024-01-01 18:42:22.524123');
 args=[1477468537765888, 0, '2024-01-01 18:42:22.524123']
 }}}

 4.2 (for 1477468537765888)
 {{{
 DEBUG    tests.readonly:readonly.py:98 (0.002) UPDATE
 `market_balancesession_status` SET `status` = 0, `created_at` =
 '2024-01-01 18:45:33.122244' WHERE `market_balancesession_status`.`id` =
 1477468537765888; args=(0, '2024-01-01 18:45:33.122244', 1477468537765888)
 DEBUG    tests.readonly:readonly.py:98 (0.002) INSERT INTO
 `market_balancesession_status` (`id`, `status`, `created_at`) VALUES
 (1477468537765888, 0, '2024-01-01 18:45:33.129311');
 args=[1477468537765888, 0, '2024-01-01 18:45:33.129311']
 DEBUG    tests.readonly:readonly.py:98 (0.002) SELECT 1 AS `a` FROM
 `market_balancesession_status` WHERE `market_balancesession_status`.`id` =
 1477468537765888 LIMIT 1; args=(1, 1477468537765888)
 }}}

 it does not check the if id exists in DB when saving and it does not
 select it.

 I understand that there is minor inconsistency between model and DB ...
 However django shouldn't silently not select the value but should emit a
 warning or error if value is invalid.

-- 
Ticket URL: <https://code.djangoproject.com/ticket/35077>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-updates+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/0107018cc65af334-7f11299c-a959-47d2-834c-127d5425c06c-000000%40eu-central-1.amazonses.com.

Reply via email to