cube-js / cube

📊 Cube — Universal semantic layer platform for AI, BI, spreadsheets, and embedded analytics
https://cube.dev
Other
17.96k stars 1.78k forks source link

Support `LOG` and `ROUND` scalar functions with two arguments in the SQL API #8905

Open igorlukanin opened 2 weeks ago

igorlukanin commented 2 weeks ago

Describe the bug Earlier, support for LOG and ROUND scalar functions with two arguments was added in https://github.com/cube-js/arrow-datafusion/pull/135. However, the second argument type was specified as Int32. It allows it to match columns but prevents from matching integer literals.

To Reproduce Query generated by QuickSight:

SELECT
  date_trunc(\'day\', "period") AS period_tg",
  SUM("clicks") AS clicks_sum",
  ROUND(CAST(CAST(SUM("clicks") - (MIN(SUM("clicks")) OVER ()) AS FLOAT) / NULLIF(CAST((MAX(SUM("clicks")) OVER ()) - (MIN(SUM("clicks")) OVER ()) AS FLOAT), 0) AS NUMERIC), 3) AS "68c185d7-907c-3bb3-97f2-ec592e580dc0"
FROM "public"."revenue"
GROUP BY date_trunc(\'day\', "period")
ORDER BY date_trunc(\'day\', "period") NULLS FIRST
LIMIT 500

Casting the second argument by doing round(3.142, cast(1 as integer)) works but since the BI tool is generating the query, there no actual control over the second argument.

Expected behavior LOG and ROUND should work with integer literals as the second argument. They are indeed matched as Int64 values, as confirmed by @MazterQyou.

Version: 1.1.0

Additional context Slack thread: https://cube-js.slack.com/archives/C01FU5AP9LJ/p1727956303761059