From c5578233b72b7a6853eae2908771bbd919d4b4e1 Mon Sep 17 00:00:00 2001 From: AsafMah Date: Wed, 29 Nov 2023 13:08:44 +0200 Subject: [PATCH] Fixed string quoting bug and tests (#211) Co-authored-by: ohad bitton <32278684+ohadbitt@users.noreply.github.com> --- CHANGELOG.md | 5 +++++ kusto/query_builder.go | 3 ++- kusto/query_builder_test.go | 15 ++++++++++++--- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 52e72a1b..b84fd595 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,10 +8,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased ### Changed (BREAKING) + - Queries are no longer progressive by default. - `ResultsProgressiveDisable()` has been removed. - Use `ResultsProgressiveEnabled()` to enable progressive queries. +### Fixed + +- String quoting in default value of query parameters ## [0.14.2] - 2023-11-08 @@ -22,6 +26,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [0.14.1] - 2023-09-27 ### Added + - Support new playfab domain ### Fixed diff --git a/kusto/query_builder.go b/kusto/query_builder.go index 48bd164e..7c9e8ec0 100644 --- a/kusto/query_builder.go +++ b/kusto/query_builder.go @@ -8,6 +8,7 @@ These provide injection safe querying for data retrieval and insertion. import ( "encoding/json" "fmt" + "github.com/Azure/azure-kusto-go/kusto/kql" "math/big" "sort" "strings" @@ -183,7 +184,7 @@ func (p ParamType) string() string { return p.name + ":string" } v := p.Default.(string) - return fmt.Sprintf(`%s:string = "%s"`, p.name, v) // TODO - escape the string when we have the functionaity + return fmt.Sprintf(`%s:string = %s`, p.name, kql.QuoteString(v, false)) case types.Timespan: if p.Default == nil { return p.name + ":timespan" diff --git a/kusto/query_builder_test.go b/kusto/query_builder_test.go index 4df8e7ce..625476de 100644 --- a/kusto/query_builder_test.go +++ b/kusto/query_builder_test.go @@ -210,14 +210,23 @@ func TestParamType(t *testing.T) { }, wantStr: "my_value:string = \"hello\"", }, + { + desc: "Quoted value default for types.String", + param: ParamType{ + Type: types.String, + Default: "h\\el\"l\t\no", + name: "my_value", + }, + wantStr: `my_value:string = "h\\el\"l\t\no"`, + }, { desc: "Success Default for types.Timespan", param: ParamType{ Type: types.Timespan, Default: duration, - name: "my_value:timespan = timespan(03.01:03:00)", + name: "my_value", }, - wantStr: "my_value:timespan = timespan(1000)", + wantStr: "my_value:timespan = timespan(01:03:02)", }, { desc: "Success Default for types.Decimal", @@ -267,7 +276,7 @@ func TestParamType(t *testing.T) { assert.NoError(t, err) case err != nil && !test.err: assert.Error(t, err) - case err != nil: + case err == nil: if test.panic { assert.Panicsf(t, func() { test.param.string() }, "panic: internal bug: ParamType.string() called without a call to .validate()") return