From 89f9db612d43079354569275d11a44f506423e6d Mon Sep 17 00:00:00 2001 From: "Allen, Timothy" Date: Wed, 16 Sep 2015 14:16:49 -0700 Subject: [PATCH] Create custom SQL for SQL Server. Yes, it had to be that ugly, but it works. Falling on my sword over here... --- .../0004_make_focal_point_key_not_nullable.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/wagtail/wagtailimages/migrations/0004_make_focal_point_key_not_nullable.py b/wagtail/wagtailimages/migrations/0004_make_focal_point_key_not_nullable.py index 3edc2c4a4a..01f5d574ba 100644 --- a/wagtail/wagtailimages/migrations/0004_make_focal_point_key_not_nullable.py +++ b/wagtail/wagtailimages/migrations/0004_make_focal_point_key_not_nullable.py @@ -11,6 +11,19 @@ def remove_duplicate_renditions(apps, schema_editor): SELECT CONCAT(image_id, '-', filter_id) FROM (SELECT * FROM `wagtailimages_rendition`) as x WHERE `focal_point_key` IS NULL GROUP BY image_id, filter_id HAVING COUNT(*) > 1 ) AND `focal_point_key` IS NULL """) + elif schema_editor.connection.vendor == 'microsoft': + schema_editor.execute(""" + DELETE FROM [wagtailimages_rendition] WHERE CAST(image_id AS VARCHAR(MAX)) + '-' + CAST(filter_id AS VARCHAR(MAX)) IN ( + SELECT CAST(image_id AS VARCHAR(MAX)) + '-' + CAST(filter_id AS VARCHAR(MAX)) FROM [wagtailimages_rendition] WHERE focal_point_key IS NULL GROUP BY image_id, filter_id HAVING COUNT(*) > 1 + ) AND focal_point_key IS NULL + """) + schema_editor.execute(""" + DECLARE @constraint_name VARCHAR(MAX) + SELECT @constraint_name = CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME='wagtailimages_rendition' AND CONSTRAINT_TYPE='UNIQUE' + EXEC('ALTER TABLE [wagtailimages_rendition] DROP CONSTRAINT ' + @constraint_name) + ALTER TABLE [wagtailimages_rendition] ALTER COLUMN [focal_point_key] NVARCHAR(255) NOT NULL + EXEC('ALTER TABLE [wagtailimages_rendition] ADD CONSTRAINT ' + @constraint_name + ' UNIQUE NONCLUSTERED (image_id, filter_id, focal_point_key)') + """) else: schema_editor.execute(""" DELETE FROM wagtailimages_rendition WHERE image_id || '-' || filter_id IN ( @@ -26,6 +39,7 @@ class Migration(migrations.Migration): operations = [ migrations.RunPython(remove_duplicate_renditions), + migrations.AlterField( model_name='rendition', name='focal_point_key',