#!/usr/local/bin/perl use warnings; use strict; my $table_name = shift; $table_name = 'TABLE' if not defined $table_name; sub maybe_quote( $;$ ) { my ($val, $name) = @_; die if not defined $val; die if $val =~ tr/''//; if (defined $name and $name =~ /_value$/) { return "'$val'"; } elsif ($val =~ m'^@') { return $val; } elsif ($val =~ /^\d+$/) { return $val; } else { return "'$val'"; } } $/ = "\n \n"; while (<>) { s/^\s+//; s/\s+$//; my @lines = split /\n/; FIX_FOLLOWING: foreach my $i (0 .. $#lines - 1) { if ($lines[$i + 1] !~ tr/://) { splice @lines, $i, 2, ("$lines[$i] $lines[$i + 1]"); goto FIX_FOLLOWING; } } foreach (@lines) { die "no colon: $_" if not tr/:// } # Kludge for column_catalog. my @name_value = grep { $_->[0] ne "${table_name}_id" } map { [ /^([^:]+):\s*(.+)$/ ] } @lines; if ($name_value[0]->[0] eq 'table_name') { my $table_name = $name_value[0]->[1]; shift @name_value; print <[0] eq 'table_catalog_id') { $_->[1] = '@table_catalog_id'; last; } } } print "exec ${table_name}_ins \@insert_reason_id = 0, \@data_source_path_id = 0, ", join(', ', map { '@' . "$_->[0] = " . maybe_quote($_->[1], $_->[0]) } @name_value), "\ngo\n\n"; }