SQLAlchemy 2.0.47__cp313-cp313t-win32.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. sqlalchemy/__init__.py +283 -0
  2. sqlalchemy/connectors/__init__.py +18 -0
  3. sqlalchemy/connectors/aioodbc.py +184 -0
  4. sqlalchemy/connectors/asyncio.py +429 -0
  5. sqlalchemy/connectors/pyodbc.py +250 -0
  6. sqlalchemy/cyextension/__init__.py +6 -0
  7. sqlalchemy/cyextension/collections.cp313t-win32.pyd +0 -0
  8. sqlalchemy/cyextension/collections.pyx +409 -0
  9. sqlalchemy/cyextension/immutabledict.cp313t-win32.pyd +0 -0
  10. sqlalchemy/cyextension/immutabledict.pxd +8 -0
  11. sqlalchemy/cyextension/immutabledict.pyx +133 -0
  12. sqlalchemy/cyextension/processors.cp313t-win32.pyd +0 -0
  13. sqlalchemy/cyextension/processors.pyx +68 -0
  14. sqlalchemy/cyextension/resultproxy.cp313t-win32.pyd +0 -0
  15. sqlalchemy/cyextension/resultproxy.pyx +102 -0
  16. sqlalchemy/cyextension/util.cp313t-win32.pyd +0 -0
  17. sqlalchemy/cyextension/util.pyx +90 -0
  18. sqlalchemy/dialects/__init__.py +62 -0
  19. sqlalchemy/dialects/_typing.py +30 -0
  20. sqlalchemy/dialects/mssql/__init__.py +88 -0
  21. sqlalchemy/dialects/mssql/aioodbc.py +63 -0
  22. sqlalchemy/dialects/mssql/base.py +4093 -0
  23. sqlalchemy/dialects/mssql/information_schema.py +285 -0
  24. sqlalchemy/dialects/mssql/json.py +129 -0
  25. sqlalchemy/dialects/mssql/provision.py +185 -0
  26. sqlalchemy/dialects/mssql/pymssql.py +126 -0
  27. sqlalchemy/dialects/mssql/pyodbc.py +760 -0
  28. sqlalchemy/dialects/mysql/__init__.py +104 -0
  29. sqlalchemy/dialects/mysql/aiomysql.py +250 -0
  30. sqlalchemy/dialects/mysql/asyncmy.py +231 -0
  31. sqlalchemy/dialects/mysql/base.py +3949 -0
  32. sqlalchemy/dialects/mysql/cymysql.py +106 -0
  33. sqlalchemy/dialects/mysql/dml.py +225 -0
  34. sqlalchemy/dialects/mysql/enumerated.py +282 -0
  35. sqlalchemy/dialects/mysql/expression.py +146 -0
  36. sqlalchemy/dialects/mysql/json.py +91 -0
  37. sqlalchemy/dialects/mysql/mariadb.py +72 -0
  38. sqlalchemy/dialects/mysql/mariadbconnector.py +322 -0
  39. sqlalchemy/dialects/mysql/mysqlconnector.py +302 -0
  40. sqlalchemy/dialects/mysql/mysqldb.py +314 -0
  41. sqlalchemy/dialects/mysql/provision.py +153 -0
  42. sqlalchemy/dialects/mysql/pymysql.py +158 -0
  43. sqlalchemy/dialects/mysql/pyodbc.py +157 -0
  44. sqlalchemy/dialects/mysql/reflection.py +727 -0
  45. sqlalchemy/dialects/mysql/reserved_words.py +570 -0
  46. sqlalchemy/dialects/mysql/types.py +835 -0
  47. sqlalchemy/dialects/oracle/__init__.py +81 -0
  48. sqlalchemy/dialects/oracle/base.py +3802 -0
  49. sqlalchemy/dialects/oracle/cx_oracle.py +1555 -0
  50. sqlalchemy/dialects/oracle/dictionary.py +507 -0
  51. sqlalchemy/dialects/oracle/oracledb.py +941 -0
  52. sqlalchemy/dialects/oracle/provision.py +297 -0
  53. sqlalchemy/dialects/oracle/types.py +316 -0
  54. sqlalchemy/dialects/oracle/vector.py +365 -0
  55. sqlalchemy/dialects/postgresql/__init__.py +167 -0
  56. sqlalchemy/dialects/postgresql/_psycopg_common.py +189 -0
  57. sqlalchemy/dialects/postgresql/array.py +519 -0
  58. sqlalchemy/dialects/postgresql/asyncpg.py +1284 -0
  59. sqlalchemy/dialects/postgresql/base.py +5378 -0
  60. sqlalchemy/dialects/postgresql/dml.py +339 -0
  61. sqlalchemy/dialects/postgresql/ext.py +540 -0
  62. sqlalchemy/dialects/postgresql/hstore.py +406 -0
  63. sqlalchemy/dialects/postgresql/json.py +404 -0
  64. sqlalchemy/dialects/postgresql/named_types.py +524 -0
  65. sqlalchemy/dialects/postgresql/operators.py +129 -0
  66. sqlalchemy/dialects/postgresql/pg8000.py +669 -0
  67. sqlalchemy/dialects/postgresql/pg_catalog.py +326 -0
  68. sqlalchemy/dialects/postgresql/provision.py +183 -0
  69. sqlalchemy/dialects/postgresql/psycopg.py +862 -0
  70. sqlalchemy/dialects/postgresql/psycopg2.py +892 -0
  71. sqlalchemy/dialects/postgresql/psycopg2cffi.py +61 -0
  72. sqlalchemy/dialects/postgresql/ranges.py +1031 -0
  73. sqlalchemy/dialects/postgresql/types.py +313 -0
  74. sqlalchemy/dialects/sqlite/__init__.py +57 -0
  75. sqlalchemy/dialects/sqlite/aiosqlite.py +482 -0
  76. sqlalchemy/dialects/sqlite/base.py +3056 -0
  77. sqlalchemy/dialects/sqlite/dml.py +263 -0
  78. sqlalchemy/dialects/sqlite/json.py +92 -0
  79. sqlalchemy/dialects/sqlite/provision.py +229 -0
  80. sqlalchemy/dialects/sqlite/pysqlcipher.py +157 -0
  81. sqlalchemy/dialects/sqlite/pysqlite.py +756 -0
  82. sqlalchemy/dialects/type_migration_guidelines.txt +145 -0
  83. sqlalchemy/engine/__init__.py +62 -0
  84. sqlalchemy/engine/_py_processors.py +136 -0
  85. sqlalchemy/engine/_py_row.py +128 -0
  86. sqlalchemy/engine/_py_util.py +74 -0
  87. sqlalchemy/engine/base.py +3390 -0
  88. sqlalchemy/engine/characteristics.py +155 -0
  89. sqlalchemy/engine/create.py +893 -0
  90. sqlalchemy/engine/cursor.py +2298 -0
  91. sqlalchemy/engine/default.py +2394 -0
  92. sqlalchemy/engine/events.py +965 -0
  93. sqlalchemy/engine/interfaces.py +3471 -0
  94. sqlalchemy/engine/mock.py +134 -0
  95. sqlalchemy/engine/processors.py +61 -0
  96. sqlalchemy/engine/reflection.py +2102 -0
  97. sqlalchemy/engine/result.py +2399 -0
  98. sqlalchemy/engine/row.py +400 -0
  99. sqlalchemy/engine/strategies.py +16 -0
  100. sqlalchemy/engine/url.py +924 -0
  101. sqlalchemy/engine/util.py +167 -0
  102. sqlalchemy/event/__init__.py +26 -0
  103. sqlalchemy/event/api.py +220 -0
  104. sqlalchemy/event/attr.py +676 -0
  105. sqlalchemy/event/base.py +472 -0
  106. sqlalchemy/event/legacy.py +258 -0
  107. sqlalchemy/event/registry.py +390 -0
  108. sqlalchemy/events.py +17 -0
  109. sqlalchemy/exc.py +832 -0
  110. sqlalchemy/ext/__init__.py +11 -0
  111. sqlalchemy/ext/associationproxy.py +2027 -0
  112. sqlalchemy/ext/asyncio/__init__.py +25 -0
  113. sqlalchemy/ext/asyncio/base.py +281 -0
  114. sqlalchemy/ext/asyncio/engine.py +1471 -0
  115. sqlalchemy/ext/asyncio/exc.py +21 -0
  116. sqlalchemy/ext/asyncio/result.py +965 -0
  117. sqlalchemy/ext/asyncio/scoping.py +1599 -0
  118. sqlalchemy/ext/asyncio/session.py +1947 -0
  119. sqlalchemy/ext/automap.py +1701 -0
  120. sqlalchemy/ext/baked.py +570 -0
  121. sqlalchemy/ext/compiler.py +600 -0
  122. sqlalchemy/ext/declarative/__init__.py +65 -0
  123. sqlalchemy/ext/declarative/extensions.py +564 -0
  124. sqlalchemy/ext/horizontal_shard.py +478 -0
  125. sqlalchemy/ext/hybrid.py +1535 -0
  126. sqlalchemy/ext/indexable.py +364 -0
  127. sqlalchemy/ext/instrumentation.py +450 -0
  128. sqlalchemy/ext/mutable.py +1085 -0
  129. sqlalchemy/ext/mypy/__init__.py +6 -0
  130. sqlalchemy/ext/mypy/apply.py +324 -0
  131. sqlalchemy/ext/mypy/decl_class.py +515 -0
  132. sqlalchemy/ext/mypy/infer.py +590 -0
  133. sqlalchemy/ext/mypy/names.py +335 -0
  134. sqlalchemy/ext/mypy/plugin.py +303 -0
  135. sqlalchemy/ext/mypy/util.py +357 -0
  136. sqlalchemy/ext/orderinglist.py +439 -0
  137. sqlalchemy/ext/serializer.py +185 -0
  138. sqlalchemy/future/__init__.py +16 -0
  139. sqlalchemy/future/engine.py +15 -0
  140. sqlalchemy/inspection.py +174 -0
  141. sqlalchemy/log.py +288 -0
  142. sqlalchemy/orm/__init__.py +171 -0
  143. sqlalchemy/orm/_orm_constructors.py +2661 -0
  144. sqlalchemy/orm/_typing.py +179 -0
  145. sqlalchemy/orm/attributes.py +2845 -0
  146. sqlalchemy/orm/base.py +971 -0
  147. sqlalchemy/orm/bulk_persistence.py +2135 -0
  148. sqlalchemy/orm/clsregistry.py +571 -0
  149. sqlalchemy/orm/collections.py +1627 -0
  150. sqlalchemy/orm/context.py +3334 -0
  151. sqlalchemy/orm/decl_api.py +2004 -0
  152. sqlalchemy/orm/decl_base.py +2192 -0
  153. sqlalchemy/orm/dependency.py +1302 -0
  154. sqlalchemy/orm/descriptor_props.py +1092 -0
  155. sqlalchemy/orm/dynamic.py +300 -0
  156. sqlalchemy/orm/evaluator.py +379 -0
  157. sqlalchemy/orm/events.py +3252 -0
  158. sqlalchemy/orm/exc.py +237 -0
  159. sqlalchemy/orm/identity.py +302 -0
  160. sqlalchemy/orm/instrumentation.py +754 -0
  161. sqlalchemy/orm/interfaces.py +1496 -0
  162. sqlalchemy/orm/loading.py +1686 -0
  163. sqlalchemy/orm/mapped_collection.py +557 -0
  164. sqlalchemy/orm/mapper.py +4444 -0
  165. sqlalchemy/orm/path_registry.py +809 -0
  166. sqlalchemy/orm/persistence.py +1788 -0
  167. sqlalchemy/orm/properties.py +935 -0
  168. sqlalchemy/orm/query.py +3459 -0
  169. sqlalchemy/orm/relationships.py +3508 -0
  170. sqlalchemy/orm/scoping.py +2148 -0
  171. sqlalchemy/orm/session.py +5280 -0
  172. sqlalchemy/orm/state.py +1168 -0
  173. sqlalchemy/orm/state_changes.py +196 -0
  174. sqlalchemy/orm/strategies.py +3470 -0
  175. sqlalchemy/orm/strategy_options.py +2568 -0
  176. sqlalchemy/orm/sync.py +164 -0
  177. sqlalchemy/orm/unitofwork.py +796 -0
  178. sqlalchemy/orm/util.py +2403 -0
  179. sqlalchemy/orm/writeonly.py +674 -0
  180. sqlalchemy/pool/__init__.py +44 -0
  181. sqlalchemy/pool/base.py +1524 -0
  182. sqlalchemy/pool/events.py +375 -0
  183. sqlalchemy/pool/impl.py +588 -0
  184. sqlalchemy/py.typed +0 -0
  185. sqlalchemy/schema.py +69 -0
  186. sqlalchemy/sql/__init__.py +145 -0
  187. sqlalchemy/sql/_dml_constructors.py +132 -0
  188. sqlalchemy/sql/_elements_constructors.py +1872 -0
  189. sqlalchemy/sql/_orm_types.py +20 -0
  190. sqlalchemy/sql/_py_util.py +75 -0
  191. sqlalchemy/sql/_selectable_constructors.py +763 -0
  192. sqlalchemy/sql/_typing.py +482 -0
  193. sqlalchemy/sql/annotation.py +587 -0
  194. sqlalchemy/sql/base.py +2293 -0
  195. sqlalchemy/sql/cache_key.py +1057 -0
  196. sqlalchemy/sql/coercions.py +1404 -0
  197. sqlalchemy/sql/compiler.py +8081 -0
  198. sqlalchemy/sql/crud.py +1752 -0
  199. sqlalchemy/sql/ddl.py +1444 -0
  200. sqlalchemy/sql/default_comparator.py +551 -0
  201. sqlalchemy/sql/dml.py +1850 -0
  202. sqlalchemy/sql/elements.py +5589 -0
  203. sqlalchemy/sql/events.py +458 -0
  204. sqlalchemy/sql/expression.py +159 -0
  205. sqlalchemy/sql/functions.py +2158 -0
  206. sqlalchemy/sql/lambdas.py +1442 -0
  207. sqlalchemy/sql/naming.py +209 -0
  208. sqlalchemy/sql/operators.py +2623 -0
  209. sqlalchemy/sql/roles.py +323 -0
  210. sqlalchemy/sql/schema.py +6222 -0
  211. sqlalchemy/sql/selectable.py +7265 -0
  212. sqlalchemy/sql/sqltypes.py +3930 -0
  213. sqlalchemy/sql/traversals.py +1024 -0
  214. sqlalchemy/sql/type_api.py +2368 -0
  215. sqlalchemy/sql/util.py +1485 -0
  216. sqlalchemy/sql/visitors.py +1164 -0
  217. sqlalchemy/testing/__init__.py +96 -0
  218. sqlalchemy/testing/assertions.py +994 -0
  219. sqlalchemy/testing/assertsql.py +520 -0
  220. sqlalchemy/testing/asyncio.py +135 -0
  221. sqlalchemy/testing/config.py +434 -0
  222. sqlalchemy/testing/engines.py +483 -0
  223. sqlalchemy/testing/entities.py +117 -0
  224. sqlalchemy/testing/exclusions.py +476 -0
  225. sqlalchemy/testing/fixtures/__init__.py +28 -0
  226. sqlalchemy/testing/fixtures/base.py +384 -0
  227. sqlalchemy/testing/fixtures/mypy.py +332 -0
  228. sqlalchemy/testing/fixtures/orm.py +227 -0
  229. sqlalchemy/testing/fixtures/sql.py +482 -0
  230. sqlalchemy/testing/pickleable.py +155 -0
  231. sqlalchemy/testing/plugin/__init__.py +6 -0
  232. sqlalchemy/testing/plugin/bootstrap.py +51 -0
  233. sqlalchemy/testing/plugin/plugin_base.py +828 -0
  234. sqlalchemy/testing/plugin/pytestplugin.py +892 -0
  235. sqlalchemy/testing/profiling.py +329 -0
  236. sqlalchemy/testing/provision.py +603 -0
  237. sqlalchemy/testing/requirements.py +1945 -0
  238. sqlalchemy/testing/schema.py +198 -0
  239. sqlalchemy/testing/suite/__init__.py +19 -0
  240. sqlalchemy/testing/suite/test_cte.py +237 -0
  241. sqlalchemy/testing/suite/test_ddl.py +389 -0
  242. sqlalchemy/testing/suite/test_deprecations.py +153 -0
  243. sqlalchemy/testing/suite/test_dialect.py +776 -0
  244. sqlalchemy/testing/suite/test_insert.py +630 -0
  245. sqlalchemy/testing/suite/test_reflection.py +3557 -0
  246. sqlalchemy/testing/suite/test_results.py +504 -0
  247. sqlalchemy/testing/suite/test_rowcount.py +258 -0
  248. sqlalchemy/testing/suite/test_select.py +2010 -0
  249. sqlalchemy/testing/suite/test_sequence.py +317 -0
  250. sqlalchemy/testing/suite/test_types.py +2147 -0
  251. sqlalchemy/testing/suite/test_unicode_ddl.py +189 -0
  252. sqlalchemy/testing/suite/test_update_delete.py +139 -0
  253. sqlalchemy/testing/util.py +535 -0
  254. sqlalchemy/testing/warnings.py +52 -0
  255. sqlalchemy/types.py +74 -0
  256. sqlalchemy/util/__init__.py +162 -0
  257. sqlalchemy/util/_collections.py +712 -0
  258. sqlalchemy/util/_concurrency_py3k.py +288 -0
  259. sqlalchemy/util/_has_cy.py +40 -0
  260. sqlalchemy/util/_py_collections.py +541 -0
  261. sqlalchemy/util/compat.py +421 -0
  262. sqlalchemy/util/concurrency.py +110 -0
  263. sqlalchemy/util/deprecations.py +401 -0
  264. sqlalchemy/util/langhelpers.py +2203 -0
  265. sqlalchemy/util/preloaded.py +150 -0
  266. sqlalchemy/util/queue.py +322 -0
  267. sqlalchemy/util/tool_support.py +201 -0
  268. sqlalchemy/util/topological.py +120 -0
  269. sqlalchemy/util/typing.py +734 -0
  270. sqlalchemy-2.0.47.dist-info/METADATA +243 -0
  271. sqlalchemy-2.0.47.dist-info/RECORD +274 -0
  272. sqlalchemy-2.0.47.dist-info/WHEEL +5 -0
  273. sqlalchemy-2.0.47.dist-info/licenses/LICENSE +19 -0
  274. sqlalchemy-2.0.47.dist-info/top_level.txt +1 -0
@@ -0,0 +1,313 @@
1
+ # dialects/postgresql/types.py
2
+ # Copyright (C) 2013-2026 the SQLAlchemy authors and contributors
3
+ # <see AUTHORS file>
4
+ #
5
+ # This module is part of SQLAlchemy and is released under
6
+ # the MIT License: https://www.opensource.org/licenses/mit-license.php
7
+ from __future__ import annotations
8
+
9
+ import datetime as dt
10
+ from typing import Any
11
+ from typing import Optional
12
+ from typing import overload
13
+ from typing import Type
14
+ from typing import TYPE_CHECKING
15
+ from uuid import UUID as _python_UUID
16
+
17
+ from ...sql import sqltypes
18
+ from ...sql import type_api
19
+ from ...util.typing import Literal
20
+
21
+ if TYPE_CHECKING:
22
+ from ...engine.interfaces import Dialect
23
+ from ...sql.operators import OperatorType
24
+ from ...sql.type_api import _LiteralProcessorType
25
+ from ...sql.type_api import TypeEngine
26
+
27
+ _DECIMAL_TYPES = (1231, 1700)
28
+ _FLOAT_TYPES = (700, 701, 1021, 1022)
29
+ _INT_TYPES = (20, 21, 23, 26, 1005, 1007, 1016)
30
+
31
+
32
+ class PGUuid(sqltypes.UUID[sqltypes._UUID_RETURN]):
33
+ render_bind_cast = True
34
+ render_literal_cast = True
35
+
36
+ if TYPE_CHECKING:
37
+
38
+ @overload
39
+ def __init__(
40
+ self: PGUuid[_python_UUID], as_uuid: Literal[True] = ...
41
+ ) -> None: ...
42
+
43
+ @overload
44
+ def __init__(
45
+ self: PGUuid[str], as_uuid: Literal[False] = ...
46
+ ) -> None: ...
47
+
48
+ def __init__(self, as_uuid: bool = True) -> None: ...
49
+
50
+
51
+ class BYTEA(sqltypes.LargeBinary):
52
+ __visit_name__ = "BYTEA"
53
+
54
+
55
+ class _NetworkAddressTypeMixin:
56
+
57
+ def coerce_compared_value(
58
+ self, op: Optional[OperatorType], value: Any
59
+ ) -> TypeEngine[Any]:
60
+ if TYPE_CHECKING:
61
+ assert isinstance(self, TypeEngine)
62
+ return self
63
+
64
+
65
+ class INET(_NetworkAddressTypeMixin, sqltypes.TypeEngine[str]):
66
+ __visit_name__ = "INET"
67
+
68
+
69
+ PGInet = INET
70
+
71
+
72
+ class CIDR(_NetworkAddressTypeMixin, sqltypes.TypeEngine[str]):
73
+ __visit_name__ = "CIDR"
74
+
75
+
76
+ PGCidr = CIDR
77
+
78
+
79
+ class MACADDR(_NetworkAddressTypeMixin, sqltypes.TypeEngine[str]):
80
+ __visit_name__ = "MACADDR"
81
+
82
+
83
+ PGMacAddr = MACADDR
84
+
85
+
86
+ class MACADDR8(_NetworkAddressTypeMixin, sqltypes.TypeEngine[str]):
87
+ __visit_name__ = "MACADDR8"
88
+
89
+
90
+ PGMacAddr8 = MACADDR8
91
+
92
+
93
+ class MONEY(sqltypes.TypeEngine[str]):
94
+ r"""Provide the PostgreSQL MONEY type.
95
+
96
+ Depending on driver, result rows using this type may return a
97
+ string value which includes currency symbols.
98
+
99
+ For this reason, it may be preferable to provide conversion to a
100
+ numerically-based currency datatype using :class:`_types.TypeDecorator`::
101
+
102
+ import re
103
+ import decimal
104
+ from sqlalchemy import Dialect
105
+ from sqlalchemy import TypeDecorator
106
+
107
+
108
+ class NumericMoney(TypeDecorator):
109
+ impl = MONEY
110
+
111
+ def process_result_value(self, value: Any, dialect: Dialect) -> None:
112
+ if value is not None:
113
+ # adjust this for the currency and numeric
114
+ m = re.match(r"\$([\d.]+)", value)
115
+ if m:
116
+ value = decimal.Decimal(m.group(1))
117
+ return value
118
+
119
+ Alternatively, the conversion may be applied as a CAST using
120
+ the :meth:`_types.TypeDecorator.column_expression` method as follows::
121
+
122
+ import decimal
123
+ from sqlalchemy import cast
124
+ from sqlalchemy import TypeDecorator
125
+
126
+
127
+ class NumericMoney(TypeDecorator):
128
+ impl = MONEY
129
+
130
+ def column_expression(self, column: Any):
131
+ return cast(column, Numeric())
132
+
133
+ .. versionadded:: 1.2
134
+
135
+ """ # noqa: E501
136
+
137
+ __visit_name__ = "MONEY"
138
+
139
+
140
+ class OID(sqltypes.TypeEngine[int]):
141
+ """Provide the PostgreSQL OID type."""
142
+
143
+ __visit_name__ = "OID"
144
+
145
+
146
+ class REGCONFIG(sqltypes.TypeEngine[str]):
147
+ """Provide the PostgreSQL REGCONFIG type.
148
+
149
+ .. versionadded:: 2.0.0rc1
150
+
151
+ """
152
+
153
+ __visit_name__ = "REGCONFIG"
154
+
155
+
156
+ class TSQUERY(sqltypes.TypeEngine[str]):
157
+ """Provide the PostgreSQL TSQUERY type.
158
+
159
+ .. versionadded:: 2.0.0rc1
160
+
161
+ """
162
+
163
+ __visit_name__ = "TSQUERY"
164
+
165
+
166
+ class REGCLASS(sqltypes.TypeEngine[str]):
167
+ """Provide the PostgreSQL REGCLASS type.
168
+
169
+ .. versionadded:: 1.2.7
170
+
171
+ """
172
+
173
+ __visit_name__ = "REGCLASS"
174
+
175
+
176
+ class TIMESTAMP(sqltypes.TIMESTAMP):
177
+ """Provide the PostgreSQL TIMESTAMP type."""
178
+
179
+ __visit_name__ = "TIMESTAMP"
180
+
181
+ def __init__(
182
+ self, timezone: bool = False, precision: Optional[int] = None
183
+ ) -> None:
184
+ """Construct a TIMESTAMP.
185
+
186
+ :param timezone: boolean value if timezone present, default False
187
+ :param precision: optional integer precision value
188
+
189
+ .. versionadded:: 1.4
190
+
191
+ """
192
+ super().__init__(timezone=timezone)
193
+ self.precision = precision
194
+
195
+
196
+ class TIME(sqltypes.TIME):
197
+ """PostgreSQL TIME type."""
198
+
199
+ __visit_name__ = "TIME"
200
+
201
+ def __init__(
202
+ self, timezone: bool = False, precision: Optional[int] = None
203
+ ) -> None:
204
+ """Construct a TIME.
205
+
206
+ :param timezone: boolean value if timezone present, default False
207
+ :param precision: optional integer precision value
208
+
209
+ .. versionadded:: 1.4
210
+
211
+ """
212
+ super().__init__(timezone=timezone)
213
+ self.precision = precision
214
+
215
+
216
+ class INTERVAL(type_api.NativeForEmulated, sqltypes._AbstractInterval):
217
+ """PostgreSQL INTERVAL type."""
218
+
219
+ __visit_name__ = "INTERVAL"
220
+ native = True
221
+
222
+ def __init__(
223
+ self, precision: Optional[int] = None, fields: Optional[str] = None
224
+ ) -> None:
225
+ """Construct an INTERVAL.
226
+
227
+ :param precision: optional integer precision value
228
+ :param fields: string fields specifier. allows storage of fields
229
+ to be limited, such as ``"YEAR"``, ``"MONTH"``, ``"DAY TO HOUR"``,
230
+ etc.
231
+
232
+ .. versionadded:: 1.2
233
+
234
+ """
235
+ self.precision = precision
236
+ self.fields = fields
237
+
238
+ @classmethod
239
+ def adapt_emulated_to_native(
240
+ cls, interval: sqltypes.Interval, **kw: Any # type: ignore[override]
241
+ ) -> INTERVAL:
242
+ return INTERVAL(precision=interval.second_precision)
243
+
244
+ @property
245
+ def _type_affinity(self) -> Type[sqltypes.Interval]:
246
+ return sqltypes.Interval
247
+
248
+ def as_generic(self, allow_nulltype: bool = False) -> sqltypes.Interval:
249
+ return sqltypes.Interval(native=True, second_precision=self.precision)
250
+
251
+ @property
252
+ def python_type(self) -> Type[dt.timedelta]:
253
+ return dt.timedelta
254
+
255
+ def literal_processor(
256
+ self, dialect: Dialect
257
+ ) -> Optional[_LiteralProcessorType[dt.timedelta]]:
258
+ def process(value: dt.timedelta) -> str:
259
+ return f"make_interval(secs=>{value.total_seconds()})"
260
+
261
+ return process
262
+
263
+
264
+ PGInterval = INTERVAL
265
+
266
+
267
+ class BIT(sqltypes.TypeEngine[int]):
268
+ __visit_name__ = "BIT"
269
+
270
+ def __init__(
271
+ self, length: Optional[int] = None, varying: bool = False
272
+ ) -> None:
273
+ if varying:
274
+ # BIT VARYING can be unlimited-length, so no default
275
+ self.length = length
276
+ else:
277
+ # BIT without VARYING defaults to length 1
278
+ self.length = length or 1
279
+ self.varying = varying
280
+
281
+
282
+ PGBit = BIT
283
+
284
+
285
+ class TSVECTOR(sqltypes.TypeEngine[str]):
286
+ """The :class:`_postgresql.TSVECTOR` type implements the PostgreSQL
287
+ text search type TSVECTOR.
288
+
289
+ It can be used to do full text queries on natural language
290
+ documents.
291
+
292
+ .. seealso::
293
+
294
+ :ref:`postgresql_match`
295
+
296
+ """
297
+
298
+ __visit_name__ = "TSVECTOR"
299
+
300
+
301
+ class CITEXT(sqltypes.TEXT):
302
+ """Provide the PostgreSQL CITEXT type.
303
+
304
+ .. versionadded:: 2.0.7
305
+
306
+ """
307
+
308
+ __visit_name__ = "CITEXT"
309
+
310
+ def coerce_compared_value(
311
+ self, op: Optional[OperatorType], value: Any
312
+ ) -> TypeEngine[Any]:
313
+ return self
@@ -0,0 +1,57 @@
1
+ # dialects/sqlite/__init__.py
2
+ # Copyright (C) 2005-2026 the SQLAlchemy authors and contributors
3
+ # <see AUTHORS file>
4
+ #
5
+ # This module is part of SQLAlchemy and is released under
6
+ # the MIT License: https://www.opensource.org/licenses/mit-license.php
7
+ # mypy: ignore-errors
8
+
9
+
10
+ from . import aiosqlite # noqa
11
+ from . import base # noqa
12
+ from . import pysqlcipher # noqa
13
+ from . import pysqlite # noqa
14
+ from .base import BLOB
15
+ from .base import BOOLEAN
16
+ from .base import CHAR
17
+ from .base import DATE
18
+ from .base import DATETIME
19
+ from .base import DECIMAL
20
+ from .base import FLOAT
21
+ from .base import INTEGER
22
+ from .base import JSON
23
+ from .base import NUMERIC
24
+ from .base import REAL
25
+ from .base import SMALLINT
26
+ from .base import TEXT
27
+ from .base import TIME
28
+ from .base import TIMESTAMP
29
+ from .base import VARCHAR
30
+ from .dml import Insert
31
+ from .dml import insert
32
+
33
+ # default dialect
34
+ base.dialect = dialect = pysqlite.dialect
35
+
36
+
37
+ __all__ = (
38
+ "BLOB",
39
+ "BOOLEAN",
40
+ "CHAR",
41
+ "DATE",
42
+ "DATETIME",
43
+ "DECIMAL",
44
+ "FLOAT",
45
+ "INTEGER",
46
+ "JSON",
47
+ "NUMERIC",
48
+ "SMALLINT",
49
+ "TEXT",
50
+ "TIME",
51
+ "TIMESTAMP",
52
+ "VARCHAR",
53
+ "REAL",
54
+ "Insert",
55
+ "insert",
56
+ "dialect",
57
+ )