mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
Refs #31630 -- Added CharField and IntegerField to DatabaseFeatures.introspected_field_types.
CockroachDB introspects CharField as TextField and IntegerField as BigIntegerField.
This commit is contained in:
committed by
Mariusz Felisiak
parent
e24b63fe85
commit
a7b4a04d6c
@@ -61,10 +61,10 @@ class InspectDBTestCase(TestCase):
|
||||
"""Test introspection of various Django field types"""
|
||||
assertFieldType = self.make_field_type_asserter()
|
||||
introspected_field_types = connection.features.introspected_field_types
|
||||
|
||||
char_field_type = introspected_field_types['CharField']
|
||||
# Inspecting Oracle DB doesn't produce correct results (#19884):
|
||||
# - it reports fields as blank=True when they aren't.
|
||||
if not connection.features.interprets_empty_strings_as_nulls:
|
||||
if not connection.features.interprets_empty_strings_as_nulls and char_field_type == 'CharField':
|
||||
assertFieldType('char_field', "models.CharField(max_length=10)")
|
||||
assertFieldType('null_char_field', "models.CharField(max_length=10, blank=True, null=True)")
|
||||
assertFieldType('email_field', "models.CharField(max_length=254)")
|
||||
@@ -73,6 +73,15 @@ class InspectDBTestCase(TestCase):
|
||||
assertFieldType('slug_field', "models.CharField(max_length=50)")
|
||||
assertFieldType('text_field', "models.TextField()")
|
||||
assertFieldType('url_field', "models.CharField(max_length=200)")
|
||||
if char_field_type == 'TextField':
|
||||
assertFieldType('char_field', 'models.TextField()')
|
||||
assertFieldType('null_char_field', 'models.TextField(blank=True, null=True)')
|
||||
assertFieldType('email_field', 'models.TextField()')
|
||||
assertFieldType('file_field', 'models.TextField()')
|
||||
assertFieldType('file_path_field', 'models.TextField()')
|
||||
assertFieldType('slug_field', 'models.TextField()')
|
||||
assertFieldType('text_field', 'models.TextField()')
|
||||
assertFieldType('url_field', 'models.TextField()')
|
||||
assertFieldType('date_field', "models.DateField()")
|
||||
assertFieldType('date_time_field', "models.DateTimeField()")
|
||||
if introspected_field_types['GenericIPAddressField'] == 'GenericIPAddressField':
|
||||
@@ -117,7 +126,7 @@ class InspectDBTestCase(TestCase):
|
||||
"as this database handles decimal fields as float")
|
||||
|
||||
assertFieldType('float_field', "models.FloatField()")
|
||||
assertFieldType('int_field', "models.IntegerField()")
|
||||
assertFieldType('int_field', 'models.%s()' % introspected_field_types['IntegerField'])
|
||||
assertFieldType('pos_int_field', 'models.%s()' % introspected_field_types['PositiveIntegerField'])
|
||||
assertFieldType('pos_big_int_field', 'models.%s()' % introspected_field_types['PositiveBigIntegerField'])
|
||||
assertFieldType('pos_small_int_field', 'models.%s()' % introspected_field_types['PositiveSmallIntegerField'])
|
||||
@@ -152,19 +161,20 @@ class InspectDBTestCase(TestCase):
|
||||
|
||||
def test_digits_column_name_introspection(self):
|
||||
"""Introspection of column names consist/start with digits (#16536/#17676)"""
|
||||
char_field_type = connection.features.introspected_field_types['CharField']
|
||||
out = StringIO()
|
||||
call_command('inspectdb', 'inspectdb_digitsincolumnname', stdout=out)
|
||||
output = out.getvalue()
|
||||
error_message = "inspectdb generated a model field name which is a number"
|
||||
self.assertNotIn(" 123 = models.CharField", output, msg=error_message)
|
||||
self.assertIn("number_123 = models.CharField", output)
|
||||
self.assertNotIn(' 123 = models.%s' % char_field_type, output, msg=error_message)
|
||||
self.assertIn('number_123 = models.%s' % char_field_type, output)
|
||||
|
||||
error_message = "inspectdb generated a model field name which starts with a digit"
|
||||
self.assertNotIn(" 4extra = models.CharField", output, msg=error_message)
|
||||
self.assertIn("number_4extra = models.CharField", output)
|
||||
self.assertNotIn(' 4extra = models.%s' % char_field_type, output, msg=error_message)
|
||||
self.assertIn('number_4extra = models.%s' % char_field_type, output)
|
||||
|
||||
self.assertNotIn(" 45extra = models.CharField", output, msg=error_message)
|
||||
self.assertIn("number_45extra = models.CharField", output)
|
||||
self.assertNotIn(' 45extra = models.%s' % char_field_type, output, msg=error_message)
|
||||
self.assertIn('number_45extra = models.%s' % char_field_type, output)
|
||||
|
||||
def test_special_column_name_introspection(self):
|
||||
"""
|
||||
@@ -175,12 +185,13 @@ class InspectDBTestCase(TestCase):
|
||||
call_command('inspectdb', table_name_filter=special_table_only, stdout=out)
|
||||
output = out.getvalue()
|
||||
base_name = connection.introspection.identifier_converter('Field')
|
||||
self.assertIn("field = models.IntegerField()", output)
|
||||
self.assertIn("field_field = models.IntegerField(db_column='%s_')" % base_name, output)
|
||||
self.assertIn("field_field_0 = models.IntegerField(db_column='%s__')" % base_name, output)
|
||||
self.assertIn("field_field_1 = models.IntegerField(db_column='__field')", output)
|
||||
self.assertIn("prc_x = models.IntegerField(db_column='prc(%) x')", output)
|
||||
self.assertIn("tamaño = models.IntegerField()", output)
|
||||
integer_field_type = connection.features.introspected_field_types['IntegerField']
|
||||
self.assertIn("field = models.%s()" % integer_field_type, output)
|
||||
self.assertIn("field_field = models.%s(db_column='%s_')" % (integer_field_type, base_name), output)
|
||||
self.assertIn("field_field_0 = models.%s(db_column='%s__')" % (integer_field_type, base_name), output)
|
||||
self.assertIn("field_field_1 = models.%s(db_column='__field')" % integer_field_type, output)
|
||||
self.assertIn("prc_x = models.{}(db_column='prc(%) x')".format(integer_field_type), output)
|
||||
self.assertIn("tamaño = models.%s()" % integer_field_type, output)
|
||||
|
||||
def test_table_name_introspection(self):
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user