From 2e4aeb99c7f554eb731aa8cefc8866b7118674e8 Mon Sep 17 00:00:00 2001 From: Eugene Klimov Date: Wed, 5 Feb 2025 20:56:07 +0500 Subject: [PATCH] fix eval_query, todo need interpret X-ClickHouse-Timezone response header Signed-off-by: Eugene Klimov --- pkg/eval/eval_query.go | 18 ++++++++---------- pkg/eval/eval_query_test.go | 26 +++++++++++++------------- 2 files changed, 21 insertions(+), 23 deletions(-) diff --git a/pkg/eval/eval_query.go b/pkg/eval/eval_query.go index 1c161bedd..8a2933b85 100644 --- a/pkg/eval/eval_query.go +++ b/pkg/eval/eval_query.go @@ -612,7 +612,11 @@ func (q *EvalQuery) lttbMs(query string, ast *EvalAST) (string, error) { func (q *EvalQuery) _lttb(beforeMacrosQuery string, fromQuery string, args []interface{}, useMs bool) (string, error) { bucketNumbers := args[0].(string) if strings.ToLower(strings.Trim(bucketNumbers, " \xA0\t\r\n")) == "auto" { - bucketNumbers = "toUInt64( ($__to - $__from) / $__interval_ms )" + if useMs { + bucketNumbers = "toUInt64( ($__to - $__from) / $__interval_ms )" + } else { + bucketNumbers = "toUInt64( ($to - $from) / $interval )" + } } var argsExceptLastTwo strings.Builder @@ -633,20 +637,14 @@ func (q *EvalQuery) _lttb(beforeMacrosQuery string, fromQuery string, args []int } var xSplit = strings.Split(strings.Trim(xField, " \xA0\t\r\n"), " ") - var xAlias = "x_field" - if len(xSplit) > 1 { - xAlias = xSplit[len(xSplit)-1] - } + var xAlias = xSplit[len(xSplit)-1] var ySplit = strings.Split(strings.Trim(yField, " \xA0\t\r\n"), " ") - var yAlias = "y_field" - if len(ySplit) > 1 { - yAlias = ySplit[len(ySplit)-1] - } + var yAlias = ySplit[len(ySplit)-1] fromQuery = q._applyTimeFilter(fromQuery, useMs) - return beforeMacrosQuery + "SELECT " + argsExceptLastTwo.String() + "`lttb_result.1` AS " + xAlias + ", `lttb_result.2` AS " + yAlias + + return beforeMacrosQuery + "SELECT `lttb_result.1` AS " + xAlias + ", " + argsExceptLastTwo.String() + "`lttb_result.2` AS " + yAlias + " FROM (\n" + " SELECT " + argsExceptLastTwo.String() + "untuple(arrayJoin(lttb(" + bucketNumbers + ")(" + xField + ", " + yField + "))) AS lttb_result " + fromQuery + "\n" + diff --git a/pkg/eval/eval_query_test.go b/pkg/eval/eval_query_test.go index cbe1ef133..2d9076504 100644 --- a/pkg/eval/eval_query_test.go +++ b/pkg/eval/eval_query_test.go @@ -37,13 +37,13 @@ func TestMacrosBuilder(t *testing.T) { // https://github.com/Altinity/clickhouse-grafana/issues/500 newMacrosTestCase( "$lttb", - "/* comment */\n$lttb(auto, toStartOfMinute(time) AS x_alias, sum(from_total) AS sum_from_total) FROM requests WHERE type IN ('udp', 'tcp') GROUP BY x_alias", - "/* comment */\nSELECT `lttb_result.1` AS x_alias, `lttb_result.2` AS sum_from_total FROM (\n"+ - " SELECT untuple(arrayJoin(lttb(toUInt64( ($__to - $__from) / $__interval_ms ))(toStartOfMinute(time) AS x_alias, sum(from_total) AS sum_from_total))) AS lttb_result FROM requests WHERE $timeFilter AND type IN ('udp', 'tcp') GROUP BY x_alias\n"+ + "/* comment */\n$lttb(auto, toStartOfMinute(time) AS x_alias, from_total) FROM requests WHERE type IN ('udp', 'tcp') GROUP BY x_alias", + "/* comment */\nSELECT `lttb_result.1` AS x_alias, `lttb_result.2` AS from_total FROM (\n"+ + " SELECT untuple(arrayJoin(lttb(toUInt64( ($to - $from) / $interval ))(toStartOfMinute(time) AS x_alias, from_total))) AS lttb_result FROM requests WHERE $timeFilter AND type IN ('udp', 'tcp') GROUP BY x_alias\n"+ ") ORDER BY x_alias", - "/* comment */\nSELECT `lttb_result.1` AS x_alias, `lttb_result.2` AS sum_from_total FROM (\n"+ - " SELECT untuple(arrayJoin(lttb(toUInt64( ($__to - $__from) / $__interval_ms ))(toStartOfMinute(time) AS x_alias, sum(from_total) AS sum_from_total))) AS lttb_result FROM requests WHERE $timeFilter AND type IN ('udp', 'tcp') GROUP BY x_alias\n"+ + "/* comment */\nSELECT `lttb_result.1` AS x_alias, `lttb_result.2` AS from_total FROM (\n"+ + " SELECT untuple(arrayJoin(lttb(toUInt64( ($to - $from) / $interval ))(toStartOfMinute(time) AS x_alias, from_total))) AS lttb_result FROM requests WHERE $timeFilter AND type IN ('udp', 'tcp') GROUP BY x_alias\n"+ ") ORDER BY x_alias", q.lttb, @@ -51,13 +51,13 @@ func TestMacrosBuilder(t *testing.T) { // https://github.com/Altinity/clickhouse-grafana/issues/500 newMacrosTestCase( "$lttb with args", - "/* comment */\n$lttb(auto, category, toStartOfMinute(time) AS x_alias, sum(from_total) AS sum_from_total) FROM requests WHERE type IN ('udp', 'tcp') GROUP BY category", - "/* comment */\nSELECT category, `lttb_result.1` AS x_alias, `lttb_result.2` AS sum_from_total FROM (\n"+ - " SELECT category, untuple(arrayJoin(lttb(toUInt64( ($__to - $__from) / $__interval_ms ))(toStartOfMinute(time) AS x_alias, sum(from_total) AS sum_from_total))) AS lttb_result FROM requests WHERE $timeFilter AND type IN ('udp', 'tcp') GROUP BY category\n"+ + "/* comment */\n$lttb(auto, category, toStartOfMinute(time) AS x_alias, from_total AS sum_from_total) FROM requests WHERE type IN ('udp', 'tcp') GROUP BY category", + "/* comment */\nSELECT `lttb_result.1` AS x_alias, category, `lttb_result.2` AS sum_from_total FROM (\n"+ + " SELECT category, untuple(arrayJoin(lttb(toUInt64( ($to - $from) / $interval ))(toStartOfMinute(time) AS x_alias, from_total AS sum_from_total))) AS lttb_result FROM requests WHERE $timeFilter AND type IN ('udp', 'tcp') GROUP BY category\n"+ ") ORDER BY x_alias", - "/* comment */\nSELECT category, `lttb_result.1` AS x_alias, `lttb_result.2` AS sum_from_total FROM (\n"+ - " SELECT category, untuple(arrayJoin(lttb(toUInt64( ($__to - $__from) / $__interval_ms ))(toStartOfMinute(time) AS x_alias, sum(from_total) AS sum_from_total))) AS lttb_result FROM requests WHERE $timeFilter AND type IN ('udp', 'tcp') GROUP BY category\n"+ + "/* comment */\nSELECT `lttb_result.1` AS x_alias, category, `lttb_result.2` AS sum_from_total FROM (\n"+ + " SELECT category, untuple(arrayJoin(lttb(toUInt64( ($to - $from) / $interval ))(toStartOfMinute(time) AS x_alias, from_total AS sum_from_total))) AS lttb_result FROM requests WHERE $timeFilter AND type IN ('udp', 'tcp') GROUP BY category\n"+ ") ORDER BY x_alias", q.lttb, @@ -65,13 +65,13 @@ func TestMacrosBuilder(t *testing.T) { // https://github.com/Altinity/clickhouse-grafana/issues/500 newMacrosTestCase( "$lttbMs", - "/* comment */\n$lttbMs(auto, toStartOfMinute(time) AS x_alias, sum(from_total) AS sum_from_total) FROM requests WHERE type IN ('udp', 'tcp') GROUP BY x_alias", + "/* comment */\n$lttbMs(auto, toStartOfMinute(time) AS x_alias, from_total AS sum_from_total) FROM requests WHERE type IN ('udp', 'tcp') GROUP BY x_alias", "/* comment */\nSELECT `lttb_result.1` AS x_alias, `lttb_result.2` AS sum_from_total FROM (\n"+ - " SELECT untuple(arrayJoin(lttb(toUInt64( ($__to - $__from) / $__interval_ms ))(toStartOfMinute(time) AS x_alias, sum(from_total) AS sum_from_total))) AS lttb_result FROM requests WHERE $timeFilterMs AND type IN ('udp', 'tcp') GROUP BY x_alias\n"+ + " SELECT untuple(arrayJoin(lttb(toUInt64( ($__to - $__from) / $__interval_ms ))(toStartOfMinute(time) AS x_alias, from_total AS sum_from_total))) AS lttb_result FROM requests WHERE $timeFilterMs AND type IN ('udp', 'tcp') GROUP BY x_alias\n"+ ") ORDER BY x_alias", "/* comment */\nSELECT `lttb_result.1` AS x_alias, `lttb_result.2` AS sum_from_total FROM (\n"+ - " SELECT untuple(arrayJoin(lttb(toUInt64( ($__to - $__from) / $__interval_ms ))(toStartOfMinute(time) AS x_alias, sum(from_total) AS sum_from_total))) AS lttb_result FROM requests WHERE $timeFilterMs AND type IN ('udp', 'tcp') GROUP BY x_alias\n"+ + " SELECT untuple(arrayJoin(lttb(toUInt64( ($__to - $__from) / $__interval_ms ))(toStartOfMinute(time) AS x_alias, from_total AS sum_from_total))) AS lttb_result FROM requests WHERE $timeFilterMs AND type IN ('udp', 'tcp') GROUP BY x_alias\n"+ ") ORDER BY x_alias", q.lttbMs,