diff --git a/.circleci/config.yml b/.circleci/config.yml
index 3ed02d579d..ecf8ddf99a 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -200,7 +200,7 @@ jobs:
- maven-cache_v3-<< parameters.maven-image >>-
- run:
name: "Check generate site"
- command: mvn clean site site:stage -DskipTests
+ command: mvn clean site site:stage -Dmaven.test.skip=true
deploy-snapshot:
docker:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ffb6a2c7a8..1fe5253d5d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,12 @@
+## 6.10.1 [2026-03-24]
+
+### Bug Fixes
+
+1. [#862](https://github.com/influxdata/influxdb-client-java/pull/862): Improved tags parsing.
+ - Supports InfluxQL queries involving tag keys and values that incorporate escaped special characters such as commas. e.g. (`"my_data,model\,\ uin=Droid\,\ C3PO ..."`)
+ - This support is stable for InfluxDB Enterprise v1.x databases and InfluxDB v2.x databases using legacy v1 query contexts - e.g (`/query?db=test_data`).
+ - Influxdb OSS v1.x uses slightly different escape semantics. Use of escaped commas or spaces in tag keys and values with this database can lead to unexpected behavior. Support for special tags with OSS 1.x is not included with this hotfix release.
+
## 6.10.0 [2023-07-28]
### Bug Fixes
diff --git a/client-core/pom.xml b/client-core/pom.xml
index aa93034f9c..b8b5b32f7f 100644
--- a/client-core/pom.xml
+++ b/client-core/pom.xml
@@ -28,7 +28,7 @@
influxdb-client
com.influxdb
- 6.10.0
+ 6.10.1-SNAPSHOT
influxdb-client-core
@@ -66,7 +66,7 @@
scm:git:git@github.com:influxdata/influxdb-client-java.git
scm:git:git@github.com:influxdata/influxdb-client-java.git
https://github.com/influxdata/influxdb-client-java/tree/master
- v6.10.0
+ HEAD
diff --git a/client-kotlin/README.md b/client-kotlin/README.md
index 24be0c91bf..8a1747dc0e 100644
--- a/client-kotlin/README.md
+++ b/client-kotlin/README.md
@@ -303,26 +303,26 @@ The latest version for Maven dependency:
com.influxdb
influxdb-client-kotlin
- 6.10.0
+ 6.10.1
```
Or when using with Gradle:
```groovy
dependencies {
- implementation "com.influxdb:influxdb-client-kotlin:6.10.0"
+ implementation "com.influxdb:influxdb-client-kotlin:6.10.1"
}
```
### Snapshot Repository
-The snapshots are deployed into [OSS Snapshot repository](https://oss.sonatype.org/content/repositories/snapshots/).
+The snapshots are deployed into [OSS Snapshot repository](https://central.sonatype.com/repository/maven-snapshots/).
#### Maven
```xml
ossrh
OSS Snapshot repository
- https://oss.sonatype.org/content/repositories/snapshots/
+ https://central.sonatype.com/repository/maven-snapshots/
false
@@ -334,6 +334,6 @@ The snapshots are deployed into [OSS Snapshot repository](https://oss.sonatype.o
#### Gradle
```
repositories {
- maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
+ maven { url "https://central.sonatype.com/repository/maven-snapshots" }
}
```
diff --git a/client-kotlin/pom.xml b/client-kotlin/pom.xml
index ef25802651..a198c7d3a6 100644
--- a/client-kotlin/pom.xml
+++ b/client-kotlin/pom.xml
@@ -26,7 +26,7 @@
influxdb-client
com.influxdb
- 6.10.0
+ 6.10.1-SNAPSHOT
4.0.0
@@ -72,7 +72,7 @@
scm:git:git@github.com:influxdata/influxdb-client-java.git
scm:git:git@github.com:influxdata/influxdb-client-java.git
https://github.com/influxdata/influxdb-client-java/tree/master
- v6.10.0
+ HEAD
diff --git a/client-legacy/README.md b/client-legacy/README.md
index 44bff4aa4d..76cc321c8e 100644
--- a/client-legacy/README.md
+++ b/client-legacy/README.md
@@ -162,26 +162,26 @@ The latest version for Maven dependency:
com.influxdb
influxdb-client-flux
- 6.10.0
+ 6.10.1
```
Or when using with Gradle:
```groovy
dependencies {
- implementation "com.influxdb:influxdb-client-flux:6.10.0"
+ implementation "com.influxdb:influxdb-client-flux:6.10.1"
}
```
### Snapshot Repository
-The snapshots are deployed into [OSS Snapshot repository](https://oss.sonatype.org/content/repositories/snapshots/).
+The snapshots are deployed into [OSS Snapshot repository](https://central.sonatype.com/repository/maven-snapshots/).
#### Maven
```xml
ossrh
OSS Snapshot repository
- https://oss.sonatype.org/content/repositories/snapshots/
+ https://central.sonatype.com/repository/maven-snapshots/
false
@@ -193,6 +193,6 @@ The snapshots are deployed into [OSS Snapshot repository](https://oss.sonatype.o
#### Gradle
```
repositories {
- maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
+ maven { url "https://central.sonatype.com/repository/maven-snapshots" }
}
```
diff --git a/client-legacy/pom.xml b/client-legacy/pom.xml
index 2013916daa..e290f6154b 100644
--- a/client-legacy/pom.xml
+++ b/client-legacy/pom.xml
@@ -28,7 +28,7 @@
com.influxdb
influxdb-client
- 6.10.0
+ 6.10.1-SNAPSHOT
influxdb-client-flux
@@ -66,7 +66,7 @@
scm:git:git@github.com:influxdata/influxdb-client-java.git
scm:git:git@github.com:influxdata/influxdb-client-java.git
https://github.com/influxdata/influxdb-client-java/tree/master
- v6.10.0
+ HEAD
diff --git a/client-osgi/pom.xml b/client-osgi/pom.xml
index 769974ba23..9b46ecc5c0 100644
--- a/client-osgi/pom.xml
+++ b/client-osgi/pom.xml
@@ -28,7 +28,7 @@
influxdb-client
com.influxdb
- 6.10.0
+ 6.10.1-SNAPSHOT
influxdb-client-osgi
@@ -65,7 +65,7 @@
scm:git:git@github.com:influxdata/influxdb-client-java.git
scm:git:git@github.com:influxdata/influxdb-client-java.git
https://github.com/influxdata/influxdb-client-java/tree/master
- v6.10.0
+ HEAD
diff --git a/client-reactive/README.md b/client-reactive/README.md
index 609d6b6793..2b9298234f 100644
--- a/client-reactive/README.md
+++ b/client-reactive/README.md
@@ -433,26 +433,26 @@ The latest version for Maven dependency:
com.influxdb
influxdb-client-reactive
- 6.10.0
+ 6.10.1
```
Or when using with Gradle:
```groovy
dependencies {
- implementation "com.influxdb:influxdb-client-reactive:6.10.0"
+ implementation "com.influxdb:influxdb-client-reactive:6.10.1"
}
```
### Snapshot Repository
-The snapshots are deployed into [OSS Snapshot repository](https://oss.sonatype.org/content/repositories/snapshots/).
+The snapshots are deployed into [OSS Snapshot repository](https://central.sonatype.com/repository/maven-snapshots/).
#### Maven
```xml
ossrh
OSS Snapshot repository
- https://oss.sonatype.org/content/repositories/snapshots/
+ https://central.sonatype.com/repository/maven-snapshots/
false
@@ -464,6 +464,6 @@ The snapshots are deployed into [OSS Snapshot repository](https://oss.sonatype.o
#### Gradle
```
repositories {
- maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
+ maven { url "https://central.sonatype.com/repository/maven-snapshots" }
}
```
diff --git a/client-reactive/pom.xml b/client-reactive/pom.xml
index 39a7c7ea65..3b494365e2 100644
--- a/client-reactive/pom.xml
+++ b/client-reactive/pom.xml
@@ -26,7 +26,7 @@
influxdb-client
com.influxdb
- 6.10.0
+ 6.10.1-SNAPSHOT
4.0.0
@@ -68,7 +68,7 @@
scm:git:git@github.com:influxdata/influxdb-client-java.git
scm:git:git@github.com:influxdata/influxdb-client-java.git
https://github.com/influxdata/influxdb-client-java/tree/master
- v6.10.0
+ HEAD
diff --git a/client-scala/README.md b/client-scala/README.md
index d2006db80c..393ca2eee3 100644
--- a/client-scala/README.md
+++ b/client-scala/README.md
@@ -257,14 +257,14 @@ The latest version for Maven dependency:
com.influxdb
influxdb-client-scala_2.12
- 6.10.0
+ 6.10.1
```
Or when using with Gradle:
```groovy
dependencies {
- implementation "com.influxdb:influxdb-client-scala_2.12:6.10.0"
+ implementation "com.influxdb:influxdb-client-scala_2.12:6.10.1"
}
```
@@ -275,26 +275,26 @@ The latest version for Maven dependency:
com.influxdb
influxdb-client-scala_2.13
- 6.10.0
+ 6.10.1
```
Or when using with Gradle:
```groovy
dependencies {
- implementation "com.influxdb:influxdb-client-scala_2.13:6.10.0"
+ implementation "com.influxdb:influxdb-client-scala_2.13:6.10.1"
}
```
### Snapshot Repository
-The snapshots are deployed into [OSS Snapshot repository](https://oss.sonatype.org/content/repositories/snapshots/).
+The snapshots are deployed into [OSS Snapshot repository](https://central.sonatype.com/repository/maven-snapshots/).
#### Maven
```xml
ossrh
OSS Snapshot repository
- https://oss.sonatype.org/content/repositories/snapshots/
+ https://central.sonatype.com/repository/maven-snapshots/
false
@@ -306,6 +306,6 @@ The snapshots are deployed into [OSS Snapshot repository](https://oss.sonatype.o
#### Gradle
```
repositories {
- maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
+ maven { url "https://central.sonatype.com/repository/maven-snapshots" }
}
```
diff --git a/client-scala/cross/2.12/pom.xml b/client-scala/cross/2.12/pom.xml
index 73dbf7d430..907be840f7 100644
--- a/client-scala/cross/2.12/pom.xml
+++ b/client-scala/cross/2.12/pom.xml
@@ -26,7 +26,7 @@
influxdb-client
com.influxdb
- 6.10.0
+ 6.10.1-SNAPSHOT
../../../pom.xml
4.0.0
@@ -68,7 +68,7 @@
scm:git:git@github.com:influxdata/influxdb-client-java.git
scm:git:git@github.com:influxdata/influxdb-client-java.git
https://github.com/influxdata/influxdb-client-java/tree/master
- v6.10.0
+ HEAD
diff --git a/client-scala/cross/2.13/pom.xml b/client-scala/cross/2.13/pom.xml
index 41c1840cfa..368bd007cc 100644
--- a/client-scala/cross/2.13/pom.xml
+++ b/client-scala/cross/2.13/pom.xml
@@ -26,7 +26,7 @@
influxdb-client
com.influxdb
- 6.10.0
+ 6.10.1-SNAPSHOT
../../../pom.xml
4.0.0
@@ -68,7 +68,7 @@
scm:git:git@github.com:influxdata/influxdb-client-java.git
scm:git:git@github.com:influxdata/influxdb-client-java.git
https://github.com/influxdata/influxdb-client-java/tree/master
- v6.10.0
+ HEAD
diff --git a/client-test/pom.xml b/client-test/pom.xml
index 1c872b670c..a113f5762f 100644
--- a/client-test/pom.xml
+++ b/client-test/pom.xml
@@ -28,7 +28,7 @@
influxdb-client
com.influxdb
- 6.10.0
+ 6.10.1-SNAPSHOT
influxdb-client-test
@@ -68,7 +68,7 @@
scm:git:git@github.com:influxdata/influxdb-client-java.git
scm:git:git@github.com:influxdata/influxdb-client-java.git
https://github.com/influxdata/influxdb-client-java/tree/master
- v6.10.0
+ HEAD
diff --git a/client-utils/pom.xml b/client-utils/pom.xml
index 031eeb3424..cc419e5268 100644
--- a/client-utils/pom.xml
+++ b/client-utils/pom.xml
@@ -28,7 +28,7 @@
influxdb-client
com.influxdb
- 6.10.0
+ 6.10.1-SNAPSHOT
influxdb-client-utils
@@ -66,7 +66,7 @@
scm:git:git@github.com:influxdata/influxdb-client-java.git
scm:git:git@github.com:influxdata/influxdb-client-java.git
https://github.com/influxdata/influxdb-client-java/tree/master
- v6.10.0
+ HEAD
diff --git a/client/README.md b/client/README.md
index 0539e7b531..97bbb884e8 100644
--- a/client/README.md
+++ b/client/README.md
@@ -1322,26 +1322,26 @@ The latest version for Maven dependency:
com.influxdb
influxdb-client-java
- 6.10.0
+ 6.10.1
```
Or when using with Gradle:
```groovy
dependencies {
- implementation "com.influxdb:influxdb-client-java:6.10.0"
+ implementation "com.influxdb:influxdb-client-java:6.10.1"
}
```
### Snapshot Repository
-The snapshots are deployed into [OSS Snapshot repository](https://oss.sonatype.org/content/repositories/snapshots/).
+The snapshots are deployed into [OSS Snapshot repository](https://central.sonatype.com/repository/maven-snapshots/).
#### Maven
```xml
ossrh
OSS Snapshot repository
- https://oss.sonatype.org/content/repositories/snapshots/
+ https://central.sonatype.com/repository/maven-snapshots/
false
@@ -1353,7 +1353,7 @@ The snapshots are deployed into [OSS Snapshot repository](https://oss.sonatype.o
#### Gradle
```
repositories {
- maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
+ maven { url "https://central.sonatype.com/repository/maven-snapshots" }
}
```
diff --git a/client/pom.xml b/client/pom.xml
index 053b7e723a..2a68650e61 100644
--- a/client/pom.xml
+++ b/client/pom.xml
@@ -26,7 +26,7 @@
influxdb-client
com.influxdb
- 6.10.0
+ 6.10.1-SNAPSHOT
4.0.0
@@ -68,7 +68,7 @@
scm:git:git@github.com:influxdata/influxdb-client-java.git
scm:git:git@github.com:influxdata/influxdb-client-java.git
https://github.com/influxdata/influxdb-client-java/tree/master
- v6.10.0
+ HEAD
diff --git a/client/src/main/java/com/influxdb/client/internal/InfluxQLQueryApiImpl.java b/client/src/main/java/com/influxdb/client/internal/InfluxQLQueryApiImpl.java
index f02f6d97e9..9926b04969 100644
--- a/client/src/main/java/com/influxdb/client/internal/InfluxQLQueryApiImpl.java
+++ b/client/src/main/java/com/influxdb/client/internal/InfluxQLQueryApiImpl.java
@@ -120,7 +120,9 @@ static InfluxQLQueryResult readInfluxQLResult(
// All other columns are dynamically parsed
final int dynamicColumnsStartIndex = 2;
- try (CSVParser parser = new CSVParser(reader, CSVFormat.DEFAULT.builder().setIgnoreEmptyLines(false).build())) {
+ try (CSVParser parser = new CSVParser(reader, CSVFormat.DEFAULT.builder()
+ .setIgnoreEmptyLines(false)
+ .build())) {
for (CSVRecord csvRecord : parser) {
if (cancellable.isCancelled()) {
break;
@@ -180,11 +182,84 @@ static InfluxQLQueryResult readInfluxQLResult(
private static Map parseTags(@Nonnull final String value) {
final Map tags = new HashMap<>();
- if (value.length() > 0) {
- for (String entry : value.split(",")) {
- final String[] kv = entry.split("=");
- tags.put(kv[0], kv[1]);
+ if (value.isEmpty()) {
+ return tags;
+ }
+
+ StringBuilder currentKey = new StringBuilder();
+ StringBuilder currentValue = new StringBuilder();
+ boolean inValue = false;
+ boolean escaped = false;
+ boolean firstEscaped = false;
+
+ for (int i = 0; i < value.length(); i++) {
+ char c = value.charAt(i);
+
+ if (escaped) {
+ // current character is escaped - treat it as a literal
+ if (inValue) {
+ currentValue.append(c);
+ } else {
+ currentKey.append(c);
+ }
+ escaped = false;
+ continue;
+ }
+
+ if (c == '\\') {
+ // start escape sequence
+ // preserve escape character
+ if (firstEscaped) {
+ escaped = true;
+ firstEscaped = false;
+ continue;
+ }
+ if (inValue) {
+ currentValue.append(c);
+ } else {
+ currentKey.append(c);
+ }
+ firstEscaped = true;
+ continue;
}
+
+ if (firstEscaped) {
+ firstEscaped = false;
+ continue;
+ }
+
+ if (!inValue && c == '=') {
+ // unescaped '=' marks copula
+ inValue = true;
+ continue;
+ }
+
+ if (inValue && c == ',') {
+ // unescaped comma separates key value pairs
+ // finalize
+ String key = currentKey.toString();
+ String val = currentValue.toString();
+ if (!key.isEmpty()) {
+ tags.put(key, val);
+ }
+ currentKey.setLength(0);
+ currentValue.setLength(0);
+ inValue = false;
+ continue;
+ }
+
+ if (inValue) {
+ currentValue.append(c);
+ } else {
+ currentKey.append(c);
+ }
+ }
+
+ // finalize last key/value pair if any
+ String key = currentKey.toString();
+ String val = currentValue.toString();
+ if (inValue && !key.isEmpty()) {
+ tags.put(key, val);
}
return tags;
diff --git a/client/src/test/java/com/influxdb/client/ITInfluxQLQueryApi.java b/client/src/test/java/com/influxdb/client/ITInfluxQLQueryApi.java
index 45dcda1a58..b3be45baa5 100644
--- a/client/src/test/java/com/influxdb/client/ITInfluxQLQueryApi.java
+++ b/client/src/test/java/com/influxdb/client/ITInfluxQLQueryApi.java
@@ -24,7 +24,10 @@
import java.io.IOException;
import java.math.BigDecimal;
import java.time.Instant;
+import java.util.HashMap;
+import java.util.Map;
+import com.influxdb.LogLevel;
import com.influxdb.client.domain.Bucket;
import com.influxdb.client.domain.DBRPCreate;
import com.influxdb.client.domain.InfluxQLQuery;
@@ -81,7 +84,6 @@ void testShowDatabases() {
.contains(DATABASE_NAME);
}
-
@Test
void testQueryData() {
InfluxQLQueryResult result = influxQLQueryApi.query(new InfluxQLQuery("SELECT FIRST(\"free\") FROM \"influxql\"", DATABASE_NAME));
@@ -94,6 +96,31 @@ void testQueryData() {
});
}
+ @Test
+ void testQueryWithTagsWithEscapedChars() {
+ Bucket bucket = influxDBClient.getBucketsApi().findBucketByName("my-bucket");
+ influxDBClient.getWriteApiBlocking()
+ .writePoint(bucket.getId(), bucket.getOrgID(), new Point("specialTags")
+ .time(1655900000, WritePrecision.S)
+ .addField("free", 10)
+ .addTag("host", "A")
+ .addTag("region", "west")
+ .addTag("location", "vancouver\\,\\ BC")
+ .addTag("model\\,\\ uid","droid\\,\\ C3PO")
+ );
+
+ Map expectedTags = new HashMap<>();
+ expectedTags.put("host", "A");
+ expectedTags.put("region", "west");
+ expectedTags.put("location", "vancouver\\,\\ BC");
+ expectedTags.put("model\\,\\ uid","droid\\,\\ C3PO");
+
+ InfluxQLQueryResult result = influxQLQueryApi.query(
+ new InfluxQLQuery("SELECT * FROM \"specialTags\" GROUP BY *", DATABASE_NAME));
+
+ Assertions.assertThat(result.getResults().get(0).getSeries().get(0).getTags()).isEqualTo(expectedTags);
+ }
+
@Test
void testQueryDataWithConversion() {
InfluxQLQueryResult result = influxQLQueryApi.query(
diff --git a/client/src/test/java/com/influxdb/client/internal/InfluxQLQueryApiImplTest.java b/client/src/test/java/com/influxdb/client/internal/InfluxQLQueryApiImplTest.java
index 0f7f94bf1a..2fbf059e3c 100644
--- a/client/src/test/java/com/influxdb/client/internal/InfluxQLQueryApiImplTest.java
+++ b/client/src/test/java/com/influxdb/client/internal/InfluxQLQueryApiImplTest.java
@@ -24,13 +24,21 @@
import java.io.IOException;
import java.io.StringReader;
import java.time.Instant;
+import java.util.AbstractMap;
+import java.util.Arrays;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
import com.influxdb.Cancellable;
import com.influxdb.query.InfluxQLQueryResult;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
+import javax.annotation.Nonnull;
+
class InfluxQLQueryApiImplTest {
private static final Cancellable NO_CANCELLING = new Cancellable() {
@@ -44,6 +52,166 @@ public boolean isCancelled() {
}
};
+ private static Map mapOf(@Nonnull final String... valuePairs) {
+ Map map = new HashMap<>();
+ if (valuePairs.length % 2 != 0) {
+ throw new IllegalArgumentException("value pairs must be even");
+ }
+ for (int i = 0; i < valuePairs.length; i += 2) {
+ map.put(valuePairs[i], valuePairs[i + 1]);
+ }
+ return map;
+ }
+
+ private static void assertParsedTags(
+ @Nonnull final String rawTags,
+ @Nonnull final Map expectedTags
+ ) throws IOException {
+
+ StringReader reader = new StringReader(
+ "name,tags,time,value\n" +
+ "m,\"" + rawTags + "\",1,1\n"
+ );
+ InfluxQLQueryResult result = InfluxQLQueryApiImpl.readInfluxQLResult(reader, NO_CANCELLING, null);
+
+ Assertions.assertThat(result.getResults()).hasSize(1);
+ Assertions.assertThat(result.getResults().get(0).getSeries()).hasSize(1);
+ Assertions.assertThat(result.getResults().get(0).getSeries().get(0).getTags()).isEqualTo(expectedTags);
+ }
+
+ @Test
+ void readInfluxQLResultWithMalformedAndBoundaryTagCases() throws IOException {
+ assertParsedTags("", mapOf());
+ assertParsedTags("host=", mapOf("host", ""));
+ assertParsedTags("host=a,host=b", mapOf("host", "b"));
+ assertParsedTags("host=a,broken", mapOf("host", "a"));
+ assertParsedTags("=a,host=b", mapOf("host", "b"));
+ assertParsedTags("host=a,", mapOf("host", "a"));
+ assertParsedTags(",host=a", mapOf(",host", "a"));
+ assertParsedTags("a=1,,b=2", mapOf("a", "1", ",b", "2"));
+ assertParsedTags("a=foo\\", mapOf("a", "foo\\"));
+ assertParsedTags("k\\\\==v\\\\=1", mapOf("k\\=", "v\\=1"));
+ assertParsedTags("k\\\\,x=v\\\\,y,b=2", mapOf("k\\,x", "v\\,y", "b", "2"));
+ assertParsedTags("k\\\\=x", mapOf());
+ }
+
+ @Test
+ void readInfluxQLResultWithTagCommas() throws IOException {
+ InfluxQLQueryResult.Series.ValueExtractor extractValue = (columnName, rawValue, resultIndex, seriesName) -> {
+ if (resultIndex == 0 && seriesName.equals("data1")){
+ switch (columnName){
+ case "time": return Instant.ofEpochSecond(Long.parseLong(rawValue));
+ case "first":
+ return Double.valueOf(rawValue);
+ }
+ }
+ return rawValue;
+ };
+
+ // Note that escapes in tags returned from server are themselves escaped
+ List testTags = Arrays.asList(
+ "location=Cheb_CZ", //simpleTag
+ "region=us-east-1,host=server1", // standardTags * 2
+ "location=Cheb\\\\,\\\\ CZ", // simpleTag with value comma and space
+ "location=Cheb_CZ,branch=Munchen_DE", // multiple tags with underscore
+ "location=Cheb\\\\,\\\\ CZ,branch=Munchen\\\\,\\\\ DE", // multiple tags with comma and space
+ "model\\\\,\\\\ uin=C3PO", // tag with comma space in key
+ "model\\\\,\\\\ uin=Droid\\\\,\\\\ C3PO", // tag with comma space in key and value
+ "model\\\\,\\\\ uin=Droid\\\\,\\\\ C3PO,location=Cheb\\\\,\\\\ CZ,branch=Munchen\\\\,\\\\ DE", // comma space in key and val
+ "silly\\\\,\\\\=long\\\\,tag=a\\\\,b\\\\\\\\\\,\\\\ c\\\\,\\\\ d", // multi commas in k and v plus escaped reserved chars
+ "region=us\\\\,\\\\ east-1,host\\\\,\\\\ name=ser\\\\,\\\\ ver1" // legacy broken tags
+ );
+
+ Map> expectedTagsMap = Stream.of(
+ // 1. simpleTag
+ new AbstractMap.SimpleImmutableEntry<>(testTags.get(0),
+ mapOf("location", "Cheb_CZ")),
+ // 2. standardTags * 2
+ new AbstractMap.SimpleImmutableEntry<>(testTags.get(1),
+ mapOf(
+ "region", "us-east-1",
+ "host", "server1"
+ )),
+ // 3. simpleTag with value comma and space
+ new AbstractMap.SimpleImmutableEntry<>(testTags.get(2),
+ mapOf("location", "Cheb\\,\\ CZ")),
+ // 4. multiple tags with underscore
+ new AbstractMap.SimpleImmutableEntry<>(testTags.get(3),
+ mapOf(
+ "location", "Cheb_CZ",
+ "branch", "Munchen_DE"
+ )),
+ // 5. multiple tags with comma and space
+ new AbstractMap.SimpleImmutableEntry<>(testTags.get(4),
+ mapOf(
+ "location", "Cheb\\,\\ CZ",
+ "branch", "Munchen\\,\\ DE"
+ )),
+ // 6. tag with comma and space in key
+ new AbstractMap.SimpleImmutableEntry<>(testTags.get(5),
+ mapOf("model\\,\\ uin", "C3PO")),
+ // 7. tag with comma and space in key and value
+ new AbstractMap.SimpleImmutableEntry<>(testTags.get(6),
+ mapOf("model\\,\\ uin", "Droid\\,\\ C3PO")),
+ // 8. comma space in key and val with multiple tags
+ new AbstractMap.SimpleImmutableEntry<>(testTags.get(7),
+ mapOf(
+ "model\\,\\ uin", "Droid\\,\\ C3PO",
+ "location", "Cheb\\,\\ CZ",
+ "branch", "Munchen\\,\\ DE"
+ )),
+ // 9. multiple commas in key and value
+ new AbstractMap.SimpleImmutableEntry<>(testTags.get(8),
+ mapOf(
+ "silly\\,\\=long\\,tag", "a\\,b\\\\\\,\\ c\\,\\ d"
+ )),
+ // legacy broken tags
+ new AbstractMap.SimpleImmutableEntry<>(testTags.get(9),
+ mapOf(
+ "region", "us\\,\\ east-1",
+ "host\\,\\ name", "ser\\,\\ ver1"
+ ))
+ ).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
+
+ StringReader reader = new StringReader("name,tags,time,first\n"
+ + "data1,\"" + testTags.get(0) + "\",1483225200,42\n"
+ + "data1,\"" + testTags.get(1) + "\",1483225200,42\n"
+ + "data1,\"" + testTags.get(2) + "\",1483225200,42\n"
+ + "data1,\"" + testTags.get(3) + "\",1483225200,42\n"
+ + "data1,\"" + testTags.get(4) + "\",1483225200,42\n"
+ + "data1,\"" + testTags.get(5) + "\",1483225200,42\n"
+ + "data1,\"" + testTags.get(6) + "\",1483225200,42\n"
+ + "data1,\"" + testTags.get(7) + "\",1483225200,42\n"
+ + "data1,\"" + testTags.get(8) + "\",1483225200,42\n"
+ + "\n"
+ + "name,tags,time,usage_user,usage_system\n"
+ + "cpu,\"" + testTags.get(9) + "\",1483225200,13.57,1.4\n"
+ );
+
+ InfluxQLQueryResult result = InfluxQLQueryApiImpl.readInfluxQLResult(reader, NO_CANCELLING, extractValue);
+ List results = result.getResults();
+ int index = 0;
+ for(InfluxQLQueryResult.Result r : results) {
+ for(InfluxQLQueryResult.Series s : r.getSeries()){
+ Assertions.assertThat(s.getTags()).isEqualTo(expectedTagsMap.get(testTags.get(index++)));
+ if(index < 10) {
+ Assertions.assertThat(s.getColumns()).containsOnlyKeys("time", "first");
+ InfluxQLQueryResult.Series.Record valRec = s.getValues().get(0);
+ Assertions.assertThat(valRec.getValueByKey("first")).isEqualTo(Double.valueOf("42.0"));
+ Assertions.assertThat(valRec.getValueByKey("time")).isEqualTo(Instant.ofEpochSecond(1483225200L));
+ } else if (index == 10) {
+ Assertions.assertThat(s.getColumns()).containsOnlyKeys("time", "usage_user", "usage_system");
+ InfluxQLQueryResult.Series.Record valRec = s.getValues().get(0);
+ // No value extractor created for "cpu" series
+ Assertions.assertThat(valRec.getValueByKey("time")).isEqualTo("1483225200");
+ Assertions.assertThat(valRec.getValueByKey("usage_user")).isEqualTo("13.57");
+ Assertions.assertThat(valRec.getValueByKey("usage_system")).isEqualTo("1.4");
+ }
+ }
+ }
+ Assertions.assertThat(index).isEqualTo(testTags.size());
+ }
+
@Test
void readInfluxQLResult() throws IOException {
InfluxQLQueryResult.Series.ValueExtractor extractValues = (columnName, rawValue, resultIndex, seriesName) -> {
diff --git a/examples/pom.xml b/examples/pom.xml
index c60e2b136a..37641991a1 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -27,12 +27,12 @@
influxdb-client
com.influxdb
- 6.10.0
+ 6.10.1-SNAPSHOT
true
- 6.10.0
+ 6.10.1-SNAPSHOT
4.0.0
@@ -171,7 +171,7 @@
ossrh
OSS Snapshot repository
- https://oss.sonatype.org/content/repositories/snapshots/
+ https://central.sonatype.com/repository/maven-snapshots/
false
@@ -182,4 +182,4 @@
-
\ No newline at end of file
+
diff --git a/flux-dsl/README.md b/flux-dsl/README.md
index 46d07e0a2e..bf1b2912f9 100644
--- a/flux-dsl/README.md
+++ b/flux-dsl/README.md
@@ -1097,26 +1097,26 @@ The latest version for Maven dependency:
com.influxdb
flux-dsl
- 6.10.0
+ 6.10.1
```
Or when using with Gradle:
```groovy
dependencies {
- implementation "com.influxdb:flux-dsl:6.10.0"
+ implementation "com.influxdb:flux-dsl:6.10.1"
}
```
### Snapshot Repository
-The snapshots are deployed into [OSS Snapshot repository](https://oss.sonatype.org/content/repositories/snapshots/).
+The snapshots are deployed into [OSS Snapshot repository](https://central.sonatype.com/repository/maven-snapshots/).
#### Maven
```xml
ossrh
OSS Snapshot repository
- https://oss.sonatype.org/content/repositories/snapshots/
+ https://central.sonatype.com/repository/maven-snapshots/
false
@@ -1128,6 +1128,6 @@ The snapshots are deployed into [OSS Snapshot repository](https://oss.sonatype.o
#### Gradle
```
repositories {
- maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
+ maven { url "https://central.sonatype.com/repository/maven-snapshots" }
}
```
diff --git a/flux-dsl/pom.xml b/flux-dsl/pom.xml
index dc8f62db69..e4f4634a83 100644
--- a/flux-dsl/pom.xml
+++ b/flux-dsl/pom.xml
@@ -28,7 +28,7 @@
influxdb-client
com.influxdb
- 6.10.0
+ 6.10.1-SNAPSHOT
flux-dsl
@@ -66,7 +66,7 @@
scm:git:git@github.com:influxdata/influxdb-client-java.git
scm:git:git@github.com:influxdata/influxdb-client-java.git
https://github.com/influxdata/influxdb-client-java/tree/master
- v6.10.0
+ HEAD
diff --git a/karaf/karaf-assembly/pom.xml b/karaf/karaf-assembly/pom.xml
index dc130b7b7b..ec16c0f4ec 100644
--- a/karaf/karaf-assembly/pom.xml
+++ b/karaf/karaf-assembly/pom.xml
@@ -28,7 +28,7 @@
influxdb-karaf
com.influxdb
- 6.10.0
+ 6.10.1-SNAPSHOT
influxdb-karaf-assembly
diff --git a/karaf/karaf-features/pom.xml b/karaf/karaf-features/pom.xml
index f879586f53..03329c48dc 100644
--- a/karaf/karaf-features/pom.xml
+++ b/karaf/karaf-features/pom.xml
@@ -28,7 +28,7 @@
influxdb-karaf
com.influxdb
- 6.10.0
+ 6.10.1-SNAPSHOT
influxdb-karaf-features
diff --git a/karaf/karaf-kar/pom.xml b/karaf/karaf-kar/pom.xml
index b74bfff510..199d996d4e 100644
--- a/karaf/karaf-kar/pom.xml
+++ b/karaf/karaf-kar/pom.xml
@@ -28,7 +28,7 @@
influxdb-karaf
com.influxdb
- 6.10.0
+ 6.10.1-SNAPSHOT
influxdb-karaf-kar
@@ -82,7 +82,7 @@
${project.groupId}
influxdb-karaf-features
- 6.10.0
+ 6.10.1-SNAPSHOT
features
xml
diff --git a/karaf/pom.xml b/karaf/pom.xml
index b0195602ff..63855e6a02 100644
--- a/karaf/pom.xml
+++ b/karaf/pom.xml
@@ -28,7 +28,7 @@
influxdb-client
com.influxdb
- 6.10.0
+ 6.10.1-SNAPSHOT
influxdb-karaf
@@ -67,7 +67,7 @@
scm:git:git@github.com:influxdata/influxdb-client-java.git
scm:git:git@github.com:influxdata/influxdb-client-java.git
https://github.com/influxdata/influxdb-client-java/tree/master
- v6.10.0
+ HEAD
diff --git a/pom.xml b/pom.xml
index 8d76484ad1..ce4ae7c52f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -27,7 +27,7 @@
com.influxdb
influxdb-client
- 6.10.0
+ 6.10.1-SNAPSHOT
pom
@@ -87,17 +87,17 @@
scm:git:git@github.com:influxdata/influxdb-client-java.git
scm:git:git@github.com:influxdata/influxdb-client-java.git
http://github.com/influxdata/influxdb-client-java/tree/master
- v6.10.0
+ HEAD
ossrh
- https://oss.sonatype.org/content/repositories/snapshots
+ https://central.sonatype.com/repository/maven-snapshots
ossrh
- https://oss.sonatype.org/service/local/staging/deploy/maven2/
+ https://ossrh-staging-api.central.sonatype.com/service/local/staging/deploy/maven2/
GitHubPages
@@ -409,7 +409,7 @@
true
ossrh
- https://oss.sonatype.org/
+ https://ossrh-staging-api.central.sonatype.com/
true
@@ -538,38 +538,38 @@
com.influxdb
influxdb-client-test
- 6.10.0
+ 6.10.1-SNAPSHOT
test
com.influxdb
influxdb-client-core
- 6.10.0
+ 6.10.1-SNAPSHOT
com.influxdb
influxdb-client-utils
- 6.10.0
+ 6.10.1-SNAPSHOT
com.influxdb
influxdb-client-java
- 6.10.0
+ 6.10.1-SNAPSHOT
com.influxdb
influxdb-client-reactive
- 6.10.0
+ 6.10.1-SNAPSHOT
com.influxdb
influxdb-client-flux
- 6.10.0
+ 6.10.1-SNAPSHOT
diff --git a/spring/pom.xml b/spring/pom.xml
index 39b2927110..e57eec556a 100644
--- a/spring/pom.xml
+++ b/spring/pom.xml
@@ -26,7 +26,7 @@
influxdb-client
com.influxdb
- 6.10.0
+ 6.10.1-SNAPSHOT
4.0.0
@@ -68,7 +68,7 @@
scm:git:git@github.com:influxdata/influxdb-client-java.git
scm:git:git@github.com:influxdata/influxdb-client-java.git
https://github.com/influxdata/influxdb-client-java/tree/master
- v6.10.0
+ HEAD