in core/lib/payload/copy.py [0:0]
def create_copy_table(self):
"""
Create the physical temporary table using new schema
"""
tmp_sql_obj = deepcopy(self._new_table)
tmp_sql_obj.name = self.new_table_name
if self.rm_partition:
tmp_sql_obj.partition = self._old_table.partition
tmp_sql_obj.partition_config = self._old_table.partition_config
tmp_table_ddl = tmp_sql_obj.to_sql()
log.info("Creating copy table using: {}".format(tmp_table_ddl))
self.execute_sql(tmp_table_ddl)
self.partitions[self.new_table_name] = self.fetch_partitions(
self.new_table_name
)
self.add_drop_table_entry(self.new_table_name)
# Check whether the schema is consistent after execution to avoid
# any implicit conversion
if self.fail_for_implicit_conv:
obj_after = self.fetch_table_schema(self.new_table_name)
obj_after.engine = self._new_table.engine
obj_after.name = self._new_table.name
# Ignore partition difference, since there will be no implicit
# conversion here
obj_after.partition = self._new_table.partition
obj_after.partition_config = self._new_table.partition_config
self.populate_charset_collation(obj_after)
if self.mysql_version.is_mysql8:
# Remove 'USING HASH' in keys on 8.0, when present in 5.6, as 8.0
# removes it by default
self.remove_using_hash_for_80()
if obj_after != self._new_table:
raise OSCError(
"IMPLICIT_CONVERSION_DETECTED",
{"diff": str(SchemaDiff(self._new_table, obj_after))},
)