view Lib/Schema/DataSource/TypeMapping.pm @ 27:b544a772b654

ORM in progress
author Sergey
date Fri, 16 Oct 2009 16:37:53 +0400
parents 03e58a454b20
children 16ada169ca75
line wrap: on
line source

use strict;
package Schema::DataSource::TypeMapping;
use Common;
our @ISA = qw(Object);

BEGIN {
    DeclareProperty Mappings => ACCESS_NONE;
    DeclareProperty DBIdentifierType => ACCESS_READ;
    DeclareProperty DBValueType => ACCESS_READ;
}

sub MapType {
    my ($this,$Type) = @_;
    
    if (my $mapped = $this->{$Mappings}->{$Type->Name->Canonical}) {
        return $mapped;
    } elsif ($Type->Attributes and $Type->GetAttribute('ValueType')) {
        return $this->{$DBValueType};
    } else {
        return $this->{$DBIdentifierType};
    }
}

package Schema::DataSource::TypeMapping::Std;
use Schema::DB::Type;
our @ISA = qw(Schema::DataSource::TypeMapping);

sub CTOR {
    my ($this) = @_;
    $this->SUPER::CTOR(
        Mappings => {
            Identifier => new Schema::DB::Type(Name => 'Integer'),
            String => new Schema::DB::Type(Name => 'varchar', MaxLength => 255),
            Integer => new Schema::DB::Type(Name => 'Integer'),
            Float => new Schema::DB::Type(Name => 'Real'),
            DateTime => new Schema::DB::Type(Name => 'DateTime'),
            Bool => new Schema::DB::Type(Name => 'Tinyint'),
            Blob => new Schema::DB::Type(Name => 'Blob'),
            Text => new Schema::DB::Type(Name => 'Text')
        },
        DBIdentifierType => new Schema::DB::Type(Name => 'Integer'),
        DBValueType => new Schema::DB::Type(Name => 'varchar', MaxLength => 255)
    );
}

1;