Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
1.2.1, 2.1.1
Description
$ beeline -u jdbc:hive2://localhost:10000 -n test -e "
> --asdfasdfasdfasdf
> select * from test_table;
> "
expected result of the above command should be all rows of test_table(same as run in beeline interactive mode),but it does not output anything.
the cause is that -e option will read commands as one string, and in method dispatch(String line) it calls function isComment(String line) in the first, which using
'lineTrimmed.startsWith("#") || lineTrimmed.startsWith("--")'
to regard commands as a comment.
two ways can be considered to fix this problem:
1. in method initArgs(String[] args), split command by '\n' into command list before dispatch when cl.getOptionValues('e') != null
2. in method dispatch(String line), remove comments using this:
static String removeComments(String line) {
if (line == null || line.isEmpty())
StringBuilder builder = new StringBuilder();
int escape = -1;
for (int index = 0; index < line.length(); index++) {
if (index < line.length() - 1 && line.charAt(index) == line.charAt(index + 1)) {
if (escape == 1 && line.charAt(index) == '') {
//find \n as the end of comment
index = line.indexOf('\n',index+1);
//there is no sql after this comment,so just break out
if (-1==index)
}
}
char letter = line.charAt(index);
if (letter == escape)
else if (escape == -1 && (letter == '\'' || letter == '"'))
{ escape = letter; // Turn escape on. } builder.append(letter);
}
return builder.toString();
}
the second way can be a general solution to remove all comments start with '--' in a sql
Attachments
Attachments
Issue Links
- depends upon
-
HIVE-11100 Beeline should escape semi-colon in queries
- Closed
- is depended upon by
-
HIVE-15822 beeline ignore all sql under comment after semicolon
- Resolved
- is related to
-
HIVE-15822 beeline ignore all sql under comment after semicolon
- Resolved
- links to