Commit | Line | Data |
4f4fd192 |
1 | use MooseX::Declare; |
072eb218 |
2 | class SQL::Translator::Object::Column extends SQL::Translator::Object is dirty { |
1ddd6d2a |
3 | use MooseX::Types::Moose qw(Bool Int Maybe ScalarRef Str); |
f49a2a49 |
4 | use MooseX::MultiMethods; |
ada068ed |
5 | use SQL::Translator::Types qw(Bit ColumnSize Constraint Table Trigger); |
072eb218 |
6 | clean; |
7 | |
8 | use overload |
9 | '""' => sub { shift->name }, |
10 | 'bool' => sub { $_[0]->name || $_[0] }, |
11 | fallback => 1, |
12 | ; |
f49a2a49 |
13 | |
14 | has 'table' => ( |
15 | is => 'rw', |
16 | isa => Table, |
f49a2a49 |
17 | weak_ref => 1, |
18 | ); |
4f4fd192 |
19 | |
20 | has 'name' => ( |
21 | is => 'rw', |
22 | isa => Str, |
072eb218 |
23 | required => 1, |
24 | trigger => sub { die "Cannot use '' as a column name" if $_[1] eq '' } |
4f4fd192 |
25 | ); |
26 | |
27 | has 'data_type' => ( |
28 | is => 'rw', |
81429cb9 |
29 | isa => Str, |
072eb218 |
30 | required => 1, |
31 | default => '', |
81429cb9 |
32 | ); |
33 | |
34 | has 'sql_data_type' => ( |
35 | is => 'rw', |
4f4fd192 |
36 | isa => Int, |
072eb218 |
37 | required => 1, |
38 | default => 0 |
4f4fd192 |
39 | ); |
40 | |
41 | has 'size' => ( |
42 | is => 'rw', |
70ada8ac |
43 | isa => ColumnSize, |
44 | coerce => 1, |
45 | auto_deref => 1, |
2cb42d47 |
46 | default => sub { [ 0 ] }, |
4f4fd192 |
47 | ); |
48 | |
49 | has 'is_nullable' => ( |
50 | is => 'rw', |
2cb42d47 |
51 | isa => Bit, |
4f4fd192 |
52 | required => 1, |
53 | default => 1 |
54 | ); |
55 | |
4f4fd192 |
56 | has 'default_value' => ( |
57 | is => 'rw', |
1ddd6d2a |
58 | isa => Maybe[ScalarRef|Str], |
4f4fd192 |
59 | ); |
0874db2d |
60 | |
81429cb9 |
61 | has 'is_auto_increment' => ( |
62 | is => 'rw', |
ada068ed |
63 | isa => Bit, |
81429cb9 |
64 | required => 1, |
ada068ed |
65 | coerce => 1, |
81429cb9 |
66 | default => 0 |
67 | ); |
68 | |
0874db2d |
69 | has 'is_primary_key' => ( |
70 | is => 'rw', |
71 | isa => Bool, |
72 | default => 0 |
73 | ); |
70ada8ac |
74 | |
75 | has 'is_foreign_key' => ( |
76 | is => 'rw', |
77 | isa => Bool, |
78 | default => 0 |
79 | ); |
80 | |
81 | has 'foreign_key_reference' => ( |
82 | is => 'rw', |
83 | isa => Constraint, |
84 | ); |
4f4fd192 |
85 | |
86 | has 'trigger' => ( |
87 | is => 'rw', |
88 | isa => Trigger, |
89 | ); |
0874db2d |
90 | |
70ada8ac |
91 | around size(@args) { |
92 | $self->$orig(@args) if @args; |
93 | my @sizes = $self->$orig; |
94 | return wantarray ? @sizes |
95 | : join ',', @sizes; |
96 | } |
b750d2f1 |
97 | |
8bd81980 |
98 | method full_name { $self->table->name . '.' . $self->name } |
99 | method schema { $self->table->schema } |
100 | |
b750d2f1 |
101 | method order { } |
102 | method is_unique { } |
8bd81980 |
103 | |
104 | before name($name?) { die "Can't use column name $name" if $name && $self->table->exists_column($name) && $name ne $self->name; } |
4f4fd192 |
105 | } |