public async Task NoParameterQueryIsPassedPlainly() { var queryProvider = new Mock <ICslQueryProvider>(); var dbNames = new List <string>(); var queries = new List <string>(); var properties = new List <ClientRequestProperties>(); var reader = Mock.Of <IDataReader>(); queryProvider.Setup(q => q.ExecuteQueryAsync(Capture.In(dbNames), Capture.In(queries), Capture.In(properties))) .Returns(Task.FromResult(reader)); using (var client = new KustoClientProvider(MockOptionMonitor.Create(new KustoClientProviderOptions { QueryConnectionString = "IGNORED-CONNECTION-STRING", Database = "TEST-DATABASE", }), queryProvider.Object)) { IDataReader result = await client.ExecuteKustoQueryAsync(new KustoQuery("basicQuery")); reader.Should().BeSameAs(result); } dbNames.Should().Equal(new[] { "TEST-DATABASE" }); queries.Should().Equal(new[] { "basicQuery" }); properties.Should().ContainSingle(); properties[0].Parameters.Should().BeEmpty(); }
public async Task ParameterizedQueryIncludesParameterInformation() { var queryProvider = new Mock <ICslQueryProvider>(); var dbNames = new List <string>(); var queries = new List <string>(); var properties = new List <ClientRequestProperties>(); var reader = Mock.Of <IDataReader>(); queryProvider.Setup(q => q.ExecuteQueryAsync(Capture.In(dbNames), Capture.In(queries), Capture.In(properties))) .Returns(Task.FromResult(reader)); using (var client = new KustoClientProvider(Options.Create(new KustoClientProviderOptions { QueryConnectionString = "IGNORED-CONNECTION-STRING", Database = "TEST-DATABASE", }), queryProvider.Object)) { var query = new KustoQuery("basicQuery | where Id = _id and Name = _name", new KustoParameter("_id", 9274, KustoDataType.Int)); query.AddParameter("_name", "TEST-NAME", KustoDataType.String); IDataReader result = await client.ExecuteKustoQueryAsync( query); reader.Should().BeSameAs(result); } dbNames.Should().Equal(new[] { "TEST-DATABASE" }); queries.Should().ContainSingle(); queries[0].Should().EndWith("basicQuery | where Id = _id and Name = _name"); var parameterDeclarationPattern = new Regex(@"declare\s*query_parameters\s*\(([^)]*)\)\s*;"); queries[0].Should().MatchRegex(parameterDeclarationPattern); string parametersString = parameterDeclarationPattern.Match(queries[0]).Groups[1].Value; IReadOnlyDictionary <string, string> parameters = parametersString.Split(',') .Select(p => p.Split(':', 2)) .ToDictionary(p => p[0], p => p[1]); parameters.Should().HaveCount(2); parameters.Should().ContainKey("_id"); parameters["_id"].Should().Be(KustoDataType.Int.CslDataType); parameters.Should().ContainKey("_name"); parameters["_name"].Should().Be(KustoDataType.String.CslDataType); properties.Should().ContainSingle(); properties[0].Parameters.Should().HaveCount(2); properties[0].Parameters.Should().ContainKey("_id"); properties[0].Parameters["_id"].Should().Be("9274"); properties[0].Parameters.Should().ContainKey("_name"); properties[0].Parameters["_name"].Should().Be("TEST-NAME"); }