[Catalyst-commits] r8308 - in CatalystX-CRUD/CatalystX-CRUD-ModelAdapter-DBIC/trunk: . lib/CatalystX/CRUD/ModelAdapter

karpet at dev.catalyst.perl.org karpet at dev.catalyst.perl.org
Thu Aug 28 04:19:54 BST 2008


Author: karpet
Date: 2008-08-28 04:19:54 +0100 (Thu, 28 Aug 2008)
New Revision: 8308

Modified:
   CatalystX-CRUD/CatalystX-CRUD-ModelAdapter-DBIC/trunk/Changes
   CatalystX-CRUD/CatalystX-CRUD-ModelAdapter-DBIC/trunk/lib/CatalystX/CRUD/ModelAdapter/DBIC.pm
Log:
* implement Utils features for ne_sign() use_ilike() and treat_like_int()



Modified: CatalystX-CRUD/CatalystX-CRUD-ModelAdapter-DBIC/trunk/Changes
===================================================================
--- CatalystX-CRUD/CatalystX-CRUD-ModelAdapter-DBIC/trunk/Changes	2008-08-28 03:18:54 UTC (rev 8307)
+++ CatalystX-CRUD/CatalystX-CRUD-ModelAdapter-DBIC/trunk/Changes	2008-08-28 03:19:54 UTC (rev 8308)
@@ -20,3 +20,8 @@
 
 0.06    27 Aug 2008
         * tweek make_query() to return hash struct like RDBO does
+
+0.07    xxx
+        * implement Utils features for ne_sign() use_ilike() and treat_like_int()
+
+

Modified: CatalystX-CRUD/CatalystX-CRUD-ModelAdapter-DBIC/trunk/lib/CatalystX/CRUD/ModelAdapter/DBIC.pm
===================================================================
--- CatalystX-CRUD/CatalystX-CRUD-ModelAdapter-DBIC/trunk/lib/CatalystX/CRUD/ModelAdapter/DBIC.pm	2008-08-28 03:18:54 UTC (rev 8307)
+++ CatalystX-CRUD/CatalystX-CRUD-ModelAdapter-DBIC/trunk/lib/CatalystX/CRUD/ModelAdapter/DBIC.pm	2008-08-28 03:19:54 UTC (rev 8308)
@@ -10,8 +10,10 @@
 use Carp;
 use Data::Dump qw( dump );
 
-our $VERSION = '0.06';
+__PACKAGE__->mk_ro_accessors(qw( treat_like_int ));
 
+our $VERSION = '0.07';
+
 =head1 NAME
 
 CatalystX::CRUD::ModelAdapter::DBIC - CRUD for Catalyst::Model::DBIC::Schema
@@ -35,11 +37,62 @@
 =head1 DESCRIPTION
 
 
+
 =head1 METHODS
 
+=head2 new( I<opts> )
 
+Overrides base method to initialize treats_like_int, ne_sign and 
+use_ilike values.
+
 =cut
 
+sub new {
+    my $self = shift->next::method(@_);
+
+    # what kind of db driver are we using.
+    # makes a difference in make_sql_query().
+    my $db_type
+        = $self->app_class->model( $self->model_name )->storage->sqlt_type;
+
+    #warn "DBIC driver: " . $db_type;
+
+    # TODO others?
+    $self->use_ilike(1) if $db_type eq 'PostgreSQL';
+
+    # SQL for not equal
+    $self->ne_sign('!=');
+
+    # cache the treat_like_int hash
+    $self->_treat_like_int;
+
+    return $self;
+}
+
+sub _treat_like_int {
+    my $self     = shift;
+    my $treat    = {};
+    my $moniker  = $self->_get_moniker;
+    my $rs_class = $self->app_class->model( $self->model_name )
+        ->composed_schema->class($moniker);
+    for my $col ( $rs_class->columns ) {
+        my $info = $rs_class->column_info($col);
+
+        #warn "$col : " . dump($info);
+
+        if ( keys %$info ) {
+            if (    $info->{data_type}
+                and $info->{data_type} =~ m/(boolean|date|int)/ )
+            {
+                $treat->{$col} = 1;
+            }
+        }
+
+    }
+
+    $self->{treat_like_int} = $treat;
+}
+
 =head2 new_object( I<controller>, I<context>, I<moniker> )
 
 Implement required method. Returns empty new_result() object
@@ -51,7 +104,7 @@
     my $self       = shift;
     my $controller = shift;
     my $c          = shift;
-    my $moniker    = $self->_get_moniker( $controller, $c );
+    my $moniker    = $self->_get_moniker($c);
     return $c->model( $self->model_name )->resultset($moniker)
         ->new_result( {} );
 }
@@ -68,7 +121,7 @@
     my $self       = shift;
     my $controller = shift;
     my $c          = shift;
-    my $moniker    = $self->_get_moniker( $controller, $c );
+    my $moniker    = $self->_get_moniker($c);
     if (@_) {
         my $dbic_obj;
         eval {
@@ -101,18 +154,26 @@
     my ( $self, $controller, $c, @arg ) = @_;
     my $query = shift(@arg) || $self->make_query( $controller, $c );
     my @rs
-        = $c->model( $self->model_name )
-        ->resultset( $self->_get_moniker( $controller, $c ) )
+        = $c->model( $self->model_name )->resultset( $self->_get_moniker($c) )
         ->search( $query->{WHERE}, $query->{OPTS} );
     return wantarray ? @rs : \@rs;
 }
 
 sub _get_moniker {
-    my ( $self, $controller, $c ) = @_;
-    my $moniker = $c->stash->{dbic_schema}
-        || $controller->model_meta->{dbic_schema}
-        or $self->throw_error(
-        "must define a dbic_schema for each CRUD controller");
+    my ( $self, $c ) = @_;
+    my $moniker;
+    if ( defined $c ) {
+        $moniker = $c->stash->{dbic_schema}
+            || $self->model_meta->{dbic_schema};
+    }
+    else {
+        $moniker = $self->model_meta->{dbic_schema};
+    }
+    unless ($moniker) {
+        $self->throw_error(
+            "must define a dbic_schema in model_meta config for each CRUD controller"
+        );
+    }
     return $moniker;
 }
 
@@ -127,8 +188,7 @@
     my ( $self, $controller, $c, @arg ) = @_;
     my $query = shift(@arg) || $self->make_query( $controller, $c );
     my $rs
-        = $c->model( $self->model_name )
-        ->resultset( $self->_get_moniker( $controller, $c ) )
+        = $c->model( $self->model_name )->resultset( $self->_get_moniker($c) )
         ->search( $query->{WHERE}, $query->{OPTS} );
     return $rs;
 }
@@ -143,7 +203,7 @@
     my ( $self, $controller, $c, @arg ) = @_;
     my $query = shift(@arg) || $self->make_query( $controller, $c );
     return $c->model( $self->model_name )
-        ->resultset( $self->_get_moniker( $controller, $c ) )
+        ->resultset( $self->_get_moniker($c) )
         ->count( $query->{WHERE}, $query->{OPTS} );
 }
 
@@ -360,9 +420,9 @@
     my $controller = shift;
     my $c          = shift;
 
-    my $moniker = $self->_get_moniker( $controller, $c );
-    return $self->{_field_names}->{$moniker}
-        if exists $self->{_field_names}->{$moniker};
+    my $moniker = $self->_get_moniker($c);
+    return $self->{_field_names}
+        if exists $self->{_field_names};
 
     my $obj
         = $c->model( $self->model_name )->composed_schema->class($moniker);
@@ -392,7 +452,7 @@
 
     #carp "field_names for $moniker : " . dump \@fields;
 
-    $self->{_field_names}->{$moniker} = \@fields;
+    $self->{_field_names} = \@fields;
 
     return \@fields;
 }
@@ -416,7 +476,7 @@
 
 sub read {
     my ( $self, $c, $object ) = @_;
-    $object->find;    # TODO is this right?
+    $object->find;    # TODO is this right? what about discard_changes()?
 }
 
 =head2 update( I<context>, I<dbic_object> )
@@ -428,7 +488,6 @@
 sub update {
     my ( $self, $c, $object ) = @_;
     $object->update;
-
 }
 
 =head2 delete( I<context>, I<dbic_object> )




More information about the Catalyst-commits mailing list