Skip to content

Commit 772c36f

Browse files
committed
fix: fixing double quote escape
1 parent 7a12bff commit 772c36f

3 files changed

Lines changed: 40 additions & 9 deletions

File tree

flux-dsl/src/main/java/com/influxdb/query/dsl/functions/properties/FunctionsParameters.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@ public final class FunctionsParameters {
5454

5555
private Map<String, Property> properties = new LinkedHashMap<>();
5656

57+
public static String escapeDoubleQuotes(final String val) {
58+
return val.replace("\"", "\\\"");
59+
}
60+
5761
private FunctionsParameters() {
5862
}
5963

@@ -86,7 +90,7 @@ public static String serializeValue(@Nonnull final Object value) {
8690
}
8791

8892
serializedValue = collection.stream()
89-
.map(host -> "\"" + host + "\"")
93+
.map(host -> "\"" + escapeDoubleQuotes(host.toString()) + "\"")
9094
.collect(Collectors.joining(", ", "[", "]"));
9195
}
9296

@@ -97,7 +101,7 @@ public static String serializeValue(@Nonnull final Object value) {
97101
Map map = (Map) serializedValue;
98102
//noinspection unchecked
99103
map.keySet().forEach(key -> {
100-
joiner.add(String.format("%s: \"%s\"", key, map.get(key)));
104+
joiner.add(String.format("%s: \"%s\"", key, escapeDoubleQuotes(map.get(key).toString())));
101105
});
102106

103107
serializedValue = joiner;
@@ -337,7 +341,7 @@ public String value(@Nonnull final Map<String, Object> namedProperties) {
337341
return null;
338342
}
339343

340-
return "\"" + value + "\"";
344+
return "\"" + escapeDoubleQuotes(value) + "\"";
341345
}
342346
}
343347

flux-dsl/src/main/java/com/influxdb/query/dsl/functions/restriction/ColumnRestriction.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
import com.influxdb.query.dsl.functions.properties.FunctionsParameters;
2929
import com.influxdb.utils.Arguments;
3030

31+
import static com.influxdb.query.dsl.functions.properties.FunctionsParameters.escapeDoubleQuotes;
32+
3133
/**
3234
* The column restrictions.
3335
*
@@ -166,8 +168,9 @@ public ContainsRestrictions(@Nonnull final String fieldName, @Nonnull final Stri
166168

167169
@Override
168170
public String toString() {
169-
return "contains(value: r[\"" + fieldName + "\"], set:["
170-
+ Arrays.stream(set).collect(Collectors.joining("\", \"", "\"", "\"")) + "])";
171+
return "contains(value: r[\"" + escapeDoubleQuotes(fieldName) + "\"], set:["
172+
+ Arrays.stream(set).map(FunctionsParameters::escapeDoubleQuotes)
173+
.collect(Collectors.joining("\", \"", "\"", "\"")) + "])";
171174
}
172175
}
173176

@@ -197,7 +200,4 @@ public String toString() {
197200
return "r[\"" + escapeDoubleQuotes(fieldName) + "\"] " + operator + " " + value;
198201
}
199202
}
200-
private static String escapeDoubleQuotes(final String val) {
201-
return val.replace("\"", "\\\"");
202-
}
203203
}

flux-dsl/src/test/java/com/influxdb/query/dsl/functions/restriction/RestrictionsTest.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,15 @@
2121
*/
2222
package com.influxdb.query.dsl.functions.restriction;
2323

24+
import com.influxdb.query.dsl.Flux;
2425
import org.assertj.core.api.Assertions;
2526
import org.junit.jupiter.api.Test;
2627
import org.junit.platform.runner.JUnitPlatform;
2728
import org.junit.runner.RunWith;
2829

30+
import java.util.HashMap;
31+
import java.util.Map;
32+
2933
/**
3034
* @author Jakub Bednar (bednar@github) (09/10/2018 10:33)
3135
*/
@@ -97,12 +101,35 @@ void emptyLogical() {
97101
}
98102

99103
@Test
100-
void escapeStringValues() {
104+
void escaping() {
105+
101106
Restrictions restrictions = Restrictions.tag("my-tag").equal("escaped\"tag");
102107
Assertions.assertThat(restrictions.toString()).isEqualTo("r[\"my-tag\"] == \"escaped\\\"tag\"");
103108

104109
restrictions = Restrictions.column("my\"column").exists();
105110
Assertions.assertThat(restrictions.toString()).isEqualTo("exists r[\"my\\\"column\"]");
111+
112+
restrictions = Restrictions.tag("_value").contains(new String[]{"val\"ue1", "value2"});
113+
114+
Assertions.assertThat(restrictions.toString()).isEqualTo("contains(value: r[\"_value\"], set:[\"val\\\"ue1\", \"value2\"])");
115+
116+
Flux flux = Flux
117+
.from("telegraf")
118+
.drop(new String[]{"host", "ta\"g"});
119+
120+
Assertions.assertThat(flux.toString())
121+
.isEqualToIgnoringWhitespace("from(bucket:\"telegraf\") |> drop(columns:[\"host\", \"ta\\\"g\"])");
122+
123+
Map<String, String> map = new HashMap<>();
124+
map.put("host", "ser\"ver");
125+
map.put("_value", "va\"l");
126+
127+
flux = Flux
128+
.from("tel\"egraf")
129+
.rename(map);
130+
131+
Assertions.assertThat(flux.toString()).isEqualToIgnoringWhitespace("from(bucket:\"tel\\\"egraf\") |> rename(columns: {host: \"ser\\\"ver\", _value: \"va\\\"l\"})");
132+
106133
}
107134

108135
}

0 commit comments

Comments
 (0)