X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FTranslator%2FProducer%2FDumper.pm;h=12ebdc66ef721f2b1ed9623e22f96fa7762804cc;hb=282bf498899061be19ec7fd7ce16bf25a562fdcf;hp=b581d816f432d27e66ec6a66b1e593091c9d0c9d;hpb=25afc77952caf80b7cd48a1efb58c50f968b5206;p=dbsrgits%2FSQL-Translator.git diff --git a/lib/SQL/Translator/Producer/Dumper.pm b/lib/SQL/Translator/Producer/Dumper.pm index b581d81..12ebdc6 100644 --- a/lib/SQL/Translator/Producer/Dumper.pm +++ b/lib/SQL/Translator/Producer/Dumper.pm @@ -1,9 +1,7 @@ package SQL::Translator::Producer::Dumper; # ------------------------------------------------------------------- -# $Id: Dumper.pm,v 1.4 2004-04-23 00:44:10 kycl4rk Exp $ -# ------------------------------------------------------------------- -# Copyright (C) 2002-4 SQLFairy Authors +# Copyright (C) 2002-2006 SQLFairy Authors # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as @@ -61,24 +59,24 @@ use vars qw($VERSION); use Data::Dumper; -$VERSION = sprintf "%d.%02d", q$Revision: 1.4 $ =~ /(\d+)\.(\d+)/; +$VERSION = '1.59'; sub produce { my $t = shift; my $args = $t->producer_args; my $schema = $t->schema; - my $add_truncate = $args->{'add_truncate'} || 0; + my $add_truncate = $args->{'add_truncate'} || 0; my $skip = $args->{'skip'} || ''; my $skiplike = $args->{'skiplike'} || ''; my $db_user = $args->{'db_user'} || 'db_user'; my $db_pass = $args->{'db_password'} || 'db_pass'; my $parser_name = $t->parser_type; - my %skip = map { $_, 1 } map { s/^\s+|\s+$//; $_ } + my %skip = map { $_, 1 } map { s/^\s+|\s+$//; $_ } split (/,/, $skip); my $sqlt_version = $t->version; - if ( $parser_name =~ /Parser::(\w+)$/ ) { - $parser_name = $1 + if ( $parser_name =~ /Parser::(\w+)$/ ) { + $parser_name = $1 } my %type_to_dbd = ( @@ -105,9 +103,9 @@ sub produce { my $template = Template->new; my $template_text = template(); my $out; - $template->process( - \$template_text, - { + $template->process( + \$template_text, + { translator => $t, schema => $schema, db_user => $db_user, @@ -116,14 +114,13 @@ sub produce { perl => $Config{'startperl'}, skip => \%skip, skiplike => $skiplike, - }, - \$out + }, + \$out ) or die $template->error; return $out; } -# ------------------------------------------------------------------- sub template { # # Returns the template to be processed by Template Toolkit @@ -143,7 +140,7 @@ use DBI; use Getopt::Long; use File::Spec::Functions 'catfile'; -my ( $help, $add_truncate, $skip, $skiplike, $no_comments, +my ( $help, $add_truncate, $skip, $skiplike, $no_comments, $takelike, $mysql_loadfile ); GetOptions( 'add-truncate' => \$add_truncate, @@ -166,7 +163,8 @@ Usage: --mysql-loadfile Create MySQL's LOAD FILE syntax, not INSERTs --no-comments Suppress comments --skip=t1[,t2] Comma-separated list of tables to skip - --skiplike=regex Comma-separated list of tables to skip + --skiplike=regex Regular expression of table names to skip + --takelike=regex Regular expression of table names to take USAGE exit(0); @@ -189,7 +187,7 @@ FOREACH table IN schema.get_tables; field_name = field.name; fname_len = field.name.length; max_field = fname_len > max_field ? fname_len : max_field; - types.$field_name = field.data_type.match( '(char|str|long|text)' ) + types.$field_name = field.data_type.match( '(char|str|long|text|enum|date)' ) ? 'string' : 'number'; field_names.push( field_name ); END; @@ -199,13 +197,13 @@ FOREACH table IN schema.get_tables; types => types, fields => field_names, }); -END +END -%] my $db = DBI->connect( - '[% dsn %]', - '[% db_user %]', - '[% db_pass %]', + '[% dsn %]', + '[% db_user %]', + '[% db_pass %]', { RaiseError => 1 } ); my %skip = map { $_, 1 } map { s/^\s+|\s+$//; $_ } split (/,/, $skip); @@ -232,7 +230,7 @@ for my $table ( @tables ) { my ( $out_fh, $outfile ); if ( $mysql_loadfile ) { $outfile = catfile( cwd(), "$table_name.txt" ); - open $out_fh, ">$outfile" or + open $out_fh, ">$outfile" or die "Can't write LOAD FILE to '$table_name': $!\n"; } @@ -242,12 +240,13 @@ for my $table ( @tables ) { print "TRUNCATE TABLE $table_name;\n"; } - my $data = $db->selectall_arrayref( - 'select ' . join(', ', @{ $table->{'fields'} } ) . " from $table_name", - { Columns => {} } - ); + my $sql = + 'select ' . join(', ', @{ $table->{'fields'} } ) . " from $table_name" + ; + my $sth = $db->prepare( $sql ); + $sth->execute; - for my $rec ( @{ $data } ) { + while ( my $rec = $sth->fetchrow_hashref ) { my @vals; for my $fld ( @{ $table->{'fields'} } ) { my $val = $rec->{ $fld }; @@ -264,15 +263,15 @@ for my $table ( @tables ) { $val = defined $val ? $val : $mysql_loadfile ? '\N' : 'NULL'; } push @vals, $val; - } + } if ( $mysql_loadfile ) { print $out_fh join("\t", @vals), "\n"; } else { print "INSERT INTO $table_name (". - join(', ', @{ $table->{'fields'} }) . - ' VALUES (', join(', ', @vals), ");\n"; + join(', ', @{ $table->{'fields'} }) . + ') VALUES (', join(', ', @vals), ");\n"; } } @@ -299,6 +298,6 @@ EOF =head1 AUTHOR -Ken Y. Clark Ekclark@cpan.orgE. +Ken Youens-Clark Ekclark@cpan.orgE. =cut