Skip to content

Commit 55b69b1

Browse files
krzysztof-kwittcpcloud
authored andcommitted
feat(bigquery): implement bitwise operations
1 parent f4c5607 commit 55b69b1

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed

ibis/backends/bigquery/registry.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -587,6 +587,12 @@ def _nth_value(t, op):
587587
ops.Clip: _clip,
588588
ops.Degrees: lambda t, op: f"(180 * {t.translate(op.arg)} / ACOS(-1))",
589589
ops.Radians: lambda t, op: f"(ACOS(-1) * {t.translate(op.arg)} / 180)",
590+
ops.BitwiseNot: lambda t, op: f"~ {t.translate(op.arg)}",
591+
ops.BitwiseXor: lambda t, op: f"{t.translate(op.left)} ^ {t.translate(op.right) }",
592+
ops.BitwiseOr: lambda t, op: f"{t.translate(op.left)} | {t.translate(op.right) }",
593+
ops.BitwiseAnd: lambda t, op: f"{t.translate(op.left)} & {t.translate(op.right) }",
594+
ops.BitwiseLeftShift: lambda t, op: f"{t.translate(op.left)} << {t.translate(op.right) }",
595+
ops.BitwiseRightShift: lambda t, op: f"{t.translate(op.left)} >> {t.translate(op.right) }",
590596
# Temporal functions
591597
ops.Date: unary("DATE"),
592598
ops.DateFromYMD: fixed_arity("DATE", 3),

ibis/backends/tests/test_numeric.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -614,7 +614,7 @@ def test_constants(con, const):
614614
param(lambda t: t.int_col, lambda _: 3, id="col_scalar"),
615615
],
616616
)
617-
@pytest.mark.notimpl(["bigquery", "dask", "datafusion", "pandas", "snowflake"])
617+
@pytest.mark.notimpl(["dask", "datafusion", "pandas", "snowflake"])
618618
def test_bitwise_columns(backend, con, alltypes, df, op, left_fn, right_fn):
619619
expr = op(left_fn(alltypes), right_fn(alltypes)).name("tmp")
620620
result = con.execute(expr)
@@ -648,7 +648,7 @@ def test_bitwise_columns(backend, con, alltypes, df, op, left_fn, right_fn):
648648
param(rshift, lambda t: t.int_col, lambda _: 3, id="rshift_col_scalar"),
649649
],
650650
)
651-
@pytest.mark.notimpl(["bigquery", "dask", "datafusion", "pandas"])
651+
@pytest.mark.notimpl(["dask", "datafusion", "pandas"])
652652
@pyspark_no_bitshift
653653
def test_bitwise_shift(backend, alltypes, df, op, left_fn, right_fn):
654654
expr = op(left_fn(alltypes), right_fn(alltypes)).name("tmp")
@@ -678,23 +678,23 @@ def test_bitwise_shift(backend, alltypes, df, op, left_fn, right_fn):
678678
("left", "right"),
679679
[param(4, L(2), id="int_col"), param(L(4), 2, id="col_int")],
680680
)
681-
@pytest.mark.notimpl(["bigquery", "dask", "datafusion", "pandas"])
681+
@pytest.mark.notimpl(["dask", "datafusion", "pandas"])
682682
def test_bitwise_scalars(con, op, left, right):
683683
expr = op(left, right)
684684
result = con.execute(expr)
685685
expected = op(4, 2)
686686
assert result == expected
687687

688688

689-
@pytest.mark.notimpl(["bigquery", "dask", "datafusion", "pandas", "snowflake"])
689+
@pytest.mark.notimpl(["dask", "datafusion", "pandas", "snowflake"])
690690
def test_bitwise_not_scalar(con):
691691
expr = ~L(2)
692692
result = con.execute(expr)
693693
expected = -3
694694
assert result == expected
695695

696696

697-
@pytest.mark.notimpl(["bigquery", "dask", "datafusion", "pandas", "snowflake"])
697+
@pytest.mark.notimpl(["dask", "datafusion", "pandas", "snowflake"])
698698
def test_bitwise_not_col(backend, alltypes, df):
699699
expr = (~alltypes.int_col).name("tmp")
700700
result = expr.execute()

0 commit comments

Comments
 (0)