Skip to content

Commit f544d67

Browse files
committed
opensearch-project#2550 Not removing leading periods when quoting/unquoting.
Signed-off-by: jzonthemtn <[email protected]>
1 parent 3dd1729 commit f544d67

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

legacy/src/main/java/org/opensearch/sql/legacy/utils/StringUtils.java

+15-1
Original file line numberDiff line numberDiff line change
@@ -90,12 +90,26 @@ public static String unquoteSingleField(String text) {
9090
* @return A string whose each dot-separated field has been unquoted from back-ticks (if any)
9191
*/
9292
public static String unquoteFullColumn(String text, String quote) {
93+
boolean startsWithPeriod = false;
94+
if (text.startsWith(quote + ".")) {
95+
startsWithPeriod = true;
96+
text = quote + text.substring(2);
97+
}
9398
String[] strs = text.split("\\.");
9499
for (int i = 0; i < strs.length; i++) {
95100
String unquotedSubstr = unquoteSingleField(strs[i], quote);
96101
strs[i] = unquotedSubstr;
97102
}
98-
return String.join(".", strs);
103+
if (startsWithPeriod) {
104+
String s = String.join(".", strs);
105+
if (s.startsWith(quote)) {
106+
return new StringBuilder(s).insert(1, ".").toString();
107+
} else {
108+
return "." + s;
109+
}
110+
} else {
111+
return String.join(".", strs);
112+
}
99113
}
100114

101115
public static String unquoteFullColumn(String text) {

legacy/src/test/java/org/opensearch/sql/legacy/unittest/utils/BackticksUnquoterTest.java

+5
Original file line numberDiff line numberDiff line change
@@ -23,20 +23,25 @@ public class BackticksUnquoterTest {
2323
public void assertNotQuotedStringShouldKeepTheSame() {
2424
assertThat(unquoteSingleField("identifier"), equalTo("identifier"));
2525
assertThat(unquoteFullColumn("identifier"), equalTo("identifier"));
26+
assertThat(unquoteFullColumn(".identifier"), equalTo(".identifier"));
2627
}
2728

2829
@Test
2930
public void assertStringWithOneBackTickShouldKeepTheSame() {
3031
assertThat(unquoteSingleField("`identifier"), equalTo("`identifier"));
3132
assertThat(unquoteFullColumn("`identifier"), equalTo("`identifier"));
33+
assertThat(unquoteFullColumn("`.identifier"), equalTo("`.identifier"));
3234
}
3335

3436
@Test
3537
public void assertBackticksQuotedStringShouldBeUnquoted() {
3638
assertThat("identifier", equalTo(unquoteSingleField("`identifier`")));
39+
assertThat(".identifier", equalTo(unquoteSingleField("`.identifier`")));
3740

3841
assertThat(
3942
"identifier1.identifier2", equalTo(unquoteFullColumn("`identifier1`.`identifier2`")));
4043
assertThat("identifier1.identifier2", equalTo(unquoteFullColumn("`identifier1`.identifier2")));
44+
assertThat(
45+
".identifier1.identifier2", equalTo(unquoteFullColumn("`.identifier1`.`identifier2`")));
4146
}
4247
}

0 commit comments

Comments
 (0)