allow setting of fields (columns) like ->fields('foo,bar') or ->fields([ qw/foo bar/ ])
[dbsrgits/SQL-Translator-2.0-ish.git] / lib / SQL / Translator / Object / Index.pm
CommitLineData
4f4fd192 1use MooseX::Declare;
ebf2721d 2class SQL::Translator::Object::Index extends SQL::Translator::Object {
1c607f61 3 use MooseX::Types::Moose qw(HashRef Str);
52137c8d 4 use MooseX::MultiMethods;
f49a2a49 5 use SQL::Translator::Types qw(Column Table);
f49a2a49 6
7 has 'table' => (
8 is => 'rw',
9 isa => Table,
10 required => 1,
11 weak_ref => 1,
12 );
4f4fd192 13
14 has 'name' => (
15 is => 'rw',
16 isa => Str,
17 required => 1
18 );
2850baeb 19
4f4fd192 20 has 'columns' => (
28bd628e 21 traits => ['Hash'],
4f4fd192 22 is => 'rw',
23 isa => HashRef[Column],
28bd628e 24 handles => {
25 exists_column => 'exists',
26 column_ids => 'keys',
27 get_columns => 'values',
28 get_column => 'get',
29 add_column => 'set',
db2e467f 30
31 ## compat
32 get_fields => 'values',
4f4fd192 33 },
34 default => sub { my %hash = (); tie %hash, 'Tie::IxHash'; return \%hash },
35 );
2850baeb 36
4f4fd192 37 has 'type' => (
38 is => 'rw',
39 isa => Str,
7e6d96f8 40 required => 1,
41 default => 'NORMAL',
4f4fd192 42 );
65061e1b 43
51700db2 44 around add_column(Column $column) { $self->$orig($column->name, $column) }
7e6d96f8 45
52137c8d 46 multi method fields(Str $columns) {
47 for (split /,/, $columns) { die "Column $_ does not exist!" unless $self->table->exists_column($_) }
48 $self->add_column($self->table->get_column($_)) for split /,/, $columns;
49 $self->column_ids;
50 }
51
52 multi method fields(@columns) {
53 for (@columns) { die "Column $_ does not exist!" unless $self->table->exists_column($_) }
54 $self->add_column($self->table->get_column($_)) for @columns;
55 $self->column_ids;
56 }
57
58 multi method fields(Any $) { $self->column_ids }
59
7e6d96f8 60 method is_valid { $self->table && scalar $self->get_columns ? 1 : undef }
4f4fd192 61}