take out duplicate docs
[dbsrgits/SQL-Translator.git] / lib / SQL / Translator / Producer / Dumper.pm
index b581d81..12ebdc6 100644 (file)
@@ -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 E<lt>kclark@cpan.orgE<gt>.
+Ken Youens-Clark E<lt>kclark@cpan.orgE<gt>.
 
 =cut