Skip to content

Commit 1ba2bb7

Browse files
Resolve the situation where the field value contains commas in line formatter. (#16609)
1 parent 09da138 commit 1ba2bb7

2 files changed

Lines changed: 24 additions & 2 deletions

File tree

example/mqtt/src/main/java/org/apache/iotdb/mqtt/MQTTClient.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,19 @@ private static void jsonPayloadFormatter(BlockingConnection connection) throws E
7272

7373
// The database must be created in advance
7474
private static void linePayloadFormatter(BlockingConnection connection) throws Exception {
75+
// myTable,tag1=t1,tag2=t2 fieldKey1="1,2,3" 1740109006001
76+
String payload = "myTable,tag1=t1,tag2=t2 fieldKey1=\"1,2,3\" 1740109006001";
77+
connection.publish(DATABASE + "/myTopic", payload.getBytes(), QoS.AT_LEAST_ONCE, false);
78+
Thread.sleep(10);
79+
80+
payload = "myTable,tag1=t1,tag2=t2 fieldKey1=\"1,2,3\" 1740109006002";
81+
connection.publish(DATABASE + "/myTopic", payload.getBytes(), QoS.AT_LEAST_ONCE, false);
82+
Thread.sleep(10);
7583

76-
String payload =
84+
payload = "myTable,tag1=t1,tag2=t2 fieldKey1=\"1,2,3\" 1740109006003";
85+
connection.publish(DATABASE + "/myTopic", payload.getBytes(), QoS.AT_LEAST_ONCE, false);
86+
Thread.sleep(10);
87+
payload =
7788
"test1,tag1=t1,tag2=t2 attr3=a5,attr4=a4 field1=\"fieldValue1\",field2=1i,field3=1u 1";
7889
connection.publish(DATABASE + "/myTopic", payload.getBytes(), QoS.AT_LEAST_ONCE, false);
7990
Thread.sleep(10);

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/mqtt/LinePayloadFormatter.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import java.util.List;
3232
import java.util.regex.Matcher;
3333
import java.util.regex.Pattern;
34+
import java.util.stream.Stream;
3435

3536
/**
3637
* The Line payload formatter. myTable,tag1=value1,tag2=value2 attr1=value1,attr2=value2
@@ -190,7 +191,7 @@ private boolean setFields(Matcher matcher, TableMessage message) {
190191
List<Object> values = new ArrayList<>();
191192
String fieldsGroup = matcher.group(FIELDS);
192193
if (fieldsGroup != null && !fieldsGroup.isEmpty()) {
193-
String[] fieldPairs = fieldsGroup.split(COMMA);
194+
String[] fieldPairs = splitFieldPairs(fieldsGroup);
194195
for (String fieldPair : fieldPairs) {
195196
if (!fieldPair.isEmpty()) {
196197
String[] keyValue = fieldPair.split(EQUAL);
@@ -213,6 +214,16 @@ private boolean setFields(Matcher matcher, TableMessage message) {
213214
}
214215
}
215216

217+
private String[] splitFieldPairs(String fieldsGroup) {
218+
219+
if (fieldsGroup == null || fieldsGroup.isEmpty()) return new String[0];
220+
Matcher m = Pattern.compile("\\w+=\"[^\"]*\"|\\w+=[^,]*").matcher(fieldsGroup);
221+
Stream.Builder<String> builder = Stream.builder();
222+
223+
while (m.find()) builder.add(m.group());
224+
return builder.build().toArray(String[]::new);
225+
}
226+
216227
private Pair<TSDataType, Object> analyticValue(String value) {
217228
if (value.startsWith("\"") && value.endsWith("\"")) {
218229
// String

0 commit comments

Comments
 (0)