Code

Ticket #399: bigint-patch-2009-10-26.diff

File bigint-patch-2009-10-26.diff, 7.6 KB (added by permon, 4 years ago)

updated to trunk

Line 
1Index: django/db/models/fields/__init__.py
2===================================================================
3--- django/db/models/fields/__init__.py (revision 11655)
4+++ django/db/models/fields/__init__.py (working copy)
5@@ -714,6 +714,19 @@
6         defaults.update(kwargs)
7         return super(IntegerField, self).formfield(**defaults)
8 
9+class BigIntegerField(IntegerField):
10+    MAX_BIGINT = 9223372036854775807
11+    empty_strings_allowed = False
12+    def get_internal_type(self):
13+        return "BigIntegerField"
14+
15+    def get_db_prep_save(self, value):
16+        value = long(value)
17+        if value > self.MAX_BIGINT or value < -self.MAX_BIGINT - 1:
18+            raise ValueError("Value is to small/large to fit this field")
19+        return super(BigIntegerField, self).get_db_prep_save(value)
20+
21+
22 class IPAddressField(Field):
23     empty_strings_allowed = False
24     def __init__(self, *args, **kwargs):
25Index: django/db/backends/postgresql/introspection.py
26===================================================================
27--- django/db/backends/postgresql/introspection.py      (revision 11655)
28+++ django/db/backends/postgresql/introspection.py      (working copy)
29@@ -4,6 +4,7 @@
30     # Maps type codes to Django Field types.
31     data_types_reverse = {
32         16: 'BooleanField',
33+        20: 'BigIntegerField',
34         21: 'SmallIntegerField',
35         23: 'IntegerField',
36         25: 'TextField',
37Index: django/db/backends/postgresql/creation.py
38===================================================================
39--- django/db/backends/postgresql/creation.py   (revision 11655)
40+++ django/db/backends/postgresql/creation.py   (working copy)
41@@ -18,6 +18,7 @@
42         'FilePathField':     'varchar(%(max_length)s)',
43         'FloatField':        'double precision',
44         'IntegerField':      'integer',
45+        'BigIntegerField':   'bigint',
46         'IPAddressField':    'inet',
47         'NullBooleanField':  'boolean',
48         'OneToOneField':     'integer',
49Index: django/db/backends/sqlite3/introspection.py
50===================================================================
51--- django/db/backends/sqlite3/introspection.py (revision 11655)
52+++ django/db/backends/sqlite3/introspection.py (working copy)
53@@ -16,6 +16,7 @@
54         'smallinteger': 'SmallIntegerField',
55         'int': 'IntegerField',
56         'integer': 'IntegerField',
57+        'bigint': 'BigIntegerField',
58         'integer unsigned': 'PositiveIntegerField',
59         'decimal': 'DecimalField',
60         'real': 'FloatField',
61Index: django/db/backends/sqlite3/creation.py
62===================================================================
63--- django/db/backends/sqlite3/creation.py      (revision 11655)
64+++ django/db/backends/sqlite3/creation.py      (working copy)
65@@ -19,6 +19,7 @@
66         'FilePathField':                'varchar(%(max_length)s)',
67         'FloatField':                   'real',
68         'IntegerField':                 'integer',
69+        'IntegerField':                 'bigint',
70         'IPAddressField':               'char(15)',
71         'NullBooleanField':             'bool',
72         'OneToOneField':                'integer',
73Index: django/db/backends/mysql/introspection.py
74===================================================================
75--- django/db/backends/mysql/introspection.py   (revision 11655)
76+++ django/db/backends/mysql/introspection.py   (working copy)
77@@ -17,7 +17,7 @@
78         FIELD_TYPE.FLOAT: 'FloatField',
79         FIELD_TYPE.INT24: 'IntegerField',
80         FIELD_TYPE.LONG: 'IntegerField',
81-        FIELD_TYPE.LONGLONG: 'IntegerField',
82+        FIELD_TYPE.LONGLONG: 'BigIntegerField',
83         FIELD_TYPE.SHORT: 'IntegerField',
84         FIELD_TYPE.STRING: 'CharField',
85         FIELD_TYPE.TIMESTAMP: 'DateTimeField',
86Index: django/db/backends/mysql/creation.py
87===================================================================
88--- django/db/backends/mysql/creation.py        (revision 11655)
89+++ django/db/backends/mysql/creation.py        (working copy)
90@@ -18,6 +18,7 @@
91         'FilePathField':     'varchar(%(max_length)s)',
92         'FloatField':        'double precision',
93         'IntegerField':      'integer',
94+        'BigIntegerField':   'bigint',
95         'IPAddressField':    'char(15)',
96         'NullBooleanField':  'bool',
97         'OneToOneField':     'integer',
98@@ -63,4 +64,4 @@
99                 field.rel.to._meta.db_table, field.rel.to._meta.pk.column)
100             ]
101         return table_output, deferred
102-       
103\ No newline at end of file
104+       
105Index: django/db/backends/oracle/creation.py
106===================================================================
107--- django/db/backends/oracle/creation.py       (revision 11655)
108+++ django/db/backends/oracle/creation.py       (working copy)
109@@ -27,6 +27,7 @@
110         'FilePathField':                'NVARCHAR2(%(max_length)s)',
111         'FloatField':                   'DOUBLE PRECISION',
112         'IntegerField':                 'NUMBER(11)',
113+        'BigIntegerField':              'NUMBER(19)',
114         'IPAddressField':               'VARCHAR2(15)',
115         'NullBooleanField':             'NUMBER(1) CHECK ((%(qn_column)s IN (0,1)) OR (%(qn_column)s IS NULL))',
116         'OneToOneField':                'NUMBER(11)',
117Index: django/contrib/comments/templates/comments/preview.html
118===================================================================
119--- django/contrib/comments/templates/comments/preview.html     (revision 11655)
120+++ django/contrib/comments/templates/comments/preview.html     (working copy)
121@@ -1,5 +1,6 @@
122 {% extends "comments/base.html" %}
123 {% load i18n %}
124+{%sd %}
125 
126 {% block title %}{% trans "Preview your comment" %}{% endblock %}
127 
128Index: django/contrib/admin/options.py
129===================================================================
130--- django/contrib/admin/options.py     (revision 11655)
131+++ django/contrib/admin/options.py     (working copy)
132@@ -40,14 +40,15 @@
133         'form_class': forms.SplitDateTimeField,
134         'widget': widgets.AdminSplitDateTime
135     },
136-    models.DateField:    {'widget': widgets.AdminDateWidget},
137-    models.TimeField:    {'widget': widgets.AdminTimeWidget},
138-    models.TextField:    {'widget': widgets.AdminTextareaWidget},
139-    models.URLField:     {'widget': widgets.AdminURLFieldWidget},
140-    models.IntegerField: {'widget': widgets.AdminIntegerFieldWidget},
141-    models.CharField:    {'widget': widgets.AdminTextInputWidget},
142-    models.ImageField:   {'widget': widgets.AdminFileWidget},
143-    models.FileField:    {'widget': widgets.AdminFileWidget},
144+    models.DateField:       {'widget': widgets.AdminDateWidget},
145+    models.TimeField:       {'widget': widgets.AdminTimeWidget},
146+    models.TextField:       {'widget': widgets.AdminTextareaWidget},
147+    models.URLField:        {'widget': widgets.AdminURLFieldWidget},
148+    models.IntegerField:    {'widget': widgets.AdminIntegerFieldWidget},
149+    models.BigIntegerField: {'widget': widgets.AdminIntegerFieldWidget},
150+    models.CharField:       {'widget': widgets.AdminTextInputWidget},
151+    models.ImageField:      {'widget': widgets.AdminFileWidget},
152+    models.FileField:       {'widget': widgets.AdminFileWidget},
153 }
154 
155 
156Index: docs/ref/models/fields.txt
157===================================================================
158--- docs/ref/models/fields.txt  (revision 11655)
159+++ docs/ref/models/fields.txt  (working copy)
160@@ -641,6 +641,18 @@
161 An integer. The admin represents this as an ``<input type="text">`` (a
162 single-line input).
163 
164+``bigintegerfield``
165+~~~~~~~~~~~~~~~~
166+
167+.. class:: BigIntegerField([**options])
168+
169+A big integer. The admin represents this as an ``<input type="text">``
170+(a single-line input).
171+
172+a 64 bit type like an ``integerfield``, except that it fits numbers from
173+-9223372036854775808 to 9223372036854775807
174+
175+
176 ``IPAddressField``
177 ------------------
178