[ 
https://issues.apache.org/jira/browse/HIVE-19700?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16498156#comment-16498156
 ] 

Naveen Gangam commented on HIVE-19700:
--------------------------------------

Thanks [~ychena] for the review. The code certainly seems to indicate that 
something should get printed to the console when using UnsupportedTerminal. But 
that is not the case. Perhaps these are console settings or escape characters 
that is not visible in the output even when redirected to a file.
Also under normal circumstances, this code should never run because we never 
use UnsupportedTerminal except for under special circumstances. and even then 
the output looked good to me. 

> Workaround for JLine issue with UnsupportedTerminal
> ---------------------------------------------------
>
>                 Key: HIVE-19700
>                 URL: https://issues.apache.org/jira/browse/HIVE-19700
>             Project: Hive
>          Issue Type: Bug
>            Reporter: Naveen Gangam
>            Assignee: Naveen Gangam
>            Priority: Major
>             Fix For: 2.2.1
>
>         Attachments: HIVE-19700.patch
>
>
> From the JLine's ConsoleReader, readLine(prompt, mask) calls the following 
> beforeReadLine() method.
> {code}
>         try {
>             // System.out.println("is terminal supported " + 
> terminal.isSupported());
>             if (!terminal.isSupported()) {
>                 beforeReadLine(prompt, mask);
>             }
> {code}
> So specifically when using UnsupportedTerminal {{-Djline.terminal}} and 
> {{prompt=null}} and {{mask!=null}}, a "null" string gets printed to the 
> console before and after the query result. {{UnsupportedTerminal}} is 
> required to be used when running beeline as a background process, hangs 
> otherwise.
> {code}
>     private void beforeReadLine(final String prompt, final Character mask) {
>         if (mask != null && maskThread == null) {
>             final String fullPrompt = "\r" + prompt
>                 + "                 "
>                 + "                 "
>                 + "                 "
>                 + "\r" + prompt;
>             maskThread = new Thread()
>             {
>                 public void run() {
>                     while (!interrupted()) {
>                         try {
>                             Writer out = getOutput();
>                             out.write(fullPrompt);
> {code}
> So the {{prompt}} is null and {{mask}} is NOT in atleast 2 scenarios in 
> beeline. 
> when beeline's silent=true, prompt is null
> * 
> https://github.com/apache/hive/blob/master/beeline/src/java/org/apache/hive/beeline/BeeLine.java#L1264
> when running multiline queries
> * 
> https://github.com/apache/hive/blob/master/beeline/src/java/org/apache/hive/beeline/Commands.java#L1093
> When executing beeline in script mode (commands in a file), there should not 
> be any masking while reading lines from the script file. aka, entire line 
> should be a beeline command or part of a multiline hive query.
> So it should be safe to use a null mask instead of 
> {{ConsoleReader.NULL_MASK}} when using UnsupportedTerminal as jline terminal.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to