From bf65a43038e829d4843fd3c10d08275baf3916e4 Mon Sep 17 00:00:00 2001 From: Ken Polizzi Date: Fri, 20 Dec 2019 23:36:39 +0000 Subject: [PATCH 1/6] fix support of unquoted value on time criteria --- query_builder.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/query_builder.go b/query_builder.go index 6ca7012..ead729f 100644 --- a/query_builder.go +++ b/query_builder.go @@ -7,6 +7,8 @@ import ( "strings" ) +var validUnquotedTimeRegexp = regexp.MustCompile(`^\d+(ns|u|ms|s|m|h|d|w)?$`) + // Duration Duration interface type Duration interface { Nanoseconds(uint) Duration @@ -511,6 +513,10 @@ func getCriteriaTemplate(tag Tag) string { case bool: return fmt.Sprintf(`"%s" %s %t`, tag.key, tag.op, tag.value) default: + if tag.key == "time" && validUnquotedTimeRegexp.MatchString(tag.value) { + // 'time' key accepts non-quoted string value (eg: 1535313431000ns) + return fmt.Sprintf(`%s %s %s`, tag.key, tag.op, tag.value) + } return fmt.Sprintf(`"%s" %s '%s'`, tag.key, tag.op, tag.value) } } From 55c850b0dc8d92f3cc2f4a72a5f3e21bd3ed55ba Mon Sep 17 00:00:00 2001 From: Ken Polizzi Date: Fri, 20 Dec 2019 23:36:39 +0000 Subject: [PATCH 2/6] fix support of unquoted value on time criteria --- query_builder.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/query_builder.go b/query_builder.go index 6ca7012..681d202 100644 --- a/query_builder.go +++ b/query_builder.go @@ -7,6 +7,8 @@ import ( "strings" ) +var validUnquotedTimeRegexp = regexp.MustCompile(`^\d+(ns|u|ms|s|m|h|d|w)?$`) + // Duration Duration interface type Duration interface { Nanoseconds(uint) Duration @@ -511,6 +513,10 @@ func getCriteriaTemplate(tag Tag) string { case bool: return fmt.Sprintf(`"%s" %s %t`, tag.key, tag.op, tag.value) default: + if tag.key == "time" && validUnquotedTimeRegexp.MatchString(tag.value.(string)) { + // 'time' key accepts non-quoted string value (eg: 1535313431000ns) + return fmt.Sprintf(`%s %s %s`, tag.key, tag.op, tag.value) + } return fmt.Sprintf(`"%s" %s '%s'`, tag.key, tag.op, tag.value) } } From 4fdd1ea5cbc1a365b5cd4c8e6d7af87fa1d1b7d6 Mon Sep 17 00:00:00 2001 From: Ken Polizzi Date: Sat, 21 Dec 2019 23:12:36 +0000 Subject: [PATCH 3/6] add math operations support to select fields --- query_builder.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/query_builder.go b/query_builder.go index 681d202..3f2d432 100644 --- a/query_builder.go +++ b/query_builder.go @@ -317,6 +317,7 @@ func (q *Query) Build() string { } var functionMatcher = regexp.MustCompile(`.+\(.+\)$`) +var mathMatcher = regexp.MustCompile(`^(.+?)([+\-\/*])(\s+)?(\d+)(\.\d+)?$`) func (q *Query) buildFields() string { if q.fields == nil { @@ -340,6 +341,8 @@ func (q *Query) buildFields() string { if functionMatcher.MatchString(selectField) { fields[i] = selectField + } else if mathMatcher.MatchString(selectField) { + fields[i] = selectField } else { fields[i] = fmt.Sprintf("\"%s\"", selectField) } From e3edaa08a4dcc62021922a17c48fbd89857c67f8 Mon Sep 17 00:00:00 2001 From: Ken Polizzi Date: Sat, 21 Dec 2019 23:18:42 +0000 Subject: [PATCH 4/6] add math operations support to select fields --- query_builder.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/query_builder.go b/query_builder.go index 3f2d432..c637aa2 100644 --- a/query_builder.go +++ b/query_builder.go @@ -317,7 +317,7 @@ func (q *Query) Build() string { } var functionMatcher = regexp.MustCompile(`.+\(.+\)$`) -var mathMatcher = regexp.MustCompile(`^(.+?)([+\-\/*])(\s+)?(\d+)(\.\d+)?$`) +var mathMatcher = regexp.MustCompile(`^(.+?)(([+\-\/*])(\s+)?(\d+)(\.\d+)?)+$`) func (q *Query) buildFields() string { if q.fields == nil { From 2e63fd77b5dbb34e3034e2d5935aa9d8cf6f6cc9 Mon Sep 17 00:00:00 2001 From: Ken Polizzi Date: Sun, 22 Dec 2019 00:15:16 +0000 Subject: [PATCH 5/6] add math operations support to select fields --- query_builder.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/query_builder.go b/query_builder.go index c637aa2..1539b58 100644 --- a/query_builder.go +++ b/query_builder.go @@ -317,7 +317,7 @@ func (q *Query) Build() string { } var functionMatcher = regexp.MustCompile(`.+\(.+\)$`) -var mathMatcher = regexp.MustCompile(`^(.+?)(([+\-\/*])(\s+)?(\d+)(\.\d+)?)+$`) +var mathMatcher = regexp.MustCompile(`^(.+?)((\s?)([\-\+\/\*])(\s?)(-?\d+)(\.\d+)?)+`) func (q *Query) buildFields() string { if q.fields == nil { From d276e36d8dd9a62abaa7cf3d9ba5e1f728c2be17 Mon Sep 17 00:00:00 2001 From: Ken Polizzi Date: Sun, 22 Dec 2019 00:22:42 +0000 Subject: [PATCH 6/6] add math operations support to select fields --- query_builder.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/query_builder.go b/query_builder.go index 1539b58..1e2ca4f 100644 --- a/query_builder.go +++ b/query_builder.go @@ -317,7 +317,7 @@ func (q *Query) Build() string { } var functionMatcher = regexp.MustCompile(`.+\(.+\)$`) -var mathMatcher = regexp.MustCompile(`^(.+?)((\s?)([\-\+\/\*])(\s?)(-?\d+)(\.\d+)?)+`) +var mathMatcher = regexp.MustCompile(`^(.+?)((\s*)([\-\+\/\*])(\s*)(-?\d+)(\.\d+)?)+`) func (q *Query) buildFields() string { if q.fields == nil {