Commit | Line | Data |
4f4fd192 |
1 | use MooseX::Declare; |
ebf2721d |
2 | class SQL::Translator::Object::Schema extends SQL::Translator::Object { |
4f4fd192 |
3 | use MooseX::Types::Moose qw(HashRef Maybe Str); |
a939ce63 |
4 | use SQL::Translator::Types qw(Procedure Table Trigger View); |
a3b033db |
5 | use MooseX::MultiMethods; |
a939ce63 |
6 | |
4f4fd192 |
7 | has 'name' => ( |
8 | is => 'rw', |
9 | isa => Maybe[Str], |
10 | required => 1, |
11 | default => '' |
12 | ); |
57544e0b |
13 | |
14 | has 'database' => ( |
15 | is => 'rw', |
16 | isa => Maybe[Str], |
17 | ); |
4f4fd192 |
18 | |
19 | has 'tables' => ( |
28bd628e |
20 | traits => ['Hash'], |
4f4fd192 |
21 | is => 'rw', |
22 | isa => HashRef[Table], |
28bd628e |
23 | handles => { |
24 | exists_table => 'exists', |
25 | table_ids => 'keys', |
26 | get_tables => 'values', |
27 | get_table => 'get', |
28 | add_table => 'set', |
a3b033db |
29 | remove_table => 'delete', |
4f4fd192 |
30 | }, |
b5ce8643 |
31 | default => sub { my %hash = (); tie %hash, 'Tie::IxHash'; return \%hash }, |
4f4fd192 |
32 | ); |
33 | |
34 | has 'views' => ( |
28bd628e |
35 | traits => ['Hash'], |
4f4fd192 |
36 | is => 'rw', |
37 | isa => HashRef[View], |
28bd628e |
38 | handles => { |
39 | exists_view => 'exists', |
40 | view_ids => 'keys', |
41 | get_views => 'values', |
42 | get_view => 'get', |
43 | add_view => 'set', |
4f4fd192 |
44 | }, |
7c120f08 |
45 | default => sub { my %hash = (); tie %hash, 'Tie::IxHash'; return \%hash }, |
4f4fd192 |
46 | ); |
47 | |
48 | has 'procedures' => ( |
28bd628e |
49 | traits => ['Hash'], |
4f4fd192 |
50 | is => 'rw', |
51 | isa => HashRef[Procedure], |
28bd628e |
52 | handles => { |
53 | exists_procedure => 'exists', |
54 | procedure_ids => 'keys', |
55 | get_procedures => 'values', |
56 | get_procedure => 'get', |
57 | add_procedure => 'set', |
4f4fd192 |
58 | }, |
a939ce63 |
59 | default => sub { my %hash = (); tie %hash, 'Tie::IxHash'; return \%hash }, |
60 | ); |
61 | |
62 | has 'triggers' => ( |
28bd628e |
63 | traits => ['Hash'], |
a939ce63 |
64 | is => 'rw', |
65 | isa => HashRef[Trigger], |
28bd628e |
66 | handles => { |
67 | exists_trigger => 'exists', |
68 | trigger_ids => 'keys', |
69 | get_triggers => 'values', |
70 | get_trigger => 'get', |
71 | add_trigger => 'set', |
a939ce63 |
72 | }, |
73 | default => sub { my %hash = (); tie %hash, 'Tie::IxHash'; return \%hash }, |
4f4fd192 |
74 | ); |
b5ce8643 |
75 | |
a3b033db |
76 | around add_table(Table $table) { |
77 | die "Can't use table name " . $table->name if $self->exists_table($table->name) || $table->name eq ''; |
e1bef8b9 |
78 | $table->schema($self); |
a3b033db |
79 | $self->$orig($table->name, $table); |
80 | } |
e1bef8b9 |
81 | |
51700db2 |
82 | around add_view(View $view) { $self->$orig($view->name, $view) } |
83 | around add_procedure(Procedure $procedure) { $self->$orig($procedure->name, $procedure) } |
84 | around add_trigger(Trigger $trigger) { $self->$orig($trigger->name, $trigger) } |
85 | |
a3b033db |
86 | method is_valid { return $self->get_tables ? 1 : undef } |
87 | |
88 | multi method drop_table(Table $table, Int :$cascade = 0) { |
89 | die "Can't drop non-existant table " . $table->name unless $self->exists_table($table->name); |
90 | $self->remove_table($table->name); |
91 | |
92 | } |
93 | |
94 | multi method drop_table(Str $table, Int :$cascade = 0) { |
95 | die "Can't drop non-existant table " . $table unless $self->exists_table($table); |
96 | $self->remove_table($table); |
97 | } |
b750d2f1 |
98 | |
99 | method order { } |
100 | method perform_action_when { } |
101 | method database_events { } |
102 | method fields { } |
103 | method on_table { } |
104 | method action { } |
4f4fd192 |
105 | } |