open Printf
-let prepare_insert () =
- (*
- let insert_owner a b =
- sprintf "INSERT %s VALUES (\"%s\", \"%s\")" (owners_tbl ())a b
+let execute_insert dbd uri (sort_cols, rel_cols, obj_cols) =
+ let sort_tuples =
+ List.fold_left (fun s l -> match l with
+ | [`String a; `String b; `Int c; `String d] ->
+ sprintf "(\"%s\", \"%s\", %d, \"%s\")" a b c d :: s
+ | _ -> assert false )
+ [] sort_cols
in
- *)
- let insert_sort a b c d =
- sprintf "INSERT %s VALUES (\"%s\", \"%s\", %d, \"%s\")" (sort_tbl ())a b c d
- in
- let insert_rel a b c =
- sprintf "INSERT %s VALUES (\"%s\", \"%s\", %d)" (rel_tbl ()) a b c
- in
- let insert_obj a b c d =
- sprintf "INSERT %s VALUES (\"%s\", \"%s\", \"%s\", %s)" (obj_tbl ()) a b c d
- in
- ((*insert_owner, *)insert_sort, insert_rel, insert_obj)
-
-let execute_insert dbd ((*insert_owner, *)insert_sort, insert_rel, insert_obj)
- uri (sort_cols, rel_cols, obj_cols)
-=
- (* ignore (Mysql.exec dbd (insert_owner uri owner)); *)
- List.iter (function
- | [`String a; `String b; `Int c; `String d] ->
- ignore (Mysql.exec dbd (insert_sort a b c d))
- | _ -> assert false)
- sort_cols;
- List.iter (function
+ let rel_tuples =
+ List.fold_left (fun s l -> match l with
| [`String a; `String b; `Int c] ->
- ignore (Mysql.exec dbd (insert_rel a b c))
+ sprintf "(\"%s\", \"%s\", %d)" a b c :: s
| _ -> assert false)
- rel_cols;
- List.iter (function
+ [] rel_cols
+ in
+ let obj_tuples = List.fold_left (fun s l -> match l with
| [`String a; `String b; `String c; `Int d] ->
- ignore (Mysql.exec dbd (insert_obj a b c (string_of_int d)))
+ sprintf "(\"%s\", \"%s\", \"%s\", %d)" a b c d :: s
| [`String a; `String b; `String c; `Null] ->
- ignore (Mysql.exec dbd (insert_obj a b c "NULL"))
+ sprintf "(\"%s\", \"%s\", \"%s\", %s)" a b c "NULL" :: s
| _ -> assert false)
- obj_cols
-
+ [] obj_cols
+ in
+ if sort_tuples <> [] then
+ begin
+ let query_sort =
+ sprintf "INSERT %s VALUES %s;" (sort_tbl ()) (String.concat "," sort_tuples)
+ in
+ ignore (Mysql.exec dbd query_sort)
+ end;
+ if rel_tuples <> [] then
+ begin
+ let query_rel =
+ sprintf "INSERT %s VALUES %s;" (rel_tbl ()) (String.concat "," rel_tuples)
+ in
+ ignore (Mysql.exec dbd query_rel)
+ end;
+ if obj_tuples <> [] then
+ begin
+ let query_obj =
+ sprintf "INSERT %s VALUES %s;" (obj_tbl ()) (String.concat "," obj_tuples)
+ in
+ ignore (Mysql.exec dbd query_obj)
+ end
+
let insert_const_no dbd uri =
let inconcl_no =
sprintf "INSERT %s SELECT \"%s\", COUNT(DISTINCT h_occurrence) FROM %s WHERE (h_position=\"%s\" OR h_position=\"%s\") AND source LIKE \"%s%%\""
(* TODO ZACK: verify if an object has already been indexed *)
let already_indexed _ = false
-
+(*
let index_constant ~dbd =
let query = prepare_insert () in
fun ~uri ~body ~ty ->
let query = prepare_insert () in
fun ~uri ~types ->
if not (already_indexed uri) then begin
- let metadata = MetadataExtractor.compute_ind ~uri ~types in
+ let metadata = MetadataExtractor.compute_obj uri in
let uri_of (a,b,c) = a in
let uris = UriManager.string_of_uri uri :: List.map uri_of metadata in
let uri = UriManager.string_of_uri uri in
List.iter (insert_const_no dbd) uris;
List.iter (fun (uri, name, _) -> insert_name ~dbd ~uri ~name) metadata
end
+*)
+let index_obj ~dbd ~uri =
+ if not (already_indexed uri) then begin
+ let metadata = MetadataExtractor.compute_obj uri in
+ let uri_of (a,b,c) = a in
+ let uris = UriManager.string_of_uri uri :: List.map uri_of metadata in
+ let uri = UriManager.string_of_uri uri in
+ let columns = MetadataPp.columns_of_metadata metadata in
+ execute_insert dbd uri (columns :> columns);
+ List.iter (insert_const_no dbd) uris;
+ List.iter (fun (uri, name, _) -> insert_name ~dbd ~uri ~name) metadata
+ end
+
let tables_to_clean =
[sort_tbl; rel_tbl; obj_tbl; conclno_tbl; fullno_tbl; name_tbl; hypno_tbl]