view Lib/IMPL/SQL/Schema/Type.pm @ 165:76515373dac0

Added Class::Template, Rewritten SQL::Schema 'use parent' directive instead of 'use base'
author wizard
date Sat, 23 Apr 2011 23:06:48 +0400
parents 16ada169ca75
children 1f7a6d762394
line wrap: on
line source

use strict;
package IMPL::SQL::Schema::Type;
use parent qw(IMPL::Object IMPL::Object::Autofill);
use IMPL::Class::Property;
use IMPL::Class::Property::Direct;

BEGIN {
    public _direct property name => prop_get;
    public _direct property maxLength => prop_get;
    public _direct property scale => prop_get;
    public _direct property unsigned => prop_get;
    public _direct property zerofill => prop_get;
    public _direct property tag => prop_get;
}

__PACKAGE__->PassThroughArgs;

sub CTOR {
    my $this = shift;
    
    $this->{$scale} = 0 if not $this->{$scale};
}

sub isEquals {
    my ($a,$b) = @_;
    
    if (defined $a and defined $b) {
        return $a == $b;
    } else {
        if (defined $a or defined $b) {
            return 0;
        } else {
            return 1;
        }
    }
}

sub isSame {
    my ($this,$other) = @_;
    
    return ($this->{$name} eq $other->{$name} and isEquals($this->{$maxLength},$other->{$maxLength}) and isEquals($this->{$scale},$other->{$scale}));
}

1;

__END__

=pod

=head1 NAME

C<IMPL::SQL::Schema::Type> Описывает SQL типы данных

=head1 SYNOPSIS

=begin code

use IMPL::SQL::Schema::Type;

my $varchar_t = new IMPL::SQL::Schema::Type( name => 'varchar', maxLength => 255 );

my $real_t = new IMPL::SQL::Schema::Type( name => 'float', maxLength=> 10, scale => 4); # mysql: float(10,4)

=end

Данный класс используется для стандатрного описания SQL типов данных. В зависимости
от движка БД эти объекты могут быть представлены различными строковыми представлениями. 

=head1 MEMBERS

=over

=item C<CTOR(%props)>

Конструктор, заполняет объект значениями которые были переданы в конструкторе.

=item C<[get]name>

Имя типа. Обязательно.

=item C<[get]maxLength>

Максимальная длина, используется только для типов, имеющих длину (либо переменную,
либо постоянную).

=item C<[get]scale>

Точность, количество знаков после запятой. Используется вместе с C<maxLength>.

=item C<[get]unsigned>

Используется с числовыми данными, обозначает беззнаковые типы.

=item C<[get]zerofill>

Нестандартный атрибут дополняющий числа лидирующими нулями до C<maxLength>.

=item C<[get]tag>

Хеш с дополнительными опциями.

=back

=cut