Skip to content

Commit 9cebb4a

Browse files
committed
add tests and CHANGES.rst
1 parent 08e3a27 commit 9cebb4a

File tree

6 files changed

+122
-3
lines changed

6 files changed

+122
-3
lines changed

CHANGES.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
Version history
22
===============
33

4+
**UNRELEASED**
5+
- Fix Postgres TSVECTOR handling (PR by @danplischke)
6+
- Fix SQLModel metadata reference (PR by @danplischke)
7+
48
**3.1.0**
59

610
- Type annotations for ARRAY column attributes now include the Python type of

src/sqlacodegen/generators.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1437,7 +1437,7 @@ def generate_base(self) -> None:
14371437
self.base = Base(
14381438
literal_imports=[],
14391439
declarations=[],
1440-
metadata_ref="",
1440+
metadata_ref="SQLModel.metadata",
14411441
)
14421442

14431443
def collect_imports(self, models: Iterable[Model]) -> None:

tests/test_generator_dataclass.py

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import pytest
44
from _pytest.fixtures import FixtureRequest
5-
from sqlalchemy.dialects.postgresql import UUID
5+
from sqlalchemy.dialects.postgresql import TSVECTOR, UUID
66
from sqlalchemy.engine import Engine
77
from sqlalchemy.schema import Column, ForeignKeyConstraint, MetaData, Table
88
from sqlalchemy.sql.expression import text
@@ -267,3 +267,34 @@ class Simple(Base):
267267
id: Mapped[uuid.UUID] = mapped_column(UUID, primary_key=True)
268268
""",
269269
)
270+
271+
272+
def test_tsvector(generator: CodeGenerator) -> None:
273+
Table(
274+
"simple_tsvector",
275+
generator.metadata,
276+
Column("id", UUID, primary_key=True),
277+
Column("vector", TSVECTOR),
278+
)
279+
280+
validate_code(
281+
generator.generate(),
282+
"""\
283+
from typing import Optional
284+
import uuid
285+
286+
from sqlalchemy import UUID
287+
from sqlalchemy.dialects.postgresql import TSVECTOR
288+
from sqlalchemy.orm import DeclarativeBase, Mapped, MappedAsDataclass, mapped_column
289+
290+
class Base(MappedAsDataclass, DeclarativeBase):
291+
pass
292+
293+
294+
class SimpleTsvector(Base):
295+
__tablename__ = 'simple_tsvector'
296+
297+
id: Mapped[uuid.UUID] = mapped_column(UUID, primary_key=True)
298+
vector: Mapped[Optional[str]] = mapped_column(TSVECTOR)
299+
""",
300+
)

tests/test_generator_declarative.py

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from _pytest.fixtures import FixtureRequest
55
from sqlalchemy import BIGINT, PrimaryKeyConstraint
66
from sqlalchemy.dialects import postgresql
7-
from sqlalchemy.dialects.postgresql import JSON, JSONB
7+
from sqlalchemy.dialects.postgresql import JSON, JSONB, TSVECTOR
88
from sqlalchemy.engine import Engine
99
from sqlalchemy.schema import (
1010
CheckConstraint,
@@ -1706,3 +1706,33 @@ class TestDomainJson(Base):
17061706
foo: Mapped[Optional[dict]] = mapped_column(DOMAIN('domain_json', {domain_type.__name__}(astext_type=Text(length=128)), not_null=False))
17071707
""",
17081708
)
1709+
1710+
1711+
def test_tsvector(generator: CodeGenerator) -> None:
1712+
Table(
1713+
"test_tsvector",
1714+
generator.metadata,
1715+
Column("id", BIGINT, primary_key=True),
1716+
Column("vector", TSVECTOR()),
1717+
)
1718+
1719+
validate_code(
1720+
generator.generate(),
1721+
"""\
1722+
from typing import Optional
1723+
1724+
from sqlalchemy import BigInteger
1725+
from sqlalchemy.dialects.postgresql import TSVECTOR
1726+
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
1727+
1728+
class Base(DeclarativeBase):
1729+
pass
1730+
1731+
1732+
class TestTsvector(Base):
1733+
__tablename__ = 'test_tsvector'
1734+
1735+
id: Mapped[int] = mapped_column(BigInteger, primary_key=True)
1736+
vector: Mapped[Optional[str]] = mapped_column(TSVECTOR)
1737+
""",
1738+
)

tests/test_generator_sqlmodel.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import pytest
44
from _pytest.fixtures import FixtureRequest
55
from sqlalchemy import Uuid
6+
from sqlalchemy.dialects.postgresql import TSVECTOR
67
from sqlalchemy.engine import Engine
78
from sqlalchemy.schema import (
89
CheckConstraint,
@@ -204,3 +205,30 @@ class SimpleUuid(SQLModel, table=True):
204205
id: uuid.UUID = Field(sa_column=Column('id', Uuid, primary_key=True))
205206
""",
206207
)
208+
209+
210+
def test_tsvector(generator: CodeGenerator) -> None:
211+
Table(
212+
"simple_tsvector",
213+
generator.metadata,
214+
Column("id", Uuid, primary_key=True),
215+
Column("search", TSVECTOR),
216+
)
217+
218+
validate_code(
219+
generator.generate(),
220+
"""\
221+
from typing import Optional
222+
import uuid
223+
224+
from sqlalchemy import Column, Uuid
225+
from sqlalchemy.dialects.postgresql import TSVECTOR
226+
from sqlmodel import Field, SQLModel
227+
228+
class SimpleTsvector(SQLModel, table=True):
229+
__tablename__ = 'simple_tsvector'
230+
231+
id: uuid.UUID = Field(sa_column=Column('id', Uuid, primary_key=True))
232+
search: Optional[str] = Field(default=None, sa_column=Column('search', TSVECTOR))
233+
""",
234+
)

tests/test_generator_tables.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1090,3 +1090,29 @@ def test_postgresql_sequence_with_schema(
10901090
)
10911091
""",
10921092
)
1093+
1094+
1095+
def test_tsvector(generator: CodeGenerator) -> None:
1096+
Table(
1097+
"simple_items",
1098+
generator.metadata,
1099+
Column("id", INTEGER, primary_key=True),
1100+
Column("vector", postgresql.TSVECTOR),
1101+
)
1102+
1103+
validate_code(
1104+
generator.generate(),
1105+
"""\
1106+
from sqlalchemy import Column, Integer, MetaData, Table
1107+
from sqlalchemy.dialects.postgresql import TSVECTOR
1108+
1109+
metadata = MetaData()
1110+
1111+
1112+
t_simple_items = Table(
1113+
'simple_items', metadata,
1114+
Column('id', Integer, primary_key=True),
1115+
Column('vector', TSVECTOR)
1116+
)
1117+
""",
1118+
)

0 commit comments

Comments
 (0)