From 2eae60ab68f0867d0c761055fc8ef9bf4b982646 Mon Sep 17 00:00:00 2001 From: Brendan Long Date: Fri, 26 Oct 2018 13:37:44 -0400 Subject: [PATCH] Use a `Query` message for parameterless `execute`s `execute` uses a significantly more complicated protocol (parse, prepare, execute) and we should avoid that overhead if we don't actually need parameters. I didn't do this with execute_iter or execute_fold because the simple_query interface doesn't have those versions yet. --- pgx/src/pgx.ml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/pgx/src/pgx.ml b/pgx/src/pgx.ml index d9573c9..2581492 100644 --- a/pgx/src/pgx.ml +++ b/pgx/src/pgx.ml @@ -1325,7 +1325,17 @@ module Make (Thread : IO) = struct simple_query' dbh query) let execute ?(params=[]) db query = - Prepared.(with_prepare db ~query ~f:(fun s -> + match params with + | [] -> + simple_query db query + >>| (function + | rows :: [] -> rows + | results -> + fail_msg "Pgx.execute: Query returned %d result sets but \ + execute should only ever return one. Query was: %s" + (List.length results) query) + | _ -> + Prepared.(with_prepare db ~query ~f:(fun s -> execute s ~params)) let execute_iter ?(params=[]) db query ~f =