Skip to content

Commit 82e47e7

Browse files
committed
support path like like root.db1.a,b.**
1 parent 3b1a19f commit 82e47e7

2 files changed

Lines changed: 23 additions & 4 deletions

File tree

iotdb-core/datanode/src/test/java/org/apache/iotdb/db/pipe/source/IoTDBDataRegionSourceTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ public void testIoTDBDataRegionExtractorWithPattern() {
8383
Assert.assertNull(testIoTDBDataRegionExtractorWithPattern("root.`a-b`"));
8484
Assert.assertNull(testIoTDBDataRegionExtractorWithPattern("root.1"));
8585
Assert.assertNull(testIoTDBDataRegionExtractorWithPattern("root.a,root.b"));
86+
Assert.assertNull(testIoTDBDataRegionExtractorWithPattern("root.a,root.b,root.db1.`a,b`.**"));
8687
}
8788

8889
public Exception testIoTDBDataRegionExtractorWithPattern(final String pattern) {

iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/pipe/datastructure/pattern/TreePattern.java

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -155,13 +155,31 @@ private static List<TreePattern> parseMultiplePatterns(
155155
if (pattern.isEmpty()) {
156156
return Collections.singletonList(patternSupplier.apply(pattern));
157157
}
158+
158159
final List<TreePattern> patterns = new ArrayList<>();
159-
// Support comma-separated multiple patterns
160-
for (final String singlePattern : pattern.split(",")) {
161-
if (!singlePattern.trim().isEmpty()) {
162-
patterns.add(patternSupplier.apply(singlePattern.trim()));
160+
final StringBuilder currentPattern = new StringBuilder();
161+
boolean inBackticks = false;
162+
163+
for (final char c : pattern.toCharArray()) {
164+
if (c == '`') {
165+
inBackticks = !inBackticks;
166+
currentPattern.append(c);
167+
} else if (c == ',' && !inBackticks) {
168+
final String singlePattern = currentPattern.toString().trim();
169+
if (!singlePattern.isEmpty()) {
170+
patterns.add(patternSupplier.apply(singlePattern));
171+
}
172+
currentPattern.setLength(0);
173+
} else {
174+
currentPattern.append(c);
163175
}
164176
}
177+
178+
final String lastPattern = currentPattern.toString().trim();
179+
if (!lastPattern.isEmpty()) {
180+
patterns.add(patternSupplier.apply(lastPattern));
181+
}
182+
165183
return patterns;
166184
}
167185

0 commit comments

Comments
 (0)