pybatis-plus 1.0.0__py3-none-any.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 (272) hide show
  1. pybatis/__init__.py +411 -0
  2. pybatis/connectors/__init__.py +18 -0
  3. pybatis/connectors/aioodbc.py +171 -0
  4. pybatis/connectors/asyncio.py +476 -0
  5. pybatis/connectors/pyodbc.py +248 -0
  6. pybatis/dialects/__init__.py +62 -0
  7. pybatis/dialects/_typing.py +29 -0
  8. pybatis/dialects/mssql/__init__.py +88 -0
  9. pybatis/dialects/mssql/aioodbc.py +63 -0
  10. pybatis/dialects/mssql/base.py +4861 -0
  11. pybatis/dialects/mssql/information_schema.py +345 -0
  12. pybatis/dialects/mssql/json.py +140 -0
  13. pybatis/dialects/mssql/mssqlpython.py +251 -0
  14. pybatis/dialects/mssql/provision.py +196 -0
  15. pybatis/dialects/mssql/pymssql.py +130 -0
  16. pybatis/dialects/mssql/pyodbc.py +694 -0
  17. pybatis/dialects/mysql/__init__.py +106 -0
  18. pybatis/dialects/mysql/_mariadb_shim.py +312 -0
  19. pybatis/dialects/mysql/aiomysql.py +260 -0
  20. pybatis/dialects/mysql/asyncmy.py +241 -0
  21. pybatis/dialects/mysql/base.py +3896 -0
  22. pybatis/dialects/mysql/cymysql.py +107 -0
  23. pybatis/dialects/mysql/dml.py +279 -0
  24. pybatis/dialects/mysql/enumerated.py +277 -0
  25. pybatis/dialects/mysql/expression.py +146 -0
  26. pybatis/dialects/mysql/json.py +92 -0
  27. pybatis/dialects/mysql/mariadb.py +67 -0
  28. pybatis/dialects/mysql/mariadbconnector.py +314 -0
  29. pybatis/dialects/mysql/mysqlconnector.py +291 -0
  30. pybatis/dialects/mysql/mysqldb.py +318 -0
  31. pybatis/dialects/mysql/provision.py +153 -0
  32. pybatis/dialects/mysql/pymysql.py +188 -0
  33. pybatis/dialects/mysql/pyodbc.py +157 -0
  34. pybatis/dialects/mysql/reflection.py +724 -0
  35. pybatis/dialects/mysql/reserved_words.py +570 -0
  36. pybatis/dialects/mysql/types.py +845 -0
  37. pybatis/dialects/oracle/__init__.py +85 -0
  38. pybatis/dialects/oracle/base.py +3847 -0
  39. pybatis/dialects/oracle/cx_oracle.py +1736 -0
  40. pybatis/dialects/oracle/dictionary.py +507 -0
  41. pybatis/dialects/oracle/json.py +157 -0
  42. pybatis/dialects/oracle/oracledb.py +921 -0
  43. pybatis/dialects/oracle/provision.py +288 -0
  44. pybatis/dialects/oracle/types.py +367 -0
  45. pybatis/dialects/oracle/vector.py +366 -0
  46. pybatis/dialects/postgresql/__init__.py +170 -0
  47. pybatis/dialects/postgresql/_psycopg_common.py +232 -0
  48. pybatis/dialects/postgresql/array.py +534 -0
  49. pybatis/dialects/postgresql/asyncpg.py +1322 -0
  50. pybatis/dialects/postgresql/base.py +5989 -0
  51. pybatis/dialects/postgresql/bitstring.py +327 -0
  52. pybatis/dialects/postgresql/dml.py +360 -0
  53. pybatis/dialects/postgresql/ext.py +599 -0
  54. pybatis/dialects/postgresql/hstore.py +422 -0
  55. pybatis/dialects/postgresql/json.py +411 -0
  56. pybatis/dialects/postgresql/named_types.py +551 -0
  57. pybatis/dialects/postgresql/operators.py +129 -0
  58. pybatis/dialects/postgresql/pg8000.py +655 -0
  59. pybatis/dialects/postgresql/pg_catalog.py +345 -0
  60. pybatis/dialects/postgresql/provision.py +202 -0
  61. pybatis/dialects/postgresql/psycopg.py +800 -0
  62. pybatis/dialects/postgresql/psycopg2.py +860 -0
  63. pybatis/dialects/postgresql/psycopg2cffi.py +62 -0
  64. pybatis/dialects/postgresql/ranges.py +1002 -0
  65. pybatis/dialects/postgresql/types.py +388 -0
  66. pybatis/dialects/sqlite/__init__.py +59 -0
  67. pybatis/dialects/sqlite/aiosqlite.py +375 -0
  68. pybatis/dialects/sqlite/base.py +3156 -0
  69. pybatis/dialects/sqlite/dml.py +314 -0
  70. pybatis/dialects/sqlite/json.py +134 -0
  71. pybatis/dialects/sqlite/provision.py +237 -0
  72. pybatis/dialects/sqlite/pysqlcipher.py +166 -0
  73. pybatis/dialects/sqlite/pysqlite.py +959 -0
  74. pybatis/dialects/type_migration_guidelines.txt +145 -0
  75. pybatis/engine/__init__.py +62 -0
  76. pybatis/engine/_processors_cy.py +92 -0
  77. pybatis/engine/_result_cy.py +712 -0
  78. pybatis/engine/_row_cy.py +232 -0
  79. pybatis/engine/_util_cy.py +136 -0
  80. pybatis/engine/base.py +3360 -0
  81. pybatis/engine/characteristics.py +155 -0
  82. pybatis/engine/create.py +877 -0
  83. pybatis/engine/cursor.py +2425 -0
  84. pybatis/engine/default.py +2642 -0
  85. pybatis/engine/events.py +965 -0
  86. pybatis/engine/interfaces.py +3665 -0
  87. pybatis/engine/mock.py +133 -0
  88. pybatis/engine/processors.py +83 -0
  89. pybatis/engine/reflection.py +2141 -0
  90. pybatis/engine/result.py +2012 -0
  91. pybatis/engine/row.py +397 -0
  92. pybatis/engine/strategies.py +16 -0
  93. pybatis/engine/url.py +922 -0
  94. pybatis/engine/util.py +164 -0
  95. pybatis/event/__init__.py +26 -0
  96. pybatis/event/api.py +220 -0
  97. pybatis/event/attr.py +675 -0
  98. pybatis/event/base.py +473 -0
  99. pybatis/event/legacy.py +259 -0
  100. pybatis/event/registry.py +391 -0
  101. pybatis/events.py +17 -0
  102. pybatis/exc.py +939 -0
  103. pybatis/ext/__init__.py +10 -0
  104. pybatis/ext/associationproxy.py +2073 -0
  105. pybatis/ext/asyncio/__init__.py +79 -0
  106. pybatis/ext/asyncio/_greenlet_helpers.py +174 -0
  107. pybatis/ext/asyncio/base.py +312 -0
  108. pybatis/ext/asyncio/engine.py +1490 -0
  109. pybatis/ext/asyncio/exc.py +30 -0
  110. pybatis/ext/asyncio/result.py +994 -0
  111. pybatis/ext/asyncio/scoping.py +1787 -0
  112. pybatis/ext/asyncio/session.py +2266 -0
  113. pybatis/ext/automap.py +1702 -0
  114. pybatis/ext/baked.py +558 -0
  115. pybatis/ext/compiler.py +601 -0
  116. pybatis/ext/declarative/__init__.py +65 -0
  117. pybatis/ext/declarative/extensions.py +561 -0
  118. pybatis/ext/horizontal_shard.py +481 -0
  119. pybatis/ext/hybrid.py +1877 -0
  120. pybatis/ext/indexable.py +364 -0
  121. pybatis/ext/instrumentation.py +450 -0
  122. pybatis/ext/mutable.py +1092 -0
  123. pybatis/ext/orderinglist.py +440 -0
  124. pybatis/ext/serializer.py +184 -0
  125. pybatis/ext/snowflake/__init__.py +84 -0
  126. pybatis/ext/snowflake/generator.py +196 -0
  127. pybatis/ext/snowflake/types.py +140 -0
  128. pybatis/future/__init__.py +17 -0
  129. pybatis/future/engine.py +15 -0
  130. pybatis/inspection.py +188 -0
  131. pybatis/log.py +279 -0
  132. pybatis/orm/__init__.py +176 -0
  133. pybatis/orm/_orm_constructors.py +2711 -0
  134. pybatis/orm/_typing.py +180 -0
  135. pybatis/orm/attributes.py +2868 -0
  136. pybatis/orm/base.py +991 -0
  137. pybatis/orm/bulk_persistence.py +2168 -0
  138. pybatis/orm/clsregistry.py +630 -0
  139. pybatis/orm/collections.py +1569 -0
  140. pybatis/orm/context.py +3475 -0
  141. pybatis/orm/decl_api.py +2335 -0
  142. pybatis/orm/decl_base.py +2310 -0
  143. pybatis/orm/dependency.py +1306 -0
  144. pybatis/orm/descriptor_props.py +1205 -0
  145. pybatis/orm/dynamic.py +306 -0
  146. pybatis/orm/evaluator.py +378 -0
  147. pybatis/orm/events.py +3387 -0
  148. pybatis/orm/exc.py +237 -0
  149. pybatis/orm/identity.py +302 -0
  150. pybatis/orm/instrumentation.py +749 -0
  151. pybatis/orm/interfaces.py +1595 -0
  152. pybatis/orm/loading.py +1712 -0
  153. pybatis/orm/mapped_collection.py +557 -0
  154. pybatis/orm/mapper.py +4465 -0
  155. pybatis/orm/path_registry.py +907 -0
  156. pybatis/orm/persistence.py +1790 -0
  157. pybatis/orm/properties.py +972 -0
  158. pybatis/orm/query.py +3528 -0
  159. pybatis/orm/relationships.py +3632 -0
  160. pybatis/orm/scoping.py +2251 -0
  161. pybatis/orm/session.py +5493 -0
  162. pybatis/orm/state.py +1175 -0
  163. pybatis/orm/state_changes.py +196 -0
  164. pybatis/orm/strategies.py +3561 -0
  165. pybatis/orm/strategy_options.py +2648 -0
  166. pybatis/orm/sync.py +164 -0
  167. pybatis/orm/unitofwork.py +797 -0
  168. pybatis/orm/util.py +2550 -0
  169. pybatis/orm/writeonly.py +701 -0
  170. pybatis/pool/__init__.py +41 -0
  171. pybatis/pool/base.py +1560 -0
  172. pybatis/pool/events.py +375 -0
  173. pybatis/pool/impl.py +583 -0
  174. pybatis/py.typed +0 -0
  175. pybatis/schema.py +75 -0
  176. pybatis/sql/__init__.py +156 -0
  177. pybatis/sql/_annotated_cols.py +402 -0
  178. pybatis/sql/_cache_key_cy.py +363 -0
  179. pybatis/sql/_dml_constructors.py +132 -0
  180. pybatis/sql/_elements_constructors.py +2216 -0
  181. pybatis/sql/_orm_types.py +19 -0
  182. pybatis/sql/_selectable_constructors.py +840 -0
  183. pybatis/sql/_typing.py +500 -0
  184. pybatis/sql/_util_cy.pxd +11 -0
  185. pybatis/sql/_util_cy.py +127 -0
  186. pybatis/sql/annotation.py +590 -0
  187. pybatis/sql/base.py +2852 -0
  188. pybatis/sql/cache_key.py +915 -0
  189. pybatis/sql/coercions.py +1373 -0
  190. pybatis/sql/compiler.py +8527 -0
  191. pybatis/sql/crud.py +1816 -0
  192. pybatis/sql/ddl.py +1962 -0
  193. pybatis/sql/default_comparator.py +660 -0
  194. pybatis/sql/dml.py +2026 -0
  195. pybatis/sql/elements.py +6091 -0
  196. pybatis/sql/events.py +458 -0
  197. pybatis/sql/expression.py +171 -0
  198. pybatis/sql/functions.py +2380 -0
  199. pybatis/sql/lambdas.py +1442 -0
  200. pybatis/sql/naming.py +204 -0
  201. pybatis/sql/operators.py +2909 -0
  202. pybatis/sql/roles.py +332 -0
  203. pybatis/sql/schema.py +7080 -0
  204. pybatis/sql/selectable.py +7646 -0
  205. pybatis/sql/sqltypes.py +4137 -0
  206. pybatis/sql/traversals.py +1041 -0
  207. pybatis/sql/type_api.py +2479 -0
  208. pybatis/sql/util.py +1496 -0
  209. pybatis/sql/visitors.py +1153 -0
  210. pybatis/testing/__init__.py +97 -0
  211. pybatis/testing/assertions.py +1007 -0
  212. pybatis/testing/assertsql.py +519 -0
  213. pybatis/testing/asyncio.py +128 -0
  214. pybatis/testing/cancellation.py +367 -0
  215. pybatis/testing/config.py +440 -0
  216. pybatis/testing/engines.py +496 -0
  217. pybatis/testing/entities.py +117 -0
  218. pybatis/testing/exclusions.py +501 -0
  219. pybatis/testing/fixtures/__init__.py +30 -0
  220. pybatis/testing/fixtures/base.py +426 -0
  221. pybatis/testing/fixtures/mypy.py +247 -0
  222. pybatis/testing/fixtures/orm.py +227 -0
  223. pybatis/testing/fixtures/sql.py +538 -0
  224. pybatis/testing/pickleable.py +155 -0
  225. pybatis/testing/plugin/__init__.py +6 -0
  226. pybatis/testing/plugin/bootstrap.py +50 -0
  227. pybatis/testing/plugin/plugin_base.py +828 -0
  228. pybatis/testing/plugin/pytestplugin.py +923 -0
  229. pybatis/testing/profiles_file.py +350 -0
  230. pybatis/testing/profiling.py +317 -0
  231. pybatis/testing/provision.py +633 -0
  232. pybatis/testing/requirements.py +2009 -0
  233. pybatis/testing/schema.py +198 -0
  234. pybatis/testing/suite/__init__.py +19 -0
  235. pybatis/testing/suite/test_cte.py +237 -0
  236. pybatis/testing/suite/test_ddl.py +420 -0
  237. pybatis/testing/suite/test_dialect.py +777 -0
  238. pybatis/testing/suite/test_insert.py +630 -0
  239. pybatis/testing/suite/test_reflection.py +3815 -0
  240. pybatis/testing/suite/test_results.py +660 -0
  241. pybatis/testing/suite/test_rowcount.py +258 -0
  242. pybatis/testing/suite/test_select.py +2118 -0
  243. pybatis/testing/suite/test_sequence.py +317 -0
  244. pybatis/testing/suite/test_table_via_select.py +686 -0
  245. pybatis/testing/suite/test_types.py +2472 -0
  246. pybatis/testing/suite/test_unicode_ddl.py +189 -0
  247. pybatis/testing/suite/test_update_delete.py +176 -0
  248. pybatis/testing/util.py +575 -0
  249. pybatis/testing/warnings.py +52 -0
  250. pybatis/types.py +75 -0
  251. pybatis/util/__init__.py +166 -0
  252. pybatis/util/_collections.py +688 -0
  253. pybatis/util/_collections_cy.pxd +8 -0
  254. pybatis/util/_collections_cy.py +516 -0
  255. pybatis/util/_has_cython.py +48 -0
  256. pybatis/util/_immutabledict_cy.py +240 -0
  257. pybatis/util/compat.py +298 -0
  258. pybatis/util/concurrency.py +272 -0
  259. pybatis/util/cython.py +95 -0
  260. pybatis/util/deprecations.py +401 -0
  261. pybatis/util/langhelpers.py +2803 -0
  262. pybatis/util/preloaded.py +153 -0
  263. pybatis/util/queue.py +304 -0
  264. pybatis/util/tool_support.py +202 -0
  265. pybatis/util/topological.py +120 -0
  266. pybatis/util/typing.py +709 -0
  267. pybatis_plus-1.0.0.dist-info/METADATA +3252 -0
  268. pybatis_plus-1.0.0.dist-info/RECORD +272 -0
  269. pybatis_plus-1.0.0.dist-info/WHEEL +5 -0
  270. pybatis_plus-1.0.0.dist-info/licenses/AUTHORS +36 -0
  271. pybatis_plus-1.0.0.dist-info/licenses/LICENSE +19 -0
  272. pybatis_plus-1.0.0.dist-info/top_level.txt +1 -0
pybatis/__init__.py ADDED
@@ -0,0 +1,411 @@
1
+ # __init__.py
2
+ # Copyright (C) 2005-2026 the PyBatis authors and contributors
3
+ # <see AUTHORS file>
4
+ #
5
+ # This module is part of PyBatis and is released under
6
+ # the MIT License: https://www.opensource.org/licenses/mit-license.php
7
+ """PyBatis — Python SQL Toolkit and Object Relational Mapper.
8
+
9
+ This module is the canonical import surface for PyBatis. The
10
+ ``__all__`` list below declares the curated public API; everything
11
+ re-exported further down (via ``from .X import Y``) is available for
12
+ fine-grained imports but is not considered part of the supported
13
+ surface.
14
+
15
+ Curated quick-start::
16
+
17
+ from pybatis import (
18
+ create_engine, Column, Integer, String,
19
+ Table, MetaData, ForeignKey,
20
+ select, insert, update, delete,
21
+ Session, sessionmaker,
22
+ relationship,
23
+ )
24
+
25
+ See ARCHITECTURE.md for the project's module tiering policy.
26
+ """
27
+
28
+ from __future__ import annotations
29
+
30
+ from typing import Any
31
+
32
+ from . import util as _util
33
+
34
+ # Curated public API. `from pybatis import *` will only import these
35
+ # symbols. Anything else is accessible via explicit ``from pybatis.X
36
+ # import Y`` but is not advertised as part of the supported surface.
37
+ __all__ = [
38
+ # ---- Engine & Connection ----
39
+ "create_engine",
40
+ "engine_from_config",
41
+ "Engine",
42
+ "URL",
43
+ "make_url",
44
+ "Connection",
45
+ # ---- Session ----
46
+ "Session",
47
+ "sessionmaker",
48
+ "close_all_sessions",
49
+ # ---- Result ----
50
+ "Result",
51
+ "Row",
52
+ "ScalarResult",
53
+ "CursorResult",
54
+ "MappingResult",
55
+ "AsyncResult",
56
+ "AsyncScalarResult",
57
+ "AsyncMappingResult",
58
+ # ---- Schema ----
59
+ "MetaData",
60
+ "Table",
61
+ "Column",
62
+ "ForeignKey",
63
+ "Index",
64
+ "Sequence",
65
+ "Computed",
66
+ "Identity",
67
+ "DefaultClause",
68
+ "FetchedValue",
69
+ "CheckConstraint",
70
+ "UniqueConstraint",
71
+ "PrimaryKeyConstraint",
72
+ # ---- Types ----
73
+ "Integer", "BigInteger", "SmallInteger",
74
+ "String", "Text", "Unicode", "UnicodeText",
75
+ "Float", "Numeric", "Double",
76
+ "Boolean",
77
+ "Date", "Time", "DateTime", "Interval",
78
+ "JSON", "LargeBinary",
79
+ "Enum", "PickleType",
80
+ "TypeDecorator", "UserDefinedType",
81
+ "ARRAY",
82
+ # ---- SQL expression ----
83
+ "select", "insert", "update", "delete",
84
+ "and_", "or_", "not_",
85
+ "func", "case", "cast", "type_coerce", "try_cast",
86
+ "text", "literal", "literal_column", "bindparam",
87
+ "union", "union_all", "intersect", "intersect_all",
88
+ "except_", "except_all",
89
+ "asc", "desc",
90
+ "nulls_first", "nulls_last",
91
+ "true", "false", "null",
92
+ "tuple_", "all_", "any_",
93
+ "column", "table",
94
+ "over", "within_group", "filter",
95
+ "quoted_name",
96
+ # ---- ORM Declarative (also re-exported here for ergonomic imports) ----
97
+ "relationship", "backref", "deferred", "column_property",
98
+ "composite", "mapped_column", "synonym",
99
+ # ---- Pool ----
100
+ "Pool", "QueuePool", "NullPool", "StaticPool", "AssertionPool",
101
+ "AsyncAdaptedQueuePool",
102
+ # ---- Inspection ----
103
+ "inspect",
104
+ # ---- Submodules (also public) ----
105
+ "exc", "event", "util",
106
+ "orm", "sql", "schema", "types",
107
+ "engine", "pool", "dialects", "ext", "testing",
108
+ # ---- Version ----
109
+ "__version__",
110
+ ]
111
+ from .engine import AdaptedConnection as AdaptedConnection
112
+ from .engine import BaseRow as BaseRow
113
+ from .engine import BindTyping as BindTyping
114
+ from .engine import ChunkedIteratorResult as ChunkedIteratorResult
115
+ from .engine import Compiled as Compiled
116
+ from .engine import Connection as Connection
117
+ from .engine import create_engine as create_engine
118
+ from .engine import create_mock_engine as create_mock_engine
119
+ from .engine import create_pool_from_url as create_pool_from_url
120
+ from .engine import CreateEnginePlugin as CreateEnginePlugin
121
+ from .engine import CursorResult as CursorResult
122
+ from .engine import Dialect as Dialect
123
+ from .engine import Engine as Engine
124
+ from .engine import engine_from_config as engine_from_config
125
+ from .engine import ExceptionContext as ExceptionContext
126
+ from .engine import ExecutionContext as ExecutionContext
127
+ from .engine import FrozenResult as FrozenResult
128
+ from .engine import Inspector as Inspector
129
+ from .engine import IteratorResult as IteratorResult
130
+ from .engine import make_url as make_url
131
+ from .engine import MappingResult as MappingResult
132
+ from .engine import MergedResult as MergedResult
133
+ from .engine import NestedTransaction as NestedTransaction
134
+ from .engine import Result as Result
135
+ from .engine import result_tuple as result_tuple
136
+ from .engine import ResultProxy as ResultProxy
137
+ from .engine import RootTransaction as RootTransaction
138
+ from .engine import Row as Row
139
+ from .engine import RowMapping as RowMapping
140
+ from .engine import ScalarResult as ScalarResult
141
+ from .engine import Transaction as Transaction
142
+ from .engine import TwoPhaseTransaction as TwoPhaseTransaction
143
+ from .engine import TypeCompiler as TypeCompiler
144
+ from .engine import URL as URL
145
+ from .inspection import inspect as inspect
146
+ from .pool import AssertionPool as AssertionPool
147
+ from .pool import AsyncAdaptedQueuePool as AsyncAdaptedQueuePool
148
+ from .pool import NullPool as NullPool
149
+ from .pool import Pool as Pool
150
+ from .pool import PoolProxiedConnection as PoolProxiedConnection
151
+ from .pool import PoolResetState as PoolResetState
152
+ from .pool import QueuePool as QueuePool
153
+ from .pool import SingletonThreadPool as SingletonThreadPool
154
+ from .pool import StaticPool as StaticPool
155
+ from .schema import BaseDDLElement as BaseDDLElement
156
+ from .schema import BLANK_SCHEMA as BLANK_SCHEMA
157
+ from .schema import CheckConstraint as CheckConstraint
158
+ from .schema import CheckFirst as CheckFirst
159
+ from .schema import Column as Column
160
+ from .schema import ColumnDefault as ColumnDefault
161
+ from .schema import Computed as Computed
162
+ from .schema import Constraint as Constraint
163
+ from .schema import CreateTable as CreateTable
164
+ from .schema import CreateTableAs as CreateTableAs
165
+ from .schema import CreateView as CreateView
166
+ from .schema import DDL as DDL
167
+ from .schema import DDLElement as DDLElement
168
+ from .schema import DefaultClause as DefaultClause
169
+ from .schema import DropTable as DropTable
170
+ from .schema import DropView as DropView
171
+ from .schema import ExecutableDDLElement as ExecutableDDLElement
172
+ from .schema import FetchedValue as FetchedValue
173
+ from .schema import ForeignKey as ForeignKey
174
+ from .schema import ForeignKeyConstraint as ForeignKeyConstraint
175
+ from .schema import ForeignKeyTarget as ForeignKeyTarget
176
+ from .schema import Identity as Identity
177
+ from .schema import Index as Index
178
+ from .schema import insert_sentinel as insert_sentinel
179
+ from .schema import MetaData as MetaData
180
+ from .schema import Named as Named
181
+ from .schema import PrimaryKeyConstraint as PrimaryKeyConstraint
182
+ from .schema import Sequence as Sequence
183
+ from .schema import Table as Table
184
+ from .schema import TypedColumns as TypedColumns
185
+ from .schema import UniqueConstraint as UniqueConstraint
186
+ from .sql import ColumnExpressionArgument as ColumnExpressionArgument
187
+ from .sql import NotNullable as NotNullable
188
+ from .sql import Nullable as Nullable
189
+ from .sql import SelectLabelStyle as SelectLabelStyle
190
+ from .sql.expression import aggregate_order_by as aggregate_order_by
191
+ from .sql.expression import AggregateOrderBy as AggregateOrderBy
192
+ from .sql.expression import Alias as Alias
193
+ from .sql.expression import alias as alias
194
+ from .sql.expression import AliasedReturnsRows as AliasedReturnsRows
195
+ from .sql.expression import all_ as all_
196
+ from .sql.expression import and_ as and_
197
+ from .sql.expression import any_ as any_
198
+ from .sql.expression import asc as asc
199
+ from .sql.expression import between as between
200
+ from .sql.expression import BinaryExpression as BinaryExpression
201
+ from .sql.expression import bindparam as bindparam
202
+ from .sql.expression import BindParameter as BindParameter
203
+ from .sql.expression import bitwise_not as bitwise_not
204
+ from .sql.expression import BooleanClauseList as BooleanClauseList
205
+ from .sql.expression import CacheKey as CacheKey
206
+ from .sql.expression import Case as Case
207
+ from .sql.expression import case as case
208
+ from .sql.expression import Cast as Cast
209
+ from .sql.expression import cast as cast
210
+ from .sql.expression import ClauseElement as ClauseElement
211
+ from .sql.expression import ClauseList as ClauseList
212
+ from .sql.expression import collate as collate
213
+ from .sql.expression import CollectionAggregate as CollectionAggregate
214
+ from .sql.expression import column as column
215
+ from .sql.expression import ColumnClause as ColumnClause
216
+ from .sql.expression import ColumnCollection as ColumnCollection
217
+ from .sql.expression import ColumnElement as ColumnElement
218
+ from .sql.expression import ColumnOperators as ColumnOperators
219
+ from .sql.expression import CompoundSelect as CompoundSelect
220
+ from .sql.expression import CTE as CTE
221
+ from .sql.expression import cte as cte
222
+ from .sql.expression import custom_op as custom_op
223
+ from .sql.expression import Delete as Delete
224
+ from .sql.expression import delete as delete
225
+ from .sql.expression import desc as desc
226
+ from .sql.expression import distinct as distinct
227
+ from .sql.expression import except_ as except_
228
+ from .sql.expression import except_all as except_all
229
+ from .sql.expression import Executable as Executable
230
+ from .sql.expression import Exists as Exists
231
+ from .sql.expression import exists as exists
232
+ from .sql.expression import Extract as Extract
233
+ from .sql.expression import extract as extract
234
+ from .sql.expression import false as false
235
+ from .sql.expression import False_ as False_
236
+ from .sql.expression import FrameClause as FrameClause
237
+ from .sql.expression import FrameClauseType as FrameClauseType
238
+ from .sql.expression import from_dml_column as from_dml_column
239
+ from .sql.expression import FromClause as FromClause
240
+ from .sql.expression import FromGrouping as FromGrouping
241
+ from .sql.expression import func as func
242
+ from .sql.expression import funcfilter as funcfilter
243
+ from .sql.expression import Function as Function
244
+ from .sql.expression import FunctionElement as FunctionElement
245
+ from .sql.expression import FunctionFilter as FunctionFilter
246
+ from .sql.expression import GenerativeSelect as GenerativeSelect
247
+ from .sql.expression import Grouping as Grouping
248
+ from .sql.expression import HasCTE as HasCTE
249
+ from .sql.expression import HasPrefixes as HasPrefixes
250
+ from .sql.expression import HasSuffixes as HasSuffixes
251
+ from .sql.expression import Insert as Insert
252
+ from .sql.expression import insert as insert
253
+ from .sql.expression import intersect as intersect
254
+ from .sql.expression import intersect_all as intersect_all
255
+ from .sql.expression import Join as Join
256
+ from .sql.expression import join as join
257
+ from .sql.expression import Label as Label
258
+ from .sql.expression import label as label
259
+ from .sql.expression import LABEL_STYLE_DEFAULT as LABEL_STYLE_DEFAULT
260
+ from .sql.expression import (
261
+ LABEL_STYLE_DISAMBIGUATE_ONLY as LABEL_STYLE_DISAMBIGUATE_ONLY,
262
+ )
263
+ from .sql.expression import LABEL_STYLE_NONE as LABEL_STYLE_NONE
264
+ from .sql.expression import (
265
+ LABEL_STYLE_TABLENAME_PLUS_COL as LABEL_STYLE_TABLENAME_PLUS_COL,
266
+ )
267
+ from .sql.expression import lambda_stmt as lambda_stmt
268
+ from .sql.expression import LambdaElement as LambdaElement
269
+ from .sql.expression import Lateral as Lateral
270
+ from .sql.expression import lateral as lateral
271
+ from .sql.expression import literal as literal
272
+ from .sql.expression import literal_column as literal_column
273
+ from .sql.expression import modifier as modifier
274
+ from .sql.expression import not_ as not_
275
+ from .sql.expression import Null as Null
276
+ from .sql.expression import null as null
277
+ from .sql.expression import nulls_first as nulls_first
278
+ from .sql.expression import nulls_last as nulls_last
279
+ from .sql.expression import nullsfirst as nullsfirst
280
+ from .sql.expression import nullslast as nullslast
281
+ from .sql.expression import Operators as Operators
282
+ from .sql.expression import or_ as or_
283
+ from .sql.expression import OrderByList as OrderByList
284
+ from .sql.expression import outerjoin as outerjoin
285
+ from .sql.expression import outparam as outparam
286
+ from .sql.expression import Over as Over
287
+ from .sql.expression import over as over
288
+ from .sql.expression import quoted_name as quoted_name
289
+ from .sql.expression import ReleaseSavepointClause as ReleaseSavepointClause
290
+ from .sql.expression import ReturnsRows as ReturnsRows
291
+ from .sql.expression import (
292
+ RollbackToSavepointClause as RollbackToSavepointClause,
293
+ )
294
+ from .sql.expression import SavepointClause as SavepointClause
295
+ from .sql.expression import ScalarSelect as ScalarSelect
296
+ from .sql.expression import Select as Select
297
+ from .sql.expression import select as select
298
+ from .sql.expression import Selectable as Selectable
299
+ from .sql.expression import SelectBase as SelectBase
300
+ from .sql.expression import SQLColumnExpression as SQLColumnExpression
301
+ from .sql.expression import StatementLambdaElement as StatementLambdaElement
302
+ from .sql.expression import Subquery as Subquery
303
+ from .sql.expression import table as table
304
+ from .sql.expression import TableClause as TableClause
305
+ from .sql.expression import TableSample as TableSample
306
+ from .sql.expression import tablesample as tablesample
307
+ from .sql.expression import TableValuedAlias as TableValuedAlias
308
+ from .sql.expression import TableValuedColumn as TableValuedColumn
309
+ from .sql.expression import text as text
310
+ from .sql.expression import TextAsFrom as TextAsFrom
311
+ from .sql.expression import TextClause as TextClause
312
+ from .sql.expression import TextualSelect as TextualSelect
313
+ from .sql.expression import true as true
314
+ from .sql.expression import True_ as True_
315
+ from .sql.expression import try_cast as try_cast
316
+ from .sql.expression import TryCast as TryCast
317
+ from .sql.expression import TString as TString
318
+ from .sql.expression import tstring as tstring
319
+ from .sql.expression import Tuple as Tuple
320
+ from .sql.expression import tuple_ as tuple_
321
+ from .sql.expression import type_coerce as type_coerce
322
+ from .sql.expression import TypeClause as TypeClause
323
+ from .sql.expression import TypeCoerce as TypeCoerce
324
+ from .sql.expression import UnaryExpression as UnaryExpression
325
+ from .sql.expression import union as union
326
+ from .sql.expression import union_all as union_all
327
+ from .sql.expression import Update as Update
328
+ from .sql.expression import update as update
329
+ from .sql.expression import UpdateBase as UpdateBase
330
+ from .sql.expression import Values as Values
331
+ from .sql.expression import values as values
332
+ from .sql.expression import ValuesBase as ValuesBase
333
+ from .sql.expression import Visitable as Visitable
334
+ from .sql.expression import within_group as within_group
335
+ from .sql.expression import WithinGroup as WithinGroup
336
+ from .types import ARRAY as ARRAY
337
+ from .types import BIGINT as BIGINT
338
+ from .types import BigInteger as BigInteger
339
+ from .types import BINARY as BINARY
340
+ from .types import BLOB as BLOB
341
+ from .types import BOOLEAN as BOOLEAN
342
+ from .types import Boolean as Boolean
343
+ from .types import CHAR as CHAR
344
+ from .types import CLOB as CLOB
345
+ from .types import DATE as DATE
346
+ from .types import Date as Date
347
+ from .types import DATETIME as DATETIME
348
+ from .types import DateTime as DateTime
349
+ from .types import DECIMAL as DECIMAL
350
+ from .types import DOUBLE as DOUBLE
351
+ from .types import Double as Double
352
+ from .types import DOUBLE_PRECISION as DOUBLE_PRECISION
353
+ from .types import Enum as Enum
354
+ from .types import FLOAT as FLOAT
355
+ from .types import Float as Float
356
+ from .types import INT as INT
357
+ from .types import INTEGER as INTEGER
358
+ from .types import Integer as Integer
359
+ from .types import Interval as Interval
360
+ from .types import JSON as JSON
361
+ from .types import LargeBinary as LargeBinary
362
+ from .types import NCHAR as NCHAR
363
+ from .types import NUMERIC as NUMERIC
364
+ from .types import Numeric as Numeric
365
+ from .types import NumericCommon as NumericCommon
366
+ from .types import NVARCHAR as NVARCHAR
367
+ from .types import PickleType as PickleType
368
+ from .types import REAL as REAL
369
+ from .types import SMALLINT as SMALLINT
370
+ from .types import SmallInteger as SmallInteger
371
+ from .types import String as String
372
+ from .types import TEXT as TEXT
373
+ from .types import Text as Text
374
+ from .types import TIME as TIME
375
+ from .types import Time as Time
376
+ from .types import TIMESTAMP as TIMESTAMP
377
+ from .types import TupleType as TupleType
378
+ from .types import TypeDecorator as TypeDecorator
379
+ from .types import Unicode as Unicode
380
+ from .types import UnicodeText as UnicodeText
381
+ from .types import UUID as UUID
382
+ from .types import Uuid as Uuid
383
+ from .types import VARBINARY as VARBINARY
384
+ from .types import VARCHAR as VARCHAR
385
+
386
+ # ORM declarative ergonomics. The vendored upstream tree does not
387
+ # re-export these at the top level; PyBatis does, so users can write
388
+ # `from pybatis import relationship` without having to remember the
389
+ # submodule path. Only symbols that actually live in ``pybatis.orm``
390
+ # are re-exported here; for the rest, use the explicit submodule
391
+ # import (e.g. ``from pybatis.orm import class_mapper``).
392
+ from .orm import relationship as relationship
393
+ from .orm import backref as backref
394
+ from .orm import deferred as deferred
395
+ from .orm import column_property as column_property
396
+ from .orm import composite as composite
397
+ from .orm import mapped_column as mapped_column
398
+ from .orm import synonym as synonym
399
+
400
+ __version__ = "1.0.0"
401
+
402
+
403
+ def __go(lcls: Any) -> None:
404
+ _util.preloaded.import_prefix("pybatis")
405
+
406
+ from . import exc
407
+
408
+ exc._version_token = "".join(__version__.split(".")[0:2])
409
+
410
+
411
+ __go(locals())
@@ -0,0 +1,18 @@
1
+ # connectors/__init__.py
2
+ # Copyright (C) 2005-2026 the PyBatis authors and contributors
3
+ # <see AUTHORS file>
4
+ #
5
+ # This module is part of PyBatis and is released under
6
+ # the MIT License: https://www.opensource.org/licenses/mit-license.php
7
+
8
+
9
+ from ..engine.interfaces import Dialect
10
+
11
+
12
+ class Connector(Dialect):
13
+ """Base class for dialect mixins, for DBAPIs that work
14
+ across entirely different database backends.
15
+
16
+ Currently the only such mixin is pyodbc.
17
+
18
+ """
@@ -0,0 +1,171 @@
1
+ # connectors/aioodbc.py
2
+ # Copyright (C) 2005-2026 the PyBatis authors and contributors
3
+ # <see AUTHORS file>
4
+ #
5
+ # This module is part of PyBatis and is released under
6
+ # the MIT License: https://www.opensource.org/licenses/mit-license.php
7
+ # mypy: ignore-errors
8
+
9
+ from __future__ import annotations
10
+
11
+ from typing import TYPE_CHECKING
12
+
13
+ from .asyncio import AsyncAdapt_dbapi_connection
14
+ from .asyncio import AsyncAdapt_dbapi_cursor
15
+ from .asyncio import AsyncAdapt_dbapi_ss_cursor
16
+ from .pyodbc import PyODBCConnector
17
+ from ..connectors.asyncio import AsyncAdapt_dbapi_module
18
+ from ..util.concurrency import await_
19
+
20
+ if TYPE_CHECKING:
21
+ from ..engine.interfaces import ConnectArgsType
22
+ from ..engine.url import URL
23
+
24
+
25
+ class AsyncAdapt_aioodbc_cursor(AsyncAdapt_dbapi_cursor):
26
+ __slots__ = ()
27
+
28
+ def setinputsizes(self, *inputsizes):
29
+ # see https://gitee.com/aio-libs/aioodbc/issues/451
30
+ return self._cursor._impl.setinputsizes(*inputsizes)
31
+
32
+ # how it's supposed to work
33
+ # return await_(self._cursor.setinputsizes(*inputsizes))
34
+
35
+ @property
36
+ def fast_executemany(self):
37
+ return self._cursor._impl.fast_executemany
38
+
39
+ @fast_executemany.setter
40
+ def fast_executemany(self, value):
41
+ self._cursor._impl.fast_executemany = value
42
+
43
+
44
+ class AsyncAdapt_aioodbc_ss_cursor(
45
+ AsyncAdapt_aioodbc_cursor, AsyncAdapt_dbapi_ss_cursor
46
+ ):
47
+ __slots__ = ()
48
+
49
+
50
+ class AsyncAdapt_aioodbc_connection(AsyncAdapt_dbapi_connection):
51
+ _cursor_cls = AsyncAdapt_aioodbc_cursor
52
+ _ss_cursor_cls = AsyncAdapt_aioodbc_ss_cursor
53
+ __slots__ = ()
54
+
55
+ @property
56
+ def autocommit(self):
57
+ return self._connection.autocommit
58
+
59
+ @autocommit.setter
60
+ def autocommit(self, value):
61
+ # https://gitee.com/aio-libs/aioodbc/issues/448
62
+ # self._connection.autocommit = value
63
+
64
+ self._connection._conn.autocommit = value
65
+
66
+ def ping(self, reconnect):
67
+ return await_(self._connection.ping(reconnect))
68
+
69
+ def add_output_converter(self, *arg, **kw):
70
+ self._connection.add_output_converter(*arg, **kw)
71
+
72
+ def character_set_name(self):
73
+ return self._connection.character_set_name()
74
+
75
+ def cursor(self, server_side=False):
76
+ # aioodbc sets connection=None when closed and just fails with
77
+ # AttributeError here. Here we use the same ProgrammingError +
78
+ # message that pyodbc uses, so it triggers is_disconnect() as well.
79
+ if self._connection.closed:
80
+ raise self.dbapi.ProgrammingError(
81
+ "Attempt to use a closed connection."
82
+ )
83
+ return super().cursor(server_side=server_side)
84
+
85
+ def rollback(self):
86
+ # aioodbc sets connection=None when closed and just fails with
87
+ # AttributeError here. should be a no-op
88
+ if not self._connection.closed:
89
+ super().rollback()
90
+
91
+ def commit(self):
92
+ # aioodbc sets connection=None when closed and just fails with
93
+ # AttributeError here. should be a no-op
94
+ if not self._connection.closed:
95
+ super().commit()
96
+
97
+ def close(self):
98
+ # aioodbc sets connection=None when closed and just fails with
99
+ # AttributeError here. should be a no-op
100
+ if not self._connection.closed:
101
+ super().close()
102
+
103
+
104
+ class AsyncAdapt_aioodbc_dbapi(AsyncAdapt_dbapi_module):
105
+ def __init__(self, aioodbc, pyodbc):
106
+ super().__init__(aioodbc, dbapi_module=pyodbc)
107
+ self.aioodbc = aioodbc
108
+ self.pyodbc = pyodbc
109
+ self.paramstyle = pyodbc.paramstyle
110
+ self._init_dbapi_attributes()
111
+ self.Cursor = AsyncAdapt_dbapi_cursor
112
+ self.version = pyodbc.version
113
+
114
+ def _init_dbapi_attributes(self):
115
+ for name in (
116
+ "Warning",
117
+ "Error",
118
+ "InterfaceError",
119
+ "DataError",
120
+ "DatabaseError",
121
+ "OperationalError",
122
+ "InterfaceError",
123
+ "IntegrityError",
124
+ "ProgrammingError",
125
+ "InternalError",
126
+ "NotSupportedError",
127
+ "SQL_DRIVER_NAME",
128
+ "NUMBER",
129
+ "STRING",
130
+ "DATETIME",
131
+ "BINARY",
132
+ "Binary",
133
+ "BinaryNull",
134
+ "SQL_VARCHAR",
135
+ "SQL_WVARCHAR",
136
+ "SQL_DECIMAL",
137
+ ):
138
+ setattr(self, name, getattr(self.pyodbc, name))
139
+
140
+ def connect(self, *arg, **kw):
141
+ creator_fn = kw.pop("async_creator_fn", self.aioodbc.connect)
142
+
143
+ return await_(
144
+ AsyncAdapt_aioodbc_connection.create(
145
+ self,
146
+ creator_fn(*arg, **kw),
147
+ )
148
+ )
149
+
150
+
151
+ class aiodbcConnector(PyODBCConnector):
152
+ is_async = True
153
+ supports_statement_cache = True
154
+
155
+ supports_server_side_cursors = True
156
+
157
+ @classmethod
158
+ def import_dbapi(cls):
159
+ return AsyncAdapt_aioodbc_dbapi(
160
+ __import__("aioodbc"), __import__("pyodbc")
161
+ )
162
+
163
+ def create_connect_args(self, url: URL) -> ConnectArgsType:
164
+ arg, kw = super().create_connect_args(url)
165
+ if arg and arg[0]:
166
+ kw["dsn"] = arg[0]
167
+
168
+ return (), kw
169
+
170
+ def get_driver_connection(self, connection):
171
+ return connection._connection