From 968d6fdcde70262ff5452cac0aaa956076a21e85 Mon Sep 17 00:00:00 2001 From: "cai.zhang" Date: Fri, 24 Nov 2023 11:02:24 +0800 Subject: [PATCH] fix: Fix bug for parse expression that include quotes (#28418) master pr: #28416 issue: #28365 Fix bug for parsing error when a string enclosed in single quotes in an expression contains multiple double quotes. such as: ``` expr = "tag == '\"blue\"'" ``` Signed-off-by: Cai Zhang --- internal/datacoord/index_builder.go | 2 +- internal/parser/planparserv2/plan_parser_v2_test.go | 1 + internal/parser/planparserv2/utils.go | 2 +- internal/parser/planparserv2/utils_test.go | 7 +++++++ 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/internal/datacoord/index_builder.go b/internal/datacoord/index_builder.go index 99d2feab2e..1d4dc3b332 100644 --- a/internal/datacoord/index_builder.go +++ b/internal/datacoord/index_builder.go @@ -191,7 +191,7 @@ func (ib *indexBuilder) run() { for _, buildID := range buildIDs { ok := ib.process(buildID) if !ok { - log.Ctx(ib.ctx).Info("there is no IndexNode available or etcd is not serviceable, wait a minute...") + log.Ctx(ib.ctx).Info("there is no idle indexing node, wait a minute...") break } } diff --git a/internal/parser/planparserv2/plan_parser_v2_test.go b/internal/parser/planparserv2/plan_parser_v2_test.go index fce00dc72b..fdfd964e27 100644 --- a/internal/parser/planparserv2/plan_parser_v2_test.go +++ b/internal/parser/planparserv2/plan_parser_v2_test.go @@ -934,6 +934,7 @@ func Test_EscapeString(t *testing.T) { `str2 like 'abc"def-%'`, `str4 like "abc\367-%"`, `str4 like "中国"`, + `tag == '"blue"'`, } for _, expr = range exprs { _, err = CreateSearchPlan(schema, expr, "FloatVectorField", &planpb.QueryInfo{ diff --git a/internal/parser/planparserv2/utils.go b/internal/parser/planparserv2/utils.go index d6c2172e7c..ceffa4dcc8 100644 --- a/internal/parser/planparserv2/utils.go +++ b/internal/parser/planparserv2/utils.go @@ -504,7 +504,7 @@ func convertEscapeSingle(literal string) (string, error) { b.WriteString(literal[start : end-1]) b.WriteString(`'`) } - start = end + start = end + 1 } b.WriteString(literal[end+1 : len(literal)-1]) b.WriteString(`"`) diff --git a/internal/parser/planparserv2/utils_test.go b/internal/parser/planparserv2/utils_test.go index 843bd2d34b..4648c4dca0 100644 --- a/internal/parser/planparserv2/utils_test.go +++ b/internal/parser/planparserv2/utils_test.go @@ -187,6 +187,13 @@ func Test_convertEscapeSingle(t *testing.T) { {`"\\\\'"`, `\\'`}, {`"\\\\\'"`, `\\'`}, {`'"'`, `"`}, + {`'""'`, `""`}, + {`'"""'`, `"""`}, + {`'"\""'`, `"""`}, + {`'a"b\"c\\"d'`, `a"b"c\"d`}, + {`"a\"b\"c\\\"d"`, `a"b"c\"d`}, + {`'A "test"'`, `A "test"`}, + {`"A \"test\""`, `A "test"`}, {`'\"'`, `"`}, {`'\\"'`, `\"`}, {`'\\\"'`, `\"`},