[Dbix-class] DBIC Schema Loader - different schema/result base classes

Jess Robinson castaway at desert-island.me.uk
Sun Mar 30 18:13:14 BST 2008


I found myself needing to set different Schema + result class base 
classes, any opinions? (See patch).


Jess


-------------- next part --------------
diff -r -u ./lib/DBIx/Class/Schema/Loader/Base.pm /usr/src/perl/dbix-class/bast/trunk/DBIx-Class-Schema-Loader/lib/DBIx/Class/Schema/Loader/Base.pm
--- ./lib/DBIx/Class/Schema/Loader/Base.pm	2008-03-30 18:00:47.000000000 +0100
+++ /usr/src/perl/dbix-class/bast/trunk/DBIx-Class-Schema-Loader/lib/DBIx/Class/Schema/Loader/Base.pm	2008-03-30 16:58:58.000000000 +0100
@@ -19,11 +19,13 @@
 __PACKAGE__->mk_ro_accessors(qw/
                                 schema
                                 schema_class
+                                schema_base_class
 
                                 exclude
                                 constraint
                                 additional_classes
                                 additional_base_classes
+                                dbic_base_class
                                 left_base_classes
                                 components
                                 resultset_components
@@ -445,6 +447,7 @@
     my $target_dir = $self->dump_directory;
 
     my $schema_class = $self->schema_class;
+    my $schema_base  = $self->schema_base_class || 'DBIx::Class::Schema';
 
     croak "Must specify target directory for dumping!" if ! $target_dir;
 
@@ -452,8 +455,8 @@
 
     my $schema_text =
           qq|package $schema_class;\n\n|
-        . qq|use strict;\nuse warnings;\n\n|
-        . qq|use base 'DBIx::Class::Schema';\n\n|;
+          . qq|use strict;\nuse warnings;\n\n|
+          . qq|use base '$schema_base';\n\n|;
 
     
     if ($self->use_namespaces) {
@@ -479,8 +482,8 @@
     foreach my $src_class (sort keys %{$self->{_dump_storage}}) {
         my $src_text = 
               qq|package $src_class;\n\n|
-            . qq|use strict;\nuse warnings;\n\n|
-            . qq|use base 'DBIx::Class';\n\n|;
+              . qq|use strict;\nuse warnings;\n\n|;
+#            . qq|use base '$dbic_base';\n\n|;
 
         $self->_write_classfile($src_class, $src_text);
     }
@@ -598,6 +601,7 @@
 
     my $schema       = $self->schema;
     my $schema_class = $self->schema_class;
+    my $dbic_base    = $self->dbic_base_class   || 'DBIx::Class';
 
     my $table_moniker = $self->_table2moniker($table);
     my @result_namespace = ($schema_class);
@@ -623,6 +627,7 @@
     { no strict 'refs'; @{"${table_class}::ISA"} = qw/DBIx::Class/ }
 
     $self->_use   ($table_class, @{$self->additional_classes});
+    $self->_inject($table_class, $dbic_base);
     $self->_inject($table_class, @{$self->additional_base_classes});
 
     $self->_dbic_stmt($table_class, 'load_components', @{$self->components}, 'Core');
diff -r -u ./lib/DBIx/Class/Schema/Loader.pm /usr/src/perl/dbix-class/bast/trunk/DBIx-Class-Schema-Loader/lib/DBIx/Class/Schema/Loader.pm
--- ./lib/DBIx/Class/Schema/Loader.pm	2008-03-30 18:00:47.000000000 +0100
+++ /usr/src/perl/dbix-class/bast/trunk/DBIx-Class-Schema-Loader/lib/DBIx/Class/Schema/Loader.pm	2008-03-25 23:53:19.000000000 +0000
@@ -106,7 +106,9 @@
     $args->{dump_directory} ||= $self->dump_to_dir;
 
     # XXX this only works for relative storage_type, like ::DBI ...
-    my $impl = "DBIx::Class::Schema::Loader" . $self->storage_type;
+#    my $impl = "DBIx::Class::Schema::Loader" . $self->storage_type;
+    my $impl = $args->{loader_class}
+      || "DBIx::Class::Schema::Loader" . $self->storage_type;
     $impl->require or
       croak qq/Could not load storage_type loader "$impl": / .
             qq/"$UNIVERSAL::require::ERROR"/;


More information about the DBIx-Class mailing list