[Jifty-commit] r5178 - in Jifty-DBI/trunk: . lib/Jifty/DBI lib/Jifty/DBI/Filter
Jifty commits
jifty-commit at lists.jifty.org
Fri Feb 29 00:30:49 EST 2008
Author: sartak
Date: Fri Feb 29 00:30:47 2008
New Revision: 5178
Modified:
Jifty-DBI/trunk/ (props changed)
Jifty-DBI/trunk/lib/Jifty/DBI/Collection.pm
Jifty-DBI/trunk/lib/Jifty/DBI/Column.pm
Jifty-DBI/trunk/lib/Jifty/DBI/Filter.pm
Jifty-DBI/trunk/lib/Jifty/DBI/Filter/Boolean.pm
Jifty-DBI/trunk/lib/Jifty/DBI/Record.pm
Jifty-DBI/trunk/lib/Jifty/DBI/Schema.pm
Jifty-DBI/trunk/t/06filter_boolean.t
Log:
r52259 at onn: sartak | 2008-02-29 00:30:30 -0500
Add a new column attribute, encode_select. This will apply filters on load_by_cols and limit. Have Boolean use encode_select.
Modified: Jifty-DBI/trunk/lib/Jifty/DBI/Collection.pm
==============================================================================
--- Jifty-DBI/trunk/lib/Jifty/DBI/Collection.pm (original)
+++ Jifty-DBI/trunk/lib/Jifty/DBI/Collection.pm Fri Feb 29 00:30:47 2008
@@ -1329,6 +1329,11 @@
$args{'operator'} = 'IN';
}
+ $self->record_class->new(handle => $self->_handle)->_apply_input_filters(
+ column => $column_obj,
+ value_ref => \$args{'value'},
+ ) if $column_obj && $column_obj->encode_select;
+
my $clause = {
column => $qualified_column,
operator => $args{'operator'},
Modified: Jifty-DBI/trunk/lib/Jifty/DBI/Column.pm
==============================================================================
--- Jifty-DBI/trunk/lib/Jifty/DBI/Column.pm (original)
+++ Jifty-DBI/trunk/lib/Jifty/DBI/Column.pm Fri Feb 29 00:30:47 2008
@@ -30,6 +30,7 @@
case_sensitive
private
protected
+ encode_select
/;
# these actually live in the attributes hash
Modified: Jifty-DBI/trunk/lib/Jifty/DBI/Filter.pm
==============================================================================
--- Jifty-DBI/trunk/lib/Jifty/DBI/Filter.pm (original)
+++ Jifty-DBI/trunk/lib/Jifty/DBI/Filter.pm Fri Feb 29 00:30:47 2008
@@ -67,8 +67,6 @@
A L<Jifty::DBI::Column> object, whatever sort of column we're working
with here.
-=back
-
=item handle
A L<Jifty::DBI::Handle> object, because some filters (ie
Modified: Jifty-DBI/trunk/lib/Jifty/DBI/Filter/Boolean.pm
==============================================================================
--- Jifty-DBI/trunk/lib/Jifty/DBI/Filter/Boolean.pm (original)
+++ Jifty-DBI/trunk/lib/Jifty/DBI/Filter/Boolean.pm Fri Feb 29 00:30:47 2008
@@ -12,7 +12,7 @@
my $self = shift;
my $value = shift;
- for ($self->TRUE_VALUES) {
+ for ($self->TRUE_VALUES, map { "'$_'" } $self->TRUE_VALUES) {
return 1 if $value eq $_;
}
@@ -23,7 +23,7 @@
my $self = shift;
my $value = shift;
- for ($self->FALSE_VALUES) {
+ for ($self->FALSE_VALUES, map { "'$_'" } $self->FALSE_VALUES) {
return 1 if $value eq $_;
}
Modified: Jifty-DBI/trunk/lib/Jifty/DBI/Record.pm
==============================================================================
--- Jifty-DBI/trunk/lib/Jifty/DBI/Record.pm (original)
+++ Jifty-DBI/trunk/lib/Jifty/DBI/Record.pm Fri Feb 29 00:30:47 2008
@@ -1068,6 +1068,11 @@
$value = $value->id;
}
+ $self->_apply_input_filters(
+ column => $column_obj,
+ value_ref => \$value,
+ ) if $column_obj->encode_select;
+
# if the handle is in a case_sensitive world and we need to make
# a case-insensitive query
if ( $self->_handle->case_sensitive && $value ) {
Modified: Jifty-DBI/trunk/lib/Jifty/DBI/Schema.pm
==============================================================================
--- Jifty-DBI/trunk/lib/Jifty/DBI/Schema.pm (original)
+++ Jifty-DBI/trunk/lib/Jifty/DBI/Schema.pm Fri Feb 29 00:30:47 2008
@@ -405,6 +405,11 @@
__PACKAGE__->register_types(
boolean => sub {
+ _init_handler is sub {
+ my ($column, $from) = @_;
+ $column->encode_select(1);
+ $column->type('boolean');
+ },
type is 'boolean',
filters are qw(Jifty::DBI::Filter::Boolean),
},
Modified: Jifty-DBI/trunk/t/06filter_boolean.t
==============================================================================
--- Jifty-DBI/trunk/t/06filter_boolean.t (original)
+++ Jifty-DBI/trunk/t/06filter_boolean.t Fri Feb 29 00:30:47 2008
@@ -6,7 +6,7 @@
BEGIN { require "t/utils.pl" }
our (@available_drivers);
-use constant TESTS_PER_DRIVER => 86;
+use constant TESTS_PER_DRIVER => 122;
my $total = scalar(@available_drivers) * TESTS_PER_DRIVER;
plan tests => $total;
@@ -61,6 +61,25 @@
# undef/NULL
$rec->set_my_data;
is($rec->my_data, undef, 'set undef value');
+
+ $rec->set_my_data($input);
+ ok($bool eq 'true' ? $rec->my_data : !$rec->my_data, 'Perl agrees with the expected boolean value');
+ }
+
+ for my $value ( @values ) {
+ my ($input, $bool) = @$value;
+ my $rec = TestApp::User->new( handle => $handle );
+ $rec->load_by_cols(
+ my_data => $input,
+ );
+ ok($rec->id, "loaded a record by boolean value '$input'");
+
+ my $col = TestApp::UserCollection->new( handle => $handle );
+ $col->limit(
+ column => 'my_data',
+ value => $input,
+ );
+ ok($bool eq 'true' ? $col->first->my_data : !$col->first->my_data, 'Perl agrees with the expected boolean value');
}
cleanup_schema('TestApp', $handle);
@@ -71,8 +90,6 @@
package TestApp::User;
use base qw/ Jifty::DBI::Record /;
-1;
-
sub schema_sqlite {
<<EOF;
@@ -115,4 +132,13 @@
}
}
+package TestApp::UserCollection;
+
+use base qw/Jifty::DBI::Collection/;
+
+sub _init {
+ my $self = shift;
+ $self->SUPER::_init(@_);
+ $self->table('users');
+}
More information about the Jifty-commit
mailing list