From ae36612c34d72c99a692afb4a89eb0b2f0bf727f Mon Sep 17 00:00:00 2001 From: Gani Georgiev Date: Sat, 18 Jan 2025 12:23:20 +0200 Subject: [PATCH] (backported) fixed fields extraction for view queries with milti-level comments --- CHANGELOG.md | 5 +++++ daos/view.go | 8 ++++---- daos/view_test.go | 16 +++++++++++++--- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 43372c7e..8d0024b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## v0.22.30 + +- (_Backported from v0.24.4_) Fixed fields extraction for view queries with milti-level comments ([#6309](https://github.com/pocketbase/pocketbase/discussions/6309)). + + ## v0.22.29 - (_Backported from v0.23.11_) Upgraded `golang.org/x/net` to 0.33.0 to fix [CVE-2024-45338](https://www.cve.org/CVERecord?id=CVE-2024-45338). diff --git a/daos/view.go b/daos/view.go index a7cc7053..f7b53d7c 100644 --- a/daos/view.go +++ b/daos/view.go @@ -462,9 +462,9 @@ type identifiersParser struct { func (p *identifiersParser) parse(selectQuery string) error { str := strings.Trim(strings.TrimSpace(selectQuery), ";") - str = joinReplaceRegex.ReplaceAllString(str, " _join_ ") - str = discardReplaceRegex.ReplaceAllString(str, " _discard_ ") str = commentsReplaceRegex.ReplaceAllString(str, "") + str = joinReplaceRegex.ReplaceAllString(str, " __pb_join__ ") + str = discardReplaceRegex.ReplaceAllString(str, " __pb_discard__ ") tk := tokenizer.NewFromString(str) tk.Separators(',', ' ', '\n', '\t') @@ -499,7 +499,7 @@ func (p *identifiersParser) parse(selectQuery string) error { skip = false partType = "from" activeBuilder = &fromParts - case "_join_": + case "__pb_join__": skip = false // the previous part was also a join @@ -509,7 +509,7 @@ func (p *identifiersParser) parse(selectQuery string) error { partType = "join" activeBuilder = &joinParts - case "_discard_": + case "__pb_discard__": // skip following tokens skip = true default: diff --git a/daos/view_test.go b/daos/view_test.go index a84a00a9..18205525 100644 --- a/daos/view_test.go +++ b/daos/view_test.go @@ -248,11 +248,21 @@ func TestCreateViewSchema(t *testing.T) { ` select -- test single line - id, - text, + demo1.id, + demo1.text, /* multi line comment */ - url, created, updated from demo1 + demo1.url, demo1.created, demo2.updated from demo1 + -- comment before join + join demo2 ON ( + -- comment inside join + demo2.id = demo1.id + ) + -- comment before where + where ( + -- comment inside where + demo2.id = demo1.id + ) `, false, map[string]string{