summaryrefslogtreecommitdiff
path: root/test/sql/test_inspect.py
blob: 0e78c06c81da39bedf7c5fae4b12e7f84fad8e78 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
"""test the inspection registry system."""

from sqlalchemy import inspect
from sqlalchemy import Table, Column, Integer, MetaData
from sqlalchemy.testing import fixtures
from sqlalchemy.testing import is_


class TestCoreInspection(fixtures.TestBase):
    def test_table(self):
        t = Table("t", MetaData(), Column("x", Integer))

        is_(inspect(t), t)
        assert t.is_selectable
        is_(t.selectable, t)

    def test_select(self):
        t = Table("t", MetaData(), Column("x", Integer))
        s = t.select()

        is_(inspect(s), s)
        assert s.is_selectable
        is_(s.selectable, s)

    def test_column_expr(self):
        c = Column("x", Integer)
        is_(inspect(c), c)
        assert not c.is_selectable
        assert not hasattr(c, "selectable")

    def test_no_clause_element_on_clauseelement(self):
        # re [ticket:3802], there are in the wild examples
        # of looping over __clause_element__, therefore the
        # absence of __clause_element__ as a test for "this is the clause
        # element" must be maintained

        x = Column("foo", Integer)
        assert not hasattr(x, "__clause_element__")