Explicitly set the wagtailcore_page.path column to use the 'C' collation.

Treebeard's path comparison logic can fail on certain locales such as sk_SK, which
sort numbers after letters. To avoid this, we explicitly set the collation for the
'path' column to the (non-locale-specific) 'C' collation.

Ref: https://groups.google.com/d/msg/wagtail/q0leyuCnYWI/I9uDvVlyBAAJ
This commit is contained in:
Matt Westcott 2016-01-12 17:44:11 +00:00 committed by Karl Hobley
parent 973529f290
commit a6d3d23e64
2 changed files with 34 additions and 0 deletions

View file

@ -6,6 +6,20 @@ from django.conf import settings
import wagtail.wagtailsearch.index
def set_page_path_collation(apps, schema_editor):
"""
Treebeard's path comparison logic can fail on certain locales such as sk_SK, which
sort numbers after letters. To avoid this, we explicitly set the collation for the
'path' column to the (non-locale-specific) 'C' collation.
See: https://groups.google.com/d/msg/wagtail/q0leyuCnYWI/I9uDvVlyBAAJ
"""
if schema_editor.connection.vendor == 'postgresql':
schema_editor.execute("""
ALTER TABLE wagtailcore_page ALTER COLUMN path TYPE VARCHAR(255) COLLATE "C"
""")
class Migration(migrations.Migration):
dependencies = [
@ -82,6 +96,9 @@ class Migration(migrations.Migration):
},
bases=(models.Model, wagtail.wagtailsearch.index.Indexed),
),
migrations.RunPython(
set_page_path_collation, migrations.RunPython.noop
),
migrations.CreateModel(
name='PageRevision',
fields=[

View file

@ -116,6 +116,20 @@ def remove_initial_data(apps, schema_editor):
# have been assigned such permissions and its harmless to leave them.
def set_page_path_collation(apps, schema_editor):
"""
Treebeard's path comparison logic can fail on certain locales such as sk_SK, which
sort numbers after letters. To avoid this, we explicitly set the collation for the
'path' column to the (non-locale-specific) 'C' collation.
See: https://groups.google.com/d/msg/wagtail/q0leyuCnYWI/I9uDvVlyBAAJ
"""
if schema_editor.connection.vendor == 'postgresql':
schema_editor.execute("""
ALTER TABLE wagtailcore_page ALTER COLUMN path TYPE VARCHAR(255) COLLATE "C"
""")
class Migration(migrations.Migration):
replaces = [
@ -226,6 +240,9 @@ class Migration(migrations.Migration):
},
bases=(models.Model, wagtail.wagtailsearch.index.Indexed),
),
migrations.RunPython(
set_page_path_collation, migrations.RunPython.noop
),
migrations.CreateModel(
name='GroupPagePermission',
fields=[