Skip to content

Commit 7c46366

Browse files
authored
Merge pull request #110 from DanCardin/dc/quote-trigger-names
fix: Quote trigger name/tablenames.
2 parents 7e4b1b3 + 3d26406 commit 7c46366

File tree

6 files changed

+44
-9
lines changed

6 files changed

+44
-9
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
## 0.15
44

5+
### 0.15.9
6+
7+
- fix: Quote trigger name/tablenames.
8+
59
### 0.15.8
610

711
- fix: Snowflake - Stop asserting views start with SELECT (CTEs).

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "sqlalchemy-declarative-extensions"
3-
version = "0.15.8"
3+
version = "0.15.9"
44
authors = [
55
{name = "Dan Cardin", email = "[email protected]"},
66
]

src/sqlalchemy_declarative_extensions/dialects/postgresql/trigger.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,11 +155,11 @@ def to_sql_create(self, replace=False):
155155
components.append("OR REPLACE")
156156

157157
components.append("TRIGGER")
158-
components.append(self.name)
158+
components.append(f'"{self.name}"')
159159
components.append(self.time.value)
160160
components.append(" OR ".join([e.value for e in self.events]))
161161
components.append("ON")
162-
components.append(self.on)
162+
components.append(f'"{self.on}"')
163163
components.append("FOR EACH")
164164
components.append(self.for_each.value)
165165

src/sqlalchemy_declarative_extensions/view/ddl.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,7 @@
1010

1111
def view_ddl(views: Views, view_filter: list[str] | None = None):
1212
def after_create(metadata: MetaData, connection: Connection, **_):
13-
result = compare_views(
14-
connection, views, normalize_with_connection=False
15-
)
13+
result = compare_views(connection, views, normalize_with_connection=False)
1614
for op in result:
1715
if not match_name(op.view.qualified_name, view_filter):
1816
continue

tests/audit/test_quoting.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
from pytest_mock_resources import create_postgres_fixture
2+
from sqlalchemy.orm import Mapped, mapped_column
3+
4+
from sqlalchemy_declarative_extensions import (
5+
declarative_database,
6+
register_sqlalchemy_events,
7+
)
8+
from sqlalchemy_declarative_extensions.audit import audit
9+
from sqlalchemy_declarative_extensions.sqlalchemy import declarative_base
10+
11+
_Base = declarative_base()
12+
13+
14+
@declarative_database
15+
class Base(_Base): # type: ignore # type: ignore
16+
__abstract__ = True
17+
18+
19+
@audit()
20+
class Something(Base):
21+
__tablename__ = "Something"
22+
23+
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
24+
25+
26+
register_sqlalchemy_events(Base.metadata, functions=True, triggers=True)
27+
28+
pg = create_postgres_fixture(engine_kwargs={"echo": True}, session=True)
29+
30+
31+
def test_quoted_name(pg):
32+
Base.metadata.create_all(bind=pg.connection())
33+
pg.commit()

uv.lock

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)