--- pgsql2interbase 2000/07/31 08:55:32 1.2 +++ pgsql2interbase 2000/08/01 06:48:05 1.3 @@ -8,7 +8,8 @@ # Convert PostgresSQL database dump file to something readable by isql ! # 2000-08-30 DbP -- Dobrica Pavlinusic -# based on mysql2pgsql +# based on mysql2pgsql changes are on: +# http://cvs.linux.hr/cvsweb.cgi/sql/pgsql2interbase # # Warning: bool datatype is converted to char(1) which will break # your application if you tend to check true values with @@ -22,14 +23,24 @@ $table=""; $triggers=""; # create triggers +$|=1; + while(<>) { chomp; +# print "- $create:$_-\n"; + + if (/CREATE\s+TABLE\s+"([^"]+)"/i) { + $table=$1 if (defined($1)); + $create++; + s/CREATE\s+TABLE\s+"[^"]+"/create table $table/i; + } + next if (/^\\connect/); if ($create) { # are we inside create table? - if (/DEFAULT nextval \( '"([^"]+)_seq"' \)/i) { + if (/DEFAULT\s+nextval\s*\(\s*['"]+([^"']+)_seq["']+\s*\)/i) { $trig=$col=$1; $col=~s/(\w+)_([^_]+)/$1.$2/; $triggers.=" @@ -41,8 +52,14 @@ end !! set term ; !! "; - s/ DEFAULT nextval \( '"[^"]+"' \)//i; + $generator{$trig}--; + + s/DEFAULT\s+nextval\s*\([^\)]+\)//i; } + + die "nextval not removed!" if (/nextval/); + + # nuke bool type definition on default s/DEFAULT bool/DEFAULT/i; # int(48...) -> int @@ -57,12 +74,16 @@ # datetime -> timestamp s/datetime/timestamp/gi; + # nuke quotes + s/"([^"]+)"/$1/g; + } else { # not inside create table if (/CREATE SEQUENCE "(\w+)_seq" start (\d+)/i) { my ($gen,$start) = ($1,$2); $sql.="create generator ${gen}_gen ;\n"; $sql.="set generator ${gen}_gen to $start ;\n"; + $generator{$gen}++; # to find unused generators next; } @@ -84,7 +105,7 @@ my $table=$1; my $line=<>; chomp $line; while($line ne "\\.") { - $sql.="insert into \"$table\" values ("; + $sql.="insert into $table values ("; undef @newarr; foreach $var (split(/\t/,$line)) { if ($var eq "\\N") { @@ -108,25 +129,23 @@ my ($ind,$col) = ($1,$2); $col=~s/" "[^"]+"/"/g; # nuke ops_name $sql.="$ind ( $col );\n"; +# $sql.=s/"([^"]+)"/$1/g; next; } } + if ($create && /\);/) { $create-- } + $sql=~s/"([^"]+)"/$1/g; $sql.="$_\n"; - if (/CREATE TABLE "([^"]+)"/i) { - $table=$1 if (defined($1)); - $create++; - } while ($sql=~/;/) { ($dosql,$sql)=split(/;/,$sql,2); $dosql.=";"; # nuked by split, put it back! if ("$dosql" ne "") { print "$dosql\n"; - $create=0; } else { print STDERR "empty sql!\n"; } @@ -138,3 +157,7 @@ print "\n"; +foreach $gen (keys %generator) { + warn "created, but overused/unused generator: $gen (ref.count: $generator{$gen})\n" if ($generator{$gen} != 0); +} +