Fix json_to_jsonb migrations and prevent \u0000 error

remotes/origin/issue/4795/notification_even_they_are_disabled
David Barragán Merino 2016-11-16 13:00:09 +01:00
parent e1182fb69b
commit 3d8f637e55
7 changed files with 87 additions and 28 deletions

View File

@ -17,7 +17,7 @@ class Migration(migrations.Migration):
ALTER TABLE "{table_name}" ALTER TABLE "{table_name}"
ALTER COLUMN "{column_name}" ALTER COLUMN "{column_name}"
TYPE jsonb TYPE jsonb
USING to_json("{column_name}"::text)::jsonb; USING regexp_replace("{column_name}"::text, '\\u0000', '\\\\u0000', 'g')::jsonb;
""".format( """.format(
table_name="custom_attributes_epiccustomattributesvalues", table_name="custom_attributes_epiccustomattributesvalues",
column_name="attributes_values", column_name="attributes_values",
@ -29,7 +29,7 @@ class Migration(migrations.Migration):
ALTER TABLE "{table_name}" ALTER TABLE "{table_name}"
ALTER COLUMN "{column_name}" ALTER COLUMN "{column_name}"
TYPE jsonb TYPE jsonb
USING to_json("{column_name}"::text)::jsonb; USING regexp_replace("{column_name}"::text, '\\u0000', '\\\\u0000', 'g')::jsonb;
""".format( """.format(
table_name="custom_attributes_userstorycustomattributesvalues", table_name="custom_attributes_userstorycustomattributesvalues",
column_name="attributes_values", column_name="attributes_values",
@ -41,7 +41,7 @@ class Migration(migrations.Migration):
ALTER TABLE "{table_name}" ALTER TABLE "{table_name}"
ALTER COLUMN "{column_name}" ALTER COLUMN "{column_name}"
TYPE jsonb TYPE jsonb
USING to_json("{column_name}"::text)::jsonb; USING regexp_replace("{column_name}"::text, '\\u0000', '\\\\u0000', 'g')::jsonb;
""".format( """.format(
table_name="custom_attributes_taskcustomattributesvalues", table_name="custom_attributes_taskcustomattributesvalues",
column_name="attributes_values", column_name="attributes_values",
@ -53,7 +53,7 @@ class Migration(migrations.Migration):
ALTER TABLE "{table_name}" ALTER TABLE "{table_name}"
ALTER COLUMN "{column_name}" ALTER COLUMN "{column_name}"
TYPE jsonb TYPE jsonb
USING to_json("{column_name}"::text)::jsonb; USING regexp_replace("{column_name}"::text, '\\u0000', '\\\\u0000', 'g')::jsonb;
""".format( """.format(
table_name="custom_attributes_issuecustomattributesvalues", table_name="custom_attributes_issuecustomattributesvalues",
column_name="attributes_values", column_name="attributes_values",

View File

@ -16,13 +16,33 @@ class Migration(migrations.Migration):
migrations.RunSQL( migrations.RunSQL(
""" """
ALTER TABLE "history_historyentry" ALTER TABLE "history_historyentry"
ALTER COLUMN "delete_comment_user" TYPE jsonb USING to_json("delete_comment_user"::text)::jsonb, ALTER COLUMN "delete_comment_user"
ALTER COLUMN "comment_versions" TYPE jsonb USING to_json("comment_versions"::text)::jsonb, TYPE jsonb
ALTER COLUMN "values_diff_cache" TYPE jsonb USING to_json("values_diff_cache"::text)::jsonb, USING regexp_replace("delete_comment_user"::text, '\\u0000', '\\\\u0000', 'g')::jsonb,
ALTER COLUMN "user" TYPE jsonb USING to_json("user"::text)::jsonb,
ALTER COLUMN "diff" TYPE jsonb USING to_json("diff"::text)::jsonb, ALTER COLUMN "comment_versions"
ALTER COLUMN "snapshot" TYPE jsonb USING to_json("snapshot"::text)::jsonb, TYPE jsonb
ALTER COLUMN "values" TYPE jsonb USING to_json("values"::text)::jsonb; USING regexp_replace("comment_versions"::text, '\\u0000', '\\\\u0000', 'g')::jsonb,
ALTER COLUMN "values_diff_cache"
TYPE jsonb
USING regexp_replace("values_diff_cache"::text, '\\u0000', '\\\\u0000', 'g')::jsonb,
ALTER COLUMN "user"
TYPE jsonb
USING regexp_replace("user"::text, '\\u0000', '\\\\u0000', 'g')::jsonb,
ALTER COLUMN "diff"
TYPE jsonb
USING regexp_replace("diff"::text, '\\u0000', '\\\\u0000', 'g')::jsonb,
ALTER COLUMN "snapshot"
TYPE jsonb
USING regexp_replace("snapshot"::text, '\\u0000', '\\\\u0000', 'g')::jsonb,
ALTER COLUMN "values"
TYPE jsonb
USING regexp_replace("values"::text, '\\u0000', '\\\\u0000', 'g')::jsonb;
""", """,
reverse_sql=migrations.RunSQL.noop reverse_sql=migrations.RunSQL.noop
), ),

View File

@ -16,23 +16,54 @@ class Migration(migrations.Migration):
migrations.RunSQL( migrations.RunSQL(
""" """
ALTER TABLE "projects_projectmodulesconfig" ALTER TABLE "projects_projectmodulesconfig"
ALTER COLUMN "config" TYPE jsonb USING to_json("config"::text)::jsonb; ALTER COLUMN "config"
TYPE jsonb
USING regexp_replace("config"::text, '\\u0000', '\\\\u0000', 'g')::jsonb;
""", """,
reverse_sql=migrations.RunSQL.noop reverse_sql=migrations.RunSQL.noop
), ),
migrations.RunSQL( migrations.RunSQL(
""" """
ALTER TABLE "projects_projecttemplate" ALTER TABLE "projects_projecttemplate"
ALTER COLUMN "roles" TYPE jsonb USING to_json("roles"::text)::jsonb, ALTER COLUMN "roles"
ALTER COLUMN "default_options" TYPE jsonb USING to_json("default_options"::text)::jsonb, TYPE jsonb
ALTER COLUMN "epic_statuses" TYPE jsonb USING to_json("epic_statuses"::text)::jsonb, USING regexp_replace("roles"::text, '\\u0000', '\\\\u0000', 'g')::jsonb,
ALTER COLUMN "us_statuses" TYPE jsonb USING to_json("us_statuses"::text)::jsonb,
ALTER COLUMN "points" TYPE jsonb USING to_json("points"::text)::jsonb, ALTER COLUMN "default_options"
ALTER COLUMN "task_statuses" TYPE jsonb USING to_json("task_statuses"::text)::jsonb, TYPE jsonb
ALTER COLUMN "issue_statuses" TYPE jsonb USING to_json("issue_statuses"::text)::jsonb, USING regexp_replace("default_options"::text, '\\u0000', '\\\\u0000', 'g')::jsonb,
ALTER COLUMN "issue_types" TYPE jsonb USING to_json("issue_types"::text)::jsonb,
ALTER COLUMN "priorities" TYPE jsonb USING to_json("priorities"::text)::jsonb, ALTER COLUMN "epic_statuses"
ALTER COLUMN "severities" TYPE jsonb USING to_json("severities"::text)::jsonb; TYPE jsonb
USING regexp_replace("epic_statuses"::text, '\\u0000', '\\\\u0000', 'g')::jsonb,
ALTER COLUMN "us_statuses"
TYPE jsonb
USING regexp_replace("us_statuses"::text, '\\u0000', '\\\\u0000', 'g')::jsonb,
ALTER COLUMN "points"
TYPE jsonb
USING regexp_replace("points"::text, '\\u0000', '\\\\u0000', 'g')::jsonb,
ALTER COLUMN "task_statuses"
TYPE jsonb
USING regexp_replace("task_statuses"::text, '\\u0000', '\\\\u0000', 'g')::jsonb,
ALTER COLUMN "issue_statuses"
TYPE jsonb
USING regexp_replace("issue_statuses"::text, '\\u0000', '\\\\u0000', 'g')::jsonb,
ALTER COLUMN "issue_types"
TYPE jsonb
USING regexp_replace("issue_types"::text, '\\u0000', '\\\\u0000', 'g')::jsonb,
ALTER COLUMN "priorities"
TYPE jsonb
USING regexp_replace("priorities"::text, '\\u0000', '\\\\u0000', 'g')::jsonb,
ALTER COLUMN "severities"
TYPE jsonb
USING regexp_replace("severities"::text, '\\u0000', '\\\\u0000', 'g')::jsonb;
""", """,
reverse_sql=migrations.RunSQL.noop reverse_sql=migrations.RunSQL.noop
), ),

View File

@ -18,7 +18,7 @@ class Migration(migrations.Migration):
ALTER TABLE "{table_name}" ALTER TABLE "{table_name}"
ALTER COLUMN "{column_name}" ALTER COLUMN "{column_name}"
TYPE jsonb TYPE jsonb
USING to_json("{column_name}"::text)::jsonb; USING regexp_replace("{column_name}"::text, '\\u0000', '\\\\u0000', 'g')::jsonb;
""".format( """.format(
table_name="timeline_timeline", table_name="timeline_timeline",
column_name="data", column_name="data",

View File

@ -18,7 +18,7 @@ class Migration(migrations.Migration):
ALTER TABLE "{table_name}" ALTER TABLE "{table_name}"
ALTER COLUMN "{column_name}" ALTER COLUMN "{column_name}"
TYPE jsonb TYPE jsonb
USING to_json("{column_name}"::text)::jsonb; USING regexp_replace("{column_name}"::text, '\\u0000', '\\\\u0000', 'g')::jsonb;
""".format( """.format(
table_name="users_authdata", table_name="users_authdata",
column_name="extra", column_name="extra",

View File

@ -18,7 +18,7 @@ class Migration(migrations.Migration):
ALTER TABLE "{table_name}" ALTER TABLE "{table_name}"
ALTER COLUMN "{column_name}" ALTER COLUMN "{column_name}"
TYPE jsonb TYPE jsonb
USING to_json("{column_name}"::text)::jsonb; USING regexp_replace("{column_name}"::text, '\\u0000', '\\\\u0000', 'g')::jsonb;
""".format( """.format(
table_name="userstorage_storageentry", table_name="userstorage_storageentry",
column_name="value", column_name="value",

View File

@ -16,9 +16,17 @@ class Migration(migrations.Migration):
migrations.RunSQL( migrations.RunSQL(
""" """
ALTER TABLE "webhooks_webhooklog" ALTER TABLE "webhooks_webhooklog"
ALTER COLUMN "request_headers" TYPE jsonb USING to_json("request_headers"::text)::jsonb, ALTER COLUMN "request_headers"
ALTER COLUMN "request_data" TYPE jsonb USING to_json("request_data"::text)::jsonb, TYPE jsonb
ALTER COLUMN "response_headers" TYPE jsonb USING to_json("response_headers"::text)::jsonb; USING regexp_replace("request_headers"::text, '\\u0000', '\\\\u0000', 'g')::jsonb,
ALTER COLUMN "request_data"
TYPE jsonb
USING regexp_replace("request_data"::text, '\\u0000', '\\\\u0000', 'g')::jsonb,
ALTER COLUMN "response_headers"
TYPE jsonb
USING regexp_replace("response_headers"::text, '\\u0000', '\\\\u0000', 'g')::jsonb;
""", """,
reverse_sql=migrations.RunSQL.noop reverse_sql=migrations.RunSQL.noop
), ),