added some attributes
[dbsrgits/SQL-Translator-2.0-ish.git] / lib / SQL / Translator / Object / Constraint.pm
CommitLineData
4f4fd192 1use MooseX::Declare;
ebf2721d 2class SQL::Translator::Object::Constraint extends SQL::Translator::Object {
f49a2a49 3 use MooseX::Types::Moose qw(ArrayRef Bool HashRef Maybe Str Undef);
035b8503 4 use MooseX::MultiMethods;
3c557f72 5 use SQL::Translator::Types qw(Column MatchType Table);
f49a2a49 6
7 has 'table' => (
8 is => 'rw',
9 isa => Table,
f49a2a49 10 weak_ref => 1,
11 );
4f4fd192 12
13 has 'name' => (
14 is => 'rw',
70ab6d8c 15 isa => Str,
16 default => '',
4f4fd192 17 required => 1
18 );
19
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',
452c34e6 30 clear_columns => 'clear',
4f4fd192 31 },
32 default => sub { my %hash = (); tie %hash, 'Tie::IxHash'; return \%hash },
33 );
34
35 has 'type' => (
36 is => 'rw',
37 isa => Str,
aa20eb7f 38 predicate => 'has_type',
ad203890 39 required => 1,
4f4fd192 40 );
526e74d1 41
b750d2f1 42 has 'deferrable' => (
43 is => 'rw',
44 isa => Bool,
075b652f 45 default => 1
b750d2f1 46 );
47
48 has 'expression' => (
49 is => 'rw',
50 isa => Str,
51 );
52
d63c8da0 53 has 'reference_table' => (
54 isa => Maybe[Str],
55 is => 'rw',
56 );
57
58 has 'reference_columns' => (
106f5e00 59 isa => ArrayRef,
60 traits => ['Array'],
61 handles => {
62 reference_columns => 'elements',
891ce668 63 add_reference_column => 'push',
106f5e00 64 },
65 default => sub { [] },
ad203890 66 required => 1,
cb13230a 67 );
68
69 has 'match_type' => (
3c557f72 70 isa => MatchType,
d191bceb 71 is => 'rw',
3c557f72 72 coerce => 1,
d191bceb 73 lazy => 1,
74 default => ''
d63c8da0 75 );
76
4d662d4c 77 has 'on_delete' => ( is => 'rw', required => 0);
78 has 'on_update' => ( is => 'rw', required => 0);
79
aa20eb7f 80 around add_column(Column $column) {
81 if ($self->has_type && $self->type eq 'PRIMARY KEY') {
82 $column->is_primary_key(1);
83 }
84 $self->$orig($column->name, $column)
85 }
86
87 method is_valid { return $self->has_type && scalar $self->column_ids ? 1 : undef }
4f4fd192 88}