[Django] #23987: sqlite backend don't always use effective_default

24 views
Skip to first unread message

Django

unread,
Dec 12, 2014, 8:12:16 PM12/12/14
to django-...@googlegroups.com
#23987: sqlite backend don't always use effective_default
----------------------------------------------+--------------------
Reporter: coldmind | Owner: nobody
Type: Bug | Status: new
Component: Database layer (models, ORM) | Version: master
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Easy pickings: 0 | UI/UX: 0
----------------------------------------------+--------------------
Problem found here:
https://github.com/django/django/pull/3700#issuecomment-66838368

Look at this line:
https://github.com/django/django/blob/df9f2e41fae68e2079db61e07569fdc89d1d6343/django/db/backends/sqlite3/schema.py#L73


{{{
if field.has_default():
mapping[field.column] = self.quote_value(
self.effective_default(field)
)
}}}

Main is that effective default will be used only when field already has
default.
That is not correct, because `effective_default` decides what default
would be used.

The second minor problem is that `field.has_default()` check is already in
`effective_default` method, so we don't need to call it twice.

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

Django

unread,
Dec 12, 2014, 8:12:55 PM12/12/14
to django-...@googlegroups.com
#23987: sqlite backend don't always use effective_default
-------------------------------------+-------------------------------------

Reporter: coldmind | Owner: nobody
Type: Bug | Status: new
Component: Database layer | Version: master
(models, ORM) | Resolution:
Severity: Normal | Triage Stage:
Keywords: | Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by coldmind):

* needs_better_patch: => 0
* needs_tests: => 0
* needs_docs: => 0


Comment:

If it will be reviewed as bug, I'll create patch for it.

--
Ticket URL: <https://code.djangoproject.com/ticket/23987#comment:1>

Django

unread,
Dec 13, 2014, 6:52:26 AM12/13/14
to django-...@googlegroups.com
#23987: sqlite backend don't always use effective_default
-------------------------------------+-------------------------------------

Reporter: coldmind | Owner: nobody
Type: Bug | Status: new
Component: Database layer | Version: master
(models, ORM) | Resolution:
Severity: Normal | Triage Stage:
Keywords: | Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by coldmind):

As I can see need to have something like this.
Not sure about `ManyToManyField`, but without check for `ManyToManyField`
some tests fails.

{{{
Index: django/django/db/backends/sqlite3/schema.py
===================================================================
--- django/django/db/backends/sqlite3/schema.py (date 1417898599000)
+++ django/django/db/backends/sqlite3/schema.py (revision )
@@ -69,8 +69,8 @@
# Add in any created fields
for field in create_fields:
body[field.name] = field
- # If there's a default, insert it into the copy map
- if field.has_default():
+ # Choose default and insert it into the copy map
+ if not isinstance(field, ManyToManyField):


mapping[field.column] = self.quote_value(
self.effective_default(field)
)
}}}

--
Ticket URL: <https://code.djangoproject.com/ticket/23987#comment:2>

Django

unread,
Dec 13, 2014, 2:47:30 PM12/13/14
to django-...@googlegroups.com
#23987: sqlite backend don't always use effective_default
-------------------------------------+-------------------------------------

Reporter: coldmind | Owner: nobody
Type: Bug | Status: new
Component: Database layer | Version: master
(models, ORM) | Resolution:
Severity: Normal | Triage Stage: Accepted
Keywords: | Needs documentation: 0
Has patch: 0 | Patch needs improvement: 0
Needs tests: 0 | UI/UX: 0
Easy pickings: 0 |
-------------------------------------+-------------------------------------
Changes (by timgraham):

* stage: Unreviewed => Accepted


--
Ticket URL: <https://code.djangoproject.com/ticket/23987#comment:3>

Django

unread,
Dec 15, 2014, 8:42:23 AM12/15/14
to django-...@googlegroups.com
#23987: sqlite backend don't always use effective_default
-------------------------------------+-------------------------------------
Reporter: coldmind | Owner: coldmind
Type: Bug | Status: assigned

Component: Database layer | Version: master
(models, ORM) | Resolution:
Severity: Normal | Triage Stage: Accepted
Keywords: | Needs documentation: 0
Has patch: 0 | Patch needs improvement: 0
Needs tests: 0 | UI/UX: 0
Easy pickings: 0 |
-------------------------------------+-------------------------------------
Changes (by coldmind):

* status: new => assigned
* owner: nobody => coldmind


--
Ticket URL: <https://code.djangoproject.com/ticket/23987#comment:4>

Django

unread,
Dec 15, 2014, 1:41:46 PM12/15/14
to django-...@googlegroups.com
#23987: sqlite backend don't always use effective_default
-------------------------------------+-------------------------------------
Reporter: coldmind | Owner: coldmind
Type: Bug | Status: closed

Component: Database layer | Version: master
(models, ORM) | Resolution: fixed

Severity: Normal | Triage Stage: Accepted
Keywords: | Needs documentation: 0
Has patch: 0 | Patch needs improvement: 0
Needs tests: 0 | UI/UX: 0
Easy pickings: 0 |
-------------------------------------+-------------------------------------
Changes (by Tim Graham <timograham@…>):

* status: assigned => closed
* resolution: => fixed


Comment:

In [changeset:"089047331d972c0ee58d13476fc54f2118bf1359"]:
{{{
#!CommitTicketReference repository=""
revision="089047331d972c0ee58d13476fc54f2118bf1359"
Fixed #23987 -- Made SQLite SchemaEditor always use effective_default().
}}}

--
Ticket URL: <https://code.djangoproject.com/ticket/23987#comment:5>

Django

unread,
Dec 15, 2014, 1:42:26 PM12/15/14
to django-...@googlegroups.com
#23987: sqlite backend don't always use effective_default
-------------------------------------+-------------------------------------
Reporter: coldmind | Owner: coldmind
Type: Bug | Status: closed
Component: Database layer | Version: master
(models, ORM) | Resolution: fixed
Severity: Normal | Triage Stage: Accepted
Keywords: | Needs documentation: 0
Has patch: 0 | Patch needs improvement: 0
Needs tests: 0 | UI/UX: 0
Easy pickings: 0 |
-------------------------------------+-------------------------------------

Comment (by Tim Graham <timograham@…>):

In [changeset:"1690b92b0d53e625ef6623a317149013725015af"]:
{{{
#!CommitTicketReference repository=""
revision="1690b92b0d53e625ef6623a317149013725015af"
[1.7.x] Fixed #23987 -- Made SQLite SchemaEditor always use
effective_default().

Backport of 089047331d972c0ee58d13476fc54f2118bf1359 from master
}}}

--
Ticket URL: <https://code.djangoproject.com/ticket/23987#comment:6>

Django

unread,
Dec 15, 2014, 6:20:37 PM12/15/14
to django-...@googlegroups.com
#23987: sqlite backend don't always use effective_default
-------------------------------------+-------------------------------------
Reporter: coldmind | Owner: coldmind
Type: Bug | Status: closed
Component: Database layer | Version: master
(models, ORM) | Resolution: fixed
Severity: Normal | Triage Stage: Accepted
Keywords: | Needs documentation: 0
Has patch: 0 | Patch needs improvement: 0
Needs tests: 0 | UI/UX: 0
Easy pickings: 0 |
-------------------------------------+-------------------------------------

Comment (by Tim Graham <timograham@…>):

In [changeset:"ac5f2a4ef7b9993502ebc02f487cbb06bfb9bf0a"]:
{{{
#!CommitTicketReference repository=""
revision="ac5f2a4ef7b9993502ebc02f487cbb06bfb9bf0a"
Fixed refs #23987 test on Oracle.
}}}

--
Ticket URL: <https://code.djangoproject.com/ticket/23987#comment:7>

Django

unread,
Dec 15, 2014, 7:07:06 PM12/15/14
to django-...@googlegroups.com
#23987: sqlite backend don't always use effective_default
-------------------------------------+-------------------------------------
Reporter: coldmind | Owner: coldmind
Type: Bug | Status: closed
Component: Database layer | Version: master
(models, ORM) | Resolution: fixed
Severity: Normal | Triage Stage: Accepted
Keywords: | Needs documentation: 0
Has patch: 0 | Patch needs improvement: 0
Needs tests: 0 | UI/UX: 0
Easy pickings: 0 |
-------------------------------------+-------------------------------------

Comment (by Tim Graham <timograham@…>):

In [changeset:"66c0529b3edb40e25713cbf32ea8794befc829ae"]:
{{{
#!CommitTicketReference repository=""
revision="66c0529b3edb40e25713cbf32ea8794befc829ae"
[1.7.x] Fixed refs #23987 test on Oracle.

Backport of ac5f2a4ef7b9993502ebc02f487cbb06bfb9bf0a from master
}}}

--
Ticket URL: <https://code.djangoproject.com/ticket/23987#comment:8>

Django

unread,
Jan 8, 2015, 6:49:04 PM1/8/15
to django-...@googlegroups.com
#23987: sqlite backend doesn't always use effective_default()

-------------------------------------+-------------------------------------
Reporter: coldmind | Owner: coldmind
Type: Bug | Status: closed
Component: Database layer | Version: master
(models, ORM) |
Severity: Normal | Resolution: fixed
Keywords: | Triage Stage: Accepted

Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------

--
Ticket URL: <https://code.djangoproject.com/ticket/23987#comment:9>

Reply all
Reply to author
Forward
0 new messages