fix for storing comments using Moose::Autobox and ->flatten
[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',
4f4fd192 39 );
526e74d1 40
b750d2f1 41 has 'deferrable' => (
42 is => 'rw',
43 isa => Bool,
075b652f 44 default => 1
b750d2f1 45 );
46
47 has 'expression' => (
48 is => 'rw',
49 isa => Str,
50 );
51
d63c8da0 52 has 'reference_table' => (
53 isa => Maybe[Str],
54 is => 'rw',
55 );
56
57 has 'reference_columns' => (
106f5e00 58 isa => ArrayRef,
59 traits => ['Array'],
60 handles => {
61 reference_columns => 'elements',
62 },
63 default => sub { [] },
cb13230a 64 );
65
66 has 'match_type' => (
3c557f72 67 isa => MatchType,
d191bceb 68 is => 'rw',
3c557f72 69 coerce => 1,
d191bceb 70 lazy => 1,
71 default => ''
d63c8da0 72 );
73
aa20eb7f 74 around add_column(Column $column) {
75 if ($self->has_type && $self->type eq 'PRIMARY KEY') {
76 $column->is_primary_key(1);
77 }
78 $self->$orig($column->name, $column)
79 }
80
81 method is_valid { return $self->has_type && scalar $self->column_ids ? 1 : undef }
4f4fd192 82}