DBIC::Schema - remove MX::ClassAttribute
[catagits/Catalyst-Model-DBIC-Schema.git] / lib / Catalyst / Model / DBIC / Schema.pm
index 26485bc..3d709b9 100644 (file)
@@ -14,7 +14,10 @@ use Scalar::Util 'reftype';
 use MooseX::ClassAttribute;
 use Moose::Autobox;
 
-use Catalyst::Model::DBIC::Schema::Types qw/ConnectInfo SchemaClass/;
+use Catalyst::Model::DBIC::Schema::Types
+    qw/ConnectInfo SchemaClass CursorClass/;
+
+use MooseX::Types::Moose qw/ArrayRef Str ClassName/;
 
 use namespace::clean -except => 'meta';
 
@@ -241,8 +244,9 @@ Or using L<Config::General>:
         <connect_info>
             dsn   dbi:Pg:dbname=mypgdb
             user   postgres
-            password ''
+            password ""
             auto_savepoint 1
+           quote_char """
             on_connect_do   some SQL statement
             on_connect_do   another SQL statement
         </connect_info>
@@ -267,6 +271,7 @@ Or using L<YAML>:
           LongTruncOk: 1
           on_connect_do: [ "alter session set nls_date_format = 'YYYY-MM-DD HH24:MI:SS'" ]
           cursor_class: 'DBIx::Class::Cursor::Cached'
+         quote_char: '"'
 
 The old arrayref style with hashrefs for L<DBI> then L<DBIx::Class> options is also
 supported:
@@ -376,8 +381,6 @@ Used often for debugging and controlling transactions.
 
 =cut
 
-class_has 'composed_schema' => (is => 'rw', isa => 'DBIx::Class::Schema');
-
 has 'schema' => (is => 'rw', isa => 'DBIx::Class::Schema');
 
 has 'schema_class' => (
@@ -387,17 +390,11 @@ has 'schema_class' => (
     required => 1
 );
 
-has 'storage_type' => (is => 'rw', isa => 'Str');
+has 'storage_type' => (is => 'rw', isa => Str);
 
 has 'connect_info' => (is => 'ro', isa => ConnectInfo, coerce => 1);
 
-# ref $self changes to anon after roles are applied, and _original_class_name is
-# broken in MX::O::P 0.0009
-has '_class_name' => (is => 'ro', isa => 'ClassName', default => sub {
-    ref shift
-});
-
-has 'model_name' => (is => 'ro', isa => 'Str', default => sub {
+has 'model_name' => (is => 'ro', isa => Str, default => sub {
     my $self = shift;
 
     my $class = ref $self;
@@ -406,7 +403,14 @@ has 'model_name' => (is => 'ro', isa => 'Str', default => sub {
     $model_name
 });
 
-has 'roles' => (is => 'ro', isa => 'ArrayRef|Str');
+has 'roles' => (is => 'ro', isa => ArrayRef|Str);
+
+has '_default_cursor_class' => (
+    is => 'ro',
+    isa => CursorClass,
+    default => 'DBIx::Class::Storage::DBI::Cursor',
+    coerce => 1
+);
 
 sub BUILD {
     my $self = shift;
@@ -484,7 +488,7 @@ sub ACCEPT_CONTEXT { shift }
 
 sub _install_rs_models {
     my $self  = shift;
-    my $class = $self->_class_name;
+    my $class = $self->_original_class_name;
 
     no strict 'refs';
 
@@ -502,6 +506,29 @@ sub _install_rs_models {
     }
 }
 
+sub _reset_cursor_class {
+    my $self = shift;
+
+    if ($self->storage->can('cursor_class')) {
+       $self->storage->cursor_class($self->_default_cursor_class)
+           if $self->storage->cursor_class ne $self->_default_cursor_class;
+    }
+}
+
+{
+    my %COMPOSED_CACHE;
+
+    sub composed_schema {
+       my $self = shift;
+       my $class = $self->_original_class_name;
+       my $store = \$COMPOSED_CACHE{$class}{$self->schema_class};
+
+       $$store = shift if @_;
+
+       return $$store
+    }
+}
+
 __PACKAGE__->meta->make_immutable;
 
 =head1 SEE ALSO