Example #1
0
def test_select_field_on_alias():
    result = compute_up(t.amount, select(s).limit(10).alias('foo'))
    assert normalize(str(select(result))) == normalize("""
        SELECT foo.amount
        FROM (SELECT accounts.name AS name, accounts.amount AS amount, accounts.id AS id
              FROM accounts
              LIMIT :param_1) as foo""")
Example #2
0
def test_multi_column_join():
    metadata = sa.MetaData()
    lhs = sa.Table('aaa', metadata,
                   sa.Column('x', sa.Integer),
                   sa.Column('y', sa.Integer),
                   sa.Column('z', sa.Integer))

    rhs = sa.Table('bbb', metadata,
                   sa.Column('w', sa.Integer),
                   sa.Column('x', sa.Integer),
                   sa.Column('y', sa.Integer))

    L = symbol('L', 'var * {x: int, y: int, z: int}')
    R = symbol('R', 'var * {w: int, x: int, y: int}')
    joined = join(L, R, ['x', 'y'])

    expected = lhs.join(rhs, (lhs.c.x == rhs.c.x)
                           & (lhs.c.y == rhs.c.y))
    expected = select(list(unique(expected.columns, key=lambda c:
        c.name))).select_from(expected)

    result = compute(joined, {L: lhs, R: rhs})

    assert str(result) == str(expected)

    assert str(select(result)) == str(select(expected))

    # Schemas match
    print(result.c.keys())
    print(joined.fields)
    assert list(result.c.keys()) == list(joined.fields)
Example #3
0
def test_join():
    metadata = sa.MetaData()
    lhs = sa.Table('amounts', metadata,
                   sa.Column('name', sa.String),
                   sa.Column('amount', sa.Integer))

    rhs = sa.Table('ids', metadata,
                   sa.Column('name', sa.String),
                   sa.Column('id', sa.Integer))

    expected = lhs.join(rhs, lhs.c.name == rhs.c.name)
    expected = select(list(unique(expected.columns, key=lambda c:
        c.name))).select_from(expected)

    L = TableSymbol('L', '{name: string, amount: int}')
    R = TableSymbol('R', '{name: string, id: int}')
    joined = join(L, R, 'name')

    result = compute(joined, {L: lhs, R: rhs})

    assert str(result) == str(expected)

    assert str(select(result)) == str(select(expected))

    # Schemas match
    assert list(result.c.keys()) == list(joined.columns)
Example #4
0
def test_join():
    metadata = sa.MetaData()
    lhs = sa.Table('amounts', metadata, sa.Column('name', sa.String),
                   sa.Column('amount', sa.Integer))

    rhs = sa.Table('ids', metadata, sa.Column('name', sa.String),
                   sa.Column('id', sa.Integer))

    expected = lhs.join(rhs, lhs.c.name == rhs.c.name)
    expected = select(list(unique(expected.columns,
                                  key=lambda c: c.name))).select_from(expected)

    L = symbol('L', 'var * {name: string, amount: int}')
    R = symbol('R', 'var * {name: string, id: int}')
    joined = join(L, R, 'name')

    result = compute(joined, {L: lhs, R: rhs})

    assert normalize(str(result)) == normalize("""
    SELECT amounts.name, amounts.amount, ids.id
    FROM amounts JOIN ids ON amounts.name = ids.name""")

    assert str(select(result)) == str(select(expected))

    # Schemas match
    assert list(result.c.keys()) == list(joined.fields)

    # test sort on join

    result = compute(joined.sort('amount'), {L: lhs, R: rhs})
    assert normalize(str(result)) == normalize("""
    SELECT amounts.name, amounts.amount, ids.id
    FROM amounts JOIN ids ON amounts.name = ids.name
    ORDER BY amounts.amount""")
def test_multi_column_join():
    metadata = sa.MetaData()
    lhs = sa.Table('aaa', metadata,
                   sa.Column('x', sa.Integer),
                   sa.Column('y', sa.Integer),
                   sa.Column('z', sa.Integer))

    rhs = sa.Table('bbb', metadata,
                   sa.Column('w', sa.Integer),
                   sa.Column('x', sa.Integer),
                   sa.Column('y', sa.Integer))

    L = symbol('L', 'var * {x: int, y: int, z: int}')
    R = symbol('R', 'var * {w: int, x: int, y: int}')
    joined = join(L, R, ['x', 'y'])

    expected = lhs.join(rhs, (lhs.c.x == rhs.c.x)
                           & (lhs.c.y == rhs.c.y))
    expected = select(list(unique(expected.columns, key=lambda c:
        c.name))).select_from(expected)

    result = compute(joined, {L: lhs, R: rhs})

    assert str(result) == str(expected)

    assert str(select(result)) == str(select(expected))

    # Schemas match
    print(result.c.keys())
    print(joined.fields)
    assert list(result.c.keys()) == list(joined.fields)
Example #6
0
def test_join():
    metadata = sa.MetaData()
    lhs = sa.Table('amounts', metadata,
                   sa.Column('name', sa.String),
                   sa.Column('amount', sa.Integer))

    rhs = sa.Table('ids', metadata,
                   sa.Column('name', sa.String),
                   sa.Column('id', sa.Integer))

    expected = lhs.join(rhs, lhs.c.name == rhs.c.name)
    expected = select(list(unique(expected.columns, key=lambda c:
        c.name))).select_from(expected)

    L = Symbol('L', 'var * {name: string, amount: int}')
    R = Symbol('R', 'var * {name: string, id: int}')
    joined = join(L, R, 'name')

    result = compute(joined, {L: lhs, R: rhs})

    assert normalize(str(result)) == normalize("""
    SELECT amounts.name, amounts.amount, ids.id
    FROM amounts JOIN ids ON amounts.name = ids.name""")

    assert str(select(result)) == str(select(expected))

    # Schemas match
    assert list(result.c.keys()) == list(joined.fields)
def test_select_field_on_alias():
    result = compute_up(t.amount, select(s).limit(10).alias('foo'))
    assert normalize(str(select(result))) == normalize("""
        SELECT foo.amount
        FROM (SELECT accounts.name AS name, accounts.amount AS amount, accounts.id AS id
              FROM accounts
              LIMIT :param_1) as foo""")
Example #8
0
def test_count_on_table():
    assert normalize(str(select(compute(t.count(), s)))) == normalize("""
    SELECT count(accounts.id) as count_1
    FROM accounts""")

    assert normalize(str(select(compute(t[t.amount > 0].count(), s)))) == \
    normalize("""
    SELECT count(accounts.id) as count_1
    FROM accounts
    WHERE accounts.amount > :amount_1""")
Example #9
0
def test_count_on_table():
    assert normalize(str(select(compute(t.count(), s)))) == normalize("""
    SELECT count(accounts.id) as count_1
    FROM accounts""")

    assert normalize(str(select(compute(t[t.amount > 0].count(), s)))) == \
    normalize("""
    SELECT count(accounts.id) as count_1
    FROM accounts
    WHERE accounts.amount > :amount_1""")
Example #10
0
def test_lower_column():
    metadata = sa.MetaData()
    name = sa.Table(
        'name',
        metadata,
        sa.Column('id', sa.Integer),
        sa.Column('name', sa.String),
    )
    city = sa.Table(
        'place',
        metadata,
        sa.Column('id', sa.Integer),
        sa.Column('city', sa.String),
        sa.Column('country', sa.String),
    )

    tname = symbol('name', discover(name))
    tcity = symbol('city', discover(city))

    assert lower_column(name.c.id) is name.c.id
    assert lower_column(select(name).c.id) is name.c.id

    j = name.join(city, name.c.id == city.c.id)
    col = [c for c in j.columns if c.name == 'country'][0]

    assert lower_column(col) is city.c.country
Example #11
0
def test_join_complex_clean():
    metadata = sa.MetaData()
    name = sa.Table('name', metadata,
             sa.Column('id', sa.Integer),
             sa.Column('name', sa.String),
             )
    city = sa.Table('place', metadata,
             sa.Column('id', sa.Integer),
             sa.Column('city', sa.String),
             sa.Column('country', sa.String),
             )

    sel = select(name).where(name.c.id > 10)

    tname = symbol('name', discover(name))
    tcity = symbol('city', discover(city))

    ns = {tname: name, tcity: city}

    expr = join(tname[tname.id > 0], tcity, 'id')
    result = compute(expr, ns)

    assert normalize(str(result)) == normalize("""
    SELECT name.id, name.name, place.city, place.country
    FROM name JOIN place ON name.id = place.id
    WHERE name.id > :id_1""")
def test_reductions_on_complex_selections():

    assert normalize(str(select(compute(t[t.amount > 0].id.sum(), s)))) == \
            normalize("""
    SELECT sum(accounts.id) as id_sum
    FROM accounts
    WHERE accounts.amount > :amount_1 """)
Example #13
0
def test_columnwise_on_complex_selection():
    assert normalize(str(select(compute(t[t.amount > 0].amount + 1, s)))) == \
            normalize("""
    SELECT accounts.amount + :amount_1 AS anon_1
    FROM accounts
    WHERE accounts.amount > :amount_2
    """)
Example #14
0
def test_reductions_on_complex_selections():

    assert normalize(str(select(compute(t[t.amount > 0].id.sum(), s)))) == \
            normalize("""
    SELECT sum(accounts.id) as id_sum
    FROM accounts
    WHERE accounts.amount > :amount_1 """)
Example #15
0
def test_count_on_table():
    result = select(compute(t.count(), s))
    assert normalize(str(result)) == normalize("""
    SELECT count(accounts.id) as count_1
    FROM accounts""")

    result = select(compute(t[t.amount > 0].count(), s))
    assert (normalize(str(result)) == normalize("""
        SELECT count(accounts.id) as count_1
        FROM accounts
        WHERE accounts.amount > :amount_1""")
            or normalize(str(result)) == normalize("""
        SELECT count(alias.id) as count
        FROM (SELECT accounts.name AS name, accounts.amount AS amount, accounts.id AS id
              FROM accounts
              WHERE accounts.amount > :amount_1) as alias"""))
def test_columnwise_on_complex_selection():
    assert normalize(str(select(compute(t[t.amount > 0].amount + 1, s)))) == \
            normalize("""
    SELECT accounts.amount + :amount_1 AS anon_1
    FROM accounts
    WHERE accounts.amount > :amount_2
    """)
def test_join_complex_clean():
    metadata = sa.MetaData()
    name = sa.Table('name', metadata,
             sa.Column('id', sa.Integer),
             sa.Column('name', sa.String),
             )
    city = sa.Table('place', metadata,
             sa.Column('id', sa.Integer),
             sa.Column('city', sa.String),
             sa.Column('country', sa.String),
             )

    sel = select(name).where(name.c.id > 10)

    tname = symbol('name', discover(name))
    tcity = symbol('city', discover(city))

    ns = {tname: name, tcity: city}

    expr = join(tname[tname.id > 0], tcity, 'id')
    result = compute(expr, ns)

    expected1 = """
        SELECT name.id, name.name, place.city, place.country
        FROM name JOIN place ON name.id = place.id
        WHERE name.id > :id_1"""

    expected2 = """
        SELECT alias.id, alias.name, place.city, place.country
        FROM (SELECT name.id as id, name.name AS name
              FROM name
              WHERE name.id > :id_1) AS alias
        JOIN place ON alias.id = place.id"""
    assert (normalize(str(result)) == normalize(expected1) or
            normalize(str(result)) == normalize(expected2))
Example #18
0
def test_reductions_on_complex_selections():
    assert normalize(str(select(compute(t[t.amount > 0].id.sum(), s)))) == \
        normalize("""
    with alias as
        (select accounts.id as id
         from
            accounts
         where
            accounts.amount > :amount_1)
    select sum(alias.id) as id_sum from alias""")
Example #19
0
def test_by_head():
    t2 = t.head(100)
    expr = by(t2, t2['name'], t2['amount'].sum())
    result = compute(expr, s)
    s2 = select(s).limit(100)
    expected = sa.select([s2.c.name,
                          sa.sql.functions.sum(s2.c.amount).label('amount')]
                         ).group_by(s2.c.name)

    assert str(result) == str(expected)
Example #20
0
def test_reductions_on_complex_selections():
    assert normalize(str(select(compute(t[t.amount > 0].id.sum(), s)))) == \
        normalize("""
    with alias as
        (select accounts.id as id
         from
            accounts
         where
            accounts.amount > :amount_1)
    select sum(alias.id) as id_sum from alias""")
Example #21
0
def test_count_on_table():
    result = select(compute(t.count(), s))
    assert normalize(str(result)) == normalize("""
    SELECT count(accounts.id) as count_1
    FROM accounts""")

    result = select(compute(t[t.amount > 0].count(), s))
    assert (
        normalize(str(result)) == normalize("""
        SELECT count(accounts.id) as count_1
        FROM accounts
        WHERE accounts.amount > :amount_1""")

        or

        normalize(str(result)) == normalize("""
        SELECT count(alias.id) as count
        FROM (SELECT accounts.name AS name, accounts.amount AS amount, accounts.id AS id
              FROM accounts
              WHERE accounts.amount > :amount_1) as alias"""))
Example #22
0
def test_by_head():
    t2 = t.head(100)
    expr = by(t2['name'], t2['amount'].sum())
    result = compute(expr, s)
    s2 = select(s).limit(100)
    # expected = sa.select([s2.c.name,
    #                       sa.sql.functions.sum(s2.c.amount).label('amount_sum')]
    #                      ).group_by(s2.c.name)
    expected = """
    SELECT accounts.name, sum(accounts.amount) as amount_sum
    FROM accounts
    GROUP by accounts.name
    LIMIT :param_1"""
    assert normalize(str(result)) == normalize(str(expected))
Example #23
0
def test_union():
    ts = [TableSymbol('t_%d' % i, '{name: string, amount: int, id: int}')
            for i in [1, 2, 3]]
    ss = [sa.Table('accounts_%d' % i, metadata,
             sa.Column('name', sa.String),
             sa.Column('amount', sa.Integer),
             sa.Column('id', sa.Integer, primary_key=True)) for i in [1, 2, 3]]

    expr = union(*ts)

    result = str(select(compute(expr, dict(zip(ts, ss)))))

    assert "SELECT name, amount, id" in str(result)
    assert "accounts_1 UNION accounts_2 UNION accounts_3" in str(result)
Example #24
0
def test_slice():
    start, stop, step = 50, 100, 1
    result = str(compute(t[start:stop], s))

    # Verifies that compute is translating the query correctly
    assert result == str(select(s).offset(start).limit(stop))

    # Verifies the query against expected SQL query
    expected = """
    SELECT accounts.name, accounts.amount, accounts.id FROM accounts
    LIMIT :param_1 OFFSET :param_2
    """

    assert normalize(str(result)) == normalize(str(expected))

    # Step size of 1 should be alright
    compute(t[start:stop:step], s)
Example #25
0
def test_slice():
    start, stop, step = 50, 100, 1
    result = str(compute(t[start:stop], s))

    # Verifies that compute is translating the query correctly
    assert result == str(select(s).offset(start).limit(stop))

    # Verifies the query against expected SQL query
    expected = """
    SELECT accounts.name, accounts.amount, accounts.id FROM accounts
    LIMIT :param_1 OFFSET :param_2
    """

    assert normalize(str(result)) == normalize(str(expected))

    # Step size of 1 should be alright
    compute(t[start:stop:step], s)
Example #26
0
def test_union():
    metadata = sa.MetaData()
    ts = [
        Symbol('t_%d' % i, 'var * {name: string, amount: int, id: int}')
        for i in [1, 2, 3]
    ]
    ss = [
        sa.Table('accounts_%d' % i, metadata, sa.Column('name', sa.String),
                 sa.Column('amount', sa.Integer),
                 sa.Column('id', sa.Integer, primary_key=True))
        for i in [1, 2, 3]
    ]

    expr = union(*ts)

    result = str(select(compute(expr, dict(zip(ts, ss)))))

    assert "SELECT name, amount, id" in str(result)
    assert "accounts_1 UNION accounts_2 UNION accounts_3" in str(result)
Example #27
0
def test_lower_column():
    metadata = sa.MetaData()
    name = sa.Table('name', metadata,
                    sa.Column('id', sa.Integer),
                    sa.Column('name', sa.String),
                    )
    city = sa.Table('place', metadata,
                    sa.Column('id', sa.Integer),
                    sa.Column('city', sa.String),
                    sa.Column('country', sa.String),
                    )

    tname = symbol('name', discover(name))
    tcity = symbol('city', discover(city))

    assert lower_column(name.c.id) is name.c.id
    assert lower_column(select(name).c.id) is name.c.id

    j = name.join(city, name.c.id == city.c.id)
    col = [c for c in j.columns if c.name == 'country'][0]

    assert lower_column(col) is city.c.country
Example #28
0
File: sql.py Project: B-Rich/blaze
def compute(t, ddesc):
    query = select(compute(t, ddesc.table))      # Get the query out
    with ddesc.engine.connect() as conn:
        result = conn.execute(query).fetchall() # Use SQLAlchemy to actually perform the query
    return result
def test_relabel():
    result = compute(t.relabel({'name': 'NAME', 'id': 'ID'}), s)
    expected = select([s.c.name.label('NAME'), s.c.amount, s.c.id.label('ID')])

    assert str(result) == str(expected)
def test_head():
    assert str(compute(t.head(2), s)) == str(select(s).limit(2))
def test_sort():
    assert str(compute(t.sort('amount'), s)) == \
            str(select(s).order_by(s.c.amount))

    assert str(compute(t.sort('amount', ascending=False), s)) == \
            str(select(s).order_by(sqlalchemy.desc(s.c.amount)))
Example #32
0
def test_multicolumn_sort():
    assert str(compute(t.sort(['amount', 'id']), s)) == \
        str(select(s).order_by(sa.asc(s.c.amount), sa.asc(s.c.id)))

    assert str(compute(t.sort(['amount', 'id'], ascending=False), s)) == \
        str(select(s).order_by(sa.desc(s.c.amount), sa.desc(s.c.id)))
Example #33
0
def test_sort():
    assert str(compute(t.sort('amount'), s)) == \
            str(select(s).order_by(s.c.amount))

    assert str(compute(t.sort('amount', ascending=False), s)) == \
            str(select(s).order_by(sqlalchemy.desc(s.c.amount)))
Example #34
0
def test_head():
    assert str(compute(t.head(2), s)) == str(select(s).limit(2))
Example #35
0
def test_count_on_table():
    assert normalize(str(select(compute(t.count(), s)))) == normalize("""
    SELECT count(accounts.id) as tbl_row_count
    FROM accounts""")
Example #36
0
def test_relabel():
    result = compute(t.relabel({'name': 'NAME', 'id': 'ID'}), s)
    expected = select([s.c.name.label('NAME'), s.c.amount, s.c.id.label('ID')])

    assert str(result) == str(expected)
Example #37
0
def test_multicolumn_sort():
    assert str(compute(t.sort(['amount', 'id']), s)) == \
        str(select(s).order_by(sa.asc(s.c.amount), sa.asc(s.c.id)))

    assert str(compute(t.sort(['amount', 'id'], ascending=False), s)) == \
        str(select(s).order_by(sa.desc(s.c.amount), sa.desc(s.c.id)))