@@ -223,6 +223,7 @@ MainLoop(FILE *source)
223223 char * rest_of_line = NULL ;
224224 bool found_help = false;
225225 bool found_exit_or_quit = false;
226+ bool found_q = false;
226227
227228 /* Search for the words we recognize; must be first word */
228229 if (pg_strncasecmp (first_word , "help" , 4 ) == 0 )
@@ -237,10 +238,18 @@ MainLoop(FILE *source)
237238 found_exit_or_quit = true;
238239 }
239240
241+ else if (strncmp (first_word , "\\q" , 2 ) == 0 )
242+ {
243+ rest_of_line = first_word + 2 ;
244+ found_q = true;
245+ }
246+
240247 /*
241248 * If we found a command word, check whether the rest of the line
242249 * contains only whitespace plus maybe one semicolon. If not,
243- * ignore the command word after all.
250+ * ignore the command word after all. These commands are only
251+ * for compatibility with other SQL clients and are not
252+ * documented.
244253 */
245254 if (rest_of_line != NULL )
246255 {
@@ -288,6 +297,7 @@ MainLoop(FILE *source)
288297 continue ;
289298 }
290299 }
300+
291301 /*
292302 * "quit" and "exit" are only commands when the query buffer is
293303 * empty, but we emit a one-line message even when it isn't to
@@ -318,6 +328,21 @@ MainLoop(FILE *source)
318328 break ;
319329 }
320330 }
331+
332+ /*
333+ * If they typed "\q" in a place where "\q" is not active,
334+ * supply a hint. The text is still added to the query
335+ * buffer.
336+ */
337+ if (found_q && query_buf -> len != 0 &&
338+ prompt_status != PROMPT_READY &&
339+ prompt_status != PROMPT_CONTINUE &&
340+ prompt_status != PROMPT_PAREN )
341+ #ifndef WIN32
342+ puts (_ ("Use control-D to quit." ));
343+ #else
344+ puts (_ ("Use control-C to quit." ));
345+ #endif
321346 }
322347
323348 /* echo back if flag is set, unless interactive */
0 commit comments