Hi, I think I found a bug in update_columns_in_batches. I was running the following migrations, which I'm pretty sure is correct. Pretty sure :D
# Move settings from hstore to their columns
columns_with_values = [
[:enabled_xs, Arel.sql("coalesce((settings -> 'visible_xs')::BOOLEAN, true)")],
[:enabled_sm, Arel.sql("coalesce((settings -> 'visible_sm')::BOOLEAN, true)")],
[:enabled_md, Arel.sql("coalesce((settings -> 'visible_md')::BOOLEAN, true)")],
[:enabled_lg, Arel.sql("coalesce((settings -> 'visible_lg')::BOOLEAN, true)")],
[:enabled_xl, Arel.sql("coalesce((settings -> 'visible_xl')::BOOLEAN, (settings -> 'visible_lg')::BOOLEAN, true)")]
]
update_columns_in_batches(:widgets, columns_with_values, batch_size: 10_000)
end
Widget.where(enabled_xs: false).count
Widget Count (281.2ms) SELECT COUNT(*) FROM "widgets" WHERE "widgets"."enabled_xs" = $1 [["enabled_xs", false]]
=> 20
If I run my migration like this, which I think is the same? I get the correct results:
# Move settings from hstore to their columns
update_column_in_batches(:widgets, :enabled_xs, Arel.sql("coalesce((settings -> 'visible_xs')::BOOLEAN, true)"), batch_size: 10_000)
update_column_in_batches(:widgets, :enabled_sm, Arel.sql("coalesce((settings -> 'visible_sm')::BOOLEAN, true)"), batch_size: 10_000)
update_column_in_batches(:widgets, :enabled_md, Arel.sql("coalesce((settings -> 'visible_md')::BOOLEAN, true)"), batch_size: 10_000)
update_column_in_batches(:widgets, :enabled_lg, Arel.sql("coalesce((settings -> 'visible_lg')::BOOLEAN, true)"), batch_size: 10_000)
update_column_in_batches(:widgets, :enabled_xl, Arel.sql("coalesce((settings -> 'visible_xl')::BOOLEAN, (settings -> 'visible_lg')::BOOLEAN, true)"), batch_size: 10_000)
end
Widget.where(enabled_xs: false).count
Widget Count (297.3ms) SELECT COUNT(*) FROM "widgets" WHERE "widgets"."enabled_xs" = $1 [["enabled_xs", false]]
=> 3097