def test_large_compile():
    """
    Tests that compiling a large expression tree finishes
    within a reasonable amount of time
    """
    num_columns = 20
    num_joins = 7

    class MockBigQueryClient(bq.BigQueryClient):
        def __init__(self):
            pass

    names = [f"col_{i}" for i in range(num_columns)]
    schema = ibis.Schema(names, ['string'] * num_columns)
    ibis_client = MockBigQueryClient()
    table = TableExpr(
        ops.SQLQueryResult("select * from t", schema, ibis_client)
    )
    for _ in range(num_joins):
        table = table.mutate(dummy=ibis.literal(""))
        table = table.left_join(table, ["dummy"])[[table]]

    start = datetime.datetime.now()
    table.compile()
    delta = datetime.datetime.now() - start
    assert delta.total_seconds() < 10
Beispiel #2
0
 def __call__(self, expr: ir.TableExpr) -> ir.TableExpr:
     return expr.mutate(
         **{
             name: column.resolve(expr, {X: expr})
             for name, column in self.mutations.items()
         })
Beispiel #3
0
def test_mutate(diamonds: ir.TableExpr) -> None:
    result = diamonds >> mutate(new_column=X.carat + 1)
    expected = diamonds.mutate(new_column=lambda x: x.carat + 1)
    assert result.equals(expected)
    tm.assert_frame_equal(expected.execute(), result >> do())