[KYUUBI #6526] Kyuubi BeeLine wrongly process JDBC URL that contains --

# 🔍 Description
## Issue References 🔗

This pull request fixes https://github.com/apache/kyuubi/issues/6522

## Describe Your Solution 🔧

Remove comments in dispatch commands only execute command

## Types of changes 🔖

- [ ] Bugfix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to change)

## Test Plan 🧪

#### Behavior Without This Pull Request ⚰️

#### Behavior With This Pull Request 🎉

#### Related Unit Tests

---

# Checklist 📝

- [ ] This patch was not authored or co-authored using [Generative Tooling](https://www.apache.org/legal/generative-tooling.html)

**Be nice. Be informative.**

Closes #6526 from zcx513566/issues_6522.

Closes #6526

3dfd94364 [axiangzheng] [Bug] Use kyuubi beeline connect kyuubi server error if url contains '--' string
6677497ee [axiangzheng] [Bug] Use kyuubi beeline connect kyuubi server error if url contains '--' string

Authored-by: axiangzheng <axiangzheng@tencent.com>
Signed-off-by: Cheng Pan <chengpan@apache.org>
This commit is contained in:
axiangzheng 2024-07-08 14:17:40 +08:00 committed by Cheng Pan
parent 80f7496dde
commit e26b57acda
No known key found for this signature in database
GPG Key ID: 8001952629BCC75D
2 changed files with 13 additions and 4 deletions

View File

@ -218,7 +218,7 @@ public class KyuubiBeeLine extends BeeLine {
if (!commands.isEmpty()) {
for (String command : commands) {
debug(loc("executing-command", command));
if (!dispatch(command)) {
if (!removeCommentsDispatch(command)) {
code++;
}
}
@ -282,9 +282,8 @@ public class KyuubiBeeLine extends BeeLine {
return executionResult;
}
// see HIVE-15820: comment at the head of beeline -e
@Override
boolean dispatch(String line) {
// see HIVE-15820: comment at the head of beeline -e only dispatch commands
boolean removeCommentsDispatch(String line) {
return super.dispatch(isPythonMode() ? line : HiveStringUtils.removeComments(line));
}

View File

@ -95,12 +95,14 @@ public class KyuubiBeeLineTest {
@Test
public void testKyuubiBeelineComment() {
String[] url = new String[] {""};
KyuubiBeeLine interceptedKyuubiBeeLine =
new KyuubiBeeLine() {
@Override
boolean dispatch(String line) {
if (line != null && line.startsWith("!connect")) {
LOG.info("Return true for command: {} to pretend connection is established.", line);
url[0] = line;
return true;
}
return super.dispatch(line);
@ -122,12 +124,14 @@ public class KyuubiBeeLineTest {
interceptedKyuubiBeeLine.initArgs(
new String[] {"-u", "dummy_url", "-e", "--comment show database;"});
assertEquals(0, cmd[0].length());
assertEquals("!connect dummy_url '' '' ", url[0]);
// Beeline#exit must be false to execute sql
interceptedKyuubiBeeLine.setExit(false);
interceptedKyuubiBeeLine.initArgs(
new String[] {"-u", "dummy_url", "-e", "--comment\n show database;"});
assertEquals("show database;", cmd[0]);
assertEquals("!connect dummy_url '' '' ", url[0]);
interceptedKyuubiBeeLine.setExit(false);
interceptedKyuubiBeeLine.initArgs(
@ -135,6 +139,12 @@ public class KyuubiBeeLineTest {
"-u", "dummy_url", "-e", "--comment line 1 \n --comment line 2 \n show database;"
});
assertEquals("show database;", cmd[0]);
interceptedKyuubiBeeLine.setExit(false);
interceptedKyuubiBeeLine.initArgs(
new String[] {"-u", "dummy--url", "-e", "--comment\n show database;"});
assertEquals("show database;", cmd[0]);
assertEquals("!connect dummy--url '' '' ", url[0]);
}
static class BufferPrintStream extends PrintStream {