File Coverage

blib/lib/Search/Query/Field/SQL.pm
Criterion Covered Total %
statement 15 15 100.0
branch 2 2 100.0
condition 6 10 60.0
subroutine 3 3 100.0
pod 1 1 100.0
total 27 31 87.1


line stmt bran cond sub pod time code
1             package Search::Query::Field::SQL;
2 2     2   7 use Moo;
  2         4  
  2         9  
3             extends 'Search::Query::Field';
4              
5 2     2   495 use namespace::autoclean;
  2         2  
  2         16  
6              
7             has 'type' => ( is => 'rw' );
8             has 'fuzzy_op' => ( is => 'rw' );
9             has 'fuzzy_not_op' => ( is => 'rw' );
10             has 'is_int' => ( is => 'rw' );
11              
12             our $VERSION = '0.307';
13              
14             =head1 NAME
15              
16             Search::Query::Field::SQL - query field representing a database column
17              
18             =head1 SYNOPSIS
19              
20             my $field = Search::Query::Field::SQL->new(
21             name => 'foo',
22             alias_for => [qw( bar bing )],
23             );
24              
25             =head1 DESCRIPTION
26              
27             Search::Query::Field::SQL implements field
28             validation and aliasing in SQL search queries.
29              
30             =head1 METHODS
31              
32             This class is a subclass of Search::Query::Field. Only new or overridden
33             methods are documented here.
34              
35             =head2 BUILD
36              
37             Available params are also standard attribute accessor methods.
38              
39             =over
40              
41             =item type
42              
43             The column type.
44              
45             =item fuzzy_op
46              
47             =item fuzzy_not_op
48              
49             =item is_int
50              
51             Set if C matches m/int|float|bool|time|date/.
52              
53             =back
54              
55             =cut
56              
57             sub BUILD {
58 17     17 1 2843 my $self = shift;
59              
60 17   100     63 $self->{type} ||= 'char';
61              
62             # numeric types
63 17 100       56 if ( $self->{type} =~ m/int|float|bool|time|date/ ) {
64 2   50     11 $self->{fuzzy_op} ||= '>=';
65 2   50     9 $self->{fuzzy_not_op} ||= '! >=';
66 2         34 $self->{is_int} = 1;
67             }
68              
69             # text types
70             else {
71 15   50     44 $self->{fuzzy_op} ||= 'ILIKE';
72 15   50     52 $self->{fuzzy_not_op} ||= 'NOT ILIKE';
73 15         273 $self->{is_int} = 0;
74             }
75              
76             }
77              
78             1;