X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/7d801e715b70774ff4f2a238045385e093701a8e..21f878e8112cf1f9b732a6dbb77e70efa68a01aa:/apps/south/db/mysql.py diff --git a/apps/south/db/mysql.py b/apps/south/db/mysql.py new file mode 100644 index 000000000..c3659fc48 --- /dev/null +++ b/apps/south/db/mysql.py @@ -0,0 +1,50 @@ + +from django.db import connection +from south.db import generic + +class DatabaseOperations(generic.DatabaseOperations): + + """ + MySQL implementation of database operations. + """ + + alter_string_set_type = '' + alter_string_set_null = 'MODIFY %(column)s %(type)s NULL;' + alter_string_drop_null = 'MODIFY %(column)s %(type)s NOT NULL;' + + def rename_column(self, table_name, old, new): + if old == new: + return [] + + qn = connection.ops.quote_name + + rows = [x for x in self.execute('DESCRIBE %s' % (qn(table_name),)) if x[0] == old] + + if not rows: + raise ValueError("No column '%s' in '%s'." % (old, table_name)) + + params = ( + qn(table_name), + qn(old), + qn(new), + "%s %s %s %s %s" % ( + rows[0][1], + rows[0][2] == "YES" and "NULL" or "NOT NULL", + rows[0][3] == "PRI" and "PRIMARY KEY" or "", + rows[0][4] and "DEFAULT %s" % rows[0][4] or "", + rows[0][5] or "", + ), + ) + self.execute('ALTER TABLE %s CHANGE COLUMN %s %s %s;' % params) + + + def rename_table(self, old_table_name, table_name): + """ + Renames the table 'old_table_name' to 'table_name'. + """ + if old_table_name == table_name: + # No Operation + return + qn = connection.ops.quote_name + params = (qn(old_table_name), qn(table_name)) + self.execute('RENAME TABLE %s TO %s;' % params) \ No newline at end of file