2 require '../oils_header.pl';
5 use OpenILS::Application::Storage::Driver::Pg::QueryParser;
9 $Data::Dumper::Indent = 1;
10 use Time::HiRes qw/time/;
11 use OpenILS::Utils::CStoreEditor;
13 OpenILS::Application::Storage::Driver::Pg::QueryParser->TEST_SETUP;
15 my $query = '#available title: foo bar* || (-baz || (subject:"1900'.
16 '-1910 junk" "and another thing" se:stuff #available '.
17 'statuses(0,7,12))) && && && au:malarky || au|'.
18 'corporate|personal:gonzo && dc.identifier:+123456789X'.
19 ' dc.contributor=rowling #metarecord estimation_'.
20 'strategy(exclusion) item_type(a, t) item_form(d) '.
21 'bib.subjectTitle=potter bib.subjectName=harry '.
22 'keyword|mapscale:1:250000';
24 #$query = 'concerto #available filter_group_entry(1,2,3) filter_group_entry(4,5)';
25 #$query = 'concerto || filter_group_entry(4) || filter_group_entry(3)';
26 #$query = 'concerto (audience(a) || (item_type(a) && item_form(b)))';
27 #$query = 'concerto || (piano && (item_type(a) || audience(a)))';
29 #$query = '(concerto item_type(a)) || (piano item_type(b))';
30 #$query = 'audience(a) (concerto || item_type(a) || (piano music item_form(b)))';
31 #$query = 'concerto && (item_type(a) || piano) && (item_form(b) || music)';
32 $query = 'concerto && (piano || item_type(a)) && (music || item_form(b))';
35 my $superpage_size = 1000;
36 my $core_limit = 25000;
38 my $config = '/openils/conf/opensrf_core.xml';
42 'superpage=i' => \$superpage,
43 'superpage-size=i' => \$superpage_size,
44 'core-limit=i' => \$core_limit,
48 'config=s' => \$config
51 osrf_connect($config);
53 my $parser = OpenILS::Application::Storage::Driver::Pg::QueryParser->new(
54 superpage_size => $superpage_size,
55 superpage => $superpage,
56 core_limit => $core_limit,
61 # load the parser config
62 my $cstore = OpenSRF::AppSession->create( 'open-ils.cstore' );
64 config_record_attr_index_norm_map =>
66 'open-ils.cstore.direct.config.record_attr_index_norm_map.search.atomic',
67 { id => { "!=" => undef } },
68 { flesh => 1, flesh_fields => { crainm => [qw/norm/] }, order_by => [{ class => "crainm", field => "pos" }] }
70 search_relevance_adjustment =>
72 'open-ils.cstore.direct.search.relevance_adjustment.search.atomic',
73 { id => { "!=" => undef } }
75 config_metabib_field =>
77 'open-ils.cstore.direct.config.metabib_field.search.atomic',
78 { id => { "!=" => undef } }
80 config_metabib_search_alias =>
82 'open-ils.cstore.direct.config.metabib_search_alias.search.atomic',
83 { alias => { "!=" => undef } }
85 config_metabib_field_index_norm_map =>
87 'open-ils.cstore.direct.config.metabib_field_index_norm_map.search.atomic',
88 { id => { "!=" => undef } },
89 { flesh => 1, flesh_fields => { cmfinm => [qw/norm/] }, order_by => [{ class => "cmfinm", field => "pos" }] }
91 config_record_attr_definition =>
93 'open-ils.cstore.direct.config.record_attr_definition.search.atomic',
94 { name => { "!=" => undef } }
100 print "Parsed query tree:\n" . Dumper($parser->parse_tree) unless $quiet;
102 my $sql = $parser->toSQL;
104 print "SQL:\n$sql\n\n" unless $quiet;