diff --git a/ibis_bigquery/compiler.py b/ibis_bigquery/compiler.py index 058b78f..7a5c3d0 100644 --- a/ibis_bigquery/compiler.py +++ b/ibis_bigquery/compiler.py @@ -468,6 +468,7 @@ def _formatter(translator, expr): ops.Time: unary("TIME"), ops.TimestampAdd: _timestamp_op("TIMESTAMP_ADD", {"h", "m", "s", "ms", "us"}), ops.TimestampSub: _timestamp_op("TIMESTAMP_SUB", {"h", "m", "s", "ms", "us"}), + ops.TimestampDiff: _timestamp_op('TIME_DIFF', {'h', 'm', 's', 'ms', 'us'}), ops.DateAdd: _timestamp_op("DATE_ADD", {"D", "W", "M", "Q", "Y"}), ops.DateSub: _timestamp_op("DATE_SUB", {"D", "W", "M", "Q", "Y"}), ops.TimestampNow: fixed_arity("CURRENT_TIMESTAMP", 0), diff --git a/tests/system/test_compiler.py b/tests/system/test_compiler.py index e23a691..10e9a44 100644 --- a/tests/system/test_compiler.py +++ b/tests/system/test_compiler.py @@ -1,5 +1,6 @@ import ibis import ibis.expr.datatypes as dt +import ibis.expr.api as api import packaging.version import pytest @@ -36,6 +37,20 @@ def test_union(alltypes, distinct, expected_keyword, project_id): assert result == expected +@pytest.mark.parametrize( + ('distinct', 'expected_keyword'), [(True, 'DISTINCT'), (False, 'ALL')] + 'operand', [lambda t: api.time('18:00'), lambda t: t.k] +) +@pytest.mark.parametrize('unit', ['h', 'm', 's', 'ms', 'us', 'ns']) +def test_timestamp_timediff(operand, unit): + # import pytest; + # pytest.set_trace() + table = ibis.table([('c', 'timestamp')], name='t') + expr = operand(table).timediff(unit) + # assert isinstance(expr, ir.TimeValue) + # assert isinstance(expr.op(), ops.TimestampDiff) + + def test_ieee_divide(alltypes, project_id): expr = alltypes.double_col / 0 result = expr.compile()