예제 #1
0
def test_join_typed(engine):
    sql = m.Join(
        e.Identifier('person'),
        'natural left',
        e.Identifier('detail'),
    )
    assert sql.__sql__(engine) == Sql('"person" NATURAL LEFT JOIN "detail"')
예제 #2
0
def test_join_not_allowed(engine):
    with pytest.raises(UnsupportedParameterError) as ctx:
        m.Join(
            e.Identifier('person'),
            '; DELETE FROM person --',
            e.Identifier('detail'),
        )
    assert str(ctx.value) == "unsupported join type '; DELETE FROM person --'"
예제 #3
0
def test_select_join_right_using(engine):
    statement = s.Select(
        c.Select(n.star),
        c.From(m.Join(
            e.Identifier('person'), 'RIGHT', e.Identifier('detail'),
            c.Using(m.List(e.Identifier('person_id'))),
        )),
    )
    assert statement.__sql__(engine) == Sql('''
        SELECT * FROM "person" RIGHT JOIN "detail" USING ("person_id")
    '''.strip())
예제 #4
0
def test_select_join_cross(engine):
    statement = s.Select(
        c.Select(n.star),
        c.From(m.Join(
            e.Identifier('person'),
            'CROSS', e.Identifier('detail'),
        )),
    )
    assert statement.__sql__(engine) == Sql('''
        SELECT * FROM "person" CROSS JOIN "detail"
    '''.strip())
예제 #5
0
def test_select_join_natural(engine):
    statement = s.Select(
        c.Select(n.star),
        c.From(m.Join(
            e.Identifier('person'),
            'NATURAL', e.Identifier('detail'),
        )),
    )
    assert statement.__sql__(engine) == Sql('''
        SELECT * FROM "person" NATURAL JOIN "detail"
    '''.strip())
예제 #6
0
def test_select_join_inner_on(engine):
    statement = s.Select(
        c.Select(n.star),
        c.From(m.Join(
            e.Identifier('person'), 'INNER', e.Identifier('detail'),
            c.On(e.Equal(
                e.Identifier('person', 'person_id'),
                e.Identifier('detail', 'person_id'),
            )),
        )),
    )
    assert statement.__sql__(engine) == Sql(
        'SELECT * FROM "person" '
        'INNER JOIN "detail" ON "person"."person_id" = "detail"."person_id"'
    )
예제 #7
0
def test_join(engine):
    sql = m.Join(e.Identifier('person'), '', e.Identifier('detail'))
    assert sql.__sql__(engine) == Sql('"person" JOIN "detail"')