Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 140a7c83

Von Moritz Bunkus vor fast 11 Jahren hinzugefügt

  • ID 140a7c83cde5952fac56e5e7d794f691dcff175e
  • Vorgänger 893ae739
  • Nachfolger 4fdbfa7d

Filtered-Helfer: bei Typ 'date' und Operator 'le' Wert auf nächsten Tag ändern

Ist die Datenbankspalte vom Typ 'timestamp', so sind die Timestamps am
gleichen Tag wie das zu vergleichende Argument allesamt größer als das
vergleichende Argument. Der Benutzer erwartet aufgrund von <= aber,
dass die alle mit einbezogen werden.

Workaround: für Vergleichsoperation <= bei Feldtyp 'date' einfach das
Datum auf 'Anfang des nächsten Tages' erhöhen und den Vergleich auf <
ändern. Das funktioniert sowohl bei Datenbankspalten mit Typ 'date'
als auch bei denjenigen mit Typ 'timestamp'.

Behebt #2404.

Unterschiede anzeigen:

SL/Controller/Helper/ParseFilter.pm
101 101
  my @result;
102 102
  for (my $i = 0; $i < scalar @$flattened; $i += 2) {
103 103
    my ($key, $value) = ($flattened->[$i], $flattened->[$i+1]);
104
    my ($type, $op)   = $key =~ m{:(.+)::(.+)};
104 105

  
105 106
    ($key, $value) = _apply_all($key, $value, qr/\b:(\w+)/,  { %filters, %{ $params{filters} || {} } });
106 107
    ($key, $value) = _apply_all($key, $value, qr/\b::(\w+)/, { %methods, %{ $params{methods} || {} } });
107 108
    ($key, $value) = _dispatch_custom_filters($params{class}, $with_objects, $key, $value) if $params{class};
109
    ($key, $value) = _apply_value_filters($key, $value, $type, $op);
108 110

  
109 111
    push @result, $key, $value if defined $key;
110 112
  }
111 113
  return \@result;
112 114
}
113 115

  
116
sub _apply_value_filters {
117
  my ($key, $value, $type, $op) = @_;
118

  
119
  return ($key, $value) unless $key && $value && $type && $op && (ref($value) eq 'HASH');
120

  
121
  if (($type eq 'date') && ($op eq 'le')) {
122
    my $date     = delete $value->{le};
123
    $value->{lt} = $date->add(days => 1);
124
  }
125

  
126
  return ($key, $value);
127
}
128

  
114 129
sub _dispatch_custom_filters {
115 130
  my ($class, $with_objects, $key, $value) = @_;
116 131

  

Auch abrufbar als: Unified diff