4 use OpenILS::Application::Storage::Driver::Pg::QueryParser;
8 $Data::Dumper::Indent = 1;
9 use Time::HiRes qw/time/;
11 OpenILS::Application::Storage::Driver::Pg::QueryParser->TEST_SETUP;
13 my $query = '#available title: foo bar* || (-baz || (subject:"1900'.
14 '-1910 junk" "and another thing" se:stuff #available '.
15 'statuses(0,7,12))) && && && au:malarky || au|'.
16 'corporate|personal:gonzo && dc.identifier:+123456789X'.
17 ' dc.contributor=rowling #metarecord estimation_'.
18 'strategy(exclusion) item_type(a, t) item_form(d) '.
19 'bib.subjectTitle=potter bib.subjectName=harry '.
20 'keyword|mapscale:1:250000';
22 # For testing LP#1516707
23 # $query = '#CD_documentLength #CD_meanHarmonic #CD_uniqueWords core_limit(10000) limit(1000) estimation_strategy(inclusion) keyword: title:"the blue" depth(0)';
26 my $superpage_size = 1000;
27 my $core_limit = 25000;
33 'superpage=i' => \$superpage,
34 'superpage-size=i' => \$superpage_size,
35 'core-limit=i' => \$core_limit,
43 OpenILS::Application::Storage::Driver::Pg::QueryParser->initialize;
46 OpenILS::Application::Storage::Driver::Pg::QueryParser->new( superpage_size => $superpage_size, superpage => $superpage, core_limit => $core_limit, debug => $debug, query => $query )->parse->parse_tree for (1 .. $runs);
49 my $plan = OpenILS::Application::Storage::Driver::Pg::QueryParser->new( superpage_size => $superpage_size, superpage => $superpage, core_limit => $core_limit, query => $query, debug => $debug );
51 print "Parser config:\n" . Dumper( \%QueryParser::parser_config) if (!$quiet);
52 print "Parsed query tree:\n" . Dumper( $plan->parse_tree) if (!$quiet);
53 #print "Parsed query tree:\n" . Dumper( QueryParser->new( superpage_size => $superpage_size, superpage => $superpage, core_limit => $core_limit, query => $query, debug => $debug )->parse->parse_tree);
54 my $sql = $plan->toSQL;
56 print "SQL:\n$sql\n\n" if (!$quiet);
58 my $abstract_query = $plan->parse_tree->to_abstract_query(with_config => 0);
59 print "abstract_query: " . Dumper($abstract_query) . "\n";
60 print "Original query: $query\n";
61 print "Canonicalized query: ".$plan->canonicalize()."\n";
62 print "Simple plan: " . ($plan->simple_plan ? 'yes' : 'no') . "\n";
63 print "Total parse time, $runs runs: " . ($end - $start) . "s\n";
64 print "Average parse time, $runs runs: " . sprintf('%0.3f',(($end - $start) / $runs) * 1000) . "ms\n";