From 568c63b29fc177de4c69be089e020e7719e79d3b Mon Sep 17 00:00:00 2001 From: Azat Ismagilov Date: Tue, 20 May 2025 12:40:49 -0400 Subject: [PATCH] [#6860] support multiline cast expressions in view collections --- core/view.go | 2 +- core/view_test.go | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/core/view.go b/core/view.go index d7db6257..5ae863b9 100644 --- a/core/view.go +++ b/core/view.go @@ -215,7 +215,7 @@ func defaultViewField(name string) Field { } } -var castRegex = regexp.MustCompile(`(?i)^cast\s*\(.*\s+as\s+(\w+)\s*\)$`) +var castRegex = regexp.MustCompile(`(?is)^cast\s*\(.*\s+as\s+(\w+)\s*\)$`) func parseQueryToFields(app App, selectQuery string) (map[string]*queryField, error) { p := new(identifiersParser) diff --git a/core/view_test.go b/core/view_test.go index 37eb2fcd..3e0a343e 100644 --- a/core/view_test.go +++ b/core/view_test.go @@ -394,6 +394,38 @@ func TestCreateViewFields(t *testing.T) { "max": core.FieldTypeJSON, }, }, + { + "query with multiline cast", + `select + id, + cast( + ( + case + when count(a.id) = 1 then 21 + when count(a.id) = 2 then 18 + else 0 + end + ) as int + ) as cast_int + from demo1 a`, + false, + map[string]string{ + "id": core.FieldTypeText, + "cast_int": core.FieldTypeNumber, + }, + }, + { + "query with case-insensitive and extra-spaced cast", + `select + id, + CaSt( a.id aS iNt ) as cast_int + from demo1 a`, + false, + map[string]string{ + "id": core.FieldTypeText, + "cast_int": core.FieldTypeNumber, + }, + }, { "query with reserved auth collection fields", `