let owned_uris =
try
MetadataDb.clean ~dbd
- with HSql.Error as exn ->
+ with (HSql.Error _) as exn ->
match HSql.errno dbd with
| HSql.No_such_table -> []
| _ -> raise exn
List.iter (fun statement ->
try
ignore (HSql.exec dbd statement)
- with HSql.Error as exn ->
+ with (HSql.Error _) as exn ->
match HSql.errno dbd with
| HSql.No_such_table
| HSql.Bad_table_error
try
ignore (HSql.exec dbd statement)
with
- HSql.Error ->
+ (HSql.Error _) as exc ->
let status = HSql.errno dbd in
match status with
| HSql.Table_exists_error -> ()
| HSql.Dup_keyname -> ()
| HSql.GENERIC_ERROR _ ->
prerr_endline statement;
- raise HSql.Error
+ raise exc
| _ -> ()
let xpointers_of_ind uri =
let dbd = instance () in
let name_tbl = MetadataTypes.name_tbl () in
+ let escape s =
+ Pcre.replace ~pat:"([^\\\\])_" ~templ:"$1\\_" (HSql.escape s)
+ in
let query = sprintf
- "SELECT source FROM %s WHERE source LIKE '%s#xpointer%%'" name_tbl
- (HSql.escape (UriManager.string_of_uri uri))
+ ("SELECT source FROM %s WHERE source LIKE '%s#xpointer%%' "
+ ^^ HSql.escape_string_for_like)
+ name_tbl (escape (UriManager.string_of_uri uri))
in
let rc = HSql.exec dbd query in
let l = ref [] in