diff --git a/src/bin/psql/common.c b/src/bin/psql/common.c index 2450b9c..7a87314 100644 --- a/src/bin/psql/common.c +++ b/src/bin/psql/common.c @@ -529,6 +529,58 @@ ClearOrSaveResult(PGresult *result) } } +/* + * Print the time elapsed in both raw milliseconds and if the time elapsed + * was at least 1 second, also print a format normalized to days, hours, + * minutes, and seconds. + */ +static void +PrintTiming(double elapsed_msec) +{ + double seconds; + int minutes; + int hours; + int days; + + if (elapsed_msec < 1000.0) + { + printf(_("Time: %.3f ms\n"), elapsed_msec); + return; + } + + seconds = elapsed_msec / 1000.0; + if (seconds < 60.0) + { + printf(_("Time: %.3f ms (%.3fs)\n"), elapsed_msec, seconds); + return; + } + + minutes = (int)seconds / 60; + seconds = seconds - (60.0 * minutes); + if (minutes < 60) + { + printf(_("Time: %.3f ms (%dm %.3fs)\n"), + elapsed_msec, minutes, seconds); + return; + } + + hours = minutes / 60; + minutes = minutes % 60; + + if (hours < 24) + { + printf(_("Time: %.3f ms (%dh %dm %.3fs)\n"), + elapsed_msec, hours, minutes, seconds); + return; + } + + days = hours / 24; + hours = hours % 24; + + printf(_("Time: %.3f ms (%dd %dh %dm %.3fs)\n"), + days, elapsed_msec, hours, minutes, seconds); +} + /* * PSQLexec @@ -678,7 +730,7 @@ PSQLexecWatch(const char *query, const printQueryOpt *opt) /* Possible microtiming output */ if (pset.timing) - printf(_("Time: %.3f ms\n"), elapsed_msec); + PrintTiming(elapsed_msec); return 1; } @@ -1328,7 +1380,7 @@ SendQuery(const char *query) /* Possible microtiming output */ if (pset.timing) - printf(_("Time: %.3f ms\n"), elapsed_msec); + PrintTiming(elapsed_msec); /* check for events that may occur during query execution */