diff --git a/legacy/src/main/java/org/opensearch/sql/legacy/utils/StringUtils.java b/legacy/src/main/java/org/opensearch/sql/legacy/utils/StringUtils.java index 8a3975713b..12d2747b9e 100644 --- a/legacy/src/main/java/org/opensearch/sql/legacy/utils/StringUtils.java +++ b/legacy/src/main/java/org/opensearch/sql/legacy/utils/StringUtils.java @@ -90,12 +90,26 @@ public static String unquoteSingleField(String text) { * @return A string whose each dot-separated field has been unquoted from back-ticks (if any) */ public static String unquoteFullColumn(String text, String quote) { + boolean startsWithPeriod = false; + if (text.startsWith(quote + ".")) { + startsWithPeriod = true; + text = quote + text.substring(2); + } String[] strs = text.split("\\."); for (int i = 0; i < strs.length; i++) { String unquotedSubstr = unquoteSingleField(strs[i], quote); strs[i] = unquotedSubstr; } - return String.join(".", strs); + if (startsWithPeriod) { + String s = String.join(".", strs); + if (s.startsWith(quote)) { + return new StringBuilder(s).insert(1, ".").toString(); + } else { + return "." + s; + } + } else { + return String.join(".", strs); + } } public static String unquoteFullColumn(String text) { diff --git a/legacy/src/test/java/org/opensearch/sql/legacy/unittest/utils/BackticksUnquoterTest.java b/legacy/src/test/java/org/opensearch/sql/legacy/unittest/utils/BackticksUnquoterTest.java index c7e7f22d5c..0fc56b33dc 100644 --- a/legacy/src/test/java/org/opensearch/sql/legacy/unittest/utils/BackticksUnquoterTest.java +++ b/legacy/src/test/java/org/opensearch/sql/legacy/unittest/utils/BackticksUnquoterTest.java @@ -23,20 +23,25 @@ public class BackticksUnquoterTest { public void assertNotQuotedStringShouldKeepTheSame() { assertThat(unquoteSingleField("identifier"), equalTo("identifier")); assertThat(unquoteFullColumn("identifier"), equalTo("identifier")); + assertThat(unquoteFullColumn(".identifier"), equalTo(".identifier")); } @Test public void assertStringWithOneBackTickShouldKeepTheSame() { assertThat(unquoteSingleField("`identifier"), equalTo("`identifier")); assertThat(unquoteFullColumn("`identifier"), equalTo("`identifier")); + assertThat(unquoteFullColumn("`.identifier"), equalTo("`.identifier")); } @Test public void assertBackticksQuotedStringShouldBeUnquoted() { assertThat("identifier", equalTo(unquoteSingleField("`identifier`"))); + assertThat(".identifier", equalTo(unquoteSingleField("`.identifier`"))); assertThat( "identifier1.identifier2", equalTo(unquoteFullColumn("`identifier1`.`identifier2`"))); assertThat("identifier1.identifier2", equalTo(unquoteFullColumn("`identifier1`.identifier2"))); + assertThat( + ".identifier1.identifier2", equalTo(unquoteFullColumn("`.identifier1`.`identifier2`"))); } }