Code

Ticket #399: bigint-patch-2008-01-04.diff

File bigint-patch-2008-01-04.diff, 9.2 KB (added by permon, 6 years ago)

English typos

Line 
1Index: django/oldforms/__init__.py
2===================================================================
3--- django/oldforms/__init__.py (revision 6247)
4+++ django/oldforms/__init__.py (working copy)
5@@ -763,6 +763,14 @@
6         if not 0 <= int(field_data) <= 32767:
7             raise validators.CriticalValidationError, ugettext("Enter a whole number between 0 and 32,767.")
8 
9+class BigIntegerField(IntegerField):
10+    def __init__(self, field_name, length=20, maxlength=None, is_required=False, validator_list=None, member_name=None):
11+        if validator_list is None: validator_list = []
12+        validator_list = [self.isInteger] + validator_list
13+        if member_name is not None:
14+            self.member_name = member_name
15+        IntegerField.__init__(self, field_name, length, maxlength, is_required, validator_list)
16+
17 class FloatField(TextField):
18     def __init__(self, field_name, is_required=False, validator_list=None):
19         if validator_list is None: validator_list = []
20Index: django/db/models/fields/__init__.py
21===================================================================
22--- django/db/models/fields/__init__.py (revision 6247)
23+++ django/db/models/fields/__init__.py (working copy)
24@@ -868,6 +868,18 @@
25         defaults.update(kwargs)
26         return super(IntegerField, self).formfield(**defaults)
27 
28+class BigIntegerField(IntegerField):
29+    MAX_BIGINT = 9223372036854775807
30+    empty_strings_allowed = False
31+    def get_manipulator_field_objs(self):
32+        return [oldforms.BigIntegerField]
33+
34+    def get_db_prep_save(self, value):
35+        if value > self.MAX_BIGINT or value < -self.MAX_BIGINT:
36+            raise ValueError("Value is to small/large to fit this field")
37+        return super(BigIntegerField, self).get_db_prep_save(value)
38+
39+
40 class IPAddressField(Field):
41     empty_strings_allowed = False
42     def __init__(self, *args, **kwargs):
43Index: django/db/backends/ado_mssql/creation.py
44===================================================================
45--- django/db/backends/ado_mssql/creation.py    (revision 6247)
46+++ django/db/backends/ado_mssql/creation.py    (working copy)
47@@ -11,6 +11,7 @@
48     'FloatField':        'double precision',
49     'ImageField':        'varchar(100)',
50     'IntegerField':      'int',
51+    'BigIntegerField':   'bigint',
52     'IPAddressField':    'char(15)',
53     'NullBooleanField':  'bit',
54     'OneToOneField':     'int',
55Index: django/db/backends/postgresql/introspection.py
56===================================================================
57--- django/db/backends/postgresql/introspection.py      (revision 6247)
58+++ django/db/backends/postgresql/introspection.py      (working copy)
59@@ -71,6 +71,7 @@
60 # Maps type codes to Django Field types.
61 DATA_TYPES_REVERSE = {
62     16: 'BooleanField',
63+    20: 'BigIntegerField',
64     21: 'SmallIntegerField',
65     23: 'IntegerField',
66     25: 'TextField',
67Index: django/db/backends/postgresql/creation.py
68===================================================================
69--- django/db/backends/postgresql/creation.py   (revision 6247)
70+++ django/db/backends/postgresql/creation.py   (working copy)
71@@ -15,6 +15,7 @@
72     'FloatField':        'double precision',
73     'ImageField':        'varchar(100)',
74     'IntegerField':      'integer',
75+    'BigIntegerField':   'bigint',
76     'IPAddressField':    'inet',
77     'NullBooleanField':  'boolean',
78     'OneToOneField':     'integer',
79Index: django/db/backends/sqlite3/introspection.py
80===================================================================
81--- django/db/backends/sqlite3/introspection.py (revision 6247)
82+++ django/db/backends/sqlite3/introspection.py (working copy)
83@@ -64,6 +64,7 @@
84     'smallinteger': 'SmallIntegerField',
85     'int': 'IntegerField',
86     'integer': 'IntegerField',
87+    'bigint': 'BigIntegerField',
88     'text': 'TextField',
89     'char': 'CharField',
90     'date': 'DateField',
91Index: django/db/backends/sqlite3/creation.py
92===================================================================
93--- django/db/backends/sqlite3/creation.py      (revision 6247)
94+++ django/db/backends/sqlite3/creation.py      (working copy)
95@@ -14,6 +14,7 @@
96     'FloatField':                   'real',
97     'ImageField':                   'varchar(100)',
98     'IntegerField':                 'integer',
99+    'BigIntegerField':              'bigint',
100     'IPAddressField':               'char(15)',
101     'NullBooleanField':             'bool',
102     'OneToOneField':                'integer',
103Index: django/db/backends/mysql/introspection.py
104===================================================================
105--- django/db/backends/mysql/introspection.py   (revision 6247)
106+++ django/db/backends/mysql/introspection.py   (working copy)
107@@ -84,7 +84,7 @@
108     FIELD_TYPE.FLOAT: 'FloatField',
109     FIELD_TYPE.INT24: 'IntegerField',
110     FIELD_TYPE.LONG: 'IntegerField',
111-    FIELD_TYPE.LONGLONG: 'IntegerField',
112+    FIELD_TYPE.LONGLONG: 'BigIntegerField',
113     FIELD_TYPE.SHORT: 'IntegerField',
114     FIELD_TYPE.STRING: 'CharField',
115     FIELD_TYPE.TIMESTAMP: 'DateTimeField',
116Index: django/db/backends/mysql/creation.py
117===================================================================
118--- django/db/backends/mysql/creation.py        (revision 6247)
119+++ django/db/backends/mysql/creation.py        (working copy)
120@@ -15,6 +15,7 @@
121     'FloatField':        'double precision',
122     'ImageField':        'varchar(100)',
123     'IntegerField':      'integer',
124+    'BigIntegerField':   'bigint',
125     'IPAddressField':    'char(15)',
126     'NullBooleanField':  'bool',
127     'OneToOneField':     'integer',
128Index: django/db/backends/oracle/creation.py
129===================================================================
130--- django/db/backends/oracle/creation.py       (revision 6247)
131+++ django/db/backends/oracle/creation.py       (working copy)
132@@ -18,6 +18,7 @@
133     'FloatField':                   'DOUBLE PRECISION',
134     'ImageField':                   'NVARCHAR2(100)',
135     'IntegerField':                 'NUMBER(11)',
136+    'BigIntegerField':              'NUMBER(19)',
137     'IPAddressField':               'VARCHAR2(15)',
138     'NullBooleanField':             'NUMBER(1) CHECK ((%(column)s IN (0,1)) OR (%(column)s IS NULL))',
139     'OneToOneField':                'NUMBER(11)',
140Index: django/db/backends/postgresql_psycopg2/introspection.py
141===================================================================
142--- django/db/backends/postgresql_psycopg2/introspection.py     (revision 6247)
143+++ django/db/backends/postgresql_psycopg2/introspection.py     (working copy)
144@@ -68,6 +68,7 @@
145 # Maps type codes to Django Field types.
146 DATA_TYPES_REVERSE = {
147     16: 'BooleanField',
148+    20: 'BigIntegerField',
149     21: 'SmallIntegerField',
150     23: 'IntegerField',
151     25: 'TextField',
152Index: django/contrib/admin/views/doc.py
153===================================================================
154--- django/contrib/admin/views/doc.py   (revision 6247)
155+++ django/contrib/admin/views/doc.py   (working copy)
156@@ -303,6 +303,7 @@
157     'ForeignKey'                : _('Integer'),
158     'ImageField'                : _('File path'),
159     'IntegerField'              : _('Integer'),
160+    'BigIntegerField'           : _('Integer'),
161     'IPAddressField'            : _('IP address'),
162     'ManyToManyField'           : '',
163     'NullBooleanField'          : _('Boolean (Either True, False or None)'),
164Index: tests/modeltests/field_types/__init__.py
165===================================================================
166Index: tests/modeltests/field_types/models.py
167===================================================================
168--- tests/modeltests/field_types/models.py      (revision 0)
169+++ tests/modeltests/field_types/models.py      (revision 0)
170@@ -0,0 +1,51 @@
171+"""
172+Tests for field type boundaries
173+"""
174+
175+from django.db import models
176+
177+class BigInt(models.Model):
178+    value = models.BigIntegerField()
179+
180+    def __unicode__(self):
181+        return unicode(self.value)
182+
183+__test__ = {'API_TESTS': """
184+>>> BigInt.objects.all()
185+[]
186+
187+>>> t = BigInt(value = 0)
188+>>> t.save()
189+>>> t.value
190+0
191+
192+>>> BigInt.objects.all()
193+[<BigInt: 0>]
194+
195+>>> t = BigInt(value = -9223372036854775808)
196+>>> t.value
197+-9223372036854775808
198+
199+>>> BigInt.objects.all().delete()
200+>>> t.save()
201+>>> BigInt.objects.all()[0]
202+<BigInt: -9223372036854775808>
203+
204+>>> BigInt(value = -9223372036854775809111111111111111111).save()
205+Traceback (most recent call last):
206+...
207+ValueError: Value is so small/large to fit to field
208+
209+>>> BigInt(value = 9223372036854775808).save()
210+Traceback (most recent call last):
211+...
212+ValueError: Value is so small/large to fit to field
213+
214+>>> BigInt(value = 9223372036854775807).save()
215+>>> BigInt.objects.all()
216+[<BigInt: -9223372036854775808>, <BigInt: 9223372036854775807>]
217+"""}
218+
219+def test():
220+    import doctest
221+    doctest.testmod()
222Index: docs/model-api.txt
223===================================================================
224--- docs/model-api.txt  (revision 6247)
225+++ docs/model-api.txt  (working copy)
226@@ -126,6 +126,16 @@
227 automatically be added to your model if you don't specify otherwise. See
228 `Automatic primary key fields`_.
229 
230+``BigIntegerField``
231+~~~~~~~~~~~~~~~~
232+
233+A big integer.
234+
235+The admin represents this as an ``<input type="text">`` (a single-line input).
236+
237+A 64 bit type like an ``IntegerField``, except that it fits numbers from
238+-9223372036854775808 to 9223372036854775807
239+
240 ``BooleanField``
241 ~~~~~~~~~~~~~~~~
242