From 4eed725dacf40721361b6a79753acfebf8eece4b Mon Sep 17 00:00:00 2001 From: Attila Turoczy Date: Sat, 13 Jun 2026 00:43:16 +0200 Subject: [PATCH 1/7] HIVE-29660: --- .../java/org/apache/hive/beeline/BeeLine.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/beeline/src/java/org/apache/hive/beeline/BeeLine.java b/beeline/src/java/org/apache/hive/beeline/BeeLine.java index bef953409657..db1e5afaac3a 100644 --- a/beeline/src/java/org/apache/hive/beeline/BeeLine.java +++ b/beeline/src/java/org/apache/hive/beeline/BeeLine.java @@ -483,6 +483,24 @@ String getApplicationTitle() { }); } + String getApplicationBanner() { + Package pack = BeeLine.class.getPackage(); + String version = + pack.getImplementationVersion() == null ? "" : pack.getImplementationVersion(); + String sep = System.lineSeparator(); + return new StringBuilder(512) + .append(sep) + .append(" _ _ _____ _______").append(sep) + .append(" | | | |_ _\\ \\ / / ____|").append(sep) + .append(" | |_| || | \\ \\ / /| _|").append(sep) + .append(" | _ || | \\ V / | |___").append(sep) + .append(" |_| |_|___| \\_/ |_____|").append(sep) + .append(sep) + .append(" Apache Hive " + version + " — Beeline").append(sep) + .append(" The Data Warehouse for Apache Iceberg").append(sep) + .toString(); + } + String getApplicationContactInformation() { return getManifestAttribute("Implementation-Vendor"); } @@ -1139,6 +1157,7 @@ public int begin(String[] args, InputStream inputStream, boolean keepHistory) th return executeFile(getOpts().getScriptFile()); } try { + info(getApplicationBanner()); info(getApplicationTitle()); } catch (Exception e) { // ignore From 52b68bade6ff52a4be2da35a096d7a1743c699fe Mon Sep 17 00:00:00 2001 From: Attila Turoczy Date: Sat, 13 Jun 2026 01:03:46 +0200 Subject: [PATCH 2/7] HIVE-29660: Show an Apache Hive banner on Beeline startup --- .../java/org/apache/hive/beeline/BeeLine.java | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/beeline/src/java/org/apache/hive/beeline/BeeLine.java b/beeline/src/java/org/apache/hive/beeline/BeeLine.java index db1e5afaac3a..a22379759823 100644 --- a/beeline/src/java/org/apache/hive/beeline/BeeLine.java +++ b/beeline/src/java/org/apache/hive/beeline/BeeLine.java @@ -110,6 +110,7 @@ import com.google.common.annotations.VisibleForTesting; +import org.jline.builtins.Completers.FileNameCompleter; import org.jline.reader.Completer; import org.jline.reader.EndOfFileException; import org.jline.reader.History; @@ -489,15 +490,14 @@ String getApplicationBanner() { pack.getImplementationVersion() == null ? "" : pack.getImplementationVersion(); String sep = System.lineSeparator(); return new StringBuilder(512) + .append(" _ _ _____ _______").append(sep) + .append(" | | | |_ _\\ \\ / / ____|").append(sep) + .append(" | |_| || | \\ \\ / /| _|").append(sep) + .append(" | _ || | \\ V / | |___").append(sep) + .append(" |_| |_|___| \\_/ |_____|").append(sep) .append(sep) - .append(" _ _ _____ _______").append(sep) - .append(" | | | |_ _\\ \\ / / ____|").append(sep) - .append(" | |_| || | \\ \\ / /| _|").append(sep) - .append(" | _ || | \\ V / | |___").append(sep) - .append(" |_| |_|___| \\_/ |_____|").append(sep) - .append(sep) - .append(" Apache Hive " + version + " — Beeline").append(sep) - .append(" The Data Warehouse for Apache Iceberg").append(sep) + .append("Apache Hive " + version + " - Beeline").append(sep) + .append("The Open Data Warehouse for Modern Analytics").append(sep) .toString(); } @@ -1158,7 +1158,6 @@ public int begin(String[] args, InputStream inputStream, boolean keepHistory) th } try { info(getApplicationBanner()); - info(getApplicationTitle()); } catch (Exception e) { // ignore } From c87dc14181ff6be308c5d091fb1e0c019ff2cd1f Mon Sep 17 00:00:00 2001 From: Attila Turoczy Date: Sat, 13 Jun 2026 22:04:43 +0200 Subject: [PATCH 3/7] HIVE-29660: Remove unused imports and outdated class documentation from BeeLine.java --- .../java/org/apache/hive/beeline/BeeLine.java | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/beeline/src/java/org/apache/hive/beeline/BeeLine.java b/beeline/src/java/org/apache/hive/beeline/BeeLine.java index a22379759823..bcaa1287826c 100644 --- a/beeline/src/java/org/apache/hive/beeline/BeeLine.java +++ b/beeline/src/java/org/apache/hive/beeline/BeeLine.java @@ -122,25 +122,6 @@ import org.jline.terminal.Terminal; import org.jline.terminal.TerminalBuilder; -import static org.jline.builtins.Completers.FileNameCompleter; - - -/** - * A console SQL shell with command completion. - *

- * TODO: - *

    - *
  • User-friendly connection prompts
  • - *
  • Page results
  • - *
  • Handle binary data (blob fields)
  • - *
  • Implement command aliases
  • - *
  • Stored procedure execution
  • - *
  • Binding parameters to prepared statements
  • - *
  • Scripting language
  • - *
  • XA transactions
  • - *
- * - */ @SuppressWarnings("static-access") public class BeeLine implements Closeable { private static final ResourceBundle resourceBundle = From df69c22c5165a0c96eb0324b572b91e3bfa7f056 Mon Sep 17 00:00:00 2001 From: Attila Turoczy Date: Sat, 13 Jun 2026 22:17:20 +0200 Subject: [PATCH 4/7] HIVE-29660: Add color for the banner --- .../java/org/apache/hive/beeline/BeeLine.java | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/beeline/src/java/org/apache/hive/beeline/BeeLine.java b/beeline/src/java/org/apache/hive/beeline/BeeLine.java index bcaa1287826c..37adde089402 100644 --- a/beeline/src/java/org/apache/hive/beeline/BeeLine.java +++ b/beeline/src/java/org/apache/hive/beeline/BeeLine.java @@ -470,18 +470,36 @@ String getApplicationBanner() { String version = pack.getImplementationVersion() == null ? "" : pack.getImplementationVersion(); String sep = System.lineSeparator(); + boolean color = bannerColorEnabled(); + String yellow = color ? "\u001b[1;33m" : ""; + String reset = color ? "\u001b[0m" : ""; return new StringBuilder(512) + .append(yellow) .append(" _ _ _____ _______").append(sep) .append(" | | | |_ _\\ \\ / / ____|").append(sep) .append(" | |_| || | \\ \\ / /| _|").append(sep) .append(" | _ || | \\ V / | |___").append(sep) - .append(" |_| |_|___| \\_/ |_____|").append(sep) + .append(" |_| |_|___| \\_/ |_____|").append(reset).append(sep) .append(sep) .append("Apache Hive " + version + " - Beeline").append(sep) .append("The Open Data Warehouse for Modern Analytics").append(sep) .toString(); } + /** True when the active terminal can display ANSI colors (not dumb/redirected). */ + private boolean bannerColorEnabled() { + try { + LineReader lr = getLineReader(); + if (lr != null && lr.getTerminal() != null) { + String type = lr.getTerminal().getType(); + return type != null && !Terminal.TYPE_DUMB.equals(type); + } + } catch (Exception e) { + // no usable terminal -> stay monochrome + } + return false; + } + String getApplicationContactInformation() { return getManifestAttribute("Implementation-Vendor"); } From 02e17b5199a8110991e5d9762b354dccda831ba2 Mon Sep 17 00:00:00 2001 From: Attila Turoczy Date: Sat, 13 Jun 2026 22:19:17 +0200 Subject: [PATCH 5/7] HIVE-29660: Remove unused getApplicationTitle method --- .../src/java/org/apache/hive/beeline/BeeLine.java | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/beeline/src/java/org/apache/hive/beeline/BeeLine.java b/beeline/src/java/org/apache/hive/beeline/BeeLine.java index 37adde089402..ee77b82865f2 100644 --- a/beeline/src/java/org/apache/hive/beeline/BeeLine.java +++ b/beeline/src/java/org/apache/hive/beeline/BeeLine.java @@ -450,21 +450,6 @@ String getManifestAttribute(String name) { } } - - String getApplicationTitle() { - Package pack = BeeLine.class.getPackage(); - - return loc("app-introduction", new Object[] { "Beeline", - pack.getImplementationVersion() == null ? "???" : pack.getImplementationVersion(), - "Apache Hive", - // getManifestAttribute ("Specification-Title"), - // getManifestAttribute ("Implementation-Version"), - // getManifestAttribute ("Implementation-ReleaseDate"), - // getManifestAttribute ("Implementation-Vendor"), - // getManifestAttribute ("Implementation-License"), - }); - } - String getApplicationBanner() { Package pack = BeeLine.class.getPackage(); String version = From 97688ef988fbb3f02160cc147af38ad2c0c59292 Mon Sep 17 00:00:00 2001 From: Attila Turoczy Date: Sat, 13 Jun 2026 23:58:16 +0200 Subject: [PATCH 6/7] HIVE-29660: Remove unused getApplicationTitle for every part of the code --- beeline/src/java/org/apache/hive/beeline/BeeLineOpts.java | 1 - 1 file changed, 1 deletion(-) diff --git a/beeline/src/java/org/apache/hive/beeline/BeeLineOpts.java b/beeline/src/java/org/apache/hive/beeline/BeeLineOpts.java index fa97ebe13afd..0294ac103228 100644 --- a/beeline/src/java/org/apache/hive/beeline/BeeLineOpts.java +++ b/beeline/src/java/org/apache/hive/beeline/BeeLineOpts.java @@ -223,7 +223,6 @@ public void save(OutputStream out) throws IOException { // don't save maxwidth: it is automatically set based on // the terminal configuration props.remove(PROPERTY_PREFIX + "maxwidth"); - props.store(out, beeLine.getApplicationTitle()); } catch (Exception e) { beeLine.handleException(e); } From cdce7ec853e2010285baf10424440c557c6f71f5 Mon Sep 17 00:00:00 2001 From: Attila Turoczy Date: Sun, 14 Jun 2026 09:41:08 +0200 Subject: [PATCH 7/7] HIVE-29660: Restore getApplicationTitle() as beeline.properties header --- beeline/src/java/org/apache/hive/beeline/BeeLine.java | 9 +++++++++ .../src/java/org/apache/hive/beeline/BeeLineOpts.java | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/beeline/src/java/org/apache/hive/beeline/BeeLine.java b/beeline/src/java/org/apache/hive/beeline/BeeLine.java index ee77b82865f2..fa958ffedd98 100644 --- a/beeline/src/java/org/apache/hive/beeline/BeeLine.java +++ b/beeline/src/java/org/apache/hive/beeline/BeeLine.java @@ -471,6 +471,15 @@ String getApplicationBanner() { .toString(); } + + String getApplicationTitle() { + Package pack = BeeLine.class.getPackage(); + return loc("app-introduction", new Object[] { "Beeline", + pack.getImplementationVersion() == null ? "???" : pack.getImplementationVersion(), + "Apache Hive", + }); + } + /** True when the active terminal can display ANSI colors (not dumb/redirected). */ private boolean bannerColorEnabled() { try { diff --git a/beeline/src/java/org/apache/hive/beeline/BeeLineOpts.java b/beeline/src/java/org/apache/hive/beeline/BeeLineOpts.java index 0294ac103228..6bfcf58849bc 100644 --- a/beeline/src/java/org/apache/hive/beeline/BeeLineOpts.java +++ b/beeline/src/java/org/apache/hive/beeline/BeeLineOpts.java @@ -217,12 +217,13 @@ public void save() throws IOException { } } - public void save(OutputStream out) throws IOException { + public void save(OutputStream out) { try { Properties props = toProperties(); // don't save maxwidth: it is automatically set based on // the terminal configuration props.remove(PROPERTY_PREFIX + "maxwidth"); + props.store(out, beeLine.getApplicationTitle()); } catch (Exception e) { beeLine.handleException(e); }