# # patch "database.ml" # from [4d43388028b28466b150b96a39af19c6fd5201d7] # to [71b2ddb5568b0ebb79cd126a3e47849ab8b64b37] # ======================================================================== --- database.ml 4d43388028b28466b150b96a39af19c6fd5201d7 +++ database.ml 71b2ddb5568b0ebb79cd126a3e47849ab8b64b37 @@ -181,8 +181,8 @@ (* grab all node ids and edges we're interested in *) let agraph = Sqlite3.fetch_f db process_ancestry_row_simple agraph - "SELECT parent, child FROM revision_ancestry \ - WHERE parent IN %s AND child IN %s" view_name_limit view_name_limit in + "SELECT parent, child FROM revision_ancestry, %s \ + WHERE parent = id AND child IN %s" view_name_limit view_name_limit in (* also grab neighbor nodes *) let agraph = @@ -200,7 +200,7 @@ (ie merge or disapproval nodes) *) let agraph = Sqlite3.fetch_f db process_changelog_row agraph - "SELECT id, value FROM revision_certs WHERE name = 'changelog' AND id IN %s" + "SELECT C.id, C.value FROM revision_certs AS C, %s AS B WHERE C.name = 'changelog' AND C.id = B.id" view_name_limit in (* determine the branching edges *) @@ -256,11 +256,11 @@ let view_query_domain = match query_domain with | QUERY_ALL -> Printf.sprintf - "CREATE TEMP VIEW %s AS \ + "CREATE TEMP TABLE %s AS \ SELECT DISTINCT id FROM revision_certs WHERE name = 'branch'" view_name_domain | QUERY_BRANCHES q -> Printf.sprintf - "CREATE TEMP VIEW %s AS \ + "CREATE TEMP TABLE %s AS \ SELECT DISTINCT id FROM revision_certs \ WHERE name = 'branch' AND value IN (%s)" view_name_domain @@ -269,7 +269,7 @@ let view_query_date_limit () = Printf.sprintf - "CREATE TEMP VIEW %s AS \ + "CREATE TEMP TABLE %s AS \ SELECT DISTINCT id FROM revision_certs \ WHERE name = 'date' AND id IN %s AND date_p(value)" view_name_limit view_name_domain in @@ -279,19 +279,23 @@ (* We fetch the ids matching the query (ie those on certain branches) *) (* and store them in a view. *) Sqlite3.exec db view_query_domain ; + Sqlite3.exec_f db + "CREATE INDEX %s__id ON %s (id)" view_name_domain view_name_domain ; if query_limit <> QUERY_NO_LIMIT then begin register_date_p () ; - Sqlite3.exec db (view_query_date_limit ()) + Sqlite3.exec db (view_query_date_limit ()) ; + Sqlite3.exec_f db + "CREATE INDEX %s__id ON %s (id)" view_name_limit view_name_limit end) ~action:(fun () -> f db query) ~after:(fun () -> if query_limit <> QUERY_NO_LIMIT then begin Sqlite3.delete_function db "date_p" ; - Sqlite3.exec_f db "DROP VIEW %s" view_name_limit + Sqlite3.exec_f db "DROP TABLE %s" view_name_limit end ; - Sqlite3.exec_f db "DROP VIEW %s" view_name_domain) + Sqlite3.exec_f db "DROP TABLE %s" view_name_domain) () let fetch_agraph query db =