Skip to content

Commit

Permalink
fix eval_query, todo need interpret X-ClickHouse-Timezone response he…
Browse files Browse the repository at this point in the history
…ader

Signed-off-by: Eugene Klimov <[email protected]>
  • Loading branch information
Slach committed Feb 5, 2025
1 parent 115ccf8 commit 2e4aeb9
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 23 deletions.
18 changes: 8 additions & 10 deletions pkg/eval/eval_query.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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" +
Expand Down
26 changes: 13 additions & 13 deletions pkg/eval/eval_query_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,41 +37,41 @@ 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,
),
// 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,
),
// 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,
Expand Down

0 comments on commit 2e4aeb9

Please sign in to comment.