-let index_empty_texts = ref false
-let sample_factor = ref 64
-let disable_text_collection = ref false
-let tc_threshold = ref 60000
-
-let query = ref ""
-let input_file = ref ""
-let output_file = ref None
-let save_file = ref ""
-let count_only = ref false
-let time = ref false
-let bottom_up = ref false
-let no_jump = ref false
-let verbose = ref false
-let text_index_type = ref 0
-
-(* Only valid if compiled with -DTRACE *)
-let trace_file = ref "trace.dot"
-
+open Utils
+open Format
+open Config
let set_index_type = function
| "default" -> text_index_type := 0
let usage_msg = Printf.sprintf "%s [options] <input.{xml|srx}> 'query' [output]" Sys.argv.(0)
-
let pos = ref 0
let anon_fun =
fun s -> match !pos with
| 2 -> output_file := Some s; incr pos
| _ -> raise (Arg.Bad(s))
+let set_logger s =
+ List.iter (fun t ->
+ if t = "" then ()
+ else
+ match String.explode t ':' with
+ [ tr; lvl ] ->
+ let l = try int_of_string lvl with _ -> raise (Arg.Bad (lvl)) in
+ if Logger.is_logger tr then Logger.activate tr l
+ else raise (Arg.Bad (t))
+ | _ -> raise (Arg.Bad (t))
+ ) (String.explode s ',')
+
+let pretty_loggers () =
+ ignore(flush_str_formatter());
+ Pretty.print_list
+ ~sep:", "
+ (fun f s -> fprintf f "%s" s)
+ str_formatter
+ (Logger.available ());
+ flush_str_formatter ()
+
let spec = Arg.align
[ "-c", Arg.Set(count_only),
" counting only (don't materialize the result set)";
+ "-two", Arg.Set(twopass),
+ " Use twopass algorithm";
+
"-f", Arg.Set_int(sample_factor),
"<n> sample factor [default=64]";
- "-i", Arg.Set(index_empty_texts),
- " index empty texts [default=false]";
+ "-ne", Arg.Clear(index_empty_texts),
+ " don't index empty texts [default=index]";
"-d", Arg.Set(disable_text_collection),
" disable text collection[default=false]";
"-nj", Arg.Set(no_jump), " disable jumping";
+ "-nc", Arg.Set(no_cache), " disable caching";
+
+ "-nw", Arg.Set(no_wrap_results), " do not wrap results in <xml_results/>";
+
+ "-p", Arg.Set(do_perf), " dump perf counters (Linux only)";
+
"-index-type", Arg.Symbol ([ "default"; "swcsa"; "rlcsa" ],
- set_index_type),
+ set_index_type),
" choose text index type";
+ "-r", Arg.Set_int(repeat),
+ " repeat query execution n time (benchmarking only, default 1)";
+
+ "-doc-stats", Arg.Set(docstats),
+ " Compute document statistics (performs full traversal)";
+
+
"-v", Arg.Set(verbose), " verbose mode"; ] @
-IFDEF TRACE
+IFNDEF NTRACE
THEN [
- "-trace-file", Arg.Set_string(trace_file),
- "<trace_file> save the full trace in dot format in <trace_file>"
+ "-log", Arg.String (set_logger),
+ "<logger1:l1,...,loggern:ln> enable logging with the specified level. Valid loggers are: "
+ ^ (pretty_loggers ())
]
ELSE []
END
let _ = Arg.parse spec anon_fun usage_msg
in
if (!pos > 3 || !pos < 2)
- then begin Arg.usage spec usage_msg; exit 1 end
+ then begin Arg.usage spec usage_msg; exit 1 end;
+ Logger.set_verbose !verbose