Loading django/db/backends/mysql/introspection.py +10 −1 Original line number Diff line number Diff line Loading @@ -47,8 +47,17 @@ class DatabaseIntrospection(BaseDatabaseIntrospection): AND character_maximum_length IS NOT NULL""", [table_name]) length_map = dict(cursor.fetchall()) # Also getting precision and scale from information_schema (see #5014) cursor.execute(""" SELECT column_name, numeric_precision, numeric_scale FROM information_schema.columns WHERE table_name = %s AND table_schema = DATABASE() AND data_type='decimal'""", [table_name]) numeric_map = dict([(line[0], tuple([int(n) for n in line[1:]])) for line in cursor.fetchall()]) cursor.execute("SELECT * FROM %s LIMIT 1" % self.connection.ops.quote_name(table_name)) return [FieldInfo(*(line[:3] + (length_map.get(line[0], line[3]),) + line[4:])) return [FieldInfo(*(line[:3] + (length_map.get(line[0], line[3]),) + numeric_map.get(line[0], line[4:6]) + (line[6],))) for line in cursor.description] def _name_to_index(self, cursor, table_name): Loading tests/inspectdb/tests.py +0 −2 Original line number Diff line number Diff line Loading @@ -57,8 +57,6 @@ class InspectDBTestCase(TestCase): if connection.vendor == 'sqlite': # Ticket #5014 assertFieldType('decimal_field', "models.DecimalField(max_digits=None, decimal_places=None)") elif connection.vendor == 'mysql': pass # Ticket #5014 else: assertFieldType('decimal_field', "models.DecimalField(max_digits=6, decimal_places=1)") assertFieldType('email_field', "models.CharField(max_length=75)") Loading Loading
django/db/backends/mysql/introspection.py +10 −1 Original line number Diff line number Diff line Loading @@ -47,8 +47,17 @@ class DatabaseIntrospection(BaseDatabaseIntrospection): AND character_maximum_length IS NOT NULL""", [table_name]) length_map = dict(cursor.fetchall()) # Also getting precision and scale from information_schema (see #5014) cursor.execute(""" SELECT column_name, numeric_precision, numeric_scale FROM information_schema.columns WHERE table_name = %s AND table_schema = DATABASE() AND data_type='decimal'""", [table_name]) numeric_map = dict([(line[0], tuple([int(n) for n in line[1:]])) for line in cursor.fetchall()]) cursor.execute("SELECT * FROM %s LIMIT 1" % self.connection.ops.quote_name(table_name)) return [FieldInfo(*(line[:3] + (length_map.get(line[0], line[3]),) + line[4:])) return [FieldInfo(*(line[:3] + (length_map.get(line[0], line[3]),) + numeric_map.get(line[0], line[4:6]) + (line[6],))) for line in cursor.description] def _name_to_index(self, cursor, table_name): Loading
tests/inspectdb/tests.py +0 −2 Original line number Diff line number Diff line Loading @@ -57,8 +57,6 @@ class InspectDBTestCase(TestCase): if connection.vendor == 'sqlite': # Ticket #5014 assertFieldType('decimal_field', "models.DecimalField(max_digits=None, decimal_places=None)") elif connection.vendor == 'mysql': pass # Ticket #5014 else: assertFieldType('decimal_field', "models.DecimalField(max_digits=6, decimal_places=1)") assertFieldType('email_field', "models.CharField(max_length=75)") Loading