DJ's query compiler rewrites every / into CAST(<left> AS DOUBLE) / NULLIF(<right>, 0) even when both operands are already bigint, silently turning integer division into fractional output
>>> import sqlglot
>>>
>>> q = "SELECT CAST(payment_due_date AS BIGINT) / 10000 AS derived_year FROM t"
>>>
>>> print("sqlglot:", sqlglot.__version__)
sqlglot: 29.0.1
>>> print("spark -> trino :", sqlglot.transpile(q, read="spark", write="trino")[0])
spark -> trino : SELECT CAST(TRY_CAST(payment_due_date AS BIGINT) AS DOUBLE) / NULLIF(10000, 0) AS derived_year FROM t
>>> print("trino -> trino :", sqlglot.transpile(q, read="trino", write="trino")[0])
trino -> trino : SELECT CAST(payment_due_date AS BIGINT) / 10000 AS derived_year FROM t
>>> print("spark -> spark :", sqlglot.transpile(q, read="spark", write="spark")[0])
spark -> spark : SELECT CAST(payment_due_date AS BIGINT) / 10000 AS derived_year FROM t
DJ's query compiler rewrites every
/intoCAST(<left> AS DOUBLE) / NULLIF(<right>, 0)even when both operands are already bigint, silently turning integer division into fractional output