From ac5c746d13fcffcbc66fc0e006c87611fb06a1ee Mon Sep 17 00:00:00 2001 From: Jakub Bednar Date: Tue, 1 Nov 2022 15:47:55 +0100 Subject: [PATCH 1/3] feat: publication of `FluxCsvParser` as `AnnotatedCsvParser` --- .../Flux/Serialization/AnnotatedCsvParser.cs | 48 +++++++++++++++++++ Client.Legacy.Test/FluxCsvParserTest.cs | 17 +++++++ 2 files changed, 65 insertions(+) create mode 100644 Client.Core/Flux/Serialization/AnnotatedCsvParser.cs diff --git a/Client.Core/Flux/Serialization/AnnotatedCsvParser.cs b/Client.Core/Flux/Serialization/AnnotatedCsvParser.cs new file mode 100644 index 000000000..a7173c054 --- /dev/null +++ b/Client.Core/Flux/Serialization/AnnotatedCsvParser.cs @@ -0,0 +1,48 @@ +using System.Collections.Generic; +using System.Threading; +using InfluxDB.Client.Core.Flux.Domain; +using InfluxDB.Client.Core.Flux.Internal; + +namespace InfluxDB.Client.Core.Flux.Serialization +{ + public interface IAnnotatedCsvParser + { + /// + /// Parsing query results in annotated CSV format into list of . + /// + /// Query results in annotated CSV format + /// To cancel the parsing + /// Parsed Annotated CSV into list of + List Parse(string annotatedCsv, CancellationToken cancellationToken = default); + } + + /// + /// Parser for processing Annotated CSV. + /// + public class AnnotatedCsvParser : IAnnotatedCsvParser + { + private readonly FluxCsvParser _parser; + + /// + /// Public constructor. + /// + public AnnotatedCsvParser() + { + _parser = new FluxCsvParser(); + } + + /// + /// Parsing query results in annotated CSV format into list of . + /// + /// Query results in annotated CSV format + /// To cancel the parsing + /// Parsed Annotated CSV into list of + public List Parse(string annotatedCsv, CancellationToken cancellationToken = default) + { + var consumer = new FluxCsvParser.FluxResponseConsumerTable(); + _parser.ParseFluxResponse(annotatedCsv, cancellationToken, consumer); + + return consumer.Tables; + } + } +} \ No newline at end of file diff --git a/Client.Legacy.Test/FluxCsvParserTest.cs b/Client.Legacy.Test/FluxCsvParserTest.cs index d6a85d986..3dee296a6 100644 --- a/Client.Legacy.Test/FluxCsvParserTest.cs +++ b/Client.Legacy.Test/FluxCsvParserTest.cs @@ -7,6 +7,7 @@ using InfluxDB.Client.Core.Flux.Domain; using InfluxDB.Client.Core.Flux.Exceptions; using InfluxDB.Client.Core.Flux.Internal; +using InfluxDB.Client.Core.Flux.Serialization; using NodaTime; using NodaTime.Text; using NUnit.Framework; @@ -793,6 +794,22 @@ public void ParseDuplicateColumnNames() Assert.AreEqual(25.3, tables[0].Records[0].Row[7]); } + [Test] + public void AnnotatedCsvParser() + { + const string data = "#datatype,string,long,dateTime:RFC3339,dateTime:RFC3339,string,string,string,string,long,long,string\n" + + "#group,false,false,true,true,true,true,true,true,false,false,false\n" + + "#default,_result,,,,,,,,,,\n" + + ",result,table,_start,_stop,_field,_measurement,host,region,_value2,value1,value_str\n" + + ",,0,1677-09-21T00:12:43.145224192Z,2018-07-16T11:21:02.547596934Z,free,mem,A,west,121,11,test\n" + + ",,1,1677-09-21T00:12:43.145224192Z,2018-07-16T11:21:02.547596934Z,free,mem,B,west,484,22,test\n" + + ",,2,1677-09-21T00:12:43.145224192Z,2018-07-16T11:21:02.547596934Z,usage_system,cpu,A,west,1444,38,test\n" + + ",,3,1677-09-21T00:12:43.145224192Z,2018-07-16T11:21:02.547596934Z,user_usage,cpu,A,west,2401,49,test"; + + var tables = new AnnotatedCsvParser().Parse(data); + Assert.AreEqual(4, tables.Count); + } + private List ParseFluxResponse(string data) { var consumer = new FluxCsvParser.FluxResponseConsumerTable(); From 2bfb61ed8db2d4d64371dc224c6ddce6e0f158fa Mon Sep 17 00:00:00 2001 From: Jakub Bednar Date: Tue, 1 Nov 2022 15:50:49 +0100 Subject: [PATCH 2/3] docs: update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c4d26fcf6..2a310a8a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ### Features 1. [#376](https://github.com/influxdata/influxdb-client-csharp/pull/376): Add `FluxRecord.Row` which stores response data in a list +1. [#404](https://github.com/influxdata/influxdb-client-csharp/pull/404): Expose `FluxCsvParser` as `AnnotatedCsvParser` ### Dependencies Update dependencies: From 8a4d7a8a318cc876f56e43d1868642819879e4a3 Mon Sep 17 00:00:00 2001 From: Jakub Bednar Date: Tue, 1 Nov 2022 16:13:47 +0100 Subject: [PATCH 3/3] fix: code style --- Client.Legacy.Test/FluxCsvParserTest.cs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/Client.Legacy.Test/FluxCsvParserTest.cs b/Client.Legacy.Test/FluxCsvParserTest.cs index 3dee296a6..157c92f09 100644 --- a/Client.Legacy.Test/FluxCsvParserTest.cs +++ b/Client.Legacy.Test/FluxCsvParserTest.cs @@ -797,14 +797,15 @@ public void ParseDuplicateColumnNames() [Test] public void AnnotatedCsvParser() { - const string data = "#datatype,string,long,dateTime:RFC3339,dateTime:RFC3339,string,string,string,string,long,long,string\n" - + "#group,false,false,true,true,true,true,true,true,false,false,false\n" - + "#default,_result,,,,,,,,,,\n" - + ",result,table,_start,_stop,_field,_measurement,host,region,_value2,value1,value_str\n" - + ",,0,1677-09-21T00:12:43.145224192Z,2018-07-16T11:21:02.547596934Z,free,mem,A,west,121,11,test\n" - + ",,1,1677-09-21T00:12:43.145224192Z,2018-07-16T11:21:02.547596934Z,free,mem,B,west,484,22,test\n" - + ",,2,1677-09-21T00:12:43.145224192Z,2018-07-16T11:21:02.547596934Z,usage_system,cpu,A,west,1444,38,test\n" - + ",,3,1677-09-21T00:12:43.145224192Z,2018-07-16T11:21:02.547596934Z,user_usage,cpu,A,west,2401,49,test"; + const string data = + "#datatype,string,long,dateTime:RFC3339,dateTime:RFC3339,string,string,string,string,long,long,string\n" + + "#group,false,false,true,true,true,true,true,true,false,false,false\n" + + "#default,_result,,,,,,,,,,\n" + + ",result,table,_start,_stop,_field,_measurement,host,region,_value2,value1,value_str\n" + + ",,0,1677-09-21T00:12:43.145224192Z,2018-07-16T11:21:02.547596934Z,free,mem,A,west,121,11,test\n" + + ",,1,1677-09-21T00:12:43.145224192Z,2018-07-16T11:21:02.547596934Z,free,mem,B,west,484,22,test\n" + + ",,2,1677-09-21T00:12:43.145224192Z,2018-07-16T11:21:02.547596934Z,usage_system,cpu,A,west,1444,38,test\n" + + ",,3,1677-09-21T00:12:43.145224192Z,2018-07-16T11:21:02.547596934Z,user_usage,cpu,A,west,2401,49,test"; var tables = new AnnotatedCsvParser().Parse(data); Assert.AreEqual(4, tables.Count);