diff --git a/mig_db_arti.rb b/mig_db_arti.rb new file mode 100644 index 0000000..2d56518 --- /dev/null +++ b/mig_db_arti.rb @@ -0,0 +1,75 @@ +# Migrate DB artifacts(Stored Procedure, Function) +# Source -> Extract(Procedure, function) -> Target + +require 'dbi' +require './env' + +query = < dbe + STDERR.puts("Error whilte: #{name}") + STDERR.puts(dbe) + end + + puts("Migrated: #{name}") +end + +begin + if ARGV.length != 2 + print_help() + exit(1) + end + + artifacts_list = parse_artifacts_list(ARGV[1]) + + env = DEV; prod = PROD; + fail("Migrate to PROD is not supported for safety reason.") if ARGV[0] == "PROD" + + puts("Migrate DB Artifacts: PROD -> DEV") + + db_src = DBI.connect(prod[:DBI_STRING], prod[:DB_USER], prod[:DB_PW]) + db_tgt = DBI.connect(env[:DBI_STRING], env[:DB_USER], env[:DB_PW]) + + artifacts_list.each do |elem| + sth = db_src.prepare(query) + sth.bind_param(1, elem) + sth.execute() + + row = sth.fetch() + if (row.nil?) + puts("There is no: #{elem}") + next + end + + migrate(db_tgt, row['OBJECT_NAME'], row['BODY'].read) + end + +rescue DBI::DatabaseError => dbe + STDERR.puts(dbe) + sb_tgt.rollback +ensure + db_src.disconnect if db_src + db_tgt.disconnect if db_tgt +end + +