Ticket #399: bigint_patch.txt

File bigint_patch.txt, 7.1 KB (added by MattCroydon, 19 years ago)
Line 
1Index: django_src/django/core/formfields.py
2===================================================================
3--- django_src/django/core/formfields.py (revision 569)
4+++ django_src/django/core/formfields.py (working copy)
5@@ -544,6 +544,15 @@
6 if not -32768 <= int(field_data) <= 32767:
7 raise validators.CriticalValidationError, "Enter a whole number between -32,768 and 32,767."
8
9+class BigIntegerField(IntegerField):
10+ def __init__(self, field_name, length=15, maxlength=20, is_required=False, validator_list=[]):
11+ validator_list = [self.isBigInteger] + validator_list
12+ IntegerField.__init__(self, field_name, length, maxlength, is_required, validator_list)
13+
14+ def isBigInteger(self, field_data, all_data):
15+ if not -9223372036854775808 <= int(field_data) <= 9223372036854775807:
16+ raise validators.CriticalValidationError, "Enter a whole number between -9,223,372,036,854,775,808 and 9,223,372,036,854,775,807."
17+
18 class PositiveIntegerField(IntegerField):
19 def __init__(self, field_name, length=10, maxlength=None, is_required=False, validator_list=[]):
20 validator_list = [self.isPositive] + validator_list
21@@ -562,6 +571,15 @@
22 if not 0 <= int(field_data) <= 32767:
23 raise validators.CriticalValidationError, "Enter a whole number between 0 and 32,767."
24
25+class PositiveBigIntegerField(IntegerField):
26+ def __init__(self, field_name, length=15, maxlength=20, is_required=False, validator_list=[]):
27+ validator_list = [self.isPositiveBig] + validator_list
28+ IntegerField.__init__(self, field_name, length, maxlength, is_required, validator_list)
29+
30+ def isPositiveBig(self, field_data, all_data):
31+ if not 0 <= int(field_data) <= 18446744073709551615:
32+ raise validators.CriticalValidationError, "Enter a whole number between 0 and 18,446,744,073,709,551,615."
33+
34 class FloatField(TextField):
35 def __init__(self, field_name, max_digits, decimal_places, is_required=False, validator_list=[]):
36 self.max_digits, self.decimal_places = max_digits, decimal_places
37Index: django_src/django/core/db/backends/postgresql.py
38===================================================================
39--- django_src/django/core/db/backends/postgresql.py (revision 569)
40+++ django_src/django/core/db/backends/postgresql.py (working copy)
41@@ -142,6 +142,7 @@
42 # If a column type is set to None, it won't be included in the output.
43 DATA_TYPES = {
44 'AutoField': 'serial',
45+ 'BigIntegerField': 'bigint',
46 'BooleanField': 'boolean',
47 'CharField': 'varchar(%(maxlength)s)',
48 'CommaSeparatedIntegerField': 'varchar(%(maxlength)s)',
49@@ -157,6 +158,7 @@
50 'NullBooleanField': 'boolean',
51 'OneToOneField': 'integer',
52 'PhoneNumberField': 'varchar(20)',
53+ 'PositiveBigIntegerField': 'bigint CHECK (%(name)s >= 0)',
54 'PositiveIntegerField': 'integer CHECK (%(name)s >= 0)',
55 'PositiveSmallIntegerField': 'smallint CHECK (%(name)s >= 0)',
56 'SlugField': 'varchar(50)',
57@@ -171,6 +173,7 @@
58 # Maps type codes to Django Field types.
59 DATA_TYPES_REVERSE = {
60 16: 'BooleanField',
61+ 20: 'BigIntegerField',
62 21: 'SmallIntegerField',
63 23: 'IntegerField',
64 25: 'TextField',
65Index: django_src/django/core/db/backends/sqlite3.py
66===================================================================
67--- django_src/django/core/db/backends/sqlite3.py (revision 569)
68+++ django_src/django/core/db/backends/sqlite3.py (working copy)
69@@ -144,6 +144,7 @@
70 # schema inspection is more useful.
71 DATA_TYPES = {
72 'AutoField': 'integer',
73+ 'BigIntegerField': 'bigint',
74 'BooleanField': 'bool',
75 'CharField': 'varchar(%(maxlength)s)',
76 'CommaSeparatedIntegerField': 'varchar(%(maxlength)s)',
77@@ -159,6 +160,7 @@
78 'NullBooleanField': 'bool',
79 'OneToOneField': 'integer',
80 'PhoneNumberField': 'varchar(20)',
81+ 'PositiveBigIntegerField': 'bigint unsigned',
82 'PositiveIntegerField': 'integer unsigned',
83 'PositiveSmallIntegerField': 'smallint unsigned',
84 'SlugField': 'varchar(50)',
85Index: django_src/django/core/db/backends/mysql.py
86===================================================================
87--- django_src/django/core/db/backends/mysql.py (revision 569)
88+++ django_src/django/core/db/backends/mysql.py (working copy)
89@@ -107,6 +107,7 @@
90 # If a column type is set to None, it won't be included in the output.
91 DATA_TYPES = {
92 'AutoField': 'mediumint(9) unsigned auto_increment',
93+ 'BigIntegerField': 'bigint',
94 'BooleanField': 'bool',
95 'CharField': 'varchar(%(maxlength)s)',
96 'CommaSeparatedIntegerField': 'varchar(%(maxlength)s)',
97@@ -122,6 +123,7 @@
98 'NullBooleanField': 'bool',
99 'OneToOneField': 'integer',
100 'PhoneNumberField': 'varchar(20)',
101+ 'PositiveBigIntegerField': 'bigint UNSIGNED',
102 'PositiveIntegerField': 'integer UNSIGNED',
103 'PositiveSmallIntegerField': 'smallint UNSIGNED',
104 'SlugField': 'varchar(50)',
105@@ -143,7 +145,7 @@
106 FIELD_TYPE.FLOAT: 'FloatField',
107 FIELD_TYPE.INT24: 'IntegerField',
108 FIELD_TYPE.LONG: 'IntegerField',
109- FIELD_TYPE.LONGLONG: 'IntegerField',
110+ FIELD_TYPE.LONGLONG: 'BigIntegerField',
111 FIELD_TYPE.SHORT: 'IntegerField',
112 FIELD_TYPE.STRING: 'TextField',
113 FIELD_TYPE.TIMESTAMP: 'DateTimeField',
114Index: django_src/django/core/meta/fields.py
115===================================================================
116--- django_src/django/core/meta/fields.py (revision 569)
117+++ django_src/django/core/meta/fields.py (working copy)
118@@ -498,6 +498,14 @@
119 def get_manipulator_field_objs(self):
120 return [formfields.SmallIntegerField]
121
122+class BigIntegerField(IntegerField):
123+ def get_manipulator_field_objs(self):
124+ return [formfields.BigIntegerField]
125+
126+class PositiveBigIntegerField(IntegerField):
127+ def get_manipulator_field_objs(self):
128+ return [formfields.PositiveBigIntegerField]
129+
130 class TextField(Field):
131 def get_manipulator_field_objs(self):
132 return [formfields.LargeTextField]
133Index: django_src/django/views/admin/doc.py
134===================================================================
135--- django_src/django/views/admin/doc.py (revision 569)
136+++ django_src/django/views/admin/doc.py (working copy)
137@@ -280,6 +280,7 @@
138 # If a column type is set to None, it won't be included in the output.
139 DATA_TYPE_MAPPING = {
140 'AutoField' : 'Integer',
141+ 'BigIntegerField' : 'Integer',
142 'BooleanField' : 'Boolean (Either True or False)',
143 'CharField' : 'String (up to %(maxlength)s)',
144 'CommaSeparatedIntegerField': 'Comma-separated integers',
145@@ -295,6 +296,7 @@
146 'ManyToManyField' : '',
147 'NullBooleanField' : 'Boolean (Either True, False or None)',
148 'PhoneNumberField' : 'Phone number',
149+ 'PositiveBigIntegerField' : 'Integer',
150 'PositiveIntegerField' : 'Integer',
151 'PositiveSmallIntegerField' : 'Integer',
152 'SlugField' : 'String (up to 50)',
Back to Top