[
https://issues.apache.org/jira/browse/HIVE-19700?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16489825#comment-16489825
]
Naveen Gangam commented on HIVE-19700:
--------------------------------------
For example,
{code}
$ cat /tmp/multi.sql
select * from testa
where
col2 > 100;
$ beeline -u "jdbc:hive2://localhost:10000" -n hive -p hive --silent=true -f
/tmp/multi.sql > /tmp/b_multi.out &
$ cat /tmp/b_multi.out
null+-------------+-------------+-------------+-------------+-------------+--------------+--------------+--------------+--+
| testa.col1 | testa.col2 | testa.col3 | testa.col4 | testa.col5 |
testa.part1 | testa.part2 | testa.part3 |
+-------------+-------------+-------------+-------------+-------------+--------------+--------------+--------------+--+
| 12.341 | 1001 | 2001 | 3001 | abcd | CA
| ABC | 300 |
| 12.341 | 1001 | 2001 | 3001 | abcd | UK
| DEF | 123 |
| 12.341 | 1001 | 2001 | 3001 | abcd | US
| ABC | 123 |
| 12.341 | 1001 | 2001 | 3001 | abcd | US
| DEF | 200 |
+-------------+-------------+-------------+-------------+-------------+--------------+--------------+--------------+--+
With the proposed fix,
$ beeline -u "jdbc:hive2://localhost:10000" -n hive -p hive --silent=true -f
/tmp/multi.sql > /tmp/g_multi.out
$ cat /tmp/g_multi.out
+-------------+-------------+-------------+-------------+-------------+--------------+--------------+--------------+--+
| testa.col1 | testa.col2 | testa.col3 | testa.col4 | testa.col5 |
testa.part1 | testa.part2 | testa.part3 |
+-------------+-------------+-------------+-------------+-------------+--------------+--------------+--------------+--+
| 12.341 | 1001 | 2001 | 3001 | abcd | CA
| ABC | 300 |
| 12.341 | 1001 | 2001 | 3001 | abcd | UK
| DEF | 123 |
| 12.341 | 1001 | 2001 | 3001 | abcd | US
| ABC | 123 |
| 12.341 | 1001 | 2001 | 3001 | abcd | US
| DEF | 200 |
+-------------+-------------+-------------+-------------+-------------+--------------+--------------+--------------+--+
{code}
> 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
>
>
> 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)