1 |
package Strix::Schema; |
2 |
|
3 |
use Fey::DBIManager; |
4 |
use Fey::DBIManager::Source; |
5 |
use Fey::Loader; |
6 |
use Fey::ORM::Schema; |
7 |
|
8 |
use Storable; |
9 |
use Data::Dump qw/dump/; |
10 |
use URI::Escape; |
11 |
|
12 |
my $dsn = 'dbi:Pg:dbname=new'; |
13 |
$dsn = 'dbi:SQLite:dbname=./var/strix.sqlite'; |
14 |
|
15 |
my $schema_file = 'var/schema.' . uri_escape( $dsn ); |
16 |
|
17 |
warn "Database $dsn schema cache $schema_file\n"; |
18 |
|
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 |
has_schema $schema; |
30 |
|
31 |
__PACKAGE__->DBIManager()->add_source($source); |