407
|
1 package IMPL::SQL::Schema::Type;
|
|
2 use strict;
|
|
3 use warnings;
|
|
4
|
|
5 use IMPL::lang qw( :compare );
|
411
|
6 use IMPL::Const qw(:prop :access);
|
407
|
7 use IMPL::declare{
|
|
8 base => [
|
|
9 'IMPL::Object' => undef,
|
|
10 ],
|
|
11 props => [
|
|
12 name => PROP_RO | PROP_DIRECT,
|
|
13 maxLength => PROP_RO | PROP_DIRECT,
|
|
14 scale => PROP_RO | PROP_DIRECT,
|
|
15 unsigned => PROP_RO | PROP_DIRECT,
|
|
16 zerofill => PROP_RO | PROP_DIRECT,
|
|
17 tag => PROP_RO | PROP_DIRECT
|
|
18 ]
|
|
19 };
|
|
20
|
|
21 sub CTOR {
|
|
22 my $this = shift;
|
|
23
|
411
|
24 my $fields = ref($_[0]) eq 'HASH' ? $_[0] : { @_ };
|
|
25
|
|
26 while(my ($k,$v) = each %$fields) {
|
|
27 $this->$k($v);
|
|
28 }
|
|
29
|
407
|
30 $this->{$scale} = 0 if not $this->{$scale};
|
|
31 }
|
|
32
|
|
33 sub SameValue {
|
|
34 my ($this,$other) = @_;
|
|
35
|
|
36 return (
|
|
37 $this->{$name} eq $other->name
|
|
38 and equals($this->{$maxLength},$other->{$maxLength})
|
|
39 and equals($this->{$scale},$other->{$scale})
|
|
40 );
|
|
41 }
|
|
42
|
|
43 1;
|
|
44
|
|
45 __END__
|
|
46
|
|
47 =pod
|
|
48
|
|
49 =head1 NAME
|
|
50
|
|
51 C<IMPL::SQL::Schema::Type> Описывает SQL типы данных
|
|
52
|
|
53 =head1 SYNOPSIS
|
|
54
|
|
55 =begin code
|
|
56
|
|
57 use IMPL::SQL::Schema::Type;
|
|
58
|
|
59 my $varchar_t = new IMPL::SQL::Schema::Type( name => 'varchar', maxLength => 255 );
|
|
60
|
|
61 my $real_t = new IMPL::SQL::Schema::Type( name => 'float', maxLength=> 10, scale => 4); # mysql: float(10,4)
|
|
62
|
|
63 =end
|
|
64
|
|
65 Данный класс используется для стандатрного описания SQL типов данных. В зависимости
|
|
66 от движка БД эти объекты могут быть представлены различными строковыми представлениями.
|
|
67
|
|
68 =head1 MEMBERS
|
|
69
|
|
70 =over
|
|
71
|
|
72 =item C<CTOR(%props)>
|
|
73
|
|
74 Конструктор, заполняет объект значениями которые были переданы в конструкторе.
|
|
75
|
|
76 =item C<[get]name>
|
|
77
|
|
78 Имя типа. Обязательно.
|
|
79
|
|
80 =item C<[get]maxLength>
|
|
81
|
|
82 Максимальная длина, используется только для типов, имеющих длину (либо переменную,
|
|
83 либо постоянную).
|
|
84
|
|
85 =item C<[get]scale>
|
|
86
|
|
87 Точность, количество знаков после запятой. Используется вместе с C<maxLength>.
|
|
88
|
|
89 =item C<[get]unsigned>
|
|
90
|
|
91 Используется с числовыми данными, обозначает беззнаковые типы.
|
|
92
|
|
93 =item C<[get]zerofill>
|
|
94
|
|
95 Нестандартный атрибут дополняющий числа лидирующими нулями до C<maxLength>.
|
|
96
|
|
97 =item C<[get]tag>
|
|
98
|
|
99 Хеш с дополнительными опциями.
|
|
100
|
|
101 =back
|
|
102
|
|
103 =cut
|