DBIx::Class::Schema::Loader::Oracle ���ޤ���
��DBIx::Class::Loader::Oracle ���ޤ�����¿ʬ������ư���Ƥ롦�������פǽޤ����������μ�ή���� DBIx::Class::Loader �ǤϤʤ��� DBIx::Class::Schema::Loader ��Ȥ��餷����
�äƤ��Ȥǡ�DBIx::Class::Loader::Oracle ��¾�� DBIx::Class::Schema::Loader::Oracle ����ޤ������빽����κ�������㤦�ΤǶ�ϫ���ޤ��������ư���ǧ�ѤߤǤ�����_load_relationships ����λ�ޤꤷ�Ƥʤ��Τǡ������� version 0.01 �äƴ�����
����������ɤϤ����顡����DBIx-Class-Schema-Loader-Oracle-0.01.tar.gz
�ä��Ѥ�äơ����äƸ�������äѤꥪ���ץ����������κ��äƥǡ����١����� MySQL or PostgreSQL ���Ȥ����礬¿���櫓�ǡ���ȯ����� Perl �⥸�塼����äѤꤽ���դ�¿��������LL �� Oracle �äƤ��ʤ�ޥ��ʡ��ʤ���ʤ����Ȼפ��������κ���DBIx �� CDBI �ޤ��� Oracle ��Ϣ����ü�˾��ʤ��Τ����ξڵ�Oracle �� Geek ���ܤ�����Ƥ�館��褦��̵���С������ Oracle ���ä�����㤯���� MySQL �¤˼�ͳ�˻Ȥ���褦�ˤ����ۤ��������Τˤʤ�������
����ˤ��Ƥ⡢LL �ȤäƤ�Ȥ�äѥǡ����١����� MySQL ���������ʤ����Ȼפä��ꡣ���������ݾڤ�Ķ���ͤ����ܶȤˤ����Ƥ� Oracle ��Ȥ��Τ��٥����ʰƷ�ʤ櫓�Ǥ������������ʢ��ʤ�ƾ����Ǥ� Java ���¤������ʤ��ä��ꡦ������
���ơ��Ǹ���ä��ᤷ�� DBIx::Class::Schema::Loader::Oracle �Υ�����������ʴ�����
package DBIx::Class::Schema::Loader::DBI::Oracle; use strict; use warnings; use base 'DBIx::Class::Schema::Loader::DBI'; use Class::C3; sub _table_columns { my ($self, $table) = @_; my $dbh = $self->schema->storage->dbh; my $sth = $dbh->prepare("SELECT * FROM $table WHERE 1=0"); $sth->execute; return \@{$sth->{NAME_lc}}; } sub _tables_list { my $self = shift; my $dbh = $self->schema->storage->dbh; my @tables; for my $table ( $dbh->tables(undef, $self->db_schema, '%', 'TABLE') ) { #catalog, schema, table, type my $quoter = $dbh->get_info(29); $table =~ s/$quoter//g; # remove "user." (schema) prefixes $table =~ s/\w+\.//; next if $table eq 'PLAN_TABLE'; $table = lc $table; push @tables, $1 if $table =~ /\A(\w+)\z/; } return @tables; } sub _table_uniq_info { my ($self, $table) = @_; my @uniqs; my $dbh = $self->schema->storage->dbh; my $sth = $dbh->prepare_cached( qq{SELECT constraint_name, ucc.column_name FROM user_constraints JOIN user_cons_columns ucc USING (constraint_name) WHERE ucc.table_name=? AND constraint_type='U'} ,{}, 1); $sth->execute(uc $table); my %constr_names; while(my $constr = $sth->fetchrow_arrayref) { my $constr_name = $constr->[0]; my $constr_def = $constr->[1]; $constr_name =~ s/\Q$self->{_quoter}\E//; $constr_def =~ s/\Q$self->{_quoter}\E//; push @{$constr_names{$constr_name}}, lc $constr_def; } map { push(@uniqs, [ lc $_ => $constr_names{$_} ]); } keys %constr_names; return \@uniqs; } sub _table_pk_info { my ( $self, $table ) = @_; return $self->SUPER::_table_pk_info(uc $table); } sub _table_fk_info { my ($self, $table) = @_; my $dbh = $self->schema->storage->dbh; my $sth = $dbh->foreign_key_info( '', '', '', '', $self->db_schema, uc $table ); return [] if !$sth; my %rels; my $i = 1; # for unnamed rels, which hopefully have only 1 column ... while(my $raw_rel = $sth->fetchrow_arrayref) { my $uk_tbl = lc $raw_rel->[2]; my $uk_col = lc $raw_rel->[3]; my $fk_col = lc $raw_rel->[7]; my $relid = ($raw_rel->[11] || ( "__dcsld__" . $i++ )); $uk_tbl =~ s/\Q$self->{_quoter}\E//g; $uk_col =~ s/\Q$self->{_quoter}\E//g; $fk_col =~ s/\Q$self->{_quoter}\E//g; $relid =~ s/\Q$self->{_quoter}\E//g; $rels{$relid}->{tbl} = $uk_tbl; $rels{$relid}->{cols}->{$uk_col} = $fk_col; } my @rels; foreach my $relid (keys %rels) { push(@rels, { remote_columns => [ keys %{$rels{$relid}->{cols}} ], local_columns => [ values %{$rels{$relid}->{cols}} ], remote_table => $rels{$relid}->{tbl}, }); } return \@rels; } 1;
�Ǹ��ڤ��뤿��Υ�����ץȤϤ���ʴ����Ǥ���¿ʬ������ư���Ƥ���Ȼפ��ޤ���
package Test::SchemaLoader; use strict; use warnings; use base 'DBIx::Class::Schema::Loader'; __PACKAGE__->loader_options( db_schema => 'TEST', relationships => 1, debug => 1, ); __PACKAGE__->connection( "dbi:Oracle:testdb", "test", "test123" ); use strict; use warnings; use Data::Dumper; my $schema = "Test::SchemaLoader"; my $loader = $schema->loader; my @tables = $loader->tables; print Dumper(\@tables);
�����Ȥ䥷�����ꤤ���ޤ���
tamashiro
drk����
�����Ȥ��꤬�Ȥ��������ޤ���
> �Զ�礢�ä��鶵����ĺ����й����Ǥ���
�����Ǥ��͡�������δĶ��˰�¸�������꤫�⤷��ޤ����ʲ��Τ褦�ˡ������δؿ������ƻ��Ѥ��Ƥ��ޤ���
�������ΤϾ������ʤΤǡ�����Ū�˲��������ä������ɤ��Ф��Ƥʤ��ΤǤ�������
# �����δؿ����¤����
{
use DBIx::Class::Schema::Loader::DBI::Oracle;
package DBIx::Class::Schema::Loader::DBI::Oracle;
# ���ꥸ�ʥ�Ǥϥơ��֥������������ʤ�����
undef &_tables_list;
*_tables_list = sub {
my $self = shift;
my $dbh = $self->schema->storage->dbh;
@{$dbh->selectcol_arrayref('SELECT table_name FROM user_tables')};
};
# ���ꥸ�ʥ�Ǥϥץ饤�ޥꥭ��������������ʤ�����
undef &_table_pk_info;
*_table_pk_info = sub {
my $self = shift;
my $table = shift;
my $dbh = $self->schema->storage->dbh;
$dbh->selectcol_arrayref(q{
SELECT LOWER(column_name)
FROM user_ind_columns
WHERE index_name IN (
SELECT constraint_name
FROM user_constraints
WHERE
constraint_type=? AND
table_name=?
)
}, undef, 'P', uc $table);
};
}
���ȡ��⤦1�����⤷��¸�ΤǤ���ж����Ƥ��������ʤ��Ǥ��礦����
DBIx::Class::Schema::Loader��many_to_many�Ϻ�������ʤ��Ǥ��礦����
�ޥå��ơ��֥��ʣ������ΤǤ������ɤ��has_mamy������������ޤ���
���Ȥ��������褯�ͤ���ȡ���Foreign Key��ʣ�����뤫�顢����ϥޥå��ơ��֥���פȤϸ����ʤ����顢Loader����ʬ��Ƚ�Ǥ�����Ͻ���ʤ��Ǥ��͡���
�Ǥ⡢���Υơ��֥뤬
- �����2�ĤΤߤǡ�
- �ɤ����Foreign Key�ǡ�
- ������ʣ���ץ饤�ޥꥭ���ˤʤäƤ��뤫����ˡ���������С�
����ϴְ㤤�ʤ����ޥå��ơ��֥�Ǥ���͡�
���ξ��ϡ������many_to_many��������Ƥ������ɤ���Ǥ����ɤ͡����á��������drk����˸��äƤ���ΤǤϤʤ��Τǡ���
drk
tamashiro�����դ��ٶ��ˤʤ�ޤ������������������ư��ڤޤ��äƤ��ʤ��ΤǥХ����ʤ������ۤ��ä��ꤷ�ޤ��������ʴ�
�Զ�礢�ä��鶵����ĺ����й����Ǥ����ɤ������������ꤤ�פ��ޤ���
tamashiro
��������Ĵ�٤Ƥߤ��Ȥ�����"people"���꤬��褷�ޤ�����
���ä������������Ȥ碌�Ƥ����������Τˤ��ߤޤ���
make_schema_at�ؿ��ˡ�"inflect_plural"��Ǥ�դδؿ�����ꤹ��������褿�Τǡ�������
inflect_plural => sub { return shift() . 's' },
�Ȥ�������н����ޤ�����
tamashiro
���Ĥ�ͭ�פʾ�����꤬�Ȥ��������ޤ���
���ޤ���DBIx::Class + Oracle��ĩ�路�Ƥ���Ȥ����ʤΤǡ����˽����äƤ���ޤ���
���ơ�DBIx::Class::Schema::Loader + DBIx-Class-Schema-Loader-DBI-Oracle-0.01�ǥ������ޤ�������Ƥ���ΤǤ�����"person"��"people"�ˤʤäƤ��ޤ��Τ�"persons"�Ȥ��������ȹͤ��Ƥ��ޤ����⤷��ˡ��¸�ΤǤ���ж����Ƥ��������ޤ���Ǥ��礦����
�㤨��"company"�ơ��֥�γ����ơ��֥��"person"�������硢company��has_many�˻��ꤵ��륢������̾��"people"�ˤʤäƤ��ޤ��ޤ����ޤ���¾�ˤ�ʤ�����ɤ��㤬�⤫�Ӥޤ�����"hotchkiss"����"s"�ǽ����ơ��֥�ϥ�������̾��"s"���դ��ޤ���
�����餯Lingua::EN::Inflect�αƶ����Ȼפ��ΤǤ��������ۤ�ñ���������"s"���դ���������Ȥ������ΤǤ��������С�ɸ��Ū�ʡ���ˡ�Ǥ����Ԥ����Ͻ���ʤ��Ǥ��礦����