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); |
a3b033db |
4 | use MooseX::MultiMethods; |
a499b4bd |
5 | use Tie::IxHash; |
6 | use SQL::Translator::Types qw(Procedure Table Trigger View ProcedureHash TableHash TriggerHash ViewHash IxHash); |
a939ce63 |
7 | |
4f4fd192 |
8 | has 'name' => ( |
9 | is => 'rw', |
10 | isa => Maybe[Str], |
11 | required => 1, |
12 | default => '' |
13 | ); |
57544e0b |
14 | |
15 | has 'database' => ( |
16 | is => 'rw', |
17 | isa => Maybe[Str], |
18 | ); |
4f4fd192 |
19 | |
20 | has 'tables' => ( |
4f4fd192 |
21 | is => 'rw', |
00e28941 |
22 | isa => IxHash, #TableHash, |
28bd628e |
23 | handles => { |
00e28941 |
24 | exists_table => 'EXISTS', |
25 | table_ids => 'Keys', |
26 | get_tables => 'Values', |
27 | get_table => 'FETCH', |
28 | add_table => 'STORE', |
29 | remove_table => 'DELETE', |
4f4fd192 |
30 | }, |
00e28941 |
31 | coerce => 1, |
32 | default => sub { Tie::IxHash->new() } |
4f4fd192 |
33 | ); |
34 | |
35 | has 'views' => ( |
4f4fd192 |
36 | is => 'rw', |
00e28941 |
37 | isa => IxHash, #ViewHash, |
28bd628e |
38 | handles => { |
00e28941 |
39 | exists_view => 'EXISTS', |
40 | view_ids => 'Keys', |
41 | get_views => 'Values', |
42 | get_view => 'FETCH', |
43 | add_view => 'STORE', |
44 | remove_view => 'DELETE', |
4f4fd192 |
45 | }, |
00e28941 |
46 | coerce => 1, |
47 | default => sub { Tie::IxHash->new() } |
4f4fd192 |
48 | ); |
49 | |
50 | has 'procedures' => ( |
4f4fd192 |
51 | is => 'rw', |
00e28941 |
52 | isa => IxHash, #ProcedureHash, |
28bd628e |
53 | handles => { |
00e28941 |
54 | exists_procedure => 'EXISTS', |
55 | procedure_ids => 'Keys', |
56 | get_procedures => 'Values', |
57 | get_procedure => 'FETCH', |
58 | add_procedure => 'STORE', |
59 | remove_procedure => 'DELETE', |
4f4fd192 |
60 | }, |
00e28941 |
61 | coerce => 1, |
62 | default => sub { Tie::IxHash->new() } |
a939ce63 |
63 | ); |
64 | |
65 | has 'triggers' => ( |
a939ce63 |
66 | is => 'rw', |
00e28941 |
67 | isa => IxHash, #TriggerHash, |
28bd628e |
68 | handles => { |
00e28941 |
69 | exists_trigger => 'EXISTS', |
70 | trigger_ids => 'Keys', |
71 | get_triggers => 'Values', |
72 | get_trigger => 'FETCH', |
73 | add_trigger => 'STORE', |
74 | remove_trigger => 'DELETE', |
a939ce63 |
75 | }, |
00e28941 |
76 | coerce => 1, |
77 | default => sub { Tie::IxHash->new() } |
4f4fd192 |
78 | ); |
b5ce8643 |
79 | |
bebe11d5 |
80 | around add_table(Table $table does coerce) { |
a3b033db |
81 | die "Can't use table name " . $table->name if $self->exists_table($table->name) || $table->name eq ''; |
e1bef8b9 |
82 | $table->schema($self); |
a3b033db |
83 | $self->$orig($table->name, $table); |
00e28941 |
84 | return $self->get_table($table->name); |
a3b033db |
85 | } |
e1bef8b9 |
86 | |
e09616ec |
87 | around add_view(View $view does coerce) { |
88 | die "Can't use view name " . $view->name if $self->exists_view($view->name) || $view->name eq ''; |
89 | $view->schema($self); |
00e28941 |
90 | $self->$orig($view->name, $view); |
91 | return $self->get_view($view->name); |
e09616ec |
92 | } |
93 | |
f228f068 |
94 | around add_procedure(Procedure $procedure does coerce) { |
95 | $procedure->schema($self); |
00e28941 |
96 | $self->$orig($procedure->name, $procedure); |
97 | return $self->get_procedure($procedure->name); |
f228f068 |
98 | } |
99 | |
7b352f49 |
100 | around add_trigger(Trigger $trigger does coerce) { |
101 | $trigger->schema($self); |
00e28941 |
102 | $self->$orig($trigger->name, $trigger); |
103 | return $self->get_trigger($trigger->name); |
7b352f49 |
104 | } |
51700db2 |
105 | |
a3b033db |
106 | method is_valid { return $self->get_tables ? 1 : undef } |
107 | |
bebe11d5 |
108 | around remove_table(Table|Str $table, Int :$cascade = 0) { |
109 | my $name = is_Table($table) ? $table->name : $table; |
110 | die "Can't drop non-existant table " . $name unless $self->exists_table($name); |
111 | $self->$orig($name); |
a3b033db |
112 | } |
b750d2f1 |
113 | |
e09616ec |
114 | around remove_view(View|Str $view) { |
115 | my $name = is_View($view) ? $view->name : $view; |
116 | die "Can't drop non-existant view " . $name unless $self->exists_view($name); |
117 | $self->$orig($name); |
118 | } |
119 | |
fd2708f4 |
120 | around remove_trigger(Trigger|Str $trigger) { |
121 | my $name = is_Trigger($trigger) ? $trigger->name : $trigger; |
c886d302 |
122 | #### die "Can't drop non-existant trigger " . $name unless $self->exists_trigger($name); |
123 | $self->$orig($name); |
124 | } |
125 | |
126 | around remove_procedure(Procedure|Str $procedure) { |
127 | my $name = is_Procedure($procedure) ? $procedure->name : $procedure; |
fd2708f4 |
128 | $self->$orig($name); |
129 | } |
130 | |
b750d2f1 |
131 | method order { } |
132 | method perform_action_when { } |
133 | method database_events { } |
134 | method fields { } |
135 | method on_table { } |
136 | method action { } |
4f4fd192 |
137 | } |