o 3a@s,ddlmZddlmZGdddeZdS))BaseDatabaseSchemaEditor) NOT_PROVIDEDcseZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZeddZefddZddZddZddZddZeddZfddZfdd Zfd!d"Zfd#d$Zd%d&Zfd'd(Zfd)d*ZZ S)+DatabaseSchemaEditorz+RENAME TABLE %(old_table)s TO %(new_table)szMODIFY %(column)s %(type)s NULLz#MODIFY %(column)s %(type)s NOT NULLzMODIFY %(column)s %(type)sz'MODIFY %(column)s %(type)s%(collation)sz(ALTER COLUMN %(column)s SET DEFAULT NULLz,ALTER TABLE %(table)s DROP COLUMN %(column)sz)ALTER TABLE %(table)s DROP INDEX %(name)szY, ADD CONSTRAINT %(name)s FOREIGN KEY (%(column)s) REFERENCES %(to_table)s(%(to_column)s)z/ALTER TABLE %(table)s DROP FOREIGN KEY %(name)sz DROP INDEX %(name)s ON %(table)szGALTER TABLE %(table)s ADD CONSTRAINT %(name)s PRIMARY KEY (%(columns)s)z&ALTER TABLE %(table)s DROP PRIMARY KEYz9CREATE INDEX %(name)s ON %(table)s (%(columns)s)%(extra)scCs|jjrdSdS)Nz8ALTER TABLE %(table)s DROP CONSTRAINT IF EXISTS %(name)sz)ALTER TABLE %(table)s DROP CHECK %(name)s) connectionmysql_is_mariadbselfr A/usr/lib/python3/dist-packages/django/db/backends/mysql/schema.pysql_delete_check sz%DatabaseSchemaEditor.sql_delete_checkcs8|jjr|jjdkrtjSdS|jjdkrtjSdS)N) )rzCALTER TABLE %(table)s CHANGE %(old_column)s %(new_column)s %(type)s)rr mysql_versionsupersql_rename_columnr __class__r r r)s  z&DatabaseSchemaEditor.sql_rename_columncCsV|jt|tr|dd}|jj||jjj}t|tr)t|tr)|}|S)N%z%%) rensure_connection isinstancestrreplaceescapeencodersbytesdecode)rvaluequotedr r r quote_value4s   z DatabaseSchemaEditor.quote_valuecCs$||j}|duo||jjvSN)db_typerlower_limited_data_types)rfieldr#r r r _is_limited_data_type>s z*DatabaseSchemaEditor._is_limited_data_typecCs|js||SdS)NF)$_supports_limited_data_type_defaultsr'rr&r r r skip_defaultBs z!DatabaseSchemaEditor.skip_defaultcCs||r |jjs dSdS)NTF)r'rrr)r r r skip_default_on_alterGsz*DatabaseSchemaEditor.skip_default_on_altercCs |jjr |jjdkS|jjdkS)N)r r)rr )rrrrr r r r(Ns  z9DatabaseSchemaEditor._supports_limited_data_type_defaultscs(|jjs|jr||rdSt|S)Nz(%s))rrr(r'r_column_default_sqlr)rr r r.Vs z(DatabaseSchemaEditor._column_default_sqlcsft||||r/|jdtfvr1||}|d||jj ||j d|gdSdSdS)Nz%UPDATE %(table)s SET %(column)s = %%s)tablecolumn) r add_fieldr*defaultreffective_defaultexecute quote_name_metadb_tabler0)rmodelr&r3rr r r1as   zDatabaseSchemaEditor.add_fieldcsZt||}|jj|j|jj}|dkr%|r%|dkr%|j r%dS| | o,|S)NInnoDB ForeignKeyF) r_field_should_be_indexedr introspectionget_storage_enginecursorr6r7get_internal_type db_constraintr')rr8r& create_indexstoragerr r r;ms z-DatabaseSchemaEditor._field_should_be_indexedcsb|j|d}|dkr&|j||jgdd}|s&||j||gddtj||g|RS)a MySQL can remove an implicit FK index on a field when that field is covered by another index like a unique_together. "covered" here means that the more complex index starts like the simpler one. http://bugs.mysql.com/bug.php?id=37910 / Django ticket #24757 We check here before removing the [unique|index]_together if we have to recreate a FK index. rr:T)index)fieldssuffix) r6 get_fieldr?_constraint_namesr0r4_create_index_sqlr_delete_composed_index)rr8rEargs first_fieldconstraint_namesrr r rJ|s z+DatabaseSchemaEditor._delete_composed_indexcCs|jr |d7}|S|d7}|S)zt Keep the null property of the old field. If it has changed, it will be handled separately. z NULLz NOT NULL)null)rr&new_typer r r _set_field_new_type_null_statuss z4DatabaseSchemaEditor._set_field_new_type_null_statusc|||}t||||Sr")rPr_alter_column_type_sql)rr8 old_field new_fieldrOrr r rR z+DatabaseSchemaEditor._alter_column_type_sqlcrQr")rPr_rename_field_sql)rr/rSrTrOrr r rVrUz&DatabaseSchemaEditor._rename_field_sql)!__name__ __module__ __qualname__sql_rename_tablesql_alter_column_nullsql_alter_column_not_nullsql_alter_column_typesql_alter_column_collate sql_alter_column_no_default_nullsql_delete_columnsql_delete_uniquesql_create_column_inline_fk sql_delete_fksql_delete_index sql_create_pk sql_delete_pksql_create_indexpropertyr rr!r'r*r+r(r.r1r;rJrPrRrV __classcell__r r rr rsB       rN)django.db.backends.base.schemardjango.db.modelsrrr r r r s