Commit 51028f50 authored by Claude Paroz's avatar Claude Paroz
Browse files

Fixed getting max_digits for MySQL decimal fields

Refs #5014.
parent a01361b5
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -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):
+0 −2
Original line number Diff line number Diff line
@@ -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)")