Give the PG QP driver a subquery callback for the new saved_query() filter QP-subquery
authorMike Rylander <mrylander@gmail.com>
Wed, 18 Apr 2012 17:25:06 +0000 (13:25 -0400)
committerMike Rylander <mrylander@gmail.com>
Wed, 18 Apr 2012 17:27:52 +0000 (13:27 -0400)
Signed-off-by: Mike Rylander <mrylander@gmail.com>
Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Driver/Pg/QueryParser.pm

index efd83e0..c1fd147 100644 (file)
@@ -6,8 +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';
 
+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;
     my $value = shift;
@@ -410,6 +426,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' );