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', |
e09616ec |
44 | remove_view => 'delete', |
4f4fd192 |
45 | }, |
7c120f08 |
46 | default => sub { my %hash = (); tie %hash, 'Tie::IxHash'; return \%hash }, |
4f4fd192 |
47 | ); |
48 | |
49 | has 'procedures' => ( |
28bd628e |
50 | traits => ['Hash'], |
4f4fd192 |
51 | is => 'rw', |
52 | isa => HashRef[Procedure], |
28bd628e |
53 | handles => { |
54 | exists_procedure => 'exists', |
55 | procedure_ids => 'keys', |
56 | get_procedures => 'values', |
57 | get_procedure => 'get', |
58 | add_procedure => 'set', |
e09616ec |
59 | remove_procedure => 'delete', |
4f4fd192 |
60 | }, |
a939ce63 |
61 | default => sub { my %hash = (); tie %hash, 'Tie::IxHash'; return \%hash }, |
62 | ); |
63 | |
64 | has 'triggers' => ( |
28bd628e |
65 | traits => ['Hash'], |
a939ce63 |
66 | is => 'rw', |
67 | isa => HashRef[Trigger], |
28bd628e |
68 | handles => { |
69 | exists_trigger => 'exists', |
70 | trigger_ids => 'keys', |
71 | get_triggers => 'values', |
72 | get_trigger => 'get', |
73 | add_trigger => 'set', |
e09616ec |
74 | remove_trigger => 'delete', |
a939ce63 |
75 | }, |
76 | default => sub { my %hash = (); tie %hash, 'Tie::IxHash'; return \%hash }, |
4f4fd192 |
77 | ); |
b5ce8643 |
78 | |
bebe11d5 |
79 | around add_table(Table $table does coerce) { |
a3b033db |
80 | die "Can't use table name " . $table->name if $self->exists_table($table->name) || $table->name eq ''; |
e1bef8b9 |
81 | $table->schema($self); |
a3b033db |
82 | $self->$orig($table->name, $table); |
83 | } |
e1bef8b9 |
84 | |
e09616ec |
85 | around add_view(View $view does coerce) { |
86 | die "Can't use view name " . $view->name if $self->exists_view($view->name) || $view->name eq ''; |
87 | $view->schema($self); |
88 | $self->$orig($view->name, $view) |
89 | } |
90 | |
bebe11d5 |
91 | around add_procedure(Procedure $procedure does coerce) { $self->$orig($procedure->name, $procedure) } |
7b352f49 |
92 | around add_trigger(Trigger $trigger does coerce) { |
93 | $trigger->schema($self); |
94 | $self->$orig($trigger->name, $trigger);; |
95 | } |
51700db2 |
96 | |
a3b033db |
97 | method is_valid { return $self->get_tables ? 1 : undef } |
98 | |
bebe11d5 |
99 | around remove_table(Table|Str $table, Int :$cascade = 0) { |
100 | my $name = is_Table($table) ? $table->name : $table; |
101 | die "Can't drop non-existant table " . $name unless $self->exists_table($name); |
102 | $self->$orig($name); |
a3b033db |
103 | } |
b750d2f1 |
104 | |
e09616ec |
105 | around remove_view(View|Str $view) { |
106 | my $name = is_View($view) ? $view->name : $view; |
107 | die "Can't drop non-existant view " . $name unless $self->exists_view($name); |
108 | $self->$orig($name); |
109 | } |
110 | |
b750d2f1 |
111 | method order { } |
112 | method perform_action_when { } |
113 | method database_events { } |
114 | method fields { } |
115 | method on_table { } |
116 | method action { } |
4f4fd192 |
117 | } |