--- /dev/null
+module Registry = Helm_registry
+module SQL = HSql
+module DB = LibraryDb
+
+let tbl = Hashtbl.create 50147
+let ord = ref 1
+let conf_file = ref "heights.conf.xml"
+
+let rec mesure db_type dbd prim str =
+ try
+ let h, p = Hashtbl.find tbl str in
+ if prim then begin
+ if p > 0 then Printf.eprintf "Hit %2u: %s\n" (succ p) str;
+ Hashtbl.replace tbl str (h, succ p)
+ end;
+ h
+ with Not_found ->
+ let query =
+ Printf.sprintf "SELECT h_occurrence FROM refObj WHERE source = '%s'"
+ (SQL.escape db_type dbd str)
+ in
+ let result = SQL.exec db_type dbd query in
+ let f res = match res.(0) with
+ | Some str -> mesure db_type dbd false str
+ | None -> assert false
+ in
+ let hs = SQL.map result ~f in
+ let h = succ (List.fold_left max 0 hs) in
+ Printf.printf "%3u %5u %s\n" h !ord str; flush stdout;
+ ord := succ !ord;
+ let p = if prim then 1 else 0 in
+ Hashtbl.add tbl str (h, p); h
+
+let scan_objs db_type dbd =
+ let query = "SELECT source FROM objectName" in
+ let result = SQL.exec db_type dbd query in
+ let f res = match res.(0) with
+ | Some str -> ignore (mesure db_type dbd true str)
+ | None -> assert false
+ in
+ SQL.iter result ~f
+
+let _ =
+ Registry.load_from !conf_file;
+ let db_type = DB.dbtype_of_string (Registry.get_string "db.type") in
+ let db_spec = DB.parse_dbd_conf () in
+ let dbd = SQL.quick_connect db_spec in
+ scan_objs db_type dbd