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
CommitLineData
4f4fd192 1use MooseX::Declare;
072eb218 2class 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}