Give the PG QP driver a subquery callback for the new saved_query() filter
authorMike Rylander <mrylander@gmail.com>
Wed, 18 Apr 2012 17:25:06 +0000 (13:25 -0400)
committerMike Rylander <mrylander@gmail.com>
Tue, 22 May 2012 19:04:22 +0000 (15:04 -0400)
Signed-off-by: Mike Rylander <mrylander@gmail.com>
Signed-off-by: Bill Erickson <berick@esilibrary.com>

Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Driver/Pg/QueryParser.pm

index 89e3c12..1bdbec7 100644 (file)
@@ -6,9 +6,24 @@ use OpenILS::Application::Storage::QueryParser;
 use base 'QueryParser';
 use OpenSRF::Utils::JSON;
 use OpenILS::Application::AppUtils;
+use OpenILS::Utils::CStoreEditor;
 my $U = 'OpenILS::Application::AppUtils';
 
 my ${spc} = ' ' x 2;
+sub subquery_callback {
+    my ($invocant, $self, $struct, $filter, $params, $negate) = @_;
+
+    return join(
+        ' ',
+        map {
+            $_->query_text
+        } @{
+            OpenILS::Utils::CStoreEditor
+                ->new
+                ->search_actor_search_query({ id => $params })
+        }
+    );
+}
 
 sub quote_value {
     my $self = shift;
@@ -412,6 +427,9 @@ sub TEST_SETUP {
 
 __PACKAGE__->default_search_class( 'keyword' );
 
+# implements EG-specific stored subqueries
+__PACKAGE__->add_search_filter( 'saved_query', sub { return __PACKAGE__->subquery_callback(@_) } );
+
 # will be retained simply for back-compat
 __PACKAGE__->add_search_filter( 'format' );