Django

Code

Ticket #399: bigint_patch.txt

File bigint_patch.txt, 7.1 kB (added by MattCroydon, 3 years ago)
Line 
1 Index: 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
37 Index: 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',
65 Index: 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)',
85 Index: 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',
114 Index: 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]
133 Index: 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)',