From 17a014351db2647d9c37c51517e07fa5f0766c60 Mon Sep 17 00:00:00 2001 From: karel rehor Date: Thu, 23 Nov 2023 17:01:05 +0100 Subject: [PATCH 1/5] fix: proposed fix for #644 --- .../query/internal/FluxCsvParser.java | 6 +- .../query/internal/FluxCsvParserTest.java | 55 +++++++++++++++++++ 2 files changed, 59 insertions(+), 2 deletions(-) diff --git a/client-core/src/main/java/com/influxdb/query/internal/FluxCsvParser.java b/client-core/src/main/java/com/influxdb/query/internal/FluxCsvParser.java index db4633c4d68..10b7d8b1b56 100644 --- a/client-core/src/main/java/com/influxdb/query/internal/FluxCsvParser.java +++ b/client-core/src/main/java/com/influxdb/query/internal/FluxCsvParser.java @@ -303,18 +303,20 @@ private List toList(final CSVRecord csvRecord) { private Object toValue(@Nullable final String strValue, final @Nonnull FluxColumn column) { Arguments.checkNotNull(column, "column"); + String dataType = column.getDataType(); // Default value if (strValue == null || strValue.isEmpty()) { String defaultValue = column.getDefaultValue(); if (defaultValue == null || defaultValue.isEmpty()) { + if ("string".equals(dataType)) { + return defaultValue; + } return null; } - return toValue(defaultValue, column); } - String dataType = column.getDataType(); switch (dataType) { case "boolean": return Boolean.valueOf(strValue); diff --git a/client-core/src/test/java/com/influxdb/query/internal/FluxCsvParserTest.java b/client-core/src/test/java/com/influxdb/query/internal/FluxCsvParserTest.java index 978dbddb34a..df3b492e621 100644 --- a/client-core/src/test/java/com/influxdb/query/internal/FluxCsvParserTest.java +++ b/client-core/src/test/java/com/influxdb/query/internal/FluxCsvParserTest.java @@ -674,6 +674,60 @@ public void parseDuplicateColumnNames() throws IOException { Assertions.assertThat(tables.get(0).getRecords().get(0).getRow().get(7)).isEqualTo(25.3); } + + @Test + public void parseEmptyString() throws IOException { + String data = "#group,false,false,true,true,true,true,true,false,false\n" + + "#datatype,string,long,dateTime:RFC3339,dateTime:RFC3339,string,string,string,double,string\n" + + "#default,_result,,,,,,nana,,\n" + + ",result,table,_start,_stop,_field,_measurement,owner,le,_value\n" + + ",,0,2021-06-23T06:50:11.897825012Z,2021-06-25T06:50:11.897825012Z,wumpus,snipe,influxdata,0,\"foo\"\n" + + ",,0,2021-06-23T06:50:11.897825012Z,2021-06-25T06:50:11.897825012Z,wumpus,snipe,,10,\"foo\"\n" + + ",,0,2021-06-23T06:50:11.897825012Z,2021-06-25T06:50:11.897825012Z,wumpus,snipe,\"\",20,\"foo\"\n" + + ",,0,2021-06-23T06:50:11.897825012Z,2021-06-25T06:50:11.897825012Z,wumpus,snipe,influxdata,30,\"foo\"\n" + + ",,0,2021-06-23T06:50:11.897825012Z,2021-06-25T06:50:11.897825012Z,wumpus,snipe,influxdata,40,\"foo\"\n" + + ",,0,2021-06-23T06:50:11.897825012Z,2021-06-25T06:50:11.897825012Z,wumpus,snipe,influxdata,50,\"foo\"\n" + + ",,0,2021-06-23T06:50:11.897825012Z,2021-06-25T06:50:11.897825012Z,wumpus,snipe,influxdata,60,\"foo\"\n" + + ",,0,2021-06-23T06:50:11.897825012Z,2021-06-25T06:50:11.897825012Z,wumpus,snipe,influxdata,70,\"foo\"\n" + + ",,0,2021-06-23T06:50:11.897825012Z,2021-06-25T06:50:11.897825012Z,wumpus,snipe,influxdata,80,\"\"\n" + + ",,0,2021-06-23T06:50:11.897825012Z,2021-06-25T06:50:11.897825012Z,wumpus,snipe,influxdata,90,\n" + + ",,0,2021-06-23T06:50:11.897825012Z,2021-06-25T06:50:11.897825012Z,wumpus,snipe,influxdata,100,\"bar\"\n" + + ",,0,2021-06-23T06:50:11.897825012Z,2021-06-25T06:50:11.897825012Z,wumpus,snipe,influxdata,-100,\"bar\"\n" + + "\n"; + + List tables = parseFluxResponse(data); + + Assertions.assertThat(tables).hasSize(1); + Assertions.assertThat(tables.get(0).getRecords().get(7).getValue()).isEqualTo("foo"); + Assertions.assertThat(tables.get(0).getRecords().get(8).getValue()).isEqualTo(""); // -- todo make sure default value is respected + Assertions.assertThat(tables.get(0).getRecords().get(9).getValue()).isNotNull(); + Assertions.assertThat(tables.get(0).getRecords().get(10).getValue()).isEqualTo("bar"); + Assertions.assertThat(tables.get(0).getRecords().get(0).getValueByKey("owner")).isEqualTo("influxdata"); + Assertions.assertThat(tables.get(0).getRecords().get(1).getValueByKey("owner")).isEqualTo("nana"); + Assertions.assertThat(tables.get(0).getRecords().get(2).getValueByKey("owner")).isEqualTo("nana"); + } + + @Test + public void parseEmptyStringWithoutTableDefinition() throws IOException { + + String data = ",result,table,_start,_stop,_time,_value,_field,_measurement,host,value\n" + + ",,0,1970-01-01T00:00:10Z,1970-01-01T00:00:20Z,1970-01-01T00:00:10Z,10,free,mem,A,12.25\n" + + ",,1,1970-01-01T00:00:10Z,1970-01-01T00:00:20Z,1970-01-01T00:00:10Z,,free,mem,,15.55\n"; + + parser = new FluxCsvParser(FluxCsvParser.ResponseMetadataMode.ONLY_NAMES); + List tables = parseFluxResponse(data); + + Assertions.assertThat(tables).hasSize(2); + Assertions.assertThat(tables.get(0).getRecords()).hasSize(1); + Assertions.assertThat(tables.get(0).getRecords().get(0).getValues().get("value")).isEqualTo("12.25"); + Assertions.assertThat(tables.get(0).getRecords().get(0).getValues().get("host")).isEqualTo("A"); + Assertions.assertThat(tables.get(0).getRecords().get(0).getValue()).isEqualTo("10"); + Assertions.assertThat(tables.get(1).getRecords()).hasSize(1); + Assertions.assertThat(tables.get(1).getRecords().get(0).getValues().get("value")).isEqualTo("15.55"); + Assertions.assertThat(tables.get(1).getRecords().get(0).getValues().get("host")).isNull(); + Assertions.assertThat(tables.get(1).getRecords().get(0).getValue()).isNull(); + } + @Nonnull private List parseFluxResponse(@Nonnull final String data) throws IOException { @@ -712,4 +766,5 @@ public boolean isCancelled() { return cancelled; } } + } From dc5e14b0389415a569197df8b8d797eddc13f098 Mon Sep 17 00:00:00 2001 From: karel rehor Date: Thu, 23 Nov 2023 17:16:38 +0100 Subject: [PATCH 2/5] chore: trigger new CI build --- .../test/java/com/influxdb/query/internal/FluxCsvParserTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/client-core/src/test/java/com/influxdb/query/internal/FluxCsvParserTest.java b/client-core/src/test/java/com/influxdb/query/internal/FluxCsvParserTest.java index df3b492e621..97ef478f05f 100644 --- a/client-core/src/test/java/com/influxdb/query/internal/FluxCsvParserTest.java +++ b/client-core/src/test/java/com/influxdb/query/internal/FluxCsvParserTest.java @@ -705,6 +705,7 @@ public void parseEmptyString() throws IOException { Assertions.assertThat(tables.get(0).getRecords().get(0).getValueByKey("owner")).isEqualTo("influxdata"); Assertions.assertThat(tables.get(0).getRecords().get(1).getValueByKey("owner")).isEqualTo("nana"); Assertions.assertThat(tables.get(0).getRecords().get(2).getValueByKey("owner")).isEqualTo("nana"); + } @Test From 2390a0a0fe2893136d7a5012744b5f2f48186096 Mon Sep 17 00:00:00 2001 From: karel rehor Date: Fri, 24 Nov 2023 10:01:18 +0100 Subject: [PATCH 3/5] chore: trigger CI build 2nd time --- .../test/java/com/influxdb/query/internal/FluxCsvParserTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/client-core/src/test/java/com/influxdb/query/internal/FluxCsvParserTest.java b/client-core/src/test/java/com/influxdb/query/internal/FluxCsvParserTest.java index 97ef478f05f..df3b492e621 100644 --- a/client-core/src/test/java/com/influxdb/query/internal/FluxCsvParserTest.java +++ b/client-core/src/test/java/com/influxdb/query/internal/FluxCsvParserTest.java @@ -705,7 +705,6 @@ public void parseEmptyString() throws IOException { Assertions.assertThat(tables.get(0).getRecords().get(0).getValueByKey("owner")).isEqualTo("influxdata"); Assertions.assertThat(tables.get(0).getRecords().get(1).getValueByKey("owner")).isEqualTo("nana"); Assertions.assertThat(tables.get(0).getRecords().get(2).getValueByKey("owner")).isEqualTo("nana"); - } @Test From dc570a85cb5f49e7cbc07fc7a112a50146f12ab1 Mon Sep 17 00:00:00 2001 From: karel rehor Date: Fri, 24 Nov 2023 11:42:43 +0100 Subject: [PATCH 4/5] chore: updating site target in CI --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 3ed02d579db..809c7c5ee77 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 install site site:stage -DskipTests deploy-snapshot: docker: From 776c67e8a1101a79fb60fab5f8270e8129b36b7d Mon Sep 17 00:00:00 2001 From: karel rehor Date: Mon, 27 Nov 2023 13:55:21 +0100 Subject: [PATCH 5/5] chore: update change log with bug-fix information for #644 --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index aec05e6a729..362f1b1718f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ ## 6.11.0 [unreleased] +### Bug Fixes +1. [#648](https://github.com/influxdata/influxdb-client-java/pull/648): With csv parsing, return empty string when `stringValue` and `defaultValue` are both an empty string. + ### Dependencies Update dependencies: