-
Notifications
You must be signed in to change notification settings - Fork 97
Expand file tree
/
Copy pathsqlalchemy-sql-schema.test
More file actions
113 lines (93 loc) · 3.61 KB
/
sqlalchemy-sql-schema.test
File metadata and controls
113 lines (93 loc) · 3.61 KB
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
[case testSchemaMetaData]
from sqlalchemy import MetaData, create_engine
from sqlalchemy.engine import Connection
from sqlalchemy.engine.url import make_url
m = MetaData()
e = create_engine('postgresql://foo')
c = Connection(e)
m.bind = 'postgresql://foo'
m.bind = make_url('postgresql://foo')
reveal_type(m.bind) # N: Revealed type is 'Union[sqlalchemy.engine.base.Engine, sqlalchemy.engine.base.Connection, None]'
m.bind = e
reveal_type(m.bind) # N: Revealed type is 'sqlalchemy.engine.base.Engine'
m.bind = c
reveal_type(m.bind) # N: Revealed type is 'sqlalchemy.engine.base.Connection'
[out]
[case testSequenceType]
# Regression test - schema.Sequence is not typing.Sequence
from sqlalchemy.sql.schema import ForeignKeyConstraint
ForeignKeyConstraint(["foo", "bar"], ["table.foo", "table.baz"])
[out]
[case testColumnQueriesAreChecked]
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
user: User
reveal_type(user.id) # N: Revealed type is 'builtins.int*'
reveal_type(User.name) # N: Revealed type is 'sqlalchemy.sql.schema.Column[Union[builtins.str, None]]'
User.name.foo # E: "Column[Optional[str]]" has no attribute "foo"
User.name.ilike('hi') # OK
User.name.ilike(5) # E: Argument 1 to "ilike" of "ColumnOperators" has incompatible type "int"; expected "str"
[out]
[case testColumnWithForeignKey]
from sqlalchemy import Column, Table, ForeignKey, String, Integer, MetaData
metadata = MetaData()
user_preference = Table('user_preference', metadata,
Column('pref_id', Integer, primary_key=True),
Column('user_id', Integer, ForeignKey("user.user_id"), nullable=False),
Column('pref_name', String(40), nullable=False),
Column('pref_value', String(100))
)
[out]
[case testColumnWithForeignKeyDeclarative]
from typing import Optional
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, ForeignKey
Base = declarative_base()
class Mytable(Base):
__tablename__ = 'mytable'
objid: Column[Optional[int]] = Column(ForeignKey('othertable.objid'), index=True)
[out]
[case testTableWithIndexes]
from sqlalchemy import Column, Table, String, Integer, Index, MetaData, text, func
metadata = MetaData()
name_col = Column('name', String)
test_table = Table('test', metadata,
Column('id', Integer, primary_key=True),
name_col,
Index('idx1', 'id', 'name'),
Index('idx1', 'id', name_col),
Index('idx1', 'id', func.lower(name_col)),
Index('idx1', 'id', text("lower(name)")),
)
[out]
[case testColumnWithForeignKeyThroughTableArgsAsColumn]
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, ForeignKeyConstraint, Integer
Base = declarative_base()
class Profile(Base):
__tablename__ = "profile"
id = Column(Integer, primary_key=True)
class User(Base):
__tablename__ = "user"
artkey = Column(Integer, primary_key=True)
profile_id = Column(Integer, nullable=False)
__table_args__ = (ForeignKeyConstraint([profile_id], [Profile.id]), )
[out]
[case testColumnWithForeignKeyThroughTableArgsAsString]
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, ForeignKeyConstraint, Integer
Base = declarative_base()
class Profile(Base):
__tablename__ = "profile"
id = Column(Integer, primary_key=True)
class User(Base):
__tablename__ = "user"
id = Column(Integer, primary_key=True)
profile_id = Column(Integer, nullable=False)
__table_args__ = (ForeignKeyConstraint(["profile_id"], [Profile.id]), )
[out]