Skip to content

Commit 1517cb4

Browse files
committed
Add as_prepended kwarg to ModelBase.field_names_sql
1 parent bfbe5cb commit 1517cb4

2 files changed

Lines changed: 22 additions & 1 deletion

File tree

sql_athame/dataclasses.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,8 +230,21 @@ def field_names(cls, *, exclude: FieldNamesSet = ()) -> list[str]:
230230

231231
@classmethod
232232
def field_names_sql(
233-
cls, *, prefix: Optional[str] = None, exclude: FieldNamesSet = ()
233+
cls,
234+
*,
235+
prefix: Optional[str] = None,
236+
exclude: FieldNamesSet = (),
237+
as_prepended: str | None = None,
234238
) -> list[Fragment]:
239+
if as_prepended:
240+
return [
241+
sql(
242+
"{} AS {}",
243+
sql.identifier(f, prefix=prefix),
244+
sql.identifier(f"{as_prepended}{f}"),
245+
)
246+
for f in cls.field_names(exclude=exclude)
247+
]
235248
return [
236249
sql.identifier(f, prefix=prefix) for f in cls.field_names(exclude=exclude)
237250
]

tests/test_dataclasses.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,14 @@ class Test(ModelBase, table_name="table"):
7171
sql(",").join(t.field_values_sql()),
7272
).query() == ('INSERT INTO table ("foo","bar") VALUES ($1,$2)', [42, "hi"])
7373

74+
assert list(
75+
sql(
76+
"SELECT {fields} FROM {tbl}",
77+
fields=sql.list(Test.field_names_sql(as_prepended="p_")),
78+
tbl=Test.table_name_sql(),
79+
)
80+
) == ['SELECT "foo" AS "p_foo", "bar" AS "p_bar" FROM "table"']
81+
7482

7583
def test_modelclass_implicit_types():
7684
@dataclass

0 commit comments

Comments
 (0)