sqlspec 0.36.0__cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.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 (531) hide show
  1. ac8f31065839703b4e70__mypyc.cpython-310-aarch64-linux-gnu.so +0 -0
  2. sqlspec/__init__.py +140 -0
  3. sqlspec/__main__.py +12 -0
  4. sqlspec/__metadata__.py +14 -0
  5. sqlspec/_serialization.py +315 -0
  6. sqlspec/_typing.py +700 -0
  7. sqlspec/adapters/__init__.py +0 -0
  8. sqlspec/adapters/adbc/__init__.py +5 -0
  9. sqlspec/adapters/adbc/_typing.py +82 -0
  10. sqlspec/adapters/adbc/adk/__init__.py +5 -0
  11. sqlspec/adapters/adbc/adk/store.py +1273 -0
  12. sqlspec/adapters/adbc/config.py +295 -0
  13. sqlspec/adapters/adbc/core.cpython-310-aarch64-linux-gnu.so +0 -0
  14. sqlspec/adapters/adbc/core.py +735 -0
  15. sqlspec/adapters/adbc/data_dictionary.py +334 -0
  16. sqlspec/adapters/adbc/driver.py +529 -0
  17. sqlspec/adapters/adbc/events/__init__.py +5 -0
  18. sqlspec/adapters/adbc/events/store.py +285 -0
  19. sqlspec/adapters/adbc/litestar/__init__.py +5 -0
  20. sqlspec/adapters/adbc/litestar/store.py +502 -0
  21. sqlspec/adapters/adbc/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
  22. sqlspec/adapters/adbc/type_converter.py +140 -0
  23. sqlspec/adapters/aiosqlite/__init__.py +25 -0
  24. sqlspec/adapters/aiosqlite/_typing.py +82 -0
  25. sqlspec/adapters/aiosqlite/adk/__init__.py +5 -0
  26. sqlspec/adapters/aiosqlite/adk/store.py +818 -0
  27. sqlspec/adapters/aiosqlite/config.py +334 -0
  28. sqlspec/adapters/aiosqlite/core.cpython-310-aarch64-linux-gnu.so +0 -0
  29. sqlspec/adapters/aiosqlite/core.py +315 -0
  30. sqlspec/adapters/aiosqlite/data_dictionary.py +208 -0
  31. sqlspec/adapters/aiosqlite/driver.py +313 -0
  32. sqlspec/adapters/aiosqlite/events/__init__.py +5 -0
  33. sqlspec/adapters/aiosqlite/events/store.py +20 -0
  34. sqlspec/adapters/aiosqlite/litestar/__init__.py +5 -0
  35. sqlspec/adapters/aiosqlite/litestar/store.py +279 -0
  36. sqlspec/adapters/aiosqlite/pool.py +533 -0
  37. sqlspec/adapters/asyncmy/__init__.py +21 -0
  38. sqlspec/adapters/asyncmy/_typing.py +87 -0
  39. sqlspec/adapters/asyncmy/adk/__init__.py +5 -0
  40. sqlspec/adapters/asyncmy/adk/store.py +703 -0
  41. sqlspec/adapters/asyncmy/config.py +302 -0
  42. sqlspec/adapters/asyncmy/core.cpython-310-aarch64-linux-gnu.so +0 -0
  43. sqlspec/adapters/asyncmy/core.py +360 -0
  44. sqlspec/adapters/asyncmy/data_dictionary.py +124 -0
  45. sqlspec/adapters/asyncmy/driver.py +383 -0
  46. sqlspec/adapters/asyncmy/events/__init__.py +5 -0
  47. sqlspec/adapters/asyncmy/events/store.py +104 -0
  48. sqlspec/adapters/asyncmy/litestar/__init__.py +5 -0
  49. sqlspec/adapters/asyncmy/litestar/store.py +296 -0
  50. sqlspec/adapters/asyncpg/__init__.py +19 -0
  51. sqlspec/adapters/asyncpg/_typing.py +88 -0
  52. sqlspec/adapters/asyncpg/adk/__init__.py +5 -0
  53. sqlspec/adapters/asyncpg/adk/store.py +748 -0
  54. sqlspec/adapters/asyncpg/config.py +569 -0
  55. sqlspec/adapters/asyncpg/core.cpython-310-aarch64-linux-gnu.so +0 -0
  56. sqlspec/adapters/asyncpg/core.py +367 -0
  57. sqlspec/adapters/asyncpg/data_dictionary.py +162 -0
  58. sqlspec/adapters/asyncpg/driver.py +487 -0
  59. sqlspec/adapters/asyncpg/events/__init__.py +6 -0
  60. sqlspec/adapters/asyncpg/events/backend.py +286 -0
  61. sqlspec/adapters/asyncpg/events/store.py +40 -0
  62. sqlspec/adapters/asyncpg/litestar/__init__.py +5 -0
  63. sqlspec/adapters/asyncpg/litestar/store.py +251 -0
  64. sqlspec/adapters/bigquery/__init__.py +14 -0
  65. sqlspec/adapters/bigquery/_typing.py +86 -0
  66. sqlspec/adapters/bigquery/adk/__init__.py +5 -0
  67. sqlspec/adapters/bigquery/adk/store.py +827 -0
  68. sqlspec/adapters/bigquery/config.py +353 -0
  69. sqlspec/adapters/bigquery/core.cpython-310-aarch64-linux-gnu.so +0 -0
  70. sqlspec/adapters/bigquery/core.py +715 -0
  71. sqlspec/adapters/bigquery/data_dictionary.py +128 -0
  72. sqlspec/adapters/bigquery/driver.py +548 -0
  73. sqlspec/adapters/bigquery/events/__init__.py +5 -0
  74. sqlspec/adapters/bigquery/events/store.py +139 -0
  75. sqlspec/adapters/bigquery/litestar/__init__.py +5 -0
  76. sqlspec/adapters/bigquery/litestar/store.py +325 -0
  77. sqlspec/adapters/bigquery/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
  78. sqlspec/adapters/bigquery/type_converter.py +107 -0
  79. sqlspec/adapters/cockroach_asyncpg/__init__.py +24 -0
  80. sqlspec/adapters/cockroach_asyncpg/_typing.py +72 -0
  81. sqlspec/adapters/cockroach_asyncpg/adk/__init__.py +3 -0
  82. sqlspec/adapters/cockroach_asyncpg/adk/store.py +410 -0
  83. sqlspec/adapters/cockroach_asyncpg/config.py +238 -0
  84. sqlspec/adapters/cockroach_asyncpg/core.cpython-310-aarch64-linux-gnu.so +0 -0
  85. sqlspec/adapters/cockroach_asyncpg/core.py +55 -0
  86. sqlspec/adapters/cockroach_asyncpg/data_dictionary.py +107 -0
  87. sqlspec/adapters/cockroach_asyncpg/driver.py +144 -0
  88. sqlspec/adapters/cockroach_asyncpg/events/__init__.py +3 -0
  89. sqlspec/adapters/cockroach_asyncpg/events/store.py +20 -0
  90. sqlspec/adapters/cockroach_asyncpg/litestar/__init__.py +3 -0
  91. sqlspec/adapters/cockroach_asyncpg/litestar/store.py +142 -0
  92. sqlspec/adapters/cockroach_psycopg/__init__.py +38 -0
  93. sqlspec/adapters/cockroach_psycopg/_typing.py +129 -0
  94. sqlspec/adapters/cockroach_psycopg/adk/__init__.py +13 -0
  95. sqlspec/adapters/cockroach_psycopg/adk/store.py +868 -0
  96. sqlspec/adapters/cockroach_psycopg/config.py +484 -0
  97. sqlspec/adapters/cockroach_psycopg/core.cpython-310-aarch64-linux-gnu.so +0 -0
  98. sqlspec/adapters/cockroach_psycopg/core.py +63 -0
  99. sqlspec/adapters/cockroach_psycopg/data_dictionary.py +215 -0
  100. sqlspec/adapters/cockroach_psycopg/driver.py +284 -0
  101. sqlspec/adapters/cockroach_psycopg/events/__init__.py +6 -0
  102. sqlspec/adapters/cockroach_psycopg/events/store.py +34 -0
  103. sqlspec/adapters/cockroach_psycopg/litestar/__init__.py +3 -0
  104. sqlspec/adapters/cockroach_psycopg/litestar/store.py +325 -0
  105. sqlspec/adapters/duckdb/__init__.py +25 -0
  106. sqlspec/adapters/duckdb/_typing.py +81 -0
  107. sqlspec/adapters/duckdb/adk/__init__.py +14 -0
  108. sqlspec/adapters/duckdb/adk/store.py +850 -0
  109. sqlspec/adapters/duckdb/config.py +463 -0
  110. sqlspec/adapters/duckdb/core.cpython-310-aarch64-linux-gnu.so +0 -0
  111. sqlspec/adapters/duckdb/core.py +257 -0
  112. sqlspec/adapters/duckdb/data_dictionary.py +140 -0
  113. sqlspec/adapters/duckdb/driver.py +430 -0
  114. sqlspec/adapters/duckdb/events/__init__.py +5 -0
  115. sqlspec/adapters/duckdb/events/store.py +57 -0
  116. sqlspec/adapters/duckdb/litestar/__init__.py +5 -0
  117. sqlspec/adapters/duckdb/litestar/store.py +330 -0
  118. sqlspec/adapters/duckdb/pool.py +293 -0
  119. sqlspec/adapters/duckdb/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
  120. sqlspec/adapters/duckdb/type_converter.py +118 -0
  121. sqlspec/adapters/mock/__init__.py +72 -0
  122. sqlspec/adapters/mock/_typing.py +147 -0
  123. sqlspec/adapters/mock/config.py +483 -0
  124. sqlspec/adapters/mock/core.py +319 -0
  125. sqlspec/adapters/mock/data_dictionary.py +366 -0
  126. sqlspec/adapters/mock/driver.py +721 -0
  127. sqlspec/adapters/mysqlconnector/__init__.py +36 -0
  128. sqlspec/adapters/mysqlconnector/_typing.py +141 -0
  129. sqlspec/adapters/mysqlconnector/adk/__init__.py +15 -0
  130. sqlspec/adapters/mysqlconnector/adk/store.py +1060 -0
  131. sqlspec/adapters/mysqlconnector/config.py +394 -0
  132. sqlspec/adapters/mysqlconnector/core.cpython-310-aarch64-linux-gnu.so +0 -0
  133. sqlspec/adapters/mysqlconnector/core.py +303 -0
  134. sqlspec/adapters/mysqlconnector/data_dictionary.py +235 -0
  135. sqlspec/adapters/mysqlconnector/driver.py +483 -0
  136. sqlspec/adapters/mysqlconnector/events/__init__.py +8 -0
  137. sqlspec/adapters/mysqlconnector/events/store.py +98 -0
  138. sqlspec/adapters/mysqlconnector/litestar/__init__.py +5 -0
  139. sqlspec/adapters/mysqlconnector/litestar/store.py +426 -0
  140. sqlspec/adapters/oracledb/__init__.py +60 -0
  141. sqlspec/adapters/oracledb/_numpy_handlers.py +141 -0
  142. sqlspec/adapters/oracledb/_typing.py +182 -0
  143. sqlspec/adapters/oracledb/_uuid_handlers.py +166 -0
  144. sqlspec/adapters/oracledb/adk/__init__.py +10 -0
  145. sqlspec/adapters/oracledb/adk/store.py +2369 -0
  146. sqlspec/adapters/oracledb/config.py +550 -0
  147. sqlspec/adapters/oracledb/core.cpython-310-aarch64-linux-gnu.so +0 -0
  148. sqlspec/adapters/oracledb/core.py +543 -0
  149. sqlspec/adapters/oracledb/data_dictionary.py +536 -0
  150. sqlspec/adapters/oracledb/driver.py +1229 -0
  151. sqlspec/adapters/oracledb/events/__init__.py +16 -0
  152. sqlspec/adapters/oracledb/events/backend.py +347 -0
  153. sqlspec/adapters/oracledb/events/store.py +420 -0
  154. sqlspec/adapters/oracledb/litestar/__init__.py +5 -0
  155. sqlspec/adapters/oracledb/litestar/store.py +781 -0
  156. sqlspec/adapters/oracledb/migrations.py +535 -0
  157. sqlspec/adapters/oracledb/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
  158. sqlspec/adapters/oracledb/type_converter.py +211 -0
  159. sqlspec/adapters/psqlpy/__init__.py +17 -0
  160. sqlspec/adapters/psqlpy/_typing.py +79 -0
  161. sqlspec/adapters/psqlpy/adk/__init__.py +5 -0
  162. sqlspec/adapters/psqlpy/adk/store.py +766 -0
  163. sqlspec/adapters/psqlpy/config.py +304 -0
  164. sqlspec/adapters/psqlpy/core.cpython-310-aarch64-linux-gnu.so +0 -0
  165. sqlspec/adapters/psqlpy/core.py +480 -0
  166. sqlspec/adapters/psqlpy/data_dictionary.py +126 -0
  167. sqlspec/adapters/psqlpy/driver.py +438 -0
  168. sqlspec/adapters/psqlpy/events/__init__.py +6 -0
  169. sqlspec/adapters/psqlpy/events/backend.py +310 -0
  170. sqlspec/adapters/psqlpy/events/store.py +20 -0
  171. sqlspec/adapters/psqlpy/litestar/__init__.py +5 -0
  172. sqlspec/adapters/psqlpy/litestar/store.py +270 -0
  173. sqlspec/adapters/psqlpy/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
  174. sqlspec/adapters/psqlpy/type_converter.py +113 -0
  175. sqlspec/adapters/psycopg/__init__.py +32 -0
  176. sqlspec/adapters/psycopg/_typing.py +164 -0
  177. sqlspec/adapters/psycopg/adk/__init__.py +10 -0
  178. sqlspec/adapters/psycopg/adk/store.py +1387 -0
  179. sqlspec/adapters/psycopg/config.py +576 -0
  180. sqlspec/adapters/psycopg/core.cpython-310-aarch64-linux-gnu.so +0 -0
  181. sqlspec/adapters/psycopg/core.py +450 -0
  182. sqlspec/adapters/psycopg/data_dictionary.py +289 -0
  183. sqlspec/adapters/psycopg/driver.py +975 -0
  184. sqlspec/adapters/psycopg/events/__init__.py +20 -0
  185. sqlspec/adapters/psycopg/events/backend.py +458 -0
  186. sqlspec/adapters/psycopg/events/store.py +42 -0
  187. sqlspec/adapters/psycopg/litestar/__init__.py +5 -0
  188. sqlspec/adapters/psycopg/litestar/store.py +552 -0
  189. sqlspec/adapters/psycopg/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
  190. sqlspec/adapters/psycopg/type_converter.py +93 -0
  191. sqlspec/adapters/pymysql/__init__.py +21 -0
  192. sqlspec/adapters/pymysql/_typing.py +71 -0
  193. sqlspec/adapters/pymysql/adk/__init__.py +5 -0
  194. sqlspec/adapters/pymysql/adk/store.py +540 -0
  195. sqlspec/adapters/pymysql/config.py +195 -0
  196. sqlspec/adapters/pymysql/core.cpython-310-aarch64-linux-gnu.so +0 -0
  197. sqlspec/adapters/pymysql/core.py +299 -0
  198. sqlspec/adapters/pymysql/data_dictionary.py +122 -0
  199. sqlspec/adapters/pymysql/driver.py +259 -0
  200. sqlspec/adapters/pymysql/events/__init__.py +5 -0
  201. sqlspec/adapters/pymysql/events/store.py +50 -0
  202. sqlspec/adapters/pymysql/litestar/__init__.py +5 -0
  203. sqlspec/adapters/pymysql/litestar/store.py +232 -0
  204. sqlspec/adapters/pymysql/pool.py +137 -0
  205. sqlspec/adapters/spanner/__init__.py +40 -0
  206. sqlspec/adapters/spanner/_typing.py +86 -0
  207. sqlspec/adapters/spanner/adk/__init__.py +5 -0
  208. sqlspec/adapters/spanner/adk/store.py +732 -0
  209. sqlspec/adapters/spanner/config.py +352 -0
  210. sqlspec/adapters/spanner/core.cpython-310-aarch64-linux-gnu.so +0 -0
  211. sqlspec/adapters/spanner/core.py +188 -0
  212. sqlspec/adapters/spanner/data_dictionary.py +120 -0
  213. sqlspec/adapters/spanner/dialect/__init__.py +6 -0
  214. sqlspec/adapters/spanner/dialect/_spangres.py +57 -0
  215. sqlspec/adapters/spanner/dialect/_spanner.py +130 -0
  216. sqlspec/adapters/spanner/driver.py +373 -0
  217. sqlspec/adapters/spanner/events/__init__.py +5 -0
  218. sqlspec/adapters/spanner/events/store.py +187 -0
  219. sqlspec/adapters/spanner/litestar/__init__.py +5 -0
  220. sqlspec/adapters/spanner/litestar/store.py +291 -0
  221. sqlspec/adapters/spanner/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
  222. sqlspec/adapters/spanner/type_converter.py +331 -0
  223. sqlspec/adapters/sqlite/__init__.py +19 -0
  224. sqlspec/adapters/sqlite/_typing.py +80 -0
  225. sqlspec/adapters/sqlite/adk/__init__.py +5 -0
  226. sqlspec/adapters/sqlite/adk/store.py +958 -0
  227. sqlspec/adapters/sqlite/config.py +280 -0
  228. sqlspec/adapters/sqlite/core.cpython-310-aarch64-linux-gnu.so +0 -0
  229. sqlspec/adapters/sqlite/core.py +312 -0
  230. sqlspec/adapters/sqlite/data_dictionary.py +202 -0
  231. sqlspec/adapters/sqlite/driver.py +359 -0
  232. sqlspec/adapters/sqlite/events/__init__.py +5 -0
  233. sqlspec/adapters/sqlite/events/store.py +20 -0
  234. sqlspec/adapters/sqlite/litestar/__init__.py +5 -0
  235. sqlspec/adapters/sqlite/litestar/store.py +316 -0
  236. sqlspec/adapters/sqlite/pool.py +198 -0
  237. sqlspec/adapters/sqlite/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
  238. sqlspec/adapters/sqlite/type_converter.py +114 -0
  239. sqlspec/base.py +747 -0
  240. sqlspec/builder/__init__.py +179 -0
  241. sqlspec/builder/_base.cpython-310-aarch64-linux-gnu.so +0 -0
  242. sqlspec/builder/_base.py +1022 -0
  243. sqlspec/builder/_column.cpython-310-aarch64-linux-gnu.so +0 -0
  244. sqlspec/builder/_column.py +521 -0
  245. sqlspec/builder/_ddl.cpython-310-aarch64-linux-gnu.so +0 -0
  246. sqlspec/builder/_ddl.py +1642 -0
  247. sqlspec/builder/_delete.cpython-310-aarch64-linux-gnu.so +0 -0
  248. sqlspec/builder/_delete.py +95 -0
  249. sqlspec/builder/_dml.cpython-310-aarch64-linux-gnu.so +0 -0
  250. sqlspec/builder/_dml.py +365 -0
  251. sqlspec/builder/_explain.cpython-310-aarch64-linux-gnu.so +0 -0
  252. sqlspec/builder/_explain.py +579 -0
  253. sqlspec/builder/_expression_wrappers.cpython-310-aarch64-linux-gnu.so +0 -0
  254. sqlspec/builder/_expression_wrappers.py +46 -0
  255. sqlspec/builder/_factory.cpython-310-aarch64-linux-gnu.so +0 -0
  256. sqlspec/builder/_factory.py +1697 -0
  257. sqlspec/builder/_insert.cpython-310-aarch64-linux-gnu.so +0 -0
  258. sqlspec/builder/_insert.py +328 -0
  259. sqlspec/builder/_join.cpython-310-aarch64-linux-gnu.so +0 -0
  260. sqlspec/builder/_join.py +499 -0
  261. sqlspec/builder/_merge.cpython-310-aarch64-linux-gnu.so +0 -0
  262. sqlspec/builder/_merge.py +821 -0
  263. sqlspec/builder/_parsing_utils.cpython-310-aarch64-linux-gnu.so +0 -0
  264. sqlspec/builder/_parsing_utils.py +297 -0
  265. sqlspec/builder/_select.cpython-310-aarch64-linux-gnu.so +0 -0
  266. sqlspec/builder/_select.py +1660 -0
  267. sqlspec/builder/_temporal.cpython-310-aarch64-linux-gnu.so +0 -0
  268. sqlspec/builder/_temporal.py +139 -0
  269. sqlspec/builder/_update.cpython-310-aarch64-linux-gnu.so +0 -0
  270. sqlspec/builder/_update.py +173 -0
  271. sqlspec/builder/_vector_expressions.py +267 -0
  272. sqlspec/cli.py +911 -0
  273. sqlspec/config.py +1755 -0
  274. sqlspec/core/__init__.py +374 -0
  275. sqlspec/core/_correlation.cpython-310-aarch64-linux-gnu.so +0 -0
  276. sqlspec/core/_correlation.py +176 -0
  277. sqlspec/core/cache.cpython-310-aarch64-linux-gnu.so +0 -0
  278. sqlspec/core/cache.py +1069 -0
  279. sqlspec/core/compiler.cpython-310-aarch64-linux-gnu.so +0 -0
  280. sqlspec/core/compiler.py +954 -0
  281. sqlspec/core/explain.cpython-310-aarch64-linux-gnu.so +0 -0
  282. sqlspec/core/explain.py +275 -0
  283. sqlspec/core/filters.cpython-310-aarch64-linux-gnu.so +0 -0
  284. sqlspec/core/filters.py +952 -0
  285. sqlspec/core/hashing.cpython-310-aarch64-linux-gnu.so +0 -0
  286. sqlspec/core/hashing.py +262 -0
  287. sqlspec/core/metrics.cpython-310-aarch64-linux-gnu.so +0 -0
  288. sqlspec/core/metrics.py +83 -0
  289. sqlspec/core/parameters/__init__.py +71 -0
  290. sqlspec/core/parameters/_alignment.cpython-310-aarch64-linux-gnu.so +0 -0
  291. sqlspec/core/parameters/_alignment.py +270 -0
  292. sqlspec/core/parameters/_converter.cpython-310-aarch64-linux-gnu.so +0 -0
  293. sqlspec/core/parameters/_converter.py +543 -0
  294. sqlspec/core/parameters/_processor.cpython-310-aarch64-linux-gnu.so +0 -0
  295. sqlspec/core/parameters/_processor.py +505 -0
  296. sqlspec/core/parameters/_registry.cpython-310-aarch64-linux-gnu.so +0 -0
  297. sqlspec/core/parameters/_registry.py +206 -0
  298. sqlspec/core/parameters/_transformers.cpython-310-aarch64-linux-gnu.so +0 -0
  299. sqlspec/core/parameters/_transformers.py +292 -0
  300. sqlspec/core/parameters/_types.cpython-310-aarch64-linux-gnu.so +0 -0
  301. sqlspec/core/parameters/_types.py +499 -0
  302. sqlspec/core/parameters/_validator.cpython-310-aarch64-linux-gnu.so +0 -0
  303. sqlspec/core/parameters/_validator.py +180 -0
  304. sqlspec/core/pipeline.cpython-310-aarch64-linux-gnu.so +0 -0
  305. sqlspec/core/pipeline.py +319 -0
  306. sqlspec/core/query_modifiers.cpython-310-aarch64-linux-gnu.so +0 -0
  307. sqlspec/core/query_modifiers.py +437 -0
  308. sqlspec/core/result/__init__.py +23 -0
  309. sqlspec/core/result/_base.cpython-310-aarch64-linux-gnu.so +0 -0
  310. sqlspec/core/result/_base.py +1121 -0
  311. sqlspec/core/result/_io.cpython-310-aarch64-linux-gnu.so +0 -0
  312. sqlspec/core/result/_io.py +28 -0
  313. sqlspec/core/splitter.cpython-310-aarch64-linux-gnu.so +0 -0
  314. sqlspec/core/splitter.py +966 -0
  315. sqlspec/core/stack.cpython-310-aarch64-linux-gnu.so +0 -0
  316. sqlspec/core/stack.py +163 -0
  317. sqlspec/core/statement.cpython-310-aarch64-linux-gnu.so +0 -0
  318. sqlspec/core/statement.py +1503 -0
  319. sqlspec/core/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
  320. sqlspec/core/type_converter.py +339 -0
  321. sqlspec/data_dictionary/__init__.py +22 -0
  322. sqlspec/data_dictionary/_loader.py +123 -0
  323. sqlspec/data_dictionary/_registry.cpython-310-aarch64-linux-gnu.so +0 -0
  324. sqlspec/data_dictionary/_registry.py +74 -0
  325. sqlspec/data_dictionary/_types.cpython-310-aarch64-linux-gnu.so +0 -0
  326. sqlspec/data_dictionary/_types.py +121 -0
  327. sqlspec/data_dictionary/dialects/__init__.py +21 -0
  328. sqlspec/data_dictionary/dialects/bigquery.cpython-310-aarch64-linux-gnu.so +0 -0
  329. sqlspec/data_dictionary/dialects/bigquery.py +49 -0
  330. sqlspec/data_dictionary/dialects/cockroachdb.cpython-310-aarch64-linux-gnu.so +0 -0
  331. sqlspec/data_dictionary/dialects/cockroachdb.py +43 -0
  332. sqlspec/data_dictionary/dialects/duckdb.cpython-310-aarch64-linux-gnu.so +0 -0
  333. sqlspec/data_dictionary/dialects/duckdb.py +47 -0
  334. sqlspec/data_dictionary/dialects/mysql.cpython-310-aarch64-linux-gnu.so +0 -0
  335. sqlspec/data_dictionary/dialects/mysql.py +42 -0
  336. sqlspec/data_dictionary/dialects/oracle.cpython-310-aarch64-linux-gnu.so +0 -0
  337. sqlspec/data_dictionary/dialects/oracle.py +34 -0
  338. sqlspec/data_dictionary/dialects/postgres.cpython-310-aarch64-linux-gnu.so +0 -0
  339. sqlspec/data_dictionary/dialects/postgres.py +46 -0
  340. sqlspec/data_dictionary/dialects/spanner.cpython-310-aarch64-linux-gnu.so +0 -0
  341. sqlspec/data_dictionary/dialects/spanner.py +37 -0
  342. sqlspec/data_dictionary/dialects/sqlite.cpython-310-aarch64-linux-gnu.so +0 -0
  343. sqlspec/data_dictionary/dialects/sqlite.py +42 -0
  344. sqlspec/data_dictionary/sql/.gitkeep +0 -0
  345. sqlspec/data_dictionary/sql/bigquery/columns.sql +23 -0
  346. sqlspec/data_dictionary/sql/bigquery/foreign_keys.sql +34 -0
  347. sqlspec/data_dictionary/sql/bigquery/indexes.sql +19 -0
  348. sqlspec/data_dictionary/sql/bigquery/tables.sql +33 -0
  349. sqlspec/data_dictionary/sql/bigquery/version.sql +3 -0
  350. sqlspec/data_dictionary/sql/cockroachdb/columns.sql +34 -0
  351. sqlspec/data_dictionary/sql/cockroachdb/foreign_keys.sql +40 -0
  352. sqlspec/data_dictionary/sql/cockroachdb/indexes.sql +32 -0
  353. sqlspec/data_dictionary/sql/cockroachdb/tables.sql +44 -0
  354. sqlspec/data_dictionary/sql/cockroachdb/version.sql +3 -0
  355. sqlspec/data_dictionary/sql/duckdb/columns.sql +23 -0
  356. sqlspec/data_dictionary/sql/duckdb/foreign_keys.sql +36 -0
  357. sqlspec/data_dictionary/sql/duckdb/indexes.sql +19 -0
  358. sqlspec/data_dictionary/sql/duckdb/tables.sql +38 -0
  359. sqlspec/data_dictionary/sql/duckdb/version.sql +3 -0
  360. sqlspec/data_dictionary/sql/mysql/columns.sql +23 -0
  361. sqlspec/data_dictionary/sql/mysql/foreign_keys.sql +28 -0
  362. sqlspec/data_dictionary/sql/mysql/indexes.sql +26 -0
  363. sqlspec/data_dictionary/sql/mysql/tables.sql +33 -0
  364. sqlspec/data_dictionary/sql/mysql/version.sql +3 -0
  365. sqlspec/data_dictionary/sql/oracle/columns.sql +23 -0
  366. sqlspec/data_dictionary/sql/oracle/foreign_keys.sql +48 -0
  367. sqlspec/data_dictionary/sql/oracle/indexes.sql +44 -0
  368. sqlspec/data_dictionary/sql/oracle/tables.sql +25 -0
  369. sqlspec/data_dictionary/sql/oracle/version.sql +20 -0
  370. sqlspec/data_dictionary/sql/postgres/columns.sql +34 -0
  371. sqlspec/data_dictionary/sql/postgres/foreign_keys.sql +40 -0
  372. sqlspec/data_dictionary/sql/postgres/indexes.sql +56 -0
  373. sqlspec/data_dictionary/sql/postgres/tables.sql +44 -0
  374. sqlspec/data_dictionary/sql/postgres/version.sql +3 -0
  375. sqlspec/data_dictionary/sql/spanner/columns.sql +23 -0
  376. sqlspec/data_dictionary/sql/spanner/foreign_keys.sql +70 -0
  377. sqlspec/data_dictionary/sql/spanner/indexes.sql +30 -0
  378. sqlspec/data_dictionary/sql/spanner/tables.sql +9 -0
  379. sqlspec/data_dictionary/sql/spanner/version.sql +3 -0
  380. sqlspec/data_dictionary/sql/sqlite/columns.sql +23 -0
  381. sqlspec/data_dictionary/sql/sqlite/foreign_keys.sql +22 -0
  382. sqlspec/data_dictionary/sql/sqlite/indexes.sql +7 -0
  383. sqlspec/data_dictionary/sql/sqlite/tables.sql +28 -0
  384. sqlspec/data_dictionary/sql/sqlite/version.sql +3 -0
  385. sqlspec/driver/__init__.py +32 -0
  386. sqlspec/driver/_async.cpython-310-aarch64-linux-gnu.so +0 -0
  387. sqlspec/driver/_async.py +1737 -0
  388. sqlspec/driver/_common.cpython-310-aarch64-linux-gnu.so +0 -0
  389. sqlspec/driver/_common.py +1478 -0
  390. sqlspec/driver/_sql_helpers.cpython-310-aarch64-linux-gnu.so +0 -0
  391. sqlspec/driver/_sql_helpers.py +148 -0
  392. sqlspec/driver/_storage_helpers.cpython-310-aarch64-linux-gnu.so +0 -0
  393. sqlspec/driver/_storage_helpers.py +144 -0
  394. sqlspec/driver/_sync.cpython-310-aarch64-linux-gnu.so +0 -0
  395. sqlspec/driver/_sync.py +1710 -0
  396. sqlspec/exceptions.py +338 -0
  397. sqlspec/extensions/__init__.py +0 -0
  398. sqlspec/extensions/adk/__init__.py +70 -0
  399. sqlspec/extensions/adk/_types.py +51 -0
  400. sqlspec/extensions/adk/converters.py +172 -0
  401. sqlspec/extensions/adk/memory/__init__.py +69 -0
  402. sqlspec/extensions/adk/memory/_types.py +30 -0
  403. sqlspec/extensions/adk/memory/converters.py +149 -0
  404. sqlspec/extensions/adk/memory/service.py +217 -0
  405. sqlspec/extensions/adk/memory/store.py +569 -0
  406. sqlspec/extensions/adk/migrations/0001_create_adk_tables.py +246 -0
  407. sqlspec/extensions/adk/migrations/__init__.py +0 -0
  408. sqlspec/extensions/adk/service.py +225 -0
  409. sqlspec/extensions/adk/store.py +567 -0
  410. sqlspec/extensions/events/__init__.py +51 -0
  411. sqlspec/extensions/events/_channel.py +703 -0
  412. sqlspec/extensions/events/_hints.py +45 -0
  413. sqlspec/extensions/events/_models.py +23 -0
  414. sqlspec/extensions/events/_payload.py +69 -0
  415. sqlspec/extensions/events/_protocols.py +134 -0
  416. sqlspec/extensions/events/_queue.py +461 -0
  417. sqlspec/extensions/events/_store.py +209 -0
  418. sqlspec/extensions/events/migrations/0001_create_event_queue.py +59 -0
  419. sqlspec/extensions/events/migrations/__init__.py +3 -0
  420. sqlspec/extensions/fastapi/__init__.py +19 -0
  421. sqlspec/extensions/fastapi/extension.py +351 -0
  422. sqlspec/extensions/fastapi/providers.py +607 -0
  423. sqlspec/extensions/flask/__init__.py +37 -0
  424. sqlspec/extensions/flask/_state.py +76 -0
  425. sqlspec/extensions/flask/_utils.py +71 -0
  426. sqlspec/extensions/flask/extension.py +519 -0
  427. sqlspec/extensions/litestar/__init__.py +28 -0
  428. sqlspec/extensions/litestar/_utils.py +52 -0
  429. sqlspec/extensions/litestar/channels.py +165 -0
  430. sqlspec/extensions/litestar/cli.py +102 -0
  431. sqlspec/extensions/litestar/config.py +90 -0
  432. sqlspec/extensions/litestar/handlers.py +316 -0
  433. sqlspec/extensions/litestar/migrations/0001_create_session_table.py +137 -0
  434. sqlspec/extensions/litestar/migrations/__init__.py +3 -0
  435. sqlspec/extensions/litestar/plugin.py +671 -0
  436. sqlspec/extensions/litestar/providers.py +526 -0
  437. sqlspec/extensions/litestar/store.py +296 -0
  438. sqlspec/extensions/otel/__init__.py +58 -0
  439. sqlspec/extensions/prometheus/__init__.py +113 -0
  440. sqlspec/extensions/starlette/__init__.py +19 -0
  441. sqlspec/extensions/starlette/_state.py +30 -0
  442. sqlspec/extensions/starlette/_utils.py +96 -0
  443. sqlspec/extensions/starlette/extension.py +346 -0
  444. sqlspec/extensions/starlette/middleware.py +235 -0
  445. sqlspec/loader.cpython-310-aarch64-linux-gnu.so +0 -0
  446. sqlspec/loader.py +702 -0
  447. sqlspec/migrations/__init__.py +36 -0
  448. sqlspec/migrations/base.py +731 -0
  449. sqlspec/migrations/commands.py +1232 -0
  450. sqlspec/migrations/context.py +157 -0
  451. sqlspec/migrations/fix.py +204 -0
  452. sqlspec/migrations/loaders.py +443 -0
  453. sqlspec/migrations/runner.py +1172 -0
  454. sqlspec/migrations/templates.py +234 -0
  455. sqlspec/migrations/tracker.py +611 -0
  456. sqlspec/migrations/utils.py +256 -0
  457. sqlspec/migrations/validation.py +207 -0
  458. sqlspec/migrations/version.py +446 -0
  459. sqlspec/observability/__init__.py +55 -0
  460. sqlspec/observability/_common.cpython-310-aarch64-linux-gnu.so +0 -0
  461. sqlspec/observability/_common.py +77 -0
  462. sqlspec/observability/_config.cpython-310-aarch64-linux-gnu.so +0 -0
  463. sqlspec/observability/_config.py +348 -0
  464. sqlspec/observability/_diagnostics.cpython-310-aarch64-linux-gnu.so +0 -0
  465. sqlspec/observability/_diagnostics.py +74 -0
  466. sqlspec/observability/_dispatcher.cpython-310-aarch64-linux-gnu.so +0 -0
  467. sqlspec/observability/_dispatcher.py +152 -0
  468. sqlspec/observability/_formatters/__init__.py +13 -0
  469. sqlspec/observability/_formatters/_aws.cpython-310-aarch64-linux-gnu.so +0 -0
  470. sqlspec/observability/_formatters/_aws.py +102 -0
  471. sqlspec/observability/_formatters/_azure.cpython-310-aarch64-linux-gnu.so +0 -0
  472. sqlspec/observability/_formatters/_azure.py +96 -0
  473. sqlspec/observability/_formatters/_base.cpython-310-aarch64-linux-gnu.so +0 -0
  474. sqlspec/observability/_formatters/_base.py +57 -0
  475. sqlspec/observability/_formatters/_gcp.cpython-310-aarch64-linux-gnu.so +0 -0
  476. sqlspec/observability/_formatters/_gcp.py +131 -0
  477. sqlspec/observability/_formatting.py +58 -0
  478. sqlspec/observability/_observer.cpython-310-aarch64-linux-gnu.so +0 -0
  479. sqlspec/observability/_observer.py +357 -0
  480. sqlspec/observability/_runtime.cpython-310-aarch64-linux-gnu.so +0 -0
  481. sqlspec/observability/_runtime.py +420 -0
  482. sqlspec/observability/_sampling.cpython-310-aarch64-linux-gnu.so +0 -0
  483. sqlspec/observability/_sampling.py +188 -0
  484. sqlspec/observability/_spans.cpython-310-aarch64-linux-gnu.so +0 -0
  485. sqlspec/observability/_spans.py +161 -0
  486. sqlspec/protocols.py +916 -0
  487. sqlspec/py.typed +0 -0
  488. sqlspec/storage/__init__.py +48 -0
  489. sqlspec/storage/_utils.py +104 -0
  490. sqlspec/storage/backends/__init__.py +1 -0
  491. sqlspec/storage/backends/base.py +253 -0
  492. sqlspec/storage/backends/fsspec.py +529 -0
  493. sqlspec/storage/backends/local.py +441 -0
  494. sqlspec/storage/backends/obstore.py +916 -0
  495. sqlspec/storage/errors.py +104 -0
  496. sqlspec/storage/pipeline.py +582 -0
  497. sqlspec/storage/registry.py +301 -0
  498. sqlspec/typing.py +395 -0
  499. sqlspec/utils/__init__.py +7 -0
  500. sqlspec/utils/arrow_helpers.py +318 -0
  501. sqlspec/utils/config_tools.py +332 -0
  502. sqlspec/utils/correlation.cpython-310-aarch64-linux-gnu.so +0 -0
  503. sqlspec/utils/correlation.py +134 -0
  504. sqlspec/utils/deprecation.py +190 -0
  505. sqlspec/utils/fixtures.cpython-310-aarch64-linux-gnu.so +0 -0
  506. sqlspec/utils/fixtures.py +258 -0
  507. sqlspec/utils/logging.py +222 -0
  508. sqlspec/utils/module_loader.py +306 -0
  509. sqlspec/utils/portal.cpython-310-aarch64-linux-gnu.so +0 -0
  510. sqlspec/utils/portal.py +375 -0
  511. sqlspec/utils/schema.cpython-310-aarch64-linux-gnu.so +0 -0
  512. sqlspec/utils/schema.py +485 -0
  513. sqlspec/utils/serializers.cpython-310-aarch64-linux-gnu.so +0 -0
  514. sqlspec/utils/serializers.py +408 -0
  515. sqlspec/utils/singleton.cpython-310-aarch64-linux-gnu.so +0 -0
  516. sqlspec/utils/singleton.py +41 -0
  517. sqlspec/utils/sync_tools.cpython-310-aarch64-linux-gnu.so +0 -0
  518. sqlspec/utils/sync_tools.py +311 -0
  519. sqlspec/utils/text.cpython-310-aarch64-linux-gnu.so +0 -0
  520. sqlspec/utils/text.py +108 -0
  521. sqlspec/utils/type_converters.cpython-310-aarch64-linux-gnu.so +0 -0
  522. sqlspec/utils/type_converters.py +128 -0
  523. sqlspec/utils/type_guards.cpython-310-aarch64-linux-gnu.so +0 -0
  524. sqlspec/utils/type_guards.py +1360 -0
  525. sqlspec/utils/uuids.cpython-310-aarch64-linux-gnu.so +0 -0
  526. sqlspec/utils/uuids.py +225 -0
  527. sqlspec-0.36.0.dist-info/METADATA +205 -0
  528. sqlspec-0.36.0.dist-info/RECORD +531 -0
  529. sqlspec-0.36.0.dist-info/WHEEL +7 -0
  530. sqlspec-0.36.0.dist-info/entry_points.txt +2 -0
  531. sqlspec-0.36.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,483 @@
1
+ """MysqlConnector MySQL driver implementation.
2
+
3
+ Provides MySQL/MariaDB connectivity with parameter style conversion,
4
+ type coercion, error handling, and transaction management.
5
+ """
6
+
7
+ from typing import TYPE_CHECKING, Any, Final, cast
8
+
9
+ import mysql.connector
10
+ from mysql.connector.constants import FieldType
11
+
12
+ from sqlspec.adapters.mysqlconnector.core import (
13
+ build_insert_statement,
14
+ collect_rows,
15
+ create_mapped_exception,
16
+ default_statement_config,
17
+ detect_json_columns,
18
+ driver_profile,
19
+ format_identifier,
20
+ normalize_execute_many_parameters,
21
+ normalize_execute_parameters,
22
+ normalize_lastrowid,
23
+ resolve_rowcount,
24
+ )
25
+ from sqlspec.adapters.mysqlconnector.data_dictionary import (
26
+ MysqlConnectorAsyncDataDictionary,
27
+ MysqlConnectorSyncDataDictionary,
28
+ )
29
+ from sqlspec.core import ArrowResult, get_cache_config, register_driver_profile
30
+ from sqlspec.driver import AsyncDriverAdapterBase, SyncDriverAdapterBase
31
+ from sqlspec.exceptions import SQLSpecError
32
+ from sqlspec.utils.logging import get_logger
33
+ from sqlspec.utils.serializers import from_json
34
+ from sqlspec.utils.type_guards import supports_json_type
35
+
36
+ if TYPE_CHECKING:
37
+ from collections.abc import Callable
38
+
39
+ from sqlspec.adapters.mysqlconnector._typing import MysqlConnectorAsyncConnection, MysqlConnectorSyncConnection
40
+ from sqlspec.core import SQL, StatementConfig
41
+ from sqlspec.driver import ExecutionResult
42
+ from sqlspec.storage import StorageBridgeJob, StorageDestination, StorageFormat, StorageTelemetry
43
+
44
+ from sqlspec.adapters.mysqlconnector._typing import MysqlConnectorAsyncSessionContext, MysqlConnectorSyncSessionContext
45
+
46
+ __all__ = (
47
+ "MysqlConnectorAsyncCursor",
48
+ "MysqlConnectorAsyncDriver",
49
+ "MysqlConnectorAsyncExceptionHandler",
50
+ "MysqlConnectorAsyncSessionContext",
51
+ "MysqlConnectorSyncCursor",
52
+ "MysqlConnectorSyncDriver",
53
+ "MysqlConnectorSyncExceptionHandler",
54
+ "MysqlConnectorSyncSessionContext",
55
+ )
56
+
57
+ logger = get_logger("sqlspec.adapters.mysqlconnector")
58
+
59
+ json_type_value = FieldType.JSON if supports_json_type(FieldType) else None
60
+ MYSQLCONNECTOR_JSON_TYPE_CODES: Final[set[int]] = {json_type_value} if json_type_value is not None else set()
61
+
62
+
63
+ class MysqlConnectorSyncCursor:
64
+ """Context manager for mysql-connector sync cursor operations."""
65
+
66
+ __slots__ = ("connection", "cursor")
67
+
68
+ def __init__(self, connection: "MysqlConnectorSyncConnection") -> None:
69
+ self.connection = connection
70
+ self.cursor: Any | None = None
71
+
72
+ def __enter__(self) -> Any:
73
+ self.cursor = self.connection.cursor(dictionary=True)
74
+ return self.cursor
75
+
76
+ def __exit__(self, *_: Any) -> None:
77
+ if self.cursor is not None:
78
+ self.cursor.close()
79
+
80
+
81
+ class MysqlConnectorSyncExceptionHandler:
82
+ """Context manager for handling mysql-connector sync exceptions."""
83
+
84
+ __slots__ = ("pending_exception",)
85
+
86
+ def __init__(self) -> None:
87
+ self.pending_exception: Exception | None = None
88
+
89
+ def __enter__(self) -> "MysqlConnectorSyncExceptionHandler":
90
+ return self
91
+
92
+ def __exit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> bool:
93
+ if exc_type is None:
94
+ return False
95
+ if issubclass(exc_type, mysql.connector.Error):
96
+ result = create_mapped_exception(exc_val, logger=logger)
97
+ if result is True:
98
+ return True
99
+ self.pending_exception = cast("Exception", result)
100
+ return True
101
+ return False
102
+
103
+
104
+ class MysqlConnectorSyncDriver(SyncDriverAdapterBase):
105
+ """MySQL/MariaDB database driver using mysql-connector sync library."""
106
+
107
+ __slots__ = ("_data_dictionary",)
108
+ dialect = "mysql"
109
+
110
+ def __init__(
111
+ self,
112
+ connection: "MysqlConnectorSyncConnection",
113
+ statement_config: "StatementConfig | None" = None,
114
+ driver_features: "dict[str, Any] | None" = None,
115
+ ) -> None:
116
+ if statement_config is None:
117
+ statement_config = default_statement_config.replace(
118
+ enable_caching=get_cache_config().compiled_cache_enabled
119
+ )
120
+
121
+ super().__init__(connection=connection, statement_config=statement_config, driver_features=driver_features)
122
+ self._data_dictionary: MysqlConnectorSyncDataDictionary | None = None
123
+
124
+ def dispatch_execute(self, cursor: Any, statement: "SQL") -> "ExecutionResult":
125
+ sql, prepared_parameters = self._get_compiled_sql(statement, self.statement_config)
126
+ cursor.execute(sql, normalize_execute_parameters(prepared_parameters))
127
+
128
+ if statement.returns_rows():
129
+ fetched_data = cursor.fetchall()
130
+ fetched_rows = list(fetched_data) if fetched_data else None
131
+ description = list(cursor.description) if cursor.description else None
132
+ json_indexes = detect_json_columns(cursor, MYSQLCONNECTOR_JSON_TYPE_CODES)
133
+ deserializer = cast("Callable[[Any], Any]", self.driver_features.get("json_deserializer", from_json))
134
+ rows, column_names = collect_rows(fetched_rows, description, json_indexes, deserializer, logger=logger)
135
+
136
+ return self.create_execution_result(
137
+ cursor, selected_data=rows, column_names=column_names, data_row_count=len(rows), is_select_result=True
138
+ )
139
+
140
+ affected_rows = resolve_rowcount(cursor)
141
+ last_id = normalize_lastrowid(cursor)
142
+ return self.create_execution_result(cursor, rowcount_override=affected_rows, last_inserted_id=last_id)
143
+
144
+ def dispatch_execute_many(self, cursor: Any, statement: "SQL") -> "ExecutionResult":
145
+ sql, prepared_parameters = self._get_compiled_sql(statement, self.statement_config)
146
+
147
+ prepared_parameters = normalize_execute_many_parameters(prepared_parameters)
148
+ cursor.executemany(sql, prepared_parameters)
149
+
150
+ affected_rows = len(prepared_parameters)
151
+ return self.create_execution_result(cursor, rowcount_override=affected_rows, is_many_result=True)
152
+
153
+ def dispatch_execute_script(self, cursor: Any, statement: "SQL") -> "ExecutionResult":
154
+ sql, prepared_parameters = self._get_compiled_sql(statement, self.statement_config)
155
+ statements = self.split_script_statements(sql, statement.statement_config, strip_trailing_semicolon=True)
156
+
157
+ successful_count = 0
158
+ last_cursor = cursor
159
+
160
+ for stmt in statements:
161
+ cursor.execute(stmt, normalize_execute_parameters(prepared_parameters))
162
+ successful_count += 1
163
+
164
+ return self.create_execution_result(
165
+ last_cursor, statement_count=len(statements), successful_statements=successful_count, is_script_result=True
166
+ )
167
+
168
+ def begin(self) -> None:
169
+ try:
170
+ with MysqlConnectorSyncCursor(self.connection) as cursor:
171
+ cursor.execute("BEGIN")
172
+ except mysql.connector.Error as e:
173
+ msg = f"Failed to begin MySQL transaction: {e}"
174
+ raise SQLSpecError(msg) from e
175
+
176
+ def commit(self) -> None:
177
+ try:
178
+ self.connection.commit()
179
+ except mysql.connector.Error as e:
180
+ msg = f"Failed to commit MySQL transaction: {e}"
181
+ raise SQLSpecError(msg) from e
182
+
183
+ def rollback(self) -> None:
184
+ try:
185
+ self.connection.rollback()
186
+ except mysql.connector.Error as e:
187
+ msg = f"Failed to rollback MySQL transaction: {e}"
188
+ raise SQLSpecError(msg) from e
189
+
190
+ def with_cursor(self, connection: "MysqlConnectorSyncConnection") -> "MysqlConnectorSyncCursor":
191
+ return MysqlConnectorSyncCursor(connection)
192
+
193
+ def handle_database_exceptions(self) -> "MysqlConnectorSyncExceptionHandler":
194
+ return MysqlConnectorSyncExceptionHandler()
195
+
196
+ def select_to_storage(
197
+ self,
198
+ statement: "SQL | str",
199
+ destination: "StorageDestination",
200
+ /,
201
+ *parameters: Any,
202
+ statement_config: "StatementConfig | None" = None,
203
+ partitioner: "dict[str, object] | None" = None,
204
+ format_hint: "StorageFormat | None" = None,
205
+ telemetry: "StorageTelemetry | None" = None,
206
+ **kwargs: Any,
207
+ ) -> "StorageBridgeJob":
208
+ self._require_capability("arrow_export_enabled")
209
+ arrow_result = self.select_to_arrow(statement, *parameters, statement_config=statement_config, **kwargs)
210
+ pipeline = self._storage_pipeline()
211
+ telemetry_payload = self._write_result_to_storage_sync(
212
+ arrow_result, destination, format_hint=format_hint, pipeline=pipeline
213
+ )
214
+ self._attach_partition_telemetry(telemetry_payload, partitioner)
215
+ return self._create_storage_job(telemetry_payload, telemetry)
216
+
217
+ def load_from_arrow(
218
+ self,
219
+ table: str,
220
+ source: "ArrowResult | Any",
221
+ *,
222
+ partitioner: "dict[str, object] | None" = None,
223
+ overwrite: bool = False,
224
+ telemetry: "StorageTelemetry | None" = None,
225
+ ) -> "StorageBridgeJob":
226
+ self._require_capability("arrow_import_enabled")
227
+ arrow_table = self._coerce_arrow_table(source)
228
+ if overwrite:
229
+ statement = f"TRUNCATE TABLE {format_identifier(table)}"
230
+ with self.handle_database_exceptions(), self.with_cursor(self.connection) as cursor:
231
+ cursor.execute(statement)
232
+
233
+ columns, records = self._arrow_table_to_rows(arrow_table)
234
+ if records:
235
+ insert_sql = build_insert_statement(table, columns)
236
+ with self.handle_database_exceptions(), self.with_cursor(self.connection) as cursor:
237
+ cursor.executemany(insert_sql, records)
238
+
239
+ telemetry_payload = self._build_ingest_telemetry(arrow_table)
240
+ telemetry_payload["destination"] = table
241
+ self._attach_partition_telemetry(telemetry_payload, partitioner)
242
+ return self._create_storage_job(telemetry_payload, telemetry)
243
+
244
+ def load_from_storage(
245
+ self,
246
+ table: str,
247
+ source: "StorageDestination",
248
+ *,
249
+ file_format: "StorageFormat",
250
+ partitioner: "dict[str, object] | None" = None,
251
+ overwrite: bool = False,
252
+ ) -> "StorageBridgeJob":
253
+ arrow_table, inbound = self._read_arrow_from_storage_sync(source, file_format=file_format)
254
+ return self.load_from_arrow(table, arrow_table, partitioner=partitioner, overwrite=overwrite, telemetry=inbound)
255
+
256
+ @property
257
+ def data_dictionary(self) -> "MysqlConnectorSyncDataDictionary":
258
+ if self._data_dictionary is None:
259
+ self._data_dictionary = MysqlConnectorSyncDataDictionary()
260
+ return self._data_dictionary
261
+
262
+ def _connection_in_transaction(self) -> bool:
263
+ autocommit = getattr(self.connection, "autocommit", None)
264
+ if autocommit is not None:
265
+ try:
266
+ return not bool(autocommit)
267
+ except Exception:
268
+ return False
269
+ return False
270
+
271
+
272
+ class MysqlConnectorAsyncCursor:
273
+ """Async context manager for mysql-connector async cursor operations."""
274
+
275
+ __slots__ = ("connection", "cursor")
276
+
277
+ def __init__(self, connection: "MysqlConnectorAsyncConnection") -> None:
278
+ self.connection = connection
279
+ self.cursor: Any | None = None
280
+
281
+ async def __aenter__(self) -> Any:
282
+ self.cursor = await self.connection.cursor(dictionary=True)
283
+ return self.cursor
284
+
285
+ async def __aexit__(self, *_: Any) -> None:
286
+ if self.cursor is not None:
287
+ await self.cursor.close()
288
+
289
+
290
+ class MysqlConnectorAsyncExceptionHandler:
291
+ """Async context manager for handling mysql-connector exceptions."""
292
+
293
+ __slots__ = ("pending_exception",)
294
+
295
+ def __init__(self) -> None:
296
+ self.pending_exception: Exception | None = None
297
+
298
+ async def __aenter__(self) -> "MysqlConnectorAsyncExceptionHandler":
299
+ return self
300
+
301
+ async def __aexit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> bool:
302
+ if exc_type is None:
303
+ return False
304
+ if issubclass(exc_type, mysql.connector.Error):
305
+ result = create_mapped_exception(exc_val, logger=logger)
306
+ if result is True:
307
+ return True
308
+ self.pending_exception = cast("Exception", result)
309
+ return True
310
+ return False
311
+
312
+
313
+ class MysqlConnectorAsyncDriver(AsyncDriverAdapterBase):
314
+ """MySQL/MariaDB database driver using mysql-connector async library."""
315
+
316
+ __slots__ = ("_data_dictionary",)
317
+ dialect = "mysql"
318
+
319
+ def __init__(
320
+ self,
321
+ connection: "MysqlConnectorAsyncConnection",
322
+ statement_config: "StatementConfig | None" = None,
323
+ driver_features: "dict[str, Any] | None" = None,
324
+ ) -> None:
325
+ if statement_config is None:
326
+ statement_config = default_statement_config.replace(
327
+ enable_caching=get_cache_config().compiled_cache_enabled
328
+ )
329
+
330
+ super().__init__(connection=connection, statement_config=statement_config, driver_features=driver_features)
331
+ self._data_dictionary: MysqlConnectorAsyncDataDictionary | None = None
332
+
333
+ async def dispatch_execute(self, cursor: Any, statement: "SQL") -> "ExecutionResult":
334
+ sql, prepared_parameters = self._get_compiled_sql(statement, self.statement_config)
335
+ await cursor.execute(sql, normalize_execute_parameters(prepared_parameters))
336
+
337
+ if statement.returns_rows():
338
+ fetched_data = await cursor.fetchall()
339
+ fetched_rows = list(fetched_data) if fetched_data else None
340
+ description = list(cursor.description) if cursor.description else None
341
+ json_indexes = detect_json_columns(cursor, MYSQLCONNECTOR_JSON_TYPE_CODES)
342
+ deserializer = cast("Callable[[Any], Any]", self.driver_features.get("json_deserializer", from_json))
343
+ rows, column_names = collect_rows(fetched_rows, description, json_indexes, deserializer, logger=logger)
344
+
345
+ return self.create_execution_result(
346
+ cursor, selected_data=rows, column_names=column_names, data_row_count=len(rows), is_select_result=True
347
+ )
348
+
349
+ affected_rows = resolve_rowcount(cursor)
350
+ last_id = normalize_lastrowid(cursor)
351
+ return self.create_execution_result(cursor, rowcount_override=affected_rows, last_inserted_id=last_id)
352
+
353
+ async def dispatch_execute_many(self, cursor: Any, statement: "SQL") -> "ExecutionResult":
354
+ sql, prepared_parameters = self._get_compiled_sql(statement, self.statement_config)
355
+
356
+ prepared_parameters = normalize_execute_many_parameters(prepared_parameters)
357
+ await cursor.executemany(sql, prepared_parameters)
358
+
359
+ affected_rows = len(prepared_parameters)
360
+ return self.create_execution_result(cursor, rowcount_override=affected_rows, is_many_result=True)
361
+
362
+ async def dispatch_execute_script(self, cursor: Any, statement: "SQL") -> "ExecutionResult":
363
+ sql, prepared_parameters = self._get_compiled_sql(statement, self.statement_config)
364
+ statements = self.split_script_statements(sql, statement.statement_config, strip_trailing_semicolon=True)
365
+
366
+ successful_count = 0
367
+ last_cursor = cursor
368
+
369
+ for stmt in statements:
370
+ await cursor.execute(stmt, normalize_execute_parameters(prepared_parameters))
371
+ successful_count += 1
372
+
373
+ return self.create_execution_result(
374
+ last_cursor, statement_count=len(statements), successful_statements=successful_count, is_script_result=True
375
+ )
376
+
377
+ async def begin(self) -> None:
378
+ try:
379
+ async with MysqlConnectorAsyncCursor(self.connection) as cursor:
380
+ await cursor.execute("BEGIN")
381
+ except mysql.connector.Error as e:
382
+ msg = f"Failed to begin MySQL transaction: {e}"
383
+ raise SQLSpecError(msg) from e
384
+
385
+ async def commit(self) -> None:
386
+ try:
387
+ await self.connection.commit()
388
+ except mysql.connector.Error as e:
389
+ msg = f"Failed to commit MySQL transaction: {e}"
390
+ raise SQLSpecError(msg) from e
391
+
392
+ async def rollback(self) -> None:
393
+ try:
394
+ await self.connection.rollback()
395
+ except mysql.connector.Error as e:
396
+ msg = f"Failed to rollback MySQL transaction: {e}"
397
+ raise SQLSpecError(msg) from e
398
+
399
+ def with_cursor(self, connection: "MysqlConnectorAsyncConnection") -> "MysqlConnectorAsyncCursor":
400
+ return MysqlConnectorAsyncCursor(connection)
401
+
402
+ def handle_database_exceptions(self) -> "MysqlConnectorAsyncExceptionHandler":
403
+ return MysqlConnectorAsyncExceptionHandler()
404
+
405
+ async def select_to_storage(
406
+ self,
407
+ statement: "SQL | str",
408
+ destination: "StorageDestination",
409
+ /,
410
+ *parameters: Any,
411
+ statement_config: "StatementConfig | None" = None,
412
+ partitioner: "dict[str, object] | None" = None,
413
+ format_hint: "StorageFormat | None" = None,
414
+ telemetry: "StorageTelemetry | None" = None,
415
+ **kwargs: Any,
416
+ ) -> "StorageBridgeJob":
417
+ self._require_capability("arrow_export_enabled")
418
+ arrow_result = await self.select_to_arrow(statement, *parameters, statement_config=statement_config, **kwargs)
419
+ async_pipeline = self._storage_pipeline()
420
+ telemetry_payload = await self._write_result_to_storage_async(
421
+ arrow_result, destination, format_hint=format_hint, pipeline=async_pipeline
422
+ )
423
+ self._attach_partition_telemetry(telemetry_payload, partitioner)
424
+ return self._create_storage_job(telemetry_payload, telemetry)
425
+
426
+ async def load_from_arrow(
427
+ self,
428
+ table: str,
429
+ source: "ArrowResult | Any",
430
+ *,
431
+ partitioner: "dict[str, object] | None" = None,
432
+ overwrite: bool = False,
433
+ telemetry: "StorageTelemetry | None" = None,
434
+ ) -> "StorageBridgeJob":
435
+ self._require_capability("arrow_import_enabled")
436
+ arrow_table = self._coerce_arrow_table(source)
437
+ if overwrite:
438
+ statement = f"TRUNCATE TABLE {format_identifier(table)}"
439
+ async with self.handle_database_exceptions(), self.with_cursor(self.connection) as cursor:
440
+ await cursor.execute(statement)
441
+
442
+ columns, records = self._arrow_table_to_rows(arrow_table)
443
+ if records:
444
+ insert_sql = build_insert_statement(table, columns)
445
+ async with self.handle_database_exceptions(), self.with_cursor(self.connection) as cursor:
446
+ await cursor.executemany(insert_sql, records)
447
+
448
+ telemetry_payload = self._build_ingest_telemetry(arrow_table)
449
+ telemetry_payload["destination"] = table
450
+ self._attach_partition_telemetry(telemetry_payload, partitioner)
451
+ return self._create_storage_job(telemetry_payload, telemetry)
452
+
453
+ async def load_from_storage(
454
+ self,
455
+ table: str,
456
+ source: "StorageDestination",
457
+ *,
458
+ file_format: "StorageFormat",
459
+ partitioner: "dict[str, object] | None" = None,
460
+ overwrite: bool = False,
461
+ ) -> "StorageBridgeJob":
462
+ arrow_table, inbound = await self._read_arrow_from_storage_async(source, file_format=file_format)
463
+ return await self.load_from_arrow(
464
+ table, arrow_table, partitioner=partitioner, overwrite=overwrite, telemetry=inbound
465
+ )
466
+
467
+ @property
468
+ def data_dictionary(self) -> "MysqlConnectorAsyncDataDictionary":
469
+ if self._data_dictionary is None:
470
+ self._data_dictionary = MysqlConnectorAsyncDataDictionary()
471
+ return self._data_dictionary
472
+
473
+ def _connection_in_transaction(self) -> bool:
474
+ in_tx = getattr(self.connection, "in_transaction", None)
475
+ if in_tx is not None:
476
+ try:
477
+ return bool(in_tx)
478
+ except Exception:
479
+ return False
480
+ return False
481
+
482
+
483
+ register_driver_profile("mysql-connector", driver_profile)
@@ -0,0 +1,8 @@
1
+ """Events helpers for the MysqlConnector adapter."""
2
+
3
+ from sqlspec.adapters.mysqlconnector.events.store import (
4
+ MysqlConnectorAsyncEventQueueStore,
5
+ MysqlConnectorSyncEventQueueStore,
6
+ )
7
+
8
+ __all__ = ("MysqlConnectorAsyncEventQueueStore", "MysqlConnectorSyncEventQueueStore")
@@ -0,0 +1,98 @@
1
+ """MysqlConnector event queue store with MySQL-specific DDL."""
2
+
3
+ from typing import Any, Final
4
+
5
+ from sqlspec.adapters.mysqlconnector.config import MysqlConnectorAsyncConfig, MysqlConnectorSyncConfig
6
+ from sqlspec.extensions.events import BaseEventQueueStore
7
+
8
+ __all__ = ("MysqlConnectorAsyncEventQueueStore", "MysqlConnectorSyncEventQueueStore")
9
+
10
+ SCHEMA_QUALIFIED_SEGMENTS: Final[int] = 2
11
+
12
+
13
+ def _mysql_column_types() -> "tuple[str, str, str]":
14
+ """Return MySQL-specific column types for the event queue."""
15
+ return "JSON", "JSON", "DATETIME(6)"
16
+
17
+
18
+ def _mysql_timestamp_default() -> str:
19
+ """Return MySQL-specific timestamp default."""
20
+ return "CURRENT_TIMESTAMP(6)"
21
+
22
+
23
+ def _mysql_build_index_sql(store: Any) -> str | None:
24
+ """Build MySQL-specific index SQL that checks for existing indexes.
25
+
26
+ MySQL doesn't support CREATE INDEX IF NOT EXISTS, so we use a workaround
27
+ with information_schema to check if the index already exists.
28
+
29
+ Args:
30
+ store: Event queue store instance with table_name and _index_name().
31
+
32
+ Returns:
33
+ MySQL-specific index creation SQL using prepared statements.
34
+ """
35
+ table_name: str = store.table_name
36
+ segments = table_name.split(".", 1)
37
+
38
+ if len(segments) == SCHEMA_QUALIFIED_SEGMENTS:
39
+ schema = segments[0]
40
+ table = segments[1]
41
+ schema_selector = f"'{schema}'"
42
+ else:
43
+ table = segments[0]
44
+ schema_selector = "DATABASE()"
45
+
46
+ index_name: str = store._index_name()
47
+
48
+ return (
49
+ "SET @sqlspec_events_idx_exists := ("
50
+ "SELECT COUNT(1) FROM information_schema.statistics "
51
+ f"WHERE table_schema = {schema_selector} "
52
+ f"AND table_name = '{table}' "
53
+ f"AND index_name = '{index_name}');"
54
+ "SET @sqlspec_events_idx_stmt := IF(@sqlspec_events_idx_exists = 0, "
55
+ f"'ALTER TABLE {table_name} ADD INDEX {index_name} (channel, status, available_at)', "
56
+ "'SELECT 1');"
57
+ "PREPARE sqlspec_events_stmt FROM @sqlspec_events_idx_stmt;"
58
+ "EXECUTE sqlspec_events_stmt;"
59
+ "DEALLOCATE PREPARE sqlspec_events_stmt;"
60
+ )
61
+
62
+
63
+ class MysqlConnectorSyncEventQueueStore(BaseEventQueueStore[MysqlConnectorSyncConfig]):
64
+ """Queue DDL for mysql-connector synchronous configs.
65
+
66
+ MySQL uses JSON for efficient JSON storage and DATETIME(6) for
67
+ microsecond precision timestamps.
68
+ """
69
+
70
+ __slots__ = ()
71
+
72
+ def _column_types(self) -> "tuple[str, str, str]":
73
+ return _mysql_column_types()
74
+
75
+ def _timestamp_default(self) -> str:
76
+ return _mysql_timestamp_default()
77
+
78
+ def _build_index_sql(self) -> str | None:
79
+ return _mysql_build_index_sql(self)
80
+
81
+
82
+ class MysqlConnectorAsyncEventQueueStore(BaseEventQueueStore[MysqlConnectorAsyncConfig]):
83
+ """Queue DDL for mysql-connector async configs.
84
+
85
+ MySQL uses JSON for efficient JSON storage and DATETIME(6) for
86
+ microsecond precision timestamps.
87
+ """
88
+
89
+ __slots__ = ()
90
+
91
+ def _column_types(self) -> "tuple[str, str, str]":
92
+ return _mysql_column_types()
93
+
94
+ def _timestamp_default(self) -> str:
95
+ return _mysql_timestamp_default()
96
+
97
+ def _build_index_sql(self) -> str | None:
98
+ return _mysql_build_index_sql(self)
@@ -0,0 +1,5 @@
1
+ """Litestar helpers for the MysqlConnector adapter."""
2
+
3
+ from sqlspec.adapters.mysqlconnector.litestar.store import MysqlConnectorAsyncStore, MysqlConnectorSyncStore
4
+
5
+ __all__ = ("MysqlConnectorAsyncStore", "MysqlConnectorSyncStore")