diff options
author | Tom Carrick <tom@carrick.eu> | 2020-07-18 13:17:39 +0200 |
---|---|---|
committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2020-09-21 18:24:56 +0200 |
commit | e387f191f76777015b6ea687ce83cdb05ee47cee (patch) | |
tree | 003d83b5efda40fbfcdc1aa9302faca9578b1e30 /django/db/backends/oracle/schema.py | |
parent | ba6b32e5efc4c813ba4432777b3b1743d4205d14 (diff) | |
download | django-e387f191f76777015b6ea687ce83cdb05ee47cee.tar.gz |
Fixed #31777 -- Added support for database collations to Char/TextFields.
Thanks Simon Charette and Mariusz Felisiak for reviews.
Diffstat (limited to 'django/db/backends/oracle/schema.py')
-rw-r--r-- | django/db/backends/oracle/schema.py | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/django/db/backends/oracle/schema.py b/django/db/backends/oracle/schema.py index 002cb9e48b..3197fcc892 100644 --- a/django/db/backends/oracle/schema.py +++ b/django/db/backends/oracle/schema.py @@ -14,6 +14,8 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor): sql_alter_column_not_null = "MODIFY %(column)s NOT NULL" sql_alter_column_default = "MODIFY %(column)s DEFAULT %(default)s" sql_alter_column_no_default = "MODIFY %(column)s DEFAULT NULL" + sql_alter_column_collate = "MODIFY %(column)s %(type)s%(collation)s" + sql_delete_column = "ALTER TABLE %(table)s DROP COLUMN %(column)s" sql_create_column_inline_fk = 'CONSTRAINT %(name)s REFERENCES %(to_table)s(%(to_column)s)%(deferrable)s' sql_delete_table = "DROP TABLE %(table)s CASCADE CONSTRAINTS" @@ -181,3 +183,15 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor): 'table': self.quote_name(table_name), 'column': self.quote_name(column_name), }) + + def _get_default_collation(self, table_name): + with self.connection.cursor() as cursor: + cursor.execute(""" + SELECT default_collation FROM user_tables WHERE table_name = %s + """, [self.normalize_name(table_name)]) + return cursor.fetchone()[0] + + def _alter_column_collation_sql(self, model, new_field, new_type, new_collation): + if new_collation is None: + new_collation = self._get_default_collation(model._meta.db_table) + return super()._alter_column_collation_sql(model, new_field, new_type, new_collation) |