0byt3m1n1
Path:
/
data
/
0
/
0
/
6
/
46
/
6861
/
user
/
7034
/
cgi-bin
/
[
Home
]
File: mt-db2sql.cgi
#!/usr/local/bin/perl -w # Copyright 2001-2004 Six Apart. This code cannot be redistributed without # permission from www.movabletype.org. # # $Id: mt-db2sql.cgi,v 1.18 2004/09/29 21:33:03 ezra Exp $ use strict; my($MT_DIR); BEGIN { if ($0 =~ m!(.*[/\\])!) { $MT_DIR = $1; } else { $MT_DIR = './'; } unshift @INC, $MT_DIR . 'lib'; unshift @INC, $MT_DIR . 'extlib'; } local $| = 1; print "Content-Type: text/html\n\n"; print "<pre>\n\n"; my @CLASSES = qw( MT::Author MT::Blog MT::Category MT::Comment MT::Entry MT::IPBanList MT::Log MT::Notification MT::Permission MT::Placement MT::Template MT::TemplateMap MT::Trackback MT::TBPing ); use File::Spec; eval { local $SIG{__WARN__} = sub { print "**** WARNING: $_[0]\n" }; require MT; my $mt = MT->new( Config => $MT_DIR . 'mt.cfg', Directory => $MT_DIR ) or die MT->errstr; require MT::Object; my($type) = $mt->{cfg}->ObjectDriver =~ /^DBI::(.*)$/; MT::Object->set_driver('DBI::' . $type) or die MT::ObjectDriver->errstr; my $dbh = MT::Object->driver->{dbh}; my $schema = File::Spec->catfile($MT_DIR, 'schemas', $type . '.dump'); open FH, $schema or die "Can't open schema file '$schema': $!"; my $ddl; { local $/; $ddl = <FH> } close FH; my @stmts = split /;/, $ddl; print "Loading database schema...\n\n"; for my $stmt (@stmts) { $stmt =~ s!^\s*!!; $stmt =~ s!\s*$!!; next unless $stmt =~ /\S/; $dbh->do($stmt) or die $dbh->errstr; } ## %ids will hold the highest IDs of each class. my %ids; print "Loading data...\n"; for my $class (@CLASSES) { print $class, "\n"; MT::Object->set_driver('DBM'); eval "use $class"; my $iter = $class->load_iter; my %names; MT::Object->set_driver('DBI::' . $type); while (my $obj = $iter->()) { print " ", $obj->id, "\n"; $ids{$class} = $obj->id if !$ids{$class} || $obj->id > $ids{$class}; ## Look for duplicate template, category, and author names, ## because we have uniqueness constraints in the DB. if ($class eq 'MT::Template') { my $key = lc($obj->name) . $obj->blog_id; if ($names{$class}{$key}++) { print " Found duplicate template name '" . $obj->name; $obj->name($obj->name . ' ' . $names{$class}{$key}); print "'; renaming to '" . $obj->name . "'\n"; } ## Touch the text column to make sure we read in ## any linked templates. my $text = $obj->text; } elsif ($class eq 'MT::Author') { my $key = lc($obj->name); if ($names{$class . $obj->type}{$key}++) { print " Found duplicate author name '" . $obj->name; $obj->name($obj->name . ' ' . $names{$class}{$key}); print "'; renaming to '" . $obj->name . "'\n"; } $obj->email('') unless defined $obj->email; $obj->set_password('') unless defined $obj->password; } elsif ($class eq 'MT::Category') { my $key = lc($obj->label) . $obj->blog_id; if ($names{$class}{$key}++) { print " Found duplicate category label '" . $obj->label; $obj->label($obj->label . ' ' . $names{$class}{$key}); print "'; renaming to '" . $obj->label . "'\n"; } } elsif ($class eq 'MT::Trackback') { $obj->entry_id(0) unless defined $obj->entry_id; $obj->category_id(0) unless defined $obj->category_id; } elsif ($class eq 'MT::Entry') { $obj->allow_pings(0) if defined $obj->allow_pings && $obj->allow_pings eq ''; $obj->allow_comments(0) if defined $obj->allow_comments && $obj->allow_comments eq ''; } $obj->save or die $obj->errstr; } print "\n"; } if ($type eq 'postgres') { print "Updating sequences\n"; my $dbh = MT::Object->driver->{dbh}; for my $class (keys %ids) { print " $class => $ids{$class}\n"; my $seq = 'mt_' . $class->datasource . '_' . $class->properties->{primary_key}; $dbh->do("select setval('$seq', $ids{$class})") or die $dbh->errstr; } } }; if ($@) { print <<HTML; An error occurred while loading data: $@ HTML } else { print <<HTML; Done copying data from Berkeley DB to your SQL database! All went well. HTML } print "</pre>\n";
© 2017 -
ZeroByte.ID
.