package OpenILS::Application::Storage::Driver::Pg::QueryParser;
use OpenILS::Application::Storage::QueryParser;
use base 'QueryParser';
+use OpenSRF::Utils qw/:datetime/;
use OpenSRF::Utils::JSON;
use OpenILS::Application::AppUtils;
use OpenILS::Utils::CStoreEditor;
__PACKAGE__->add_search_filter( 'during' );
# various filters for limiting in various ways
+__PACKAGE__->add_search_filter( 'edit_date' );
+__PACKAGE__->add_search_filter( 'create_date' );
__PACKAGE__->add_search_filter( 'statuses' );
__PACKAGE__->add_search_filter( 'locations' );
__PACKAGE__->add_search_filter( 'location_groups', sub { return __PACKAGE__->location_groups_callback(@_) } );
package OpenILS::Application::Storage::Driver::Pg::QueryParser::query_plan;
use base 'QueryParser::query_plan';
use OpenSRF::Utils::Logger qw($logger);
+use OpenSRF::Utils qw/:datetime/;
use Data::Dumper;
use OpenILS::Application::AppUtils;
use OpenILS::Utils::CStoreEditor;
$agg_record = 'CASE WHEN COUNT(DISTINCT m.source) = 1 THEN FIRST(m.source) ELSE NULL END AS record';
}
+ # bre.create_date and bre.edit_date filtering
+ for my $datefilter ( qw/create_date edit_date/ ) {
+ my $cdate = $self->find_filter($datefilter);
+ if ($cdate && $cdate->args && scalar(@{$cdate->args}) > 0 && scalar(@{$cdate->args}) < 3) {
+ my ($cstart, $cend) = @{$cdate->args};
+
+ if (!$cstart and !$cend) {
+ # useless use of filter
+ } elsif (!$cstart or $cstart eq '-infinity') { # no start supplied
+ if ($cend eq 'infinity') {
+ # useless use of filter
+ } else {
+ # "before $cend"
+ $cend = cleanse_ISO8601($cend);
+ $limit_where .= <<" SQL";
+ AND bre.$datefilter <= \$_$$\$$cend\$_$$\$
+ SQL
+ }
+
+ } elsif (!$cend or $cend eq 'infinity') { # no end supplied
+ if ($cstart eq '-infinity') {
+ # useless use of filter
+ } else { # "after $cstart"
+ $cstart = cleanse_ISO8601($cstart);
+ $limit_where .= <<" SQL";
+ AND bre.$datefilter >= \$_$$\$$cstart\$_$$\$
+ SQL
+ }
+ } else { # both supplied
+ # "between $cstart and $cend"
+ $cstart = cleanse_ISO8601($cstart);
+ $cend = cleanse_ISO8601($cend);
+ $limit_where .= <<" SQL";
+ AND bre.$datefilter BETWEEN \$_$$\$$cstart\$_$$\$ AND \$_$$\$$cend\$_$$\$
+ SQL
+ }
+ }
+ }
+
my $sql = <<SQL;
WITH
$with
--- /dev/null
+Two new QP filters: create_date and edit_date
+=============================================
+
+These filter on the fields of the same name in biblio.record_entry.
+
+e.g.
+ * create_date(,2013-02-01) => records created before 2013-02-01
+ * create_date(2013-02-01) => records created since 2013-02-01
+ * create_date(2013-02-01,2013-02-28) => records created in Feb 2013
+ * create_date(yesterday) => records since created yesterday
+