2 class SQL::Translator::Object::Schema extends SQL::Translator::Object {
3 use MooseX::Types::Moose qw(HashRef Maybe Str);
4 use SQL::Translator::Types qw(Procedure Table Trigger View);
5 use MooseX::MultiMethods;
22 isa => HashRef[Table],
24 exists_table => 'exists',
26 get_tables => 'values',
29 remove_table => 'delete',
31 default => sub { my %hash = (); tie %hash, 'Tie::IxHash'; return \%hash },
39 exists_view => 'exists',
41 get_views => 'values',
45 default => sub { my %hash = (); tie %hash, 'Tie::IxHash'; return \%hash },
51 isa => HashRef[Procedure],
53 exists_procedure => 'exists',
54 procedure_ids => 'keys',
55 get_procedures => 'values',
56 get_procedure => 'get',
57 add_procedure => 'set',
59 default => sub { my %hash = (); tie %hash, 'Tie::IxHash'; return \%hash },
65 isa => HashRef[Trigger],
67 exists_trigger => 'exists',
68 trigger_ids => 'keys',
69 get_triggers => 'values',
73 default => sub { my %hash = (); tie %hash, 'Tie::IxHash'; return \%hash },
76 around add_table(Table $table) {
77 die "Can't use table name " . $table->name if $self->exists_table($table->name) || $table->name eq '';
78 $table->schema($self);
79 $self->$orig($table->name, $table);
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) }
86 method is_valid { return $self->get_tables ? 1 : undef }
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);
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);
100 method perform_action_when { }
101 method database_events { }