Uploaded image for project: 'Hive'
  1. Hive
  2. HIVE-15820

comment at the head of beeline -e

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Patch Available
    • Priority: Major
    • Resolution: Unresolved
    • Affects Version/s: 1.2.1, 2.1.1
    • Fix Version/s: None
    • Component/s: Beeline
    • Labels:

      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())

      { return line; }

      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)

      { break; }

      }
      }

      char letter = line.charAt(index);
      if (letter == escape)

      { escape = -1; // Turn escape off. }

      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

        1. HIVE-15820.patch
          2 kB
          muxin

          Issue Links

            Activity

              People

              • Assignee:
                muxin muxin
                Reporter:
                muxin muxin
              • Votes:
                0 Vote for this issue
                Watchers:
                5 Start watching this issue

                Dates

                • Created:
                  Updated: