SQLAlchemy 2.0.36__cp313-cp313-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 (273) hide show
  1. SQLAlchemy-2.0.36.dist-info/LICENSE +19 -0
  2. SQLAlchemy-2.0.36.dist-info/METADATA +243 -0
  3. SQLAlchemy-2.0.36.dist-info/RECORD +273 -0
  4. SQLAlchemy-2.0.36.dist-info/WHEEL +5 -0
  5. SQLAlchemy-2.0.36.dist-info/top_level.txt +1 -0
  6. sqlalchemy/__init__.py +294 -0
  7. sqlalchemy/connectors/__init__.py +18 -0
  8. sqlalchemy/connectors/aioodbc.py +174 -0
  9. sqlalchemy/connectors/asyncio.py +213 -0
  10. sqlalchemy/connectors/pyodbc.py +249 -0
  11. sqlalchemy/cyextension/__init__.py +6 -0
  12. sqlalchemy/cyextension/collections.cp313-win32.pyd +0 -0
  13. sqlalchemy/cyextension/collections.pyx +409 -0
  14. sqlalchemy/cyextension/immutabledict.cp313-win32.pyd +0 -0
  15. sqlalchemy/cyextension/immutabledict.pxd +8 -0
  16. sqlalchemy/cyextension/immutabledict.pyx +133 -0
  17. sqlalchemy/cyextension/processors.cp313-win32.pyd +0 -0
  18. sqlalchemy/cyextension/processors.pyx +68 -0
  19. sqlalchemy/cyextension/resultproxy.cp313-win32.pyd +0 -0
  20. sqlalchemy/cyextension/resultproxy.pyx +102 -0
  21. sqlalchemy/cyextension/util.cp313-win32.pyd +0 -0
  22. sqlalchemy/cyextension/util.pyx +91 -0
  23. sqlalchemy/dialects/__init__.py +61 -0
  24. sqlalchemy/dialects/_typing.py +25 -0
  25. sqlalchemy/dialects/mssql/__init__.py +88 -0
  26. sqlalchemy/dialects/mssql/aioodbc.py +64 -0
  27. sqlalchemy/dialects/mssql/base.py +4010 -0
  28. sqlalchemy/dialects/mssql/information_schema.py +254 -0
  29. sqlalchemy/dialects/mssql/json.py +133 -0
  30. sqlalchemy/dialects/mssql/provision.py +162 -0
  31. sqlalchemy/dialects/mssql/pymssql.py +126 -0
  32. sqlalchemy/dialects/mssql/pyodbc.py +745 -0
  33. sqlalchemy/dialects/mysql/__init__.py +101 -0
  34. sqlalchemy/dialects/mysql/aiomysql.py +333 -0
  35. sqlalchemy/dialects/mysql/asyncmy.py +337 -0
  36. sqlalchemy/dialects/mysql/base.py +3494 -0
  37. sqlalchemy/dialects/mysql/cymysql.py +84 -0
  38. sqlalchemy/dialects/mysql/dml.py +219 -0
  39. sqlalchemy/dialects/mysql/enumerated.py +244 -0
  40. sqlalchemy/dialects/mysql/expression.py +141 -0
  41. sqlalchemy/dialects/mysql/json.py +81 -0
  42. sqlalchemy/dialects/mysql/mariadb.py +32 -0
  43. sqlalchemy/dialects/mysql/mariadbconnector.py +277 -0
  44. sqlalchemy/dialects/mysql/mysqlconnector.py +180 -0
  45. sqlalchemy/dialects/mysql/mysqldb.py +303 -0
  46. sqlalchemy/dialects/mysql/provision.py +110 -0
  47. sqlalchemy/dialects/mysql/pymysql.py +137 -0
  48. sqlalchemy/dialects/mysql/pyodbc.py +138 -0
  49. sqlalchemy/dialects/mysql/reflection.py +677 -0
  50. sqlalchemy/dialects/mysql/reserved_words.py +571 -0
  51. sqlalchemy/dialects/mysql/types.py +774 -0
  52. sqlalchemy/dialects/oracle/__init__.py +67 -0
  53. sqlalchemy/dialects/oracle/base.py +3271 -0
  54. sqlalchemy/dialects/oracle/cx_oracle.py +1483 -0
  55. sqlalchemy/dialects/oracle/dictionary.py +507 -0
  56. sqlalchemy/dialects/oracle/oracledb.py +431 -0
  57. sqlalchemy/dialects/oracle/provision.py +220 -0
  58. sqlalchemy/dialects/oracle/types.py +287 -0
  59. sqlalchemy/dialects/postgresql/__init__.py +167 -0
  60. sqlalchemy/dialects/postgresql/_psycopg_common.py +187 -0
  61. sqlalchemy/dialects/postgresql/array.py +425 -0
  62. sqlalchemy/dialects/postgresql/asyncpg.py +1274 -0
  63. sqlalchemy/dialects/postgresql/base.py +5008 -0
  64. sqlalchemy/dialects/postgresql/dml.py +310 -0
  65. sqlalchemy/dialects/postgresql/ext.py +496 -0
  66. sqlalchemy/dialects/postgresql/hstore.py +397 -0
  67. sqlalchemy/dialects/postgresql/json.py +333 -0
  68. sqlalchemy/dialects/postgresql/named_types.py +509 -0
  69. sqlalchemy/dialects/postgresql/operators.py +129 -0
  70. sqlalchemy/dialects/postgresql/pg8000.py +662 -0
  71. sqlalchemy/dialects/postgresql/pg_catalog.py +300 -0
  72. sqlalchemy/dialects/postgresql/provision.py +175 -0
  73. sqlalchemy/dialects/postgresql/psycopg.py +772 -0
  74. sqlalchemy/dialects/postgresql/psycopg2.py +886 -0
  75. sqlalchemy/dialects/postgresql/psycopg2cffi.py +61 -0
  76. sqlalchemy/dialects/postgresql/ranges.py +1029 -0
  77. sqlalchemy/dialects/postgresql/types.py +303 -0
  78. sqlalchemy/dialects/sqlite/__init__.py +57 -0
  79. sqlalchemy/dialects/sqlite/aiosqlite.py +396 -0
  80. sqlalchemy/dialects/sqlite/base.py +2805 -0
  81. sqlalchemy/dialects/sqlite/dml.py +240 -0
  82. sqlalchemy/dialects/sqlite/json.py +92 -0
  83. sqlalchemy/dialects/sqlite/provision.py +198 -0
  84. sqlalchemy/dialects/sqlite/pysqlcipher.py +155 -0
  85. sqlalchemy/dialects/sqlite/pysqlite.py +756 -0
  86. sqlalchemy/dialects/type_migration_guidelines.txt +145 -0
  87. sqlalchemy/engine/__init__.py +62 -0
  88. sqlalchemy/engine/_py_processors.py +136 -0
  89. sqlalchemy/engine/_py_row.py +128 -0
  90. sqlalchemy/engine/_py_util.py +74 -0
  91. sqlalchemy/engine/base.py +3375 -0
  92. sqlalchemy/engine/characteristics.py +155 -0
  93. sqlalchemy/engine/create.py +875 -0
  94. sqlalchemy/engine/cursor.py +2181 -0
  95. sqlalchemy/engine/default.py +2365 -0
  96. sqlalchemy/engine/events.py +951 -0
  97. sqlalchemy/engine/interfaces.py +3403 -0
  98. sqlalchemy/engine/mock.py +131 -0
  99. sqlalchemy/engine/processors.py +61 -0
  100. sqlalchemy/engine/reflection.py +2098 -0
  101. sqlalchemy/engine/result.py +2382 -0
  102. sqlalchemy/engine/row.py +401 -0
  103. sqlalchemy/engine/strategies.py +19 -0
  104. sqlalchemy/engine/url.py +910 -0
  105. sqlalchemy/engine/util.py +167 -0
  106. sqlalchemy/event/__init__.py +25 -0
  107. sqlalchemy/event/api.py +225 -0
  108. sqlalchemy/event/attr.py +655 -0
  109. sqlalchemy/event/base.py +470 -0
  110. sqlalchemy/event/legacy.py +246 -0
  111. sqlalchemy/event/registry.py +386 -0
  112. sqlalchemy/events.py +17 -0
  113. sqlalchemy/exc.py +830 -0
  114. sqlalchemy/ext/__init__.py +11 -0
  115. sqlalchemy/ext/associationproxy.py +2013 -0
  116. sqlalchemy/ext/asyncio/__init__.py +25 -0
  117. sqlalchemy/ext/asyncio/base.py +279 -0
  118. sqlalchemy/ext/asyncio/engine.py +1466 -0
  119. sqlalchemy/ext/asyncio/exc.py +21 -0
  120. sqlalchemy/ext/asyncio/result.py +961 -0
  121. sqlalchemy/ext/asyncio/scoping.py +1614 -0
  122. sqlalchemy/ext/asyncio/session.py +1936 -0
  123. sqlalchemy/ext/automap.py +1691 -0
  124. sqlalchemy/ext/baked.py +574 -0
  125. sqlalchemy/ext/compiler.py +570 -0
  126. sqlalchemy/ext/declarative/__init__.py +65 -0
  127. sqlalchemy/ext/declarative/extensions.py +548 -0
  128. sqlalchemy/ext/horizontal_shard.py +481 -0
  129. sqlalchemy/ext/hybrid.py +1514 -0
  130. sqlalchemy/ext/indexable.py +341 -0
  131. sqlalchemy/ext/instrumentation.py +450 -0
  132. sqlalchemy/ext/mutable.py +1073 -0
  133. sqlalchemy/ext/mypy/__init__.py +6 -0
  134. sqlalchemy/ext/mypy/apply.py +320 -0
  135. sqlalchemy/ext/mypy/decl_class.py +515 -0
  136. sqlalchemy/ext/mypy/infer.py +590 -0
  137. sqlalchemy/ext/mypy/names.py +335 -0
  138. sqlalchemy/ext/mypy/plugin.py +303 -0
  139. sqlalchemy/ext/mypy/util.py +357 -0
  140. sqlalchemy/ext/orderinglist.py +416 -0
  141. sqlalchemy/ext/serializer.py +181 -0
  142. sqlalchemy/future/__init__.py +16 -0
  143. sqlalchemy/future/engine.py +15 -0
  144. sqlalchemy/inspection.py +174 -0
  145. sqlalchemy/log.py +288 -0
  146. sqlalchemy/orm/__init__.py +170 -0
  147. sqlalchemy/orm/_orm_constructors.py +2571 -0
  148. sqlalchemy/orm/_typing.py +179 -0
  149. sqlalchemy/orm/attributes.py +2835 -0
  150. sqlalchemy/orm/base.py +973 -0
  151. sqlalchemy/orm/bulk_persistence.py +2123 -0
  152. sqlalchemy/orm/clsregistry.py +571 -0
  153. sqlalchemy/orm/collections.py +1620 -0
  154. sqlalchemy/orm/context.py +3268 -0
  155. sqlalchemy/orm/decl_api.py +1883 -0
  156. sqlalchemy/orm/decl_base.py +2190 -0
  157. sqlalchemy/orm/dependency.py +1304 -0
  158. sqlalchemy/orm/descriptor_props.py +1076 -0
  159. sqlalchemy/orm/dynamic.py +300 -0
  160. sqlalchemy/orm/evaluator.py +379 -0
  161. sqlalchemy/orm/events.py +3261 -0
  162. sqlalchemy/orm/exc.py +228 -0
  163. sqlalchemy/orm/identity.py +302 -0
  164. sqlalchemy/orm/instrumentation.py +754 -0
  165. sqlalchemy/orm/interfaces.py +1474 -0
  166. sqlalchemy/orm/loading.py +1682 -0
  167. sqlalchemy/orm/mapped_collection.py +557 -0
  168. sqlalchemy/orm/mapper.py +4432 -0
  169. sqlalchemy/orm/path_registry.py +811 -0
  170. sqlalchemy/orm/persistence.py +1782 -0
  171. sqlalchemy/orm/properties.py +886 -0
  172. sqlalchemy/orm/query.py +3396 -0
  173. sqlalchemy/orm/relationships.py +3500 -0
  174. sqlalchemy/orm/scoping.py +2165 -0
  175. sqlalchemy/orm/session.py +5301 -0
  176. sqlalchemy/orm/state.py +1143 -0
  177. sqlalchemy/orm/state_changes.py +198 -0
  178. sqlalchemy/orm/strategies.py +3473 -0
  179. sqlalchemy/orm/strategy_options.py +2569 -0
  180. sqlalchemy/orm/sync.py +164 -0
  181. sqlalchemy/orm/unitofwork.py +796 -0
  182. sqlalchemy/orm/util.py +2424 -0
  183. sqlalchemy/orm/writeonly.py +678 -0
  184. sqlalchemy/pool/__init__.py +44 -0
  185. sqlalchemy/pool/base.py +1515 -0
  186. sqlalchemy/pool/events.py +370 -0
  187. sqlalchemy/pool/impl.py +581 -0
  188. sqlalchemy/py.typed +0 -0
  189. sqlalchemy/schema.py +70 -0
  190. sqlalchemy/sql/__init__.py +145 -0
  191. sqlalchemy/sql/_dml_constructors.py +140 -0
  192. sqlalchemy/sql/_elements_constructors.py +1850 -0
  193. sqlalchemy/sql/_orm_types.py +20 -0
  194. sqlalchemy/sql/_py_util.py +75 -0
  195. sqlalchemy/sql/_selectable_constructors.py +635 -0
  196. sqlalchemy/sql/_typing.py +460 -0
  197. sqlalchemy/sql/annotation.py +585 -0
  198. sqlalchemy/sql/base.py +2185 -0
  199. sqlalchemy/sql/cache_key.py +1057 -0
  200. sqlalchemy/sql/coercions.py +1405 -0
  201. sqlalchemy/sql/compiler.py +7818 -0
  202. sqlalchemy/sql/crud.py +1669 -0
  203. sqlalchemy/sql/ddl.py +1378 -0
  204. sqlalchemy/sql/default_comparator.py +552 -0
  205. sqlalchemy/sql/dml.py +1817 -0
  206. sqlalchemy/sql/elements.py +5499 -0
  207. sqlalchemy/sql/events.py +455 -0
  208. sqlalchemy/sql/expression.py +162 -0
  209. sqlalchemy/sql/functions.py +2055 -0
  210. sqlalchemy/sql/lambdas.py +1449 -0
  211. sqlalchemy/sql/naming.py +212 -0
  212. sqlalchemy/sql/operators.py +2579 -0
  213. sqlalchemy/sql/roles.py +323 -0
  214. sqlalchemy/sql/schema.py +6158 -0
  215. sqlalchemy/sql/selectable.py +7004 -0
  216. sqlalchemy/sql/sqltypes.py +3827 -0
  217. sqlalchemy/sql/traversals.py +1024 -0
  218. sqlalchemy/sql/type_api.py +2339 -0
  219. sqlalchemy/sql/util.py +1486 -0
  220. sqlalchemy/sql/visitors.py +1165 -0
  221. sqlalchemy/testing/__init__.py +96 -0
  222. sqlalchemy/testing/assertions.py +989 -0
  223. sqlalchemy/testing/assertsql.py +516 -0
  224. sqlalchemy/testing/asyncio.py +135 -0
  225. sqlalchemy/testing/config.py +427 -0
  226. sqlalchemy/testing/engines.py +472 -0
  227. sqlalchemy/testing/entities.py +117 -0
  228. sqlalchemy/testing/exclusions.py +435 -0
  229. sqlalchemy/testing/fixtures/__init__.py +28 -0
  230. sqlalchemy/testing/fixtures/base.py +366 -0
  231. sqlalchemy/testing/fixtures/mypy.py +312 -0
  232. sqlalchemy/testing/fixtures/orm.py +227 -0
  233. sqlalchemy/testing/fixtures/sql.py +503 -0
  234. sqlalchemy/testing/pickleable.py +155 -0
  235. sqlalchemy/testing/plugin/__init__.py +6 -0
  236. sqlalchemy/testing/plugin/bootstrap.py +51 -0
  237. sqlalchemy/testing/plugin/plugin_base.py +779 -0
  238. sqlalchemy/testing/plugin/pytestplugin.py +868 -0
  239. sqlalchemy/testing/profiling.py +324 -0
  240. sqlalchemy/testing/provision.py +496 -0
  241. sqlalchemy/testing/requirements.py +1818 -0
  242. sqlalchemy/testing/schema.py +224 -0
  243. sqlalchemy/testing/suite/__init__.py +19 -0
  244. sqlalchemy/testing/suite/test_cte.py +211 -0
  245. sqlalchemy/testing/suite/test_ddl.py +389 -0
  246. sqlalchemy/testing/suite/test_deprecations.py +153 -0
  247. sqlalchemy/testing/suite/test_dialect.py +740 -0
  248. sqlalchemy/testing/suite/test_insert.py +630 -0
  249. sqlalchemy/testing/suite/test_reflection.py +3225 -0
  250. sqlalchemy/testing/suite/test_results.py +502 -0
  251. sqlalchemy/testing/suite/test_rowcount.py +258 -0
  252. sqlalchemy/testing/suite/test_select.py +1999 -0
  253. sqlalchemy/testing/suite/test_sequence.py +317 -0
  254. sqlalchemy/testing/suite/test_types.py +2141 -0
  255. sqlalchemy/testing/suite/test_unicode_ddl.py +189 -0
  256. sqlalchemy/testing/suite/test_update_delete.py +139 -0
  257. sqlalchemy/testing/util.py +537 -0
  258. sqlalchemy/testing/warnings.py +52 -0
  259. sqlalchemy/types.py +76 -0
  260. sqlalchemy/util/__init__.py +160 -0
  261. sqlalchemy/util/_collections.py +715 -0
  262. sqlalchemy/util/_concurrency_py3k.py +288 -0
  263. sqlalchemy/util/_has_cy.py +40 -0
  264. sqlalchemy/util/_py_collections.py +541 -0
  265. sqlalchemy/util/compat.py +301 -0
  266. sqlalchemy/util/concurrency.py +108 -0
  267. sqlalchemy/util/deprecations.py +401 -0
  268. sqlalchemy/util/langhelpers.py +2218 -0
  269. sqlalchemy/util/preloaded.py +150 -0
  270. sqlalchemy/util/queue.py +322 -0
  271. sqlalchemy/util/tool_support.py +201 -0
  272. sqlalchemy/util/topological.py +120 -0
  273. sqlalchemy/util/typing.py +629 -0
@@ -0,0 +1,303 @@
1
+ # dialects/postgresql/types.py
2
+ # Copyright (C) 2013-2024 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 INET(sqltypes.TypeEngine[str]):
56
+ __visit_name__ = "INET"
57
+
58
+
59
+ PGInet = INET
60
+
61
+
62
+ class CIDR(sqltypes.TypeEngine[str]):
63
+ __visit_name__ = "CIDR"
64
+
65
+
66
+ PGCidr = CIDR
67
+
68
+
69
+ class MACADDR(sqltypes.TypeEngine[str]):
70
+ __visit_name__ = "MACADDR"
71
+
72
+
73
+ PGMacAddr = MACADDR
74
+
75
+
76
+ class MACADDR8(sqltypes.TypeEngine[str]):
77
+ __visit_name__ = "MACADDR8"
78
+
79
+
80
+ PGMacAddr8 = MACADDR8
81
+
82
+
83
+ class MONEY(sqltypes.TypeEngine[str]):
84
+ r"""Provide the PostgreSQL MONEY type.
85
+
86
+ Depending on driver, result rows using this type may return a
87
+ string value which includes currency symbols.
88
+
89
+ For this reason, it may be preferable to provide conversion to a
90
+ numerically-based currency datatype using :class:`_types.TypeDecorator`::
91
+
92
+ import re
93
+ import decimal
94
+ from sqlalchemy import Dialect
95
+ from sqlalchemy import TypeDecorator
96
+
97
+ class NumericMoney(TypeDecorator):
98
+ impl = MONEY
99
+
100
+ def process_result_value(
101
+ self, value: Any, dialect: Dialect
102
+ ) -> None:
103
+ if value is not None:
104
+ # adjust this for the currency and numeric
105
+ m = re.match(r"\$([\d.]+)", value)
106
+ if m:
107
+ value = decimal.Decimal(m.group(1))
108
+ return value
109
+
110
+ Alternatively, the conversion may be applied as a CAST using
111
+ the :meth:`_types.TypeDecorator.column_expression` method as follows::
112
+
113
+ import decimal
114
+ from sqlalchemy import cast
115
+ from sqlalchemy import TypeDecorator
116
+
117
+ class NumericMoney(TypeDecorator):
118
+ impl = MONEY
119
+
120
+ def column_expression(self, column: Any):
121
+ return cast(column, Numeric())
122
+
123
+ .. versionadded:: 1.2
124
+
125
+ """
126
+
127
+ __visit_name__ = "MONEY"
128
+
129
+
130
+ class OID(sqltypes.TypeEngine[int]):
131
+ """Provide the PostgreSQL OID type."""
132
+
133
+ __visit_name__ = "OID"
134
+
135
+
136
+ class REGCONFIG(sqltypes.TypeEngine[str]):
137
+ """Provide the PostgreSQL REGCONFIG type.
138
+
139
+ .. versionadded:: 2.0.0rc1
140
+
141
+ """
142
+
143
+ __visit_name__ = "REGCONFIG"
144
+
145
+
146
+ class TSQUERY(sqltypes.TypeEngine[str]):
147
+ """Provide the PostgreSQL TSQUERY type.
148
+
149
+ .. versionadded:: 2.0.0rc1
150
+
151
+ """
152
+
153
+ __visit_name__ = "TSQUERY"
154
+
155
+
156
+ class REGCLASS(sqltypes.TypeEngine[str]):
157
+ """Provide the PostgreSQL REGCLASS type.
158
+
159
+ .. versionadded:: 1.2.7
160
+
161
+ """
162
+
163
+ __visit_name__ = "REGCLASS"
164
+
165
+
166
+ class TIMESTAMP(sqltypes.TIMESTAMP):
167
+ """Provide the PostgreSQL TIMESTAMP type."""
168
+
169
+ __visit_name__ = "TIMESTAMP"
170
+
171
+ def __init__(
172
+ self, timezone: bool = False, precision: Optional[int] = None
173
+ ) -> None:
174
+ """Construct a TIMESTAMP.
175
+
176
+ :param timezone: boolean value if timezone present, default False
177
+ :param precision: optional integer precision value
178
+
179
+ .. versionadded:: 1.4
180
+
181
+ """
182
+ super().__init__(timezone=timezone)
183
+ self.precision = precision
184
+
185
+
186
+ class TIME(sqltypes.TIME):
187
+ """PostgreSQL TIME type."""
188
+
189
+ __visit_name__ = "TIME"
190
+
191
+ def __init__(
192
+ self, timezone: bool = False, precision: Optional[int] = None
193
+ ) -> None:
194
+ """Construct a TIME.
195
+
196
+ :param timezone: boolean value if timezone present, default False
197
+ :param precision: optional integer precision value
198
+
199
+ .. versionadded:: 1.4
200
+
201
+ """
202
+ super().__init__(timezone=timezone)
203
+ self.precision = precision
204
+
205
+
206
+ class INTERVAL(type_api.NativeForEmulated, sqltypes._AbstractInterval):
207
+ """PostgreSQL INTERVAL type."""
208
+
209
+ __visit_name__ = "INTERVAL"
210
+ native = True
211
+
212
+ def __init__(
213
+ self, precision: Optional[int] = None, fields: Optional[str] = None
214
+ ) -> None:
215
+ """Construct an INTERVAL.
216
+
217
+ :param precision: optional integer precision value
218
+ :param fields: string fields specifier. allows storage of fields
219
+ to be limited, such as ``"YEAR"``, ``"MONTH"``, ``"DAY TO HOUR"``,
220
+ etc.
221
+
222
+ .. versionadded:: 1.2
223
+
224
+ """
225
+ self.precision = precision
226
+ self.fields = fields
227
+
228
+ @classmethod
229
+ def adapt_emulated_to_native(
230
+ cls, interval: sqltypes.Interval, **kw: Any # type: ignore[override]
231
+ ) -> INTERVAL:
232
+ return INTERVAL(precision=interval.second_precision)
233
+
234
+ @property
235
+ def _type_affinity(self) -> Type[sqltypes.Interval]:
236
+ return sqltypes.Interval
237
+
238
+ def as_generic(self, allow_nulltype: bool = False) -> sqltypes.Interval:
239
+ return sqltypes.Interval(native=True, second_precision=self.precision)
240
+
241
+ @property
242
+ def python_type(self) -> Type[dt.timedelta]:
243
+ return dt.timedelta
244
+
245
+ def literal_processor(
246
+ self, dialect: Dialect
247
+ ) -> Optional[_LiteralProcessorType[dt.timedelta]]:
248
+ def process(value: dt.timedelta) -> str:
249
+ return f"make_interval(secs=>{value.total_seconds()})"
250
+
251
+ return process
252
+
253
+
254
+ PGInterval = INTERVAL
255
+
256
+
257
+ class BIT(sqltypes.TypeEngine[int]):
258
+ __visit_name__ = "BIT"
259
+
260
+ def __init__(
261
+ self, length: Optional[int] = None, varying: bool = False
262
+ ) -> None:
263
+ if varying:
264
+ # BIT VARYING can be unlimited-length, so no default
265
+ self.length = length
266
+ else:
267
+ # BIT without VARYING defaults to length 1
268
+ self.length = length or 1
269
+ self.varying = varying
270
+
271
+
272
+ PGBit = BIT
273
+
274
+
275
+ class TSVECTOR(sqltypes.TypeEngine[str]):
276
+ """The :class:`_postgresql.TSVECTOR` type implements the PostgreSQL
277
+ text search type TSVECTOR.
278
+
279
+ It can be used to do full text queries on natural language
280
+ documents.
281
+
282
+ .. seealso::
283
+
284
+ :ref:`postgresql_match`
285
+
286
+ """
287
+
288
+ __visit_name__ = "TSVECTOR"
289
+
290
+
291
+ class CITEXT(sqltypes.TEXT):
292
+ """Provide the PostgreSQL CITEXT type.
293
+
294
+ .. versionadded:: 2.0.7
295
+
296
+ """
297
+
298
+ __visit_name__ = "CITEXT"
299
+
300
+ def coerce_compared_value(
301
+ self, op: Optional[OperatorType], value: Any
302
+ ) -> TypeEngine[Any]:
303
+ return self
@@ -0,0 +1,57 @@
1
+ # dialects/sqlite/__init__.py
2
+ # Copyright (C) 2005-2024 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
+ )