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.