/[sql]/pgsql2interbase
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /pgsql2interbase

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1 by dpavlin, Mon Jul 31 06:19:20 2000 UTC revision 1.5 by dpavlin, Fri Feb 22 17:21:47 2002 UTC
# Line 3  Line 3 
3  # PostgreSQL to InterBase dump file converter  # PostgreSQL to InterBase dump file converter
4  #  #
5  # usage:  # usage:
6  # cat pg_db_name | ./mysql2pgsql > interbase.sql  # cat pg_db_name | ./pgsql2interbase > interbase.sql
7  #  #
8  # Convert PostgresSQL database dump file to something readable by isql !  # Convert PostgresSQL database dump file to something readable by isql !
9    
10  # 2000-08-30 DbP -- Dobrica Pavlinusic <dpavlin@rot13.org>  # 2000-08-30 DbP -- Dobrica Pavlinusic <dpavlin@rot13.org>
11  #       based on mysql2pgsql  #       based on mysql2pgsql changes are on:
12    #       http://cvs.linux.hr/cvsweb.cgi/sql/pgsql2interbase
13    #
14    # Warning: bool datatype is converted to char(1) which will break
15    # your application if you tend to check true values with
16    #       if ($foo)
17    # and not with
18    #       if ($foo = 't')
19    # In data from InterBase it will always return true which is wrong!
20    #
21    
22  $create=0;      # inside create table?  $create=0;      # inside create table?
23  $table="";  $table="";
24  $triggers="";   # create triggers  $triggers="";   # create triggers
25    
26    $|=1;
27    
28  while(<>) {  while(<>) {
29          chomp;          chomp;
30    
31    #       warn "- $create:$_-\n";
32    
33            if (/CREATE\s+TABLE\s+"([^"]+)"/i) {
34                    $table=$1 if (defined($1));
35                    $create++;
36                    s/CREATE\s+TABLE\s+"[^"]+"/create table $table/i;
37            }
38    
39          next if (/^\\connect/);          next if (/^\\connect/);
40    
41          if ($create) {                  # are we inside create table?          if ($create) {                  # are we inside create table?
42    
43                  if (/DEFAULT nextval \( '"([^"]+)_seq"' \)/i) {                  if (/DEFAULT\s+nextval\s*\(\s*['"]+([^"']+)_seq["']+\s*\)/i) {
44                          $trig=$col=$1;                          $trig=$col=$1;
45                          $col=~s/(\w+)_([^_]+)/$1.$2/;                          $col=~s/(\w+)_([^_]+)/$1.$2/;
46                          $triggers.="                          $triggers.="
# Line 33  $col = gen_id(${trig}_gen,1) ; Line 52  $col = gen_id(${trig}_gen,1) ;
52  end !!  end !!
53  set term ; !!  set term ; !!
54  ";  ";
55                          s/ DEFAULT nextval \( '"[^"]+"' \)//i;                          $generator{$trig}--;
56    
57                            s/DEFAULT\s+nextval\s*\([^\)]+\)//i;
58                  }                  }
59    
60                    die "nextval not removed!" if (/nextval/);
61    
62                    # nuke bool type definition on default
63                  s/DEFAULT bool/DEFAULT/i;                  s/DEFAULT bool/DEFAULT/i;
64    
65                  # int(48...) -> int                  # int(48...) -> int
66                  s/\w*int\d+/ int/gi;                  s/\w*int\d+/ int/gi;
67    
68                  # bool -> char(1)                  # bool -> char(1)
69                  s/\w*bool/ char(1)/gi;                  if (/bool/i) {
70                            s/\w*bool/ char(1)/gi;
71                            warn "Warning: bool emulated by char(1)\n\n";
72                    }
73    
74                  # datetime -> timestamp                  # datetime -> timestamp
75                  s/datetime/timestamp/gi;                  s/datetime/timestamp/gi;
# Line 52  set term ; !! Line 80  set term ; !!
80                          my ($gen,$start) = ($1,$2);                          my ($gen,$start) = ($1,$2);
81                          $sql.="create generator ${gen}_gen ;\n";                          $sql.="create generator ${gen}_gen ;\n";
82                          $sql.="set generator ${gen}_gen to $start ;\n";                          $sql.="set generator ${gen}_gen to $start ;\n";
83                            $generator{$gen}++;     # to find unused generators
84                          next;                          next;
85                  }                  }
86    
# Line 60  set term ; !! Line 89  set term ; !!
89                                    
90                  # you will have to re-write functions manually!                  # you will have to re-write functions manually!
91                  if (/^CREATE FUNCTION/i) {                  if (/^CREATE FUNCTION/i) {
92                          print STDERR "functions not supported: $_\n\n";                          warn "functions not supported: $_\n\n";
93                          next;                          next;
94                  }                  }
95    
96                  # rule is usually a defined view                  # rule is usually a defined view
97                  if (/^CREATE RULE/i) {                  if (/^CREATE RULE/i) {
98                          print STDERR "rules (views...) not supported: $_\n\n";                          warn "rules (views...) not supported: $_\n\n";
99                          next;                          next;
100                  }                  }
101                  if (/COPY "([^"]+)" FROM stdin/i) {                  if (/COPY "([^"]+)" FROM stdin/i) {
102                          my $table=$1;                          my $table=$1;
103                          my $line=<>; chomp $line;                          my $line=<>; chomp $line;
104                          while($line ne "\\.") {                          while($line ne "\\.") {
105                                  $sql.="insert into \"$table\" values (";                                  $sql.="insert into $table values (";
106                                  undef @newarr;                                  undef @newarr;
107                                  foreach $var (split(/\t/,$line)) {                                  foreach $var (split(/\t/,$line)) {
108                                          if ($var eq "\\N") {                                          if ($var eq "\\N") {
# Line 96  set term ; !! Line 125  set term ; !!
125                  if (/(CREATE \w*\s*INDEX "[^"]+" on "[^"]+")[^(]*\(([^\)]+)\)/i) {                  if (/(CREATE \w*\s*INDEX "[^"]+" on "[^"]+")[^(]*\(([^\)]+)\)/i) {
126                          my ($ind,$col) = ($1,$2);                          my ($ind,$col) = ($1,$2);
127                          $col=~s/" "[^"]+"/"/g;  # nuke ops_name                          $col=~s/" "[^"]+"/"/g;  # nuke ops_name
128                          $sql.="$ind ( $col );\n";                          $sql.=lc($ind)." ( $col );\n";
129                          next;                          next;
130                  }                  }
131    
132                    if (/GRANT (.+) on "([^"]+)" to ([^;]+);/i) {
133                            ($what,$table,$user) = ($1,$2,$3);
134                            $user=~s/"//g;
135                            if ($user =~ /group\s+(\S+)/i) {
136                                    $sql.="grant $what on $table to group $1 ;\n";
137                                    $groups{$1}++;
138                            } else {
139                                    $sql.="grant $what on $table to $user ;\n";
140                                    $users{$user}++;
141                            }
142                            next ;
143                    }
144    
145          }          }
146    
147            if ($create && /\);/) { $create-- }
148    
149          $sql.="$_\n";          $sql.="$_\n";
150    
         if (/CREATE TABLE "([^"]+)"/i) {  
                 $table=$1 if (defined($1));  
                 $create++;  
         }  
151    
152          while ($sql=~/;/) {          while ($sql=~/;/) {
153                  ($dosql,$sql)=split(/;/,$sql,2);                  ($dosql,$sql)=split(/;/,$sql,2);
154                  $dosql.=";";    # nuked by split, put it back!                  $dosql.=";";    # nuked by split, put it back!
155                  if ("$dosql" ne "") {                  if ("$dosql" ne "") {
156                            $dosql=~s/"([^"]+)"/$1/g;       # nuke quotes
157                          print "$dosql\n";                          print "$dosql\n";
                         $create=0;  
158                  } else {                  } else {
159                          print STDERR "empty sql!\n";                          warn "empty sql!\n";
160                  }                  }
161          }          }
162    
163  }  }
164    
165    $sql=~s/"([^"]+)"/$1/g; # nuke quotes
166  print "$sql\n$triggers\n";  print "$sql\n$triggers\n";
167    
168  print "\n";  foreach $gen (keys %generator) {
169            warn "created, but overused/unused generator: $gen (ref.count: $generator{$gen})\n" if ($generator{$gen} != 0);
170    }
171    
172    warn "Users used: ",join(", ",keys(%users)),"\n";
173    warn "Groups used: ",join(", ",keys(%groups)),"\n";
174    

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.5

  ViewVC Help
Powered by ViewVC 1.1.26