Skip to content

Commit bc1cf94

Browse files
committed
feat: expose template API at top level
1 parent e1d766c commit bc1cf94

5 files changed

Lines changed: 39 additions & 15 deletions

File tree

_duckdb-stubs/__init__.pyi

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ if typing.TYPE_CHECKING:
4343
ArrowUDF,
4444
)
4545
from ._enums import ExplainTypeLiteral, RenderModeLiteral
46-
from duckdb import sqltypes, func, template
46+
from duckdb import sqltypes, func, _template
4747

4848
__all__: lst[str] = [
4949
"BinderException",
@@ -244,10 +244,10 @@ class DuckDBPyConnection:
244244
def duplicate(self) -> DuckDBPyConnection: ...
245245
def enum_type(self, name: str, type: sqltypes.DuckDBPyType, values: lst[typing.Any]) -> sqltypes.DuckDBPyType: ...
246246
def execute(
247-
self, query: Statement | str | template.SqlTemplate | template.CompiledSql, parameters: object = None
247+
self, query: Statement | str | _template.SqlTemplate | _template.CompiledSql, parameters: object = None
248248
) -> DuckDBPyConnection: ...
249249
def executemany(
250-
self, query: Statement | str | template.SqlTemplate | template.CompiledSql, parameters: object = None
250+
self, query: Statement | str | _template.SqlTemplate | _template.CompiledSql, parameters: object = None
251251
) -> DuckDBPyConnection: ...
252252
def extract_statements(self, query: str) -> lst[Statement]: ...
253253
def fetch_arrow_table(self, rows_per_batch: typing.SupportsInt = 1000000) -> pyarrow.lib.Table:
@@ -331,7 +331,7 @@ class DuckDBPyConnection:
331331
compression: ParquetCompression | None = None,
332332
) -> DuckDBPyRelation: ...
333333
def from_query(
334-
self, query: str | template.SqlTemplate | template.CompiledSql, *, alias: str = "", params: object = None
334+
self, query: str | _template.SqlTemplate | _template.CompiledSql, *, alias: str = "", params: object = None
335335
) -> DuckDBPyRelation: ...
336336
def get_table_names(self, query: str, *, qualified: bool = False) -> set[str]: ...
337337
def install_extension(
@@ -362,7 +362,7 @@ class DuckDBPyConnection:
362362
self, rows_per_batch: typing.SupportsInt = 1000000, *, lazy: bool = False
363363
) -> polars.DataFrame | polars.LazyFrame: ...
364364
def query(
365-
self, query: str | template.SqlTemplate | template.CompiledSql, *, alias: str = "", params: object = None
365+
self, query: str | _template.SqlTemplate | _template.CompiledSql, *, alias: str = "", params: object = None
366366
) -> DuckDBPyRelation: ...
367367
def query_progress(self) -> float: ...
368368
def read_csv(
@@ -458,7 +458,7 @@ class DuckDBPyConnection:
458458
def row_type(self, fields: IntoFields) -> sqltypes.DuckDBPyType: ...
459459
def sql(
460460
self,
461-
query: Statement | str | template.SqlTemplate | template.CompiledSql,
461+
query: Statement | str | _template.SqlTemplate | _template.CompiledSql,
462462
*,
463463
alias: str = "",
464464
params: object = None,
@@ -966,7 +966,7 @@ def enum_type(
966966
connection: DuckDBPyConnection | None = None,
967967
) -> sqltypes.DuckDBPyType: ...
968968
def execute(
969-
query: Statement | str | template.SqlTemplate | template.CompiledSql,
969+
query: Statement | str | _template.SqlTemplate | _template.CompiledSql,
970970
parameters: object = None,
971971
*,
972972
connection: DuckDBPyConnection | None = None,
@@ -1081,7 +1081,7 @@ def from_parquet(
10811081
connection: DuckDBPyConnection | None = None,
10821082
) -> DuckDBPyRelation: ...
10831083
def from_query(
1084-
query: Statement | str | template.SqlTemplate | template.CompiledSql,
1084+
query: Statement | str | _template.SqlTemplate | _template.CompiledSql,
10851085
*,
10861086
alias: str = "",
10871087
params: object = None,
@@ -1146,7 +1146,7 @@ def project(
11461146
df: pandas.DataFrame, *args: IntoExpr, groups: str = "", connection: DuckDBPyConnection | None = None
11471147
) -> DuckDBPyRelation: ...
11481148
def query(
1149-
query: Statement | str | template.SqlTemplate | template.CompiledSql,
1149+
query: Statement | str | _template.SqlTemplate | _template.CompiledSql,
11501150
*,
11511151
alias: str = "",
11521152
params: object = None,
@@ -1259,7 +1259,7 @@ def row_type(fields: IntoFields, *, connection: DuckDBPyConnection | None = None
12591259
def rowcount(*, connection: DuckDBPyConnection | None = None) -> int: ...
12601260
def set_default_connection(connection: DuckDBPyConnection) -> None: ...
12611261
def sql(
1262-
query: Statement | str | template.SqlTemplate | template.CompiledSql,
1262+
query: Statement | str | _template.SqlTemplate | _template.CompiledSql,
12631263
*,
12641264
alias: str = "",
12651265
params: object = None,

duckdb/__init__.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,17 @@
165165
STRING,
166166
DBAPITypeObject,
167167
)
168+
from duckdb._template import (
169+
CompiledSql,
170+
IntoInterpolation,
171+
Param,
172+
ResolvedSqlTemplate,
173+
SqlTemplate,
174+
SupportsDuckdbTemplate,
175+
compile,
176+
param,
177+
template,
178+
)
168179
from duckdb._version import (
169180
__duckdb_version__,
170181
__version__,
@@ -217,6 +228,7 @@
217228
"CatalogException",
218229
"CoalesceOperator",
219230
"ColumnExpression",
231+
"CompiledSql",
220232
"ConnectionException",
221233
"ConstantExpression",
222234
"ConstraintException",
@@ -246,6 +258,7 @@
246258
"InternalException",
247259
"InterruptException",
248260
"IntervalValue",
261+
"IntoInterpolation",
249262
"InvalidInputException",
250263
"InvalidTypeException",
251264
"LambdaExpression",
@@ -258,20 +271,24 @@
258271
"OperationalError",
259272
"OutOfMemoryException",
260273
"OutOfRangeException",
274+
"Param",
261275
"ParserException",
262276
"PermissionException",
263277
"ProgrammingError",
264278
"PythonExceptionHandling",
265279
"RenderMode",
280+
"ResolvedSqlTemplate",
266281
"SQLExpression",
267282
"SequenceException",
268283
"SerializationException",
269284
"ShortValue",
285+
"SqlTemplate",
270286
"StarExpression",
271287
"Statement",
272288
"StatementType",
273289
"StringValue",
274290
"StructValue",
291+
"SupportsDuckdbTemplate",
275292
"SyntaxException",
276293
"TimeTimeZoneValue",
277294
"TimeValue",
@@ -308,6 +325,7 @@
308325
"checkpoint",
309326
"close",
310327
"commit",
328+
"compile",
311329
"connect",
312330
"create_function",
313331
"cursor",
@@ -350,6 +368,7 @@
350368
"load_extension",
351369
"map_type",
352370
"order",
371+
"param",
353372
"paramstyle",
354373
"paramstyle",
355374
"pl",
@@ -373,6 +392,7 @@
373392
"struct_type",
374393
"table",
375394
"table_function",
395+
"template",
376396
"tf",
377397
"threadsafety",
378398
"threadsafety",
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
"CompiledSql",
1717
"IntoInterpolation",
1818
"Param",
19+
"ResolvedSqlTemplate",
20+
"SqlTemplate",
1921
"SupportsDuckdbTemplate",
2022
"compile",
2123
"param",

tests/fast/test_template_e2e.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import pytest
44

55
import duckdb
6-
from duckdb.template import param, template
6+
from duckdb import param, template
77

88

99
def test_connection_sql_accepts_sql_template() -> None:

tests/fast/test_template_python.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,22 @@
44

55
import pytest
66

7-
from duckdb.template import (
7+
from duckdb import (
88
CompiledSql,
99
IntoInterpolation,
1010
Param,
11-
ParamInterpolation,
1211
ResolvedSqlTemplate,
1312
SqlTemplate,
1413
SupportsDuckdbTemplate,
1514
compile,
16-
compile_parts,
1715
param,
18-
parse_parts,
1916
template,
2017
)
18+
from duckdb._template import (
19+
ParamInterpolation,
20+
compile_parts,
21+
parse_parts,
22+
)
2123

2224
# ── helpers ───────────────────────────────────────────────────────────────────
2325

0 commit comments

Comments
 (0)