remove hash from first column name
[MojoFacets.git] / lib / MojoFacets / Import / SQL.pm
1 package MojoFacets::Import::SQL;
2
3 use warnings;
4 use strict;
5
6 use base 'Mojo::Base';
7
8 use DBI;
9 use File::Slurp;
10 use Data::Dump qw(dump);
11 use Encode;
12
13 __PACKAGE__->attr('full_path');
14
15 sub ext { '.sql' }
16
17 sub data {
18         my $self = shift;
19
20         my $path = $self->full_path;
21
22         my $sql = read_file $path, { binmode => ':raw' }; # FIXME configurable!
23
24         my $dsn    = $1 if $sql =~ s/--\s*(dbi:\S+)//;
25         my $user   = $1 if $sql =~ s/--\s*user=\s*(\S+)//;
26         my $passwd = $1 if $sql =~ s/--\s*passwo?r?d=\s*(\S+)//;
27
28         warn "# $dsn $user/", '*' x length($passwd);
29
30         my $opts = { RaiseError => 1, AutoCommit => 0 };
31         delete $opts->{AutoCommit} if $dsn =~ m/Gofer/; # not supported with Gofer
32
33         if ( $dsn =~ m{Pg} ) {
34                 $opts->{pg_enable_utf8} = 1;
35         } elsif ( $dsn =~ m{mysql} ) {
36                 $opts->{mysql_enable_utf8} = 1;
37         } else {
38                 warn "utf-8 encoding can't be set for this dsn!";
39         }
40
41         my $dbh = DBI->connect($dsn, $user, $passwd, $opts) || die $DBI::errstr;
42
43         warn "# SQL: $sql";
44         my $sth = $dbh->prepare($sql);
45         $sth->execute();
46
47         warn "# got ", $sth->rows, " rows\n";
48
49         my $data = { items => [] };
50         $data->{header} = $sth->{NAME};
51
52         while( my $row = $sth->fetchrow_hashref ) {
53                 push @{ $data->{items} }, $row;
54         }
55
56         return $data;
57
58 }
59
60 1