]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/extras/fts-replacement.pl
lp1777675 inventory date support
[working/Evergreen.git] / Open-ILS / src / extras / fts-replacement.pl
1 #!/usr/bin/perl
2 use warnings;
3 use strict;
4 use OpenILS::Application::Storage::Driver::Pg::QueryParser;
5 use JSON::XS;
6 use Getopt::Long;
7 use Data::Dumper;
8 $Data::Dumper::Indent = 1;
9 use Time::HiRes qw/time/;
10
11 OpenILS::Application::Storage::Driver::Pg::QueryParser->TEST_SETUP;
12
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';
21
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)';
24
25 my $superpage = 1;
26 my $superpage_size = 1000;
27 my $core_limit = 25000;
28 my $debug;
29 my $quiet;
30 my $runs = 100;
31
32 GetOptions(
33     'superpage=i' => \$superpage,
34     'superpage-size=i' => \$superpage_size,
35     'core-limit=i' => \$core_limit,
36     'query=s' => \$query,
37     'debug' => \$debug,
38     'quiet' => \$quiet,
39     'runs=i' => \$runs
40 );
41
42
43 OpenILS::Application::Storage::Driver::Pg::QueryParser->initialize;
44
45 my $start = time();
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);
47 my $end = time();
48
49 my $plan = OpenILS::Application::Storage::Driver::Pg::QueryParser->new( superpage_size => $superpage_size, superpage => $superpage, core_limit => $core_limit, query => $query, debug => $debug );
50 $plan->parse;
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;
55 $sql =~ s/^\s*$//gm;
56 print "SQL:\n$sql\n\n" if (!$quiet);
57
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";
65