1 |
dpavlin |
102 |
package Frey::Schema; |
2 |
|
|
|
3 |
|
|
use Fey::DBIManager; |
4 |
|
|
use Fey::DBIManager::Source; |
5 |
|
|
use Fey::Loader; |
6 |
|
|
|
7 |
|
|
use Storable; |
8 |
|
|
use URI::Escape; |
9 |
|
|
|
10 |
|
|
use Data::Dump qw/dump/; |
11 |
|
|
|
12 |
|
|
sub schema_source { |
13 |
|
|
my ( $self,$dsn ) = @_; |
14 |
|
|
|
15 |
dpavlin |
152 |
my $schema_file = 'var/schema/' . uri_escape( $dsn ); |
16 |
dpavlin |
102 |
|
17 |
dpavlin |
141 |
# warn "## Database $dsn schema cache $schema_file\n"; |
18 |
dpavlin |
102 |
|
19 |
|
|
my $source = Fey::DBIManager::Source->new( dsn => $dsn ); |
20 |
|
|
|
21 |
|
|
my $schema; |
22 |
|
|
if ( -e $schema_file ) { |
23 |
|
|
$schema = retrieve $schema_file or die "can't read schema from $schema_file: $!"; |
24 |
|
|
} else { |
25 |
|
|
$schema = Fey::Loader->new( dbh => $source->dbh() )->make_schema(); |
26 |
|
|
store $schema, $schema_file or warn "can't store schema into $schema_file: $!"; |
27 |
|
|
} |
28 |
|
|
|
29 |
|
|
return ( $schema, $source ); |
30 |
|
|
} |
31 |
|
|
|
32 |
|
|
1; |