Gerenciar scripts baseados em SQL pode se tornar um pesadelo com o tempo. Rails resolveu isso com ActiveRecord Migration. Sam Livingston-Gray escreveu uma pequena ferramenta individual em Ruby para gerenciar scripts de migrações hierárquicas. Baseado no fato que scripts SQL podem se tornar muito verboso e passíveis de duplicação, Sam começou o SQrbL que é um mix de SQL e Ruby.
Você escreverá um script com esse:
include Sqrbl Sqrbl.migration do @output_directory='/path/to/generated/sql' group "Widgets" do step "Create widgets" do up do helpers do def widget_import_note '"Imported from old_widgets"' end end action "Migrate old_widgets" do <<-SQL #{ insert_into("new_widgets", { :name => 'widget_name', :part_num => 'CONCAT("X_", part_number)', :note => widget_import_note, }) } FROM old_widgets SQL end end down do action "Drop imported organizational contacts" do 'DELETE FROM new_widgets WHERE note LIKE "Imported from old_widgets"' end end end end group 'Second Group' do step 'Step one' do up { write '-- Step one up' } down { write '-- Step one down' } end step 'Step two' do up { write '-- Step two up' } down { write '-- Step two down'} end end end
E SQrbL vai produzir os seguintes arquivos:
/path/to/generated/sql/up/1_widgets/1_create_widgets.sql /path/to/generated/sql/down/1_widgets/1_create_widgets.sql /path/to/generated/sql/up/2_second_group/1_step_one.sql /path/to/generated/sql/down/2_second_group/1_step_one.sql /path/to/generated/sql/up/2_second_group/2_step_two.sql /path/to/generated/sql/down/2_second_group/2_step_two.sql /path/to/generated/sql/all_up.sql /path/to/generated/sql/all_down.sql
Por exemplo all_up.sql
terá as seguintes queries SQL:
-- Migrate old_widgets INSERT INTO new_widgets ( name, part_num, note ) SELECT widget_name AS name, CONCAT("X_", part_number) AS part_num, "Imported from old_widgets" AS note FROM old_widgets -- Step one up -- Step two up
No momento SQrbL só faz insert_into para simplificar a escrita de INSERTs.
Enquanto que o uso do SQrbL pode não parecer a melhor solução para pessoas já utilizando ActiveRecord Migration, ele ainda pode satisfazer pessoas procurando uma ferramenta individual simples e rápida. No momento SQrbL está na versão 0.1.3 e lhe falta uma DSL de SQL apropriada.