add overload (stringification) to Column, setup some defaults and make some attrs...
[dbsrgits/SQL-Translator-2.0-ish.git] / lib / SQL / Translator / Object / Column.pm
1 use MooseX::Declare;
2 class SQL::Translator::Object::Column extends SQL::Translator::Object is dirty {
3     use MooseX::Types::Moose qw(Bool Int Maybe ScalarRef Str);
4     use MooseX::MultiMethods;
5     use SQL::Translator::Types qw(Bit ColumnSize Constraint Table Trigger);
6     clean;
7
8     use overload
9         '""'     => sub { shift->name },
10         'bool'   => sub { $_[0]->name || $_[0] },
11         fallback => 1,
12     ;
13
14     has 'table' => (
15         is => 'rw',
16         isa => Table,
17         weak_ref => 1,
18     );
19     
20     has 'name' => (
21         is => 'rw',
22         isa => Str,
23         required => 1,
24         trigger => sub { die "Cannot use '' as a column name" if $_[1] eq '' }
25     );
26     
27     has 'data_type' => (
28         is => 'rw',
29         isa => Str,
30         required => 1,
31         default => '',
32     );
33
34     has 'sql_data_type' => (
35         is => 'rw',
36         isa => Int,
37         required => 1,
38         default => 0
39     );
40     
41     has 'size' => (
42         is => 'rw',
43         isa => ColumnSize,
44         coerce => 1,
45         auto_deref => 1,
46         default => sub { [ 0 ] },
47     );
48     
49     has 'is_nullable' => (
50         is => 'rw',
51         isa => Bit,
52         required => 1,
53         default => 1
54     );
55     
56     has 'default_value' => (
57         is => 'rw',
58         isa => Maybe[ScalarRef|Str],
59     );
60
61     has 'is_auto_increment' => (
62         is => 'rw',
63         isa => Bit,
64         required => 1,
65         coerce => 1,
66         default => 0
67     );
68
69     has 'is_primary_key' => (
70         is => 'rw',
71         isa => Bool,
72         default => 0
73     );
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     );
85     
86     has 'trigger' => (
87         is => 'rw',
88         isa => Trigger,
89     );
90
91     around size(@args) {
92         $self->$orig(@args) if @args;
93         my @sizes = $self->$orig;
94         return wantarray ? @sizes
95                          : join ',', @sizes;
96     }
97
98     method full_name { $self->table->name . '.' . $self->name }
99     method schema { $self->table->schema }
100
101     method order { }
102     method is_unique { }
103
104     before name($name?) { die "Can't use column name $name" if $name && $self->table->exists_column($name) && $name ne $self->name; }
105 }