sqlspec 0.47.0__cp314-cp314-win_amd64.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 (621) hide show
  1. f68e0789eb443ecb1c2c__mypyc.cp314-win_amd64.pyd +0 -0
  2. sqlspec/__init__.py +167 -0
  3. sqlspec/__main__.py +12 -0
  4. sqlspec/__metadata__.py +14 -0
  5. sqlspec/_typing.py +714 -0
  6. sqlspec/adapters/__init__.py +0 -0
  7. sqlspec/adapters/adbc/__init__.py +13 -0
  8. sqlspec/adapters/adbc/_typing.py +106 -0
  9. sqlspec/adapters/adbc/adk/__init__.py +5 -0
  10. sqlspec/adapters/adbc/adk/store.py +1280 -0
  11. sqlspec/adapters/adbc/config.py +378 -0
  12. sqlspec/adapters/adbc/core.cp314-win_amd64.pyd +0 -0
  13. sqlspec/adapters/adbc/core.py +922 -0
  14. sqlspec/adapters/adbc/data_dictionary.py +339 -0
  15. sqlspec/adapters/adbc/driver.py +534 -0
  16. sqlspec/adapters/adbc/events/__init__.py +5 -0
  17. sqlspec/adapters/adbc/events/store.py +285 -0
  18. sqlspec/adapters/adbc/litestar/__init__.py +5 -0
  19. sqlspec/adapters/adbc/litestar/store.py +534 -0
  20. sqlspec/adapters/adbc/type_converter.cp314-win_amd64.pyd +0 -0
  21. sqlspec/adapters/adbc/type_converter.py +142 -0
  22. sqlspec/adapters/aiomysql/__init__.py +21 -0
  23. sqlspec/adapters/aiomysql/_typing.py +137 -0
  24. sqlspec/adapters/aiomysql/adk/__init__.py +5 -0
  25. sqlspec/adapters/aiomysql/adk/store.py +678 -0
  26. sqlspec/adapters/aiomysql/config.py +305 -0
  27. sqlspec/adapters/aiomysql/core.cp314-win_amd64.pyd +0 -0
  28. sqlspec/adapters/aiomysql/core.py +536 -0
  29. sqlspec/adapters/aiomysql/data_dictionary.py +121 -0
  30. sqlspec/adapters/aiomysql/driver.py +386 -0
  31. sqlspec/adapters/aiomysql/events/__init__.py +5 -0
  32. sqlspec/adapters/aiomysql/events/store.py +104 -0
  33. sqlspec/adapters/aiomysql/litestar/__init__.py +5 -0
  34. sqlspec/adapters/aiomysql/litestar/store.py +314 -0
  35. sqlspec/adapters/aiosqlite/__init__.py +26 -0
  36. sqlspec/adapters/aiosqlite/_typing.py +109 -0
  37. sqlspec/adapters/aiosqlite/adk/__init__.py +5 -0
  38. sqlspec/adapters/aiosqlite/adk/store.py +829 -0
  39. sqlspec/adapters/aiosqlite/config.py +315 -0
  40. sqlspec/adapters/aiosqlite/core.cp314-win_amd64.pyd +0 -0
  41. sqlspec/adapters/aiosqlite/core.py +315 -0
  42. sqlspec/adapters/aiosqlite/data_dictionary.py +202 -0
  43. sqlspec/adapters/aiosqlite/driver.py +311 -0
  44. sqlspec/adapters/aiosqlite/events/__init__.py +5 -0
  45. sqlspec/adapters/aiosqlite/events/store.py +20 -0
  46. sqlspec/adapters/aiosqlite/litestar/__init__.py +5 -0
  47. sqlspec/adapters/aiosqlite/litestar/store.py +279 -0
  48. sqlspec/adapters/aiosqlite/pool.cp314-win_amd64.pyd +0 -0
  49. sqlspec/adapters/aiosqlite/pool.py +734 -0
  50. sqlspec/adapters/asyncmy/__init__.py +21 -0
  51. sqlspec/adapters/asyncmy/_typing.py +113 -0
  52. sqlspec/adapters/asyncmy/adk/__init__.py +5 -0
  53. sqlspec/adapters/asyncmy/adk/store.py +644 -0
  54. sqlspec/adapters/asyncmy/config.py +307 -0
  55. sqlspec/adapters/asyncmy/core.cp314-win_amd64.pyd +0 -0
  56. sqlspec/adapters/asyncmy/core.py +538 -0
  57. sqlspec/adapters/asyncmy/data_dictionary.py +122 -0
  58. sqlspec/adapters/asyncmy/driver.py +391 -0
  59. sqlspec/adapters/asyncmy/events/__init__.py +5 -0
  60. sqlspec/adapters/asyncmy/events/store.py +104 -0
  61. sqlspec/adapters/asyncmy/litestar/__init__.py +5 -0
  62. sqlspec/adapters/asyncmy/litestar/store.py +296 -0
  63. sqlspec/adapters/asyncpg/__init__.py +26 -0
  64. sqlspec/adapters/asyncpg/_typing.py +103 -0
  65. sqlspec/adapters/asyncpg/adk/__init__.py +5 -0
  66. sqlspec/adapters/asyncpg/adk/store.py +483 -0
  67. sqlspec/adapters/asyncpg/config.py +575 -0
  68. sqlspec/adapters/asyncpg/core.cp314-win_amd64.pyd +0 -0
  69. sqlspec/adapters/asyncpg/core.py +480 -0
  70. sqlspec/adapters/asyncpg/data_dictionary.py +157 -0
  71. sqlspec/adapters/asyncpg/driver.py +487 -0
  72. sqlspec/adapters/asyncpg/events/__init__.py +6 -0
  73. sqlspec/adapters/asyncpg/events/_hub.py +181 -0
  74. sqlspec/adapters/asyncpg/events/backend.py +210 -0
  75. sqlspec/adapters/asyncpg/events/store.py +40 -0
  76. sqlspec/adapters/asyncpg/litestar/__init__.py +5 -0
  77. sqlspec/adapters/asyncpg/litestar/store.py +251 -0
  78. sqlspec/adapters/bigquery/__init__.py +15 -0
  79. sqlspec/adapters/bigquery/_typing.py +108 -0
  80. sqlspec/adapters/bigquery/config.py +362 -0
  81. sqlspec/adapters/bigquery/core.cp314-win_amd64.pyd +0 -0
  82. sqlspec/adapters/bigquery/core.py +768 -0
  83. sqlspec/adapters/bigquery/data_dictionary.py +120 -0
  84. sqlspec/adapters/bigquery/driver.py +542 -0
  85. sqlspec/adapters/bigquery/events/__init__.py +5 -0
  86. sqlspec/adapters/bigquery/events/store.py +139 -0
  87. sqlspec/adapters/bigquery/litestar/__init__.py +5 -0
  88. sqlspec/adapters/bigquery/litestar/store.py +325 -0
  89. sqlspec/adapters/bigquery/type_converter.cp314-win_amd64.pyd +0 -0
  90. sqlspec/adapters/bigquery/type_converter.py +107 -0
  91. sqlspec/adapters/cockroach_asyncpg/__init__.py +26 -0
  92. sqlspec/adapters/cockroach_asyncpg/_typing.py +73 -0
  93. sqlspec/adapters/cockroach_asyncpg/adk/__init__.py +3 -0
  94. sqlspec/adapters/cockroach_asyncpg/adk/store.py +465 -0
  95. sqlspec/adapters/cockroach_asyncpg/config.py +248 -0
  96. sqlspec/adapters/cockroach_asyncpg/core.cp314-win_amd64.pyd +0 -0
  97. sqlspec/adapters/cockroach_asyncpg/core.py +55 -0
  98. sqlspec/adapters/cockroach_asyncpg/data_dictionary.py +110 -0
  99. sqlspec/adapters/cockroach_asyncpg/driver.py +142 -0
  100. sqlspec/adapters/cockroach_asyncpg/events/__init__.py +3 -0
  101. sqlspec/adapters/cockroach_asyncpg/events/store.py +20 -0
  102. sqlspec/adapters/cockroach_asyncpg/litestar/__init__.py +3 -0
  103. sqlspec/adapters/cockroach_asyncpg/litestar/store.py +142 -0
  104. sqlspec/adapters/cockroach_psycopg/__init__.py +39 -0
  105. sqlspec/adapters/cockroach_psycopg/_typing.py +137 -0
  106. sqlspec/adapters/cockroach_psycopg/adk/__init__.py +13 -0
  107. sqlspec/adapters/cockroach_psycopg/adk/store.py +1039 -0
  108. sqlspec/adapters/cockroach_psycopg/config.py +511 -0
  109. sqlspec/adapters/cockroach_psycopg/core.cp314-win_amd64.pyd +0 -0
  110. sqlspec/adapters/cockroach_psycopg/core.py +63 -0
  111. sqlspec/adapters/cockroach_psycopg/data_dictionary.py +220 -0
  112. sqlspec/adapters/cockroach_psycopg/driver.py +273 -0
  113. sqlspec/adapters/cockroach_psycopg/events/__init__.py +6 -0
  114. sqlspec/adapters/cockroach_psycopg/events/store.py +34 -0
  115. sqlspec/adapters/cockroach_psycopg/litestar/__init__.py +3 -0
  116. sqlspec/adapters/cockroach_psycopg/litestar/store.py +327 -0
  117. sqlspec/adapters/duckdb/__init__.py +29 -0
  118. sqlspec/adapters/duckdb/_typing.py +104 -0
  119. sqlspec/adapters/duckdb/adk/__init__.py +14 -0
  120. sqlspec/adapters/duckdb/adk/store.py +935 -0
  121. sqlspec/adapters/duckdb/config.py +386 -0
  122. sqlspec/adapters/duckdb/core.cp314-win_amd64.pyd +0 -0
  123. sqlspec/adapters/duckdb/core.py +332 -0
  124. sqlspec/adapters/duckdb/data_dictionary.py +140 -0
  125. sqlspec/adapters/duckdb/driver.py +426 -0
  126. sqlspec/adapters/duckdb/events/__init__.py +5 -0
  127. sqlspec/adapters/duckdb/events/store.py +57 -0
  128. sqlspec/adapters/duckdb/litestar/__init__.py +5 -0
  129. sqlspec/adapters/duckdb/litestar/store.py +330 -0
  130. sqlspec/adapters/duckdb/pool.cp314-win_amd64.pyd +0 -0
  131. sqlspec/adapters/duckdb/pool.py +350 -0
  132. sqlspec/adapters/duckdb/type_converter.cp314-win_amd64.pyd +0 -0
  133. sqlspec/adapters/duckdb/type_converter.py +118 -0
  134. sqlspec/adapters/mysqlconnector/__init__.py +39 -0
  135. sqlspec/adapters/mysqlconnector/_typing.py +186 -0
  136. sqlspec/adapters/mysqlconnector/adk/__init__.py +15 -0
  137. sqlspec/adapters/mysqlconnector/adk/store.py +1183 -0
  138. sqlspec/adapters/mysqlconnector/config.py +421 -0
  139. sqlspec/adapters/mysqlconnector/core.cp314-win_amd64.pyd +0 -0
  140. sqlspec/adapters/mysqlconnector/core.py +472 -0
  141. sqlspec/adapters/mysqlconnector/data_dictionary.py +230 -0
  142. sqlspec/adapters/mysqlconnector/driver.py +516 -0
  143. sqlspec/adapters/mysqlconnector/events/__init__.py +8 -0
  144. sqlspec/adapters/mysqlconnector/events/store.py +98 -0
  145. sqlspec/adapters/mysqlconnector/litestar/__init__.py +5 -0
  146. sqlspec/adapters/mysqlconnector/litestar/store.py +426 -0
  147. sqlspec/adapters/oracledb/__init__.py +39 -0
  148. sqlspec/adapters/oracledb/_json_handlers.cp314-win_amd64.pyd +0 -0
  149. sqlspec/adapters/oracledb/_json_handlers.py +196 -0
  150. sqlspec/adapters/oracledb/_param_types.cp314-win_amd64.pyd +0 -0
  151. sqlspec/adapters/oracledb/_param_types.py +46 -0
  152. sqlspec/adapters/oracledb/_typing.py +258 -0
  153. sqlspec/adapters/oracledb/_uuid_handlers.cp314-win_amd64.pyd +0 -0
  154. sqlspec/adapters/oracledb/_uuid_handlers.py +163 -0
  155. sqlspec/adapters/oracledb/_vector_handlers.cp314-win_amd64.pyd +0 -0
  156. sqlspec/adapters/oracledb/_vector_handlers.py +228 -0
  157. sqlspec/adapters/oracledb/adk/__init__.py +21 -0
  158. sqlspec/adapters/oracledb/adk/store.py +2453 -0
  159. sqlspec/adapters/oracledb/config.py +575 -0
  160. sqlspec/adapters/oracledb/core.cp314-win_amd64.pyd +0 -0
  161. sqlspec/adapters/oracledb/core.py +820 -0
  162. sqlspec/adapters/oracledb/data_dictionary.py +404 -0
  163. sqlspec/adapters/oracledb/driver.py +1277 -0
  164. sqlspec/adapters/oracledb/events/__init__.py +16 -0
  165. sqlspec/adapters/oracledb/events/_hub.py +345 -0
  166. sqlspec/adapters/oracledb/events/backend.py +300 -0
  167. sqlspec/adapters/oracledb/events/store.py +420 -0
  168. sqlspec/adapters/oracledb/litestar/__init__.py +5 -0
  169. sqlspec/adapters/oracledb/litestar/store.py +781 -0
  170. sqlspec/adapters/oracledb/migrations.py +539 -0
  171. sqlspec/adapters/oracledb/type_converter.cp314-win_amd64.pyd +0 -0
  172. sqlspec/adapters/oracledb/type_converter.py +211 -0
  173. sqlspec/adapters/psqlpy/__init__.py +18 -0
  174. sqlspec/adapters/psqlpy/_typing.py +121 -0
  175. sqlspec/adapters/psqlpy/adk/__init__.py +5 -0
  176. sqlspec/adapters/psqlpy/adk/store.py +591 -0
  177. sqlspec/adapters/psqlpy/config.py +376 -0
  178. sqlspec/adapters/psqlpy/core.cp314-win_amd64.pyd +0 -0
  179. sqlspec/adapters/psqlpy/core.py +694 -0
  180. sqlspec/adapters/psqlpy/data_dictionary.py +121 -0
  181. sqlspec/adapters/psqlpy/driver.py +411 -0
  182. sqlspec/adapters/psqlpy/events/__init__.py +6 -0
  183. sqlspec/adapters/psqlpy/events/_hub.py +204 -0
  184. sqlspec/adapters/psqlpy/events/backend.py +210 -0
  185. sqlspec/adapters/psqlpy/events/store.py +20 -0
  186. sqlspec/adapters/psqlpy/litestar/__init__.py +5 -0
  187. sqlspec/adapters/psqlpy/litestar/store.py +270 -0
  188. sqlspec/adapters/psqlpy/type_converter.cp314-win_amd64.pyd +0 -0
  189. sqlspec/adapters/psqlpy/type_converter.py +113 -0
  190. sqlspec/adapters/psycopg/__init__.py +38 -0
  191. sqlspec/adapters/psycopg/_typing.py +218 -0
  192. sqlspec/adapters/psycopg/adk/__init__.py +10 -0
  193. sqlspec/adapters/psycopg/adk/store.py +1106 -0
  194. sqlspec/adapters/psycopg/config.py +695 -0
  195. sqlspec/adapters/psycopg/core.cp314-win_amd64.pyd +0 -0
  196. sqlspec/adapters/psycopg/core.py +520 -0
  197. sqlspec/adapters/psycopg/data_dictionary.py +278 -0
  198. sqlspec/adapters/psycopg/driver.py +1033 -0
  199. sqlspec/adapters/psycopg/events/__init__.py +20 -0
  200. sqlspec/adapters/psycopg/events/_hub.py +388 -0
  201. sqlspec/adapters/psycopg/events/backend.py +398 -0
  202. sqlspec/adapters/psycopg/events/store.py +42 -0
  203. sqlspec/adapters/psycopg/litestar/__init__.py +5 -0
  204. sqlspec/adapters/psycopg/litestar/store.py +554 -0
  205. sqlspec/adapters/psycopg/type_converter.cp314-win_amd64.pyd +0 -0
  206. sqlspec/adapters/psycopg/type_converter.py +93 -0
  207. sqlspec/adapters/pymysql/__init__.py +21 -0
  208. sqlspec/adapters/pymysql/_typing.py +92 -0
  209. sqlspec/adapters/pymysql/adk/__init__.py +5 -0
  210. sqlspec/adapters/pymysql/adk/store.py +657 -0
  211. sqlspec/adapters/pymysql/config.py +176 -0
  212. sqlspec/adapters/pymysql/core.cp314-win_amd64.pyd +0 -0
  213. sqlspec/adapters/pymysql/core.py +469 -0
  214. sqlspec/adapters/pymysql/data_dictionary.py +120 -0
  215. sqlspec/adapters/pymysql/driver.py +271 -0
  216. sqlspec/adapters/pymysql/events/__init__.py +5 -0
  217. sqlspec/adapters/pymysql/events/store.py +50 -0
  218. sqlspec/adapters/pymysql/litestar/__init__.py +5 -0
  219. sqlspec/adapters/pymysql/litestar/store.py +232 -0
  220. sqlspec/adapters/pymysql/pool.cp314-win_amd64.pyd +0 -0
  221. sqlspec/adapters/pymysql/pool.py +184 -0
  222. sqlspec/adapters/spanner/__init__.py +33 -0
  223. sqlspec/adapters/spanner/_typing.py +102 -0
  224. sqlspec/adapters/spanner/adk/__init__.py +5 -0
  225. sqlspec/adapters/spanner/adk/store.py +758 -0
  226. sqlspec/adapters/spanner/config.py +355 -0
  227. sqlspec/adapters/spanner/core.cp314-win_amd64.pyd +0 -0
  228. sqlspec/adapters/spanner/core.py +263 -0
  229. sqlspec/adapters/spanner/data_dictionary.py +120 -0
  230. sqlspec/adapters/spanner/driver.py +407 -0
  231. sqlspec/adapters/spanner/events/__init__.py +5 -0
  232. sqlspec/adapters/spanner/events/store.py +187 -0
  233. sqlspec/adapters/spanner/litestar/__init__.py +5 -0
  234. sqlspec/adapters/spanner/litestar/store.py +291 -0
  235. sqlspec/adapters/spanner/type_converter.cp314-win_amd64.pyd +0 -0
  236. sqlspec/adapters/spanner/type_converter.py +342 -0
  237. sqlspec/adapters/sqlite/__init__.py +19 -0
  238. sqlspec/adapters/sqlite/_typing.py +123 -0
  239. sqlspec/adapters/sqlite/adk/__init__.py +5 -0
  240. sqlspec/adapters/sqlite/adk/store.py +992 -0
  241. sqlspec/adapters/sqlite/config.py +240 -0
  242. sqlspec/adapters/sqlite/core.cp314-win_amd64.pyd +0 -0
  243. sqlspec/adapters/sqlite/core.py +357 -0
  244. sqlspec/adapters/sqlite/data_dictionary.py +198 -0
  245. sqlspec/adapters/sqlite/driver.py +527 -0
  246. sqlspec/adapters/sqlite/events/__init__.py +5 -0
  247. sqlspec/adapters/sqlite/events/store.py +20 -0
  248. sqlspec/adapters/sqlite/litestar/__init__.py +5 -0
  249. sqlspec/adapters/sqlite/litestar/store.py +316 -0
  250. sqlspec/adapters/sqlite/pool.cp314-win_amd64.pyd +0 -0
  251. sqlspec/adapters/sqlite/pool.py +237 -0
  252. sqlspec/adapters/sqlite/type_converter.cp314-win_amd64.pyd +0 -0
  253. sqlspec/adapters/sqlite/type_converter.py +114 -0
  254. sqlspec/base.py +832 -0
  255. sqlspec/builder/__init__.py +181 -0
  256. sqlspec/builder/_base.cp314-win_amd64.pyd +0 -0
  257. sqlspec/builder/_base.py +1071 -0
  258. sqlspec/builder/_column.cp314-win_amd64.pyd +0 -0
  259. sqlspec/builder/_column.py +521 -0
  260. sqlspec/builder/_ddl.cp314-win_amd64.pyd +0 -0
  261. sqlspec/builder/_ddl.py +1691 -0
  262. sqlspec/builder/_delete.cp314-win_amd64.pyd +0 -0
  263. sqlspec/builder/_delete.py +95 -0
  264. sqlspec/builder/_dml.cp314-win_amd64.pyd +0 -0
  265. sqlspec/builder/_dml.py +386 -0
  266. sqlspec/builder/_explain.cp314-win_amd64.pyd +0 -0
  267. sqlspec/builder/_explain.py +579 -0
  268. sqlspec/builder/_expression_wrappers.cp314-win_amd64.pyd +0 -0
  269. sqlspec/builder/_expression_wrappers.py +46 -0
  270. sqlspec/builder/_factory.cp314-win_amd64.pyd +0 -0
  271. sqlspec/builder/_factory.py +1884 -0
  272. sqlspec/builder/_insert.cp314-win_amd64.pyd +0 -0
  273. sqlspec/builder/_insert.py +405 -0
  274. sqlspec/builder/_join.cp314-win_amd64.pyd +0 -0
  275. sqlspec/builder/_join.py +489 -0
  276. sqlspec/builder/_merge.cp314-win_amd64.pyd +0 -0
  277. sqlspec/builder/_merge.py +823 -0
  278. sqlspec/builder/_parsing_utils.cp314-win_amd64.pyd +0 -0
  279. sqlspec/builder/_parsing_utils.py +295 -0
  280. sqlspec/builder/_select.cp314-win_amd64.pyd +0 -0
  281. sqlspec/builder/_select.py +1666 -0
  282. sqlspec/builder/_temporal.cp314-win_amd64.pyd +0 -0
  283. sqlspec/builder/_temporal.py +167 -0
  284. sqlspec/builder/_update.cp314-win_amd64.pyd +0 -0
  285. sqlspec/builder/_update.py +173 -0
  286. sqlspec/builder/_vector_distance.cp314-win_amd64.pyd +0 -0
  287. sqlspec/builder/_vector_distance.py +330 -0
  288. sqlspec/cli.py +1095 -0
  289. sqlspec/config.py +2383 -0
  290. sqlspec/core/__init__.py +372 -0
  291. sqlspec/core/_correlation.cp314-win_amd64.pyd +0 -0
  292. sqlspec/core/_correlation.py +176 -0
  293. sqlspec/core/_pagination.py +42 -0
  294. sqlspec/core/_pool.cp314-win_amd64.pyd +0 -0
  295. sqlspec/core/_pool.py +76 -0
  296. sqlspec/core/cache.cp314-win_amd64.pyd +0 -0
  297. sqlspec/core/cache.py +1085 -0
  298. sqlspec/core/compiler.cp314-win_amd64.pyd +0 -0
  299. sqlspec/core/compiler.py +1090 -0
  300. sqlspec/core/config_runtime.cp314-win_amd64.pyd +0 -0
  301. sqlspec/core/config_runtime.py +174 -0
  302. sqlspec/core/explain.cp314-win_amd64.pyd +0 -0
  303. sqlspec/core/explain.py +275 -0
  304. sqlspec/core/filters.cp314-win_amd64.pyd +0 -0
  305. sqlspec/core/filters.py +969 -0
  306. sqlspec/core/hashing.cp314-win_amd64.pyd +0 -0
  307. sqlspec/core/hashing.py +266 -0
  308. sqlspec/core/metrics.cp314-win_amd64.pyd +0 -0
  309. sqlspec/core/metrics.py +83 -0
  310. sqlspec/core/parameters/__init__.py +72 -0
  311. sqlspec/core/parameters/_alignment.cp314-win_amd64.pyd +0 -0
  312. sqlspec/core/parameters/_alignment.py +283 -0
  313. sqlspec/core/parameters/_converter.cp314-win_amd64.pyd +0 -0
  314. sqlspec/core/parameters/_converter.py +554 -0
  315. sqlspec/core/parameters/_processor.cp314-win_amd64.pyd +0 -0
  316. sqlspec/core/parameters/_processor.py +1182 -0
  317. sqlspec/core/parameters/_registry.cp314-win_amd64.pyd +0 -0
  318. sqlspec/core/parameters/_registry.py +206 -0
  319. sqlspec/core/parameters/_transformers.cp314-win_amd64.pyd +0 -0
  320. sqlspec/core/parameters/_transformers.py +324 -0
  321. sqlspec/core/parameters/_types.cp314-win_amd64.pyd +0 -0
  322. sqlspec/core/parameters/_types.py +536 -0
  323. sqlspec/core/parameters/_validator.cp314-win_amd64.pyd +0 -0
  324. sqlspec/core/parameters/_validator.py +171 -0
  325. sqlspec/core/pipeline.cp314-win_amd64.pyd +0 -0
  326. sqlspec/core/pipeline.py +333 -0
  327. sqlspec/core/query_modifiers.cp314-win_amd64.pyd +0 -0
  328. sqlspec/core/query_modifiers.py +508 -0
  329. sqlspec/core/result/__init__.py +25 -0
  330. sqlspec/core/result/_base.cp314-win_amd64.pyd +0 -0
  331. sqlspec/core/result/_base.py +1232 -0
  332. sqlspec/core/result/_io.cp314-win_amd64.pyd +0 -0
  333. sqlspec/core/result/_io.py +28 -0
  334. sqlspec/core/splitter.cp314-win_amd64.pyd +0 -0
  335. sqlspec/core/splitter.py +1021 -0
  336. sqlspec/core/sqlcommenter.cp314-win_amd64.pyd +0 -0
  337. sqlspec/core/sqlcommenter.py +249 -0
  338. sqlspec/core/stack.cp314-win_amd64.pyd +0 -0
  339. sqlspec/core/stack.py +163 -0
  340. sqlspec/core/statement.cp314-win_amd64.pyd +0 -0
  341. sqlspec/core/statement.py +1865 -0
  342. sqlspec/core/type_converter.cp314-win_amd64.pyd +0 -0
  343. sqlspec/core/type_converter.py +340 -0
  344. sqlspec/data_dictionary/__init__.py +22 -0
  345. sqlspec/data_dictionary/_loader.cp314-win_amd64.pyd +0 -0
  346. sqlspec/data_dictionary/_loader.py +138 -0
  347. sqlspec/data_dictionary/_registry.cp314-win_amd64.pyd +0 -0
  348. sqlspec/data_dictionary/_registry.py +74 -0
  349. sqlspec/data_dictionary/_types.cp314-win_amd64.pyd +0 -0
  350. sqlspec/data_dictionary/_types.py +121 -0
  351. sqlspec/data_dictionary/dialects/__init__.py +21 -0
  352. sqlspec/data_dictionary/dialects/bigquery.cp314-win_amd64.pyd +0 -0
  353. sqlspec/data_dictionary/dialects/bigquery.py +81 -0
  354. sqlspec/data_dictionary/dialects/cockroachdb.cp314-win_amd64.pyd +0 -0
  355. sqlspec/data_dictionary/dialects/cockroachdb.py +54 -0
  356. sqlspec/data_dictionary/dialects/duckdb.cp314-win_amd64.pyd +0 -0
  357. sqlspec/data_dictionary/dialects/duckdb.py +47 -0
  358. sqlspec/data_dictionary/dialects/mysql.cp314-win_amd64.pyd +0 -0
  359. sqlspec/data_dictionary/dialects/mysql.py +53 -0
  360. sqlspec/data_dictionary/dialects/oracle.cp314-win_amd64.pyd +0 -0
  361. sqlspec/data_dictionary/dialects/oracle.py +197 -0
  362. sqlspec/data_dictionary/dialects/postgres.cp314-win_amd64.pyd +0 -0
  363. sqlspec/data_dictionary/dialects/postgres.py +69 -0
  364. sqlspec/data_dictionary/dialects/spanner.cp314-win_amd64.pyd +0 -0
  365. sqlspec/data_dictionary/dialects/spanner.py +37 -0
  366. sqlspec/data_dictionary/dialects/sqlite.cp314-win_amd64.pyd +0 -0
  367. sqlspec/data_dictionary/dialects/sqlite.py +59 -0
  368. sqlspec/data_dictionary/sql/.gitkeep +0 -0
  369. sqlspec/data_dictionary/sql/bigquery/columns.sql +23 -0
  370. sqlspec/data_dictionary/sql/bigquery/foreign_keys.sql +34 -0
  371. sqlspec/data_dictionary/sql/bigquery/indexes.sql +19 -0
  372. sqlspec/data_dictionary/sql/bigquery/tables.sql +33 -0
  373. sqlspec/data_dictionary/sql/bigquery/version.sql +3 -0
  374. sqlspec/data_dictionary/sql/cockroachdb/columns.sql +34 -0
  375. sqlspec/data_dictionary/sql/cockroachdb/foreign_keys.sql +40 -0
  376. sqlspec/data_dictionary/sql/cockroachdb/indexes.sql +32 -0
  377. sqlspec/data_dictionary/sql/cockroachdb/tables.sql +44 -0
  378. sqlspec/data_dictionary/sql/cockroachdb/version.sql +3 -0
  379. sqlspec/data_dictionary/sql/duckdb/columns.sql +23 -0
  380. sqlspec/data_dictionary/sql/duckdb/foreign_keys.sql +36 -0
  381. sqlspec/data_dictionary/sql/duckdb/indexes.sql +19 -0
  382. sqlspec/data_dictionary/sql/duckdb/tables.sql +38 -0
  383. sqlspec/data_dictionary/sql/duckdb/version.sql +3 -0
  384. sqlspec/data_dictionary/sql/mysql/columns.sql +23 -0
  385. sqlspec/data_dictionary/sql/mysql/foreign_keys.sql +28 -0
  386. sqlspec/data_dictionary/sql/mysql/indexes.sql +26 -0
  387. sqlspec/data_dictionary/sql/mysql/tables.sql +33 -0
  388. sqlspec/data_dictionary/sql/mysql/version.sql +3 -0
  389. sqlspec/data_dictionary/sql/oracle/columns.sql +23 -0
  390. sqlspec/data_dictionary/sql/oracle/foreign_keys.sql +48 -0
  391. sqlspec/data_dictionary/sql/oracle/indexes.sql +44 -0
  392. sqlspec/data_dictionary/sql/oracle/tables.sql +25 -0
  393. sqlspec/data_dictionary/sql/oracle/version.sql +20 -0
  394. sqlspec/data_dictionary/sql/postgres/columns.sql +34 -0
  395. sqlspec/data_dictionary/sql/postgres/foreign_keys.sql +40 -0
  396. sqlspec/data_dictionary/sql/postgres/indexes.sql +56 -0
  397. sqlspec/data_dictionary/sql/postgres/tables.sql +44 -0
  398. sqlspec/data_dictionary/sql/postgres/version.sql +3 -0
  399. sqlspec/data_dictionary/sql/spanner/columns.sql +23 -0
  400. sqlspec/data_dictionary/sql/spanner/foreign_keys.sql +70 -0
  401. sqlspec/data_dictionary/sql/spanner/indexes.sql +30 -0
  402. sqlspec/data_dictionary/sql/spanner/tables.sql +9 -0
  403. sqlspec/data_dictionary/sql/spanner/version.sql +3 -0
  404. sqlspec/data_dictionary/sql/sqlite/columns.sql +23 -0
  405. sqlspec/data_dictionary/sql/sqlite/foreign_keys.sql +22 -0
  406. sqlspec/data_dictionary/sql/sqlite/indexes.sql +7 -0
  407. sqlspec/data_dictionary/sql/sqlite/tables.sql +28 -0
  408. sqlspec/data_dictionary/sql/sqlite/version.sql +3 -0
  409. sqlspec/dialects/__init__.py +22 -0
  410. sqlspec/dialects/_compat.cp314-win_amd64.pyd +0 -0
  411. sqlspec/dialects/_compat.py +14 -0
  412. sqlspec/dialects/postgres/__init__.py +9 -0
  413. sqlspec/dialects/postgres/_generators.cp314-win_amd64.pyd +0 -0
  414. sqlspec/dialects/postgres/_generators.py +57 -0
  415. sqlspec/dialects/postgres/_operators.cp314-win_amd64.pyd +0 -0
  416. sqlspec/dialects/postgres/_operators.py +81 -0
  417. sqlspec/dialects/postgres/_paradedb.py +50 -0
  418. sqlspec/dialects/postgres/_pgvector.py +36 -0
  419. sqlspec/dialects/spanner/__init__.py +6 -0
  420. sqlspec/dialects/spanner/_generators.cp314-win_amd64.pyd +0 -0
  421. sqlspec/dialects/spanner/_generators.py +206 -0
  422. sqlspec/dialects/spanner/_spangres.py +77 -0
  423. sqlspec/dialects/spanner/_spanner.py +179 -0
  424. sqlspec/driver/__init__.py +49 -0
  425. sqlspec/driver/_async.cp314-win_amd64.pyd +0 -0
  426. sqlspec/driver/_async.py +1830 -0
  427. sqlspec/driver/_common.cp314-win_amd64.pyd +0 -0
  428. sqlspec/driver/_common.py +2292 -0
  429. sqlspec/driver/_exception_handler.cp314-win_amd64.pyd +0 -0
  430. sqlspec/driver/_exception_handler.py +108 -0
  431. sqlspec/driver/_query_cache.cp314-win_amd64.pyd +0 -0
  432. sqlspec/driver/_query_cache.py +96 -0
  433. sqlspec/driver/_sql_helpers.cp314-win_amd64.pyd +0 -0
  434. sqlspec/driver/_sql_helpers.py +139 -0
  435. sqlspec/driver/_storage_helpers.cp314-win_amd64.pyd +0 -0
  436. sqlspec/driver/_storage_helpers.py +153 -0
  437. sqlspec/driver/_sync.cp314-win_amd64.pyd +0 -0
  438. sqlspec/driver/_sync.py +1817 -0
  439. sqlspec/exceptions.cp314-win_amd64.pyd +0 -0
  440. sqlspec/exceptions.py +480 -0
  441. sqlspec/extensions/__init__.py +0 -0
  442. sqlspec/extensions/adk/__init__.py +84 -0
  443. sqlspec/extensions/adk/_config_utils.py +199 -0
  444. sqlspec/extensions/adk/_types.cp314-win_amd64.pyd +0 -0
  445. sqlspec/extensions/adk/_types.py +41 -0
  446. sqlspec/extensions/adk/artifact/__init__.py +57 -0
  447. sqlspec/extensions/adk/artifact/_types.cp314-win_amd64.pyd +0 -0
  448. sqlspec/extensions/adk/artifact/_types.py +32 -0
  449. sqlspec/extensions/adk/artifact/service.py +508 -0
  450. sqlspec/extensions/adk/artifact/store.py +361 -0
  451. sqlspec/extensions/adk/converters.py +212 -0
  452. sqlspec/extensions/adk/memory/__init__.py +69 -0
  453. sqlspec/extensions/adk/memory/_types.cp314-win_amd64.pyd +0 -0
  454. sqlspec/extensions/adk/memory/_types.py +30 -0
  455. sqlspec/extensions/adk/memory/converters.py +225 -0
  456. sqlspec/extensions/adk/memory/service.py +316 -0
  457. sqlspec/extensions/adk/memory/store.py +525 -0
  458. sqlspec/extensions/adk/migrations/0001_create_adk_tables.py +184 -0
  459. sqlspec/extensions/adk/migrations/__init__.py +0 -0
  460. sqlspec/extensions/adk/service.py +279 -0
  461. sqlspec/extensions/adk/store.py +590 -0
  462. sqlspec/extensions/events/__init__.py +51 -0
  463. sqlspec/extensions/events/_channel.py +703 -0
  464. sqlspec/extensions/events/_hints.cp314-win_amd64.pyd +0 -0
  465. sqlspec/extensions/events/_hints.py +45 -0
  466. sqlspec/extensions/events/_models.py +23 -0
  467. sqlspec/extensions/events/_payload.cp314-win_amd64.pyd +0 -0
  468. sqlspec/extensions/events/_payload.py +69 -0
  469. sqlspec/extensions/events/_protocols.py +134 -0
  470. sqlspec/extensions/events/_queue.py +462 -0
  471. sqlspec/extensions/events/_store.py +209 -0
  472. sqlspec/extensions/events/migrations/0001_create_event_queue.py +59 -0
  473. sqlspec/extensions/events/migrations/__init__.py +3 -0
  474. sqlspec/extensions/fastapi/__init__.py +22 -0
  475. sqlspec/extensions/fastapi/extension.py +391 -0
  476. sqlspec/extensions/fastapi/providers.cp314-win_amd64.pyd +0 -0
  477. sqlspec/extensions/fastapi/providers.py +712 -0
  478. sqlspec/extensions/flask/__init__.py +38 -0
  479. sqlspec/extensions/flask/_state.py +87 -0
  480. sqlspec/extensions/flask/_utils.py +71 -0
  481. sqlspec/extensions/flask/extension.py +539 -0
  482. sqlspec/extensions/litestar/__init__.py +31 -0
  483. sqlspec/extensions/litestar/_utils.py +52 -0
  484. sqlspec/extensions/litestar/channels.py +165 -0
  485. sqlspec/extensions/litestar/cli.py +102 -0
  486. sqlspec/extensions/litestar/config.py +90 -0
  487. sqlspec/extensions/litestar/handlers.py +316 -0
  488. sqlspec/extensions/litestar/migrations/0001_create_session_table.py +137 -0
  489. sqlspec/extensions/litestar/migrations/__init__.py +3 -0
  490. sqlspec/extensions/litestar/plugin.py +1066 -0
  491. sqlspec/extensions/litestar/providers.cp314-win_amd64.pyd +0 -0
  492. sqlspec/extensions/litestar/providers.py +784 -0
  493. sqlspec/extensions/litestar/store.py +298 -0
  494. sqlspec/extensions/otel/__init__.py +58 -0
  495. sqlspec/extensions/prometheus/__init__.py +113 -0
  496. sqlspec/extensions/sanic/__init__.py +19 -0
  497. sqlspec/extensions/sanic/_state.py +43 -0
  498. sqlspec/extensions/sanic/_utils.py +127 -0
  499. sqlspec/extensions/sanic/extension.py +647 -0
  500. sqlspec/extensions/starlette/__init__.py +22 -0
  501. sqlspec/extensions/starlette/_state.py +42 -0
  502. sqlspec/extensions/starlette/_utils.py +96 -0
  503. sqlspec/extensions/starlette/extension.py +374 -0
  504. sqlspec/extensions/starlette/middleware.py +281 -0
  505. sqlspec/loader.cp314-win_amd64.pyd +0 -0
  506. sqlspec/loader.py +727 -0
  507. sqlspec/migrations/__init__.py +39 -0
  508. sqlspec/migrations/base.cp314-win_amd64.pyd +0 -0
  509. sqlspec/migrations/base.py +862 -0
  510. sqlspec/migrations/commands.py +2151 -0
  511. sqlspec/migrations/context.cp314-win_amd64.pyd +0 -0
  512. sqlspec/migrations/context.py +157 -0
  513. sqlspec/migrations/fix.cp314-win_amd64.pyd +0 -0
  514. sqlspec/migrations/fix.py +204 -0
  515. sqlspec/migrations/loaders.cp314-win_amd64.pyd +0 -0
  516. sqlspec/migrations/loaders.py +443 -0
  517. sqlspec/migrations/runner.cp314-win_amd64.pyd +0 -0
  518. sqlspec/migrations/runner.py +1195 -0
  519. sqlspec/migrations/squash.cp314-win_amd64.pyd +0 -0
  520. sqlspec/migrations/squash.py +490 -0
  521. sqlspec/migrations/templates.cp314-win_amd64.pyd +0 -0
  522. sqlspec/migrations/templates.py +234 -0
  523. sqlspec/migrations/tracker.cp314-win_amd64.pyd +0 -0
  524. sqlspec/migrations/tracker.py +792 -0
  525. sqlspec/migrations/utils.cp314-win_amd64.pyd +0 -0
  526. sqlspec/migrations/utils.py +256 -0
  527. sqlspec/migrations/validation.cp314-win_amd64.pyd +0 -0
  528. sqlspec/migrations/validation.py +359 -0
  529. sqlspec/migrations/version.cp314-win_amd64.pyd +0 -0
  530. sqlspec/migrations/version.py +446 -0
  531. sqlspec/observability/__init__.py +57 -0
  532. sqlspec/observability/_common.cp314-win_amd64.pyd +0 -0
  533. sqlspec/observability/_common.py +77 -0
  534. sqlspec/observability/_config.cp314-win_amd64.pyd +0 -0
  535. sqlspec/observability/_config.py +364 -0
  536. sqlspec/observability/_diagnostics.cp314-win_amd64.pyd +0 -0
  537. sqlspec/observability/_diagnostics.py +74 -0
  538. sqlspec/observability/_dispatcher.cp314-win_amd64.pyd +0 -0
  539. sqlspec/observability/_dispatcher.py +200 -0
  540. sqlspec/observability/_formatters/__init__.py +13 -0
  541. sqlspec/observability/_formatters/_aws.cp314-win_amd64.pyd +0 -0
  542. sqlspec/observability/_formatters/_aws.py +102 -0
  543. sqlspec/observability/_formatters/_azure.cp314-win_amd64.pyd +0 -0
  544. sqlspec/observability/_formatters/_azure.py +96 -0
  545. sqlspec/observability/_formatters/_base.cp314-win_amd64.pyd +0 -0
  546. sqlspec/observability/_formatters/_base.py +57 -0
  547. sqlspec/observability/_formatters/_gcp.cp314-win_amd64.pyd +0 -0
  548. sqlspec/observability/_formatters/_gcp.py +131 -0
  549. sqlspec/observability/_formatting.py +58 -0
  550. sqlspec/observability/_observer.cp314-win_amd64.pyd +0 -0
  551. sqlspec/observability/_observer.py +361 -0
  552. sqlspec/observability/_runtime.cp314-win_amd64.pyd +0 -0
  553. sqlspec/observability/_runtime.py +461 -0
  554. sqlspec/observability/_sampling.cp314-win_amd64.pyd +0 -0
  555. sqlspec/observability/_sampling.py +188 -0
  556. sqlspec/observability/_spans.cp314-win_amd64.pyd +0 -0
  557. sqlspec/observability/_spans.py +161 -0
  558. sqlspec/protocols.py +955 -0
  559. sqlspec/py.typed +0 -0
  560. sqlspec/service.py +433 -0
  561. sqlspec/storage/__init__.py +48 -0
  562. sqlspec/storage/_arrow_payload.py +68 -0
  563. sqlspec/storage/_paths.cp314-win_amd64.pyd +0 -0
  564. sqlspec/storage/_paths.py +58 -0
  565. sqlspec/storage/_utils.py +46 -0
  566. sqlspec/storage/backends/__init__.py +1 -0
  567. sqlspec/storage/backends/base.cp314-win_amd64.pyd +0 -0
  568. sqlspec/storage/backends/base.py +374 -0
  569. sqlspec/storage/backends/fsspec.py +574 -0
  570. sqlspec/storage/backends/local.py +468 -0
  571. sqlspec/storage/backends/obstore.py +956 -0
  572. sqlspec/storage/errors.cp314-win_amd64.pyd +0 -0
  573. sqlspec/storage/errors.py +102 -0
  574. sqlspec/storage/pipeline.cp314-win_amd64.pyd +0 -0
  575. sqlspec/storage/pipeline.py +628 -0
  576. sqlspec/storage/registry.cp314-win_amd64.pyd +0 -0
  577. sqlspec/storage/registry.py +329 -0
  578. sqlspec/typing.py +405 -0
  579. sqlspec/utils/__init__.py +7 -0
  580. sqlspec/utils/arrow_helpers.py +384 -0
  581. sqlspec/utils/config_tools.cp314-win_amd64.pyd +0 -0
  582. sqlspec/utils/config_tools.py +314 -0
  583. sqlspec/utils/correlation.cp314-win_amd64.pyd +0 -0
  584. sqlspec/utils/correlation.py +134 -0
  585. sqlspec/utils/deprecation.cp314-win_amd64.pyd +0 -0
  586. sqlspec/utils/deprecation.py +157 -0
  587. sqlspec/utils/dispatch.cp314-win_amd64.pyd +0 -0
  588. sqlspec/utils/dispatch.py +101 -0
  589. sqlspec/utils/fixtures.cp314-win_amd64.pyd +0 -0
  590. sqlspec/utils/fixtures.py +260 -0
  591. sqlspec/utils/logging.cp314-win_amd64.pyd +0 -0
  592. sqlspec/utils/logging.py +251 -0
  593. sqlspec/utils/module_loader.py +306 -0
  594. sqlspec/utils/portal.cp314-win_amd64.pyd +0 -0
  595. sqlspec/utils/portal.py +377 -0
  596. sqlspec/utils/schema.cp314-win_amd64.pyd +0 -0
  597. sqlspec/utils/schema.py +1040 -0
  598. sqlspec/utils/serializers/__init__.py +30 -0
  599. sqlspec/utils/serializers/_json.cp314-win_amd64.pyd +0 -0
  600. sqlspec/utils/serializers/_json.py +415 -0
  601. sqlspec/utils/serializers/_numpy.cp314-win_amd64.pyd +0 -0
  602. sqlspec/utils/serializers/_numpy.py +65 -0
  603. sqlspec/utils/serializers/_schema.cp314-win_amd64.pyd +0 -0
  604. sqlspec/utils/serializers/_schema.py +285 -0
  605. sqlspec/utils/singleton.cp314-win_amd64.pyd +0 -0
  606. sqlspec/utils/singleton.py +41 -0
  607. sqlspec/utils/sync_tools.cp314-win_amd64.pyd +0 -0
  608. sqlspec/utils/sync_tools.py +316 -0
  609. sqlspec/utils/text.cp314-win_amd64.pyd +0 -0
  610. sqlspec/utils/text.py +109 -0
  611. sqlspec/utils/type_converters.cp314-win_amd64.pyd +0 -0
  612. sqlspec/utils/type_converters.py +216 -0
  613. sqlspec/utils/type_guards.cp314-win_amd64.pyd +0 -0
  614. sqlspec/utils/type_guards.py +1508 -0
  615. sqlspec/utils/uuids.cp314-win_amd64.pyd +0 -0
  616. sqlspec/utils/uuids.py +241 -0
  617. sqlspec-0.47.0.dist-info/METADATA +202 -0
  618. sqlspec-0.47.0.dist-info/RECORD +621 -0
  619. sqlspec-0.47.0.dist-info/WHEEL +4 -0
  620. sqlspec-0.47.0.dist-info/entry_points.txt +6 -0
  621. sqlspec-0.47.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,120 @@
1
+ """BigQuery-specific data dictionary for metadata queries."""
2
+
3
+ from typing import TYPE_CHECKING, ClassVar
4
+
5
+ from mypy_extensions import mypyc_attr
6
+
7
+ from sqlspec.data_dictionary.dialects.bigquery import (
8
+ format_bigquery_information_schema_tables,
9
+ format_bigquery_schema_prefix,
10
+ )
11
+ from sqlspec.driver import SyncDataDictionaryBase
12
+ from sqlspec.typing import ColumnMetadata, ForeignKeyMetadata, IndexMetadata, TableMetadata, VersionInfo
13
+
14
+ __all__ = ("BigQueryDataDictionary",)
15
+
16
+ if TYPE_CHECKING:
17
+ from sqlspec.adapters.bigquery.driver import BigQueryDriver
18
+
19
+
20
+ @mypyc_attr(allow_interpreted_subclasses=True, native_class=False)
21
+ class BigQueryDataDictionary(SyncDataDictionaryBase):
22
+ """BigQuery-specific sync data dictionary."""
23
+
24
+ dialect: ClassVar[str] = "bigquery"
25
+
26
+ def __init__(self) -> None:
27
+ super().__init__()
28
+
29
+ def get_version(self, driver: "BigQueryDriver") -> "VersionInfo | None":
30
+ """Return BigQuery version information.
31
+
32
+ Args:
33
+ driver: BigQuery driver instance.
34
+
35
+ Returns:
36
+ None because BigQuery does not expose version info.
37
+
38
+ """
39
+ _ = driver
40
+ return None
41
+
42
+ def get_feature_flag(self, driver: "BigQueryDriver", feature: str) -> bool:
43
+ """Check if BigQuery supports a specific feature.
44
+
45
+ Args:
46
+ driver: BigQuery driver instance.
47
+ feature: Feature name to check.
48
+
49
+ Returns:
50
+ True if feature is supported, False otherwise.
51
+
52
+ """
53
+ _ = driver
54
+ return self.resolve_feature_flag(feature, None)
55
+
56
+ def get_optimal_type(self, driver: "BigQueryDriver", type_category: str) -> str:
57
+ """Get optimal BigQuery type for a category.
58
+
59
+ Args:
60
+ driver: BigQuery driver instance.
61
+ type_category: Type category.
62
+
63
+ Returns:
64
+ BigQuery-specific type name.
65
+
66
+ """
67
+ _ = driver
68
+ return self.get_dialect_config().get_optimal_type(type_category)
69
+
70
+ def get_tables(self, driver: "BigQueryDriver", schema: "str | None" = None) -> "list[TableMetadata]":
71
+ """Get tables sorted by topological dependency order using BigQuery catalog."""
72
+ self._log_schema_introspect(driver, schema_name=schema, table_name=None, operation="tables")
73
+ tables_table, kcu_table, rc_table = format_bigquery_information_schema_tables(schema)
74
+
75
+ query_text = self.get_query_text("tables_by_schema").format(
76
+ tables_table=tables_table, kcu_table=kcu_table, rc_table=rc_table
77
+ )
78
+ return driver.select(query_text, schema_type=TableMetadata)
79
+
80
+ def get_columns(
81
+ self, driver: "BigQueryDriver", table: "str | None" = None, schema: "str | None" = None
82
+ ) -> "list[ColumnMetadata]":
83
+ """Get column information for a table or schema."""
84
+ schema_prefix = format_bigquery_schema_prefix(schema)
85
+ if table is None:
86
+ self._log_schema_introspect(driver, schema_name=schema, table_name=None, operation="columns")
87
+ query_text = self.get_query_text("columns_by_schema").format(schema_prefix=schema_prefix)
88
+ return driver.select(query_text, schema_name=schema, schema_type=ColumnMetadata)
89
+
90
+ self._log_table_describe(driver, schema_name=schema, table_name=table, operation="columns")
91
+ query_text = self.get_query_text("columns_by_table").format(schema_prefix=schema_prefix)
92
+ return driver.select(query_text, table_name=table, schema_name=schema, schema_type=ColumnMetadata)
93
+
94
+ def get_indexes(
95
+ self, driver: "BigQueryDriver", table: "str | None" = None, schema: "str | None" = None
96
+ ) -> "list[IndexMetadata]":
97
+ """Get index metadata for a table or schema."""
98
+ if table is None:
99
+ self._log_schema_introspect(driver, schema_name=schema, table_name=None, operation="indexes")
100
+ return driver.select(self.get_query("indexes_by_schema"), schema_type=IndexMetadata)
101
+
102
+ self._log_table_describe(driver, schema_name=schema, table_name=table, operation="indexes")
103
+ return driver.select(self.get_query("indexes_by_table"), schema_type=IndexMetadata)
104
+
105
+ def get_foreign_keys(
106
+ self, driver: "BigQueryDriver", table: "str | None" = None, schema: "str | None" = None
107
+ ) -> "list[ForeignKeyMetadata]":
108
+ """Get foreign key metadata."""
109
+ if table is None:
110
+ self._log_schema_introspect(driver, schema_name=schema, table_name=None, operation="foreign_keys")
111
+ else:
112
+ self._log_table_describe(driver, schema_name=schema, table_name=table, operation="foreign_keys")
113
+ _, kcu_table, rc_table = format_bigquery_information_schema_tables(schema)
114
+
115
+ if table is None:
116
+ query_text = self.get_query_text("foreign_keys_by_schema").format(kcu_table=kcu_table, rc_table=rc_table)
117
+ return driver.select(query_text, schema_name=schema, schema_type=ForeignKeyMetadata)
118
+
119
+ query_text = self.get_query_text("foreign_keys_by_table").format(kcu_table=kcu_table, rc_table=rc_table)
120
+ return driver.select(query_text, table_name=table, schema_name=schema, schema_type=ForeignKeyMetadata)
@@ -0,0 +1,542 @@
1
+ # ruff: noqa: F401
2
+ """BigQuery driver implementation.
3
+
4
+ Provides Google Cloud BigQuery connectivity with parameter style conversion,
5
+ type coercion, error handling, and query job management.
6
+ """
7
+
8
+ import io
9
+ from typing import TYPE_CHECKING, Any, cast
10
+
11
+ from google.cloud.exceptions import GoogleCloudError
12
+
13
+ from sqlspec.adapters.bigquery._typing import BigQueryConnection, BigQueryCursor, BigQuerySessionContext
14
+ from sqlspec.adapters.bigquery.core import (
15
+ build_dml_rowcount,
16
+ build_inlined_script,
17
+ build_load_job_config,
18
+ build_load_job_telemetry,
19
+ build_retry,
20
+ collect_rows,
21
+ create_mapped_exception,
22
+ default_statement_config,
23
+ detect_emulator,
24
+ driver_profile,
25
+ is_simple_insert,
26
+ normalize_script_rowcount,
27
+ resolve_column_names,
28
+ run_query_job,
29
+ storage_api_available,
30
+ try_bulk_insert,
31
+ )
32
+ from sqlspec.adapters.bigquery.data_dictionary import BigQueryDataDictionary
33
+ from sqlspec.adapters.bigquery.type_converter import BigQueryOutputConverter
34
+ from sqlspec.core import (
35
+ StatementConfig,
36
+ build_arrow_result_from_table,
37
+ build_literal_inlining_transform,
38
+ get_cache_config,
39
+ register_driver_profile,
40
+ )
41
+ from sqlspec.driver import BaseSyncExceptionHandler, ExecutionResult, SyncDriverAdapterBase
42
+ from sqlspec.exceptions import MissingDependencyError, SQLSpecError, StorageCapabilityError
43
+ from sqlspec.utils.logging import get_logger
44
+ from sqlspec.utils.module_loader import ensure_pyarrow
45
+ from sqlspec.utils.serializers import to_json
46
+
47
+ if TYPE_CHECKING:
48
+ from collections.abc import Callable
49
+
50
+ from google.cloud.bigquery import QueryJob, QueryJobConfig
51
+
52
+ from sqlspec.builder import QueryBuilder
53
+ from sqlspec.core import SQL, ArrowResult, SQLResult, Statement, StatementFilter
54
+ from sqlspec.storage import (
55
+ StorageBridgeJob,
56
+ StorageDestination,
57
+ StorageFormat,
58
+ StorageTelemetry,
59
+ SyncStoragePipeline,
60
+ )
61
+ from sqlspec.typing import ArrowReturnFormat, StatementParameters
62
+
63
+ logger = get_logger(__name__)
64
+
65
+ __all__ = ("BigQueryCursor", "BigQueryDriver", "BigQueryExceptionHandler", "BigQuerySessionContext")
66
+
67
+
68
+ class BigQueryExceptionHandler(BaseSyncExceptionHandler):
69
+ """Context manager for handling BigQuery API exceptions.
70
+
71
+ Maps HTTP status codes and error reasons to specific SQLSpec exceptions
72
+ for better error handling in application code.
73
+
74
+ Uses deferred exception pattern for mypyc compatibility: exceptions
75
+ are stored in pending_exception rather than raised from __exit__
76
+ to avoid ABI boundary violations with compiled code.
77
+ """
78
+
79
+ __slots__ = ()
80
+
81
+ def _handle_exception(self, exc_type: "type[BaseException] | None", exc_val: "BaseException") -> bool:
82
+ if exc_type is None:
83
+ return False
84
+ if issubclass(exc_type, GoogleCloudError):
85
+ self.pending_exception = create_mapped_exception(exc_val)
86
+ return True
87
+ return False
88
+
89
+
90
+ class BigQueryDriver(SyncDriverAdapterBase):
91
+ """BigQuery driver implementation.
92
+
93
+ Provides Google Cloud BigQuery connectivity with parameter style conversion,
94
+ type coercion, error handling, and query job management.
95
+ """
96
+
97
+ __slots__ = (
98
+ "_column_name_cache",
99
+ "_data_dictionary",
100
+ "_default_query_job_config",
101
+ "_job_retry",
102
+ "_job_retry_deadline",
103
+ "_json_serializer",
104
+ "_literal_inliner",
105
+ "_type_converter",
106
+ "_using_emulator",
107
+ )
108
+ dialect = "bigquery"
109
+
110
+ def __init__(
111
+ self,
112
+ connection: BigQueryConnection,
113
+ statement_config: "StatementConfig | None" = None,
114
+ driver_features: "dict[str, Any] | None" = None,
115
+ ) -> None:
116
+ features = driver_features or {}
117
+
118
+ enable_uuid_conversion = features.get("enable_uuid_conversion", True)
119
+ self._type_converter = BigQueryOutputConverter(enable_uuid_conversion=enable_uuid_conversion)
120
+
121
+ if statement_config is None:
122
+ statement_config = default_statement_config.replace(cache_config=get_cache_config())
123
+
124
+ parameter_json_serializer = statement_config.parameter_config.json_serializer
125
+ if parameter_json_serializer is None:
126
+ parameter_json_serializer = features.get("json_serializer", to_json)
127
+
128
+ self._json_serializer: Callable[[Any], str] = parameter_json_serializer
129
+ self._literal_inliner = build_literal_inlining_transform(json_serializer=self._json_serializer)
130
+
131
+ super().__init__(connection=connection, statement_config=statement_config, driver_features=driver_features)
132
+ self._default_query_job_config: QueryJobConfig | None = (driver_features or {}).get("default_query_job_config")
133
+ self._data_dictionary: BigQueryDataDictionary | None = None
134
+ self._column_name_cache: dict[int, tuple[Any, list[str]]] = {}
135
+ self._using_emulator = detect_emulator(connection)
136
+ self._job_retry_deadline = float(features.get("job_retry_deadline", 60.0))
137
+ self._job_retry = build_retry(self._job_retry_deadline, self._using_emulator)
138
+
139
+ # ─────────────────────────────────────────────────────────────────────────────
140
+ # CORE DISPATCH METHODS
141
+ # ─────────────────────────────────────────────────────────────────────────────
142
+
143
+ def dispatch_execute(self, cursor: Any, statement: "SQL") -> ExecutionResult:
144
+ """Execute single SQL statement with BigQuery data handling.
145
+
146
+ Args:
147
+ cursor: BigQuery cursor object
148
+ statement: SQL statement to execute
149
+
150
+ Returns:
151
+ ExecutionResult with query results and metadata
152
+ """
153
+ sql, parameters = self._get_compiled_sql(statement, self.statement_config)
154
+ cursor.job = run_query_job(
155
+ cursor,
156
+ sql,
157
+ parameters,
158
+ default_job_config=self._default_query_job_config,
159
+ job_config=None,
160
+ json_serializer=self._json_serializer,
161
+ )
162
+ job_result = cursor.job.result(job_retry=self._job_retry)
163
+ statement_type = str(cursor.job.statement_type or "").upper()
164
+ is_select_like = (
165
+ statement.returns_rows() or statement_type == "SELECT" or self._should_force_select(statement, cursor)
166
+ )
167
+
168
+ if is_select_like:
169
+ job_schema = cursor.job.schema or getattr(job_result, "schema", None)
170
+ column_names = resolve_column_names(job_schema, self._column_name_cache)
171
+ rows_list, _ = collect_rows(job_result, job_schema, column_names=column_names)
172
+
173
+ return self.create_execution_result(
174
+ cursor,
175
+ selected_data=rows_list,
176
+ column_names=column_names,
177
+ data_row_count=len(rows_list),
178
+ is_select_result=True,
179
+ row_format="record",
180
+ )
181
+
182
+ affected_rows = build_dml_rowcount(cursor.job, 0)
183
+ return self.create_execution_result(cursor, rowcount_override=affected_rows)
184
+
185
+ def dispatch_execute_many(self, cursor: Any, statement: "SQL") -> ExecutionResult:
186
+ """BigQuery execute_many with Parquet bulk load optimization.
187
+
188
+ Uses Parquet bulk load for INSERT operations (fast path) and falls back
189
+ to literal inlining for UPDATE/DELETE operations.
190
+
191
+ Args:
192
+ cursor: BigQuery cursor object
193
+ statement: SQL statement to execute with multiple parameter sets
194
+
195
+ Returns:
196
+ ExecutionResult with batch execution details
197
+ """
198
+ compiled_statement, prepared_parameters = self._get_compiled_statement(statement, self.statement_config)
199
+ sql = compiled_statement.compiled_sql
200
+ parsed_expression = compiled_statement.expression
201
+
202
+ if not prepared_parameters:
203
+ return self.create_execution_result(cursor, rowcount_override=0, is_many_result=True)
204
+
205
+ if isinstance(prepared_parameters, tuple):
206
+ prepared_parameters = list(prepared_parameters)
207
+
208
+ if not isinstance(prepared_parameters, list):
209
+ return self.create_execution_result(cursor, rowcount_override=0, is_many_result=True)
210
+
211
+ allow_parse = statement.statement_config.enable_parsing
212
+ if is_simple_insert(sql, parsed_expression, allow_parse=allow_parse):
213
+ rowcount = try_bulk_insert(
214
+ self.connection, sql, prepared_parameters, parsed_expression, allow_parse=allow_parse
215
+ )
216
+ if rowcount is not None:
217
+ return self.create_execution_result(cursor, rowcount_override=rowcount, is_many_result=True)
218
+
219
+ script_sql = build_inlined_script(
220
+ sql, prepared_parameters, parsed_expression, allow_parse=allow_parse, literal_inliner=self._literal_inliner
221
+ )
222
+ cursor.job = run_query_job(
223
+ cursor,
224
+ script_sql,
225
+ None,
226
+ default_job_config=self._default_query_job_config,
227
+ job_config=None,
228
+ json_serializer=self._json_serializer,
229
+ )
230
+ cursor.job.result(job_retry=self._job_retry)
231
+ affected_rows = build_dml_rowcount(cursor.job, len(prepared_parameters))
232
+ return self.create_execution_result(cursor, rowcount_override=affected_rows, is_many_result=True)
233
+
234
+ def dispatch_execute_script(self, cursor: Any, statement: "SQL") -> ExecutionResult:
235
+ """Execute SQL script with statement splitting and parameter handling.
236
+
237
+ Parameters are embedded as static values for script execution compatibility.
238
+
239
+ Args:
240
+ cursor: BigQuery cursor object
241
+ statement: SQL statement to execute
242
+
243
+ Returns:
244
+ ExecutionResult with script execution details
245
+ """
246
+ sql, prepared_parameters = self._get_compiled_sql(statement, self.statement_config)
247
+ statements = self.split_script_statements(sql, statement.statement_config, strip_trailing_semicolon=True)
248
+
249
+ successful_count = 0
250
+ last_job = None
251
+ last_rowcount = 0
252
+
253
+ for stmt in statements:
254
+ job = run_query_job(
255
+ cursor,
256
+ stmt,
257
+ prepared_parameters or {},
258
+ default_job_config=self._default_query_job_config,
259
+ job_config=None,
260
+ json_serializer=self._json_serializer,
261
+ )
262
+ job.result(job_retry=self._job_retry)
263
+ last_job = job
264
+ last_rowcount = normalize_script_rowcount(last_rowcount, job)
265
+ successful_count += 1
266
+
267
+ cursor.job = last_job
268
+
269
+ return self.create_execution_result(
270
+ cursor,
271
+ statement_count=len(statements),
272
+ successful_statements=successful_count,
273
+ rowcount_override=last_rowcount,
274
+ is_script_result=True,
275
+ )
276
+
277
+ # ─────────────────────────────────────────────────────────────────────────────
278
+ # TRANSACTION MANAGEMENT
279
+ # ─────────────────────────────────────────────────────────────────────────────
280
+
281
+ def begin(self) -> None:
282
+ """Begin transaction - BigQuery doesn't support transactions."""
283
+
284
+ def commit(self) -> None:
285
+ """Commit transaction - BigQuery doesn't support transactions."""
286
+
287
+ def rollback(self) -> None:
288
+ """Rollback transaction - BigQuery doesn't support transactions."""
289
+
290
+ def with_cursor(self, connection: "BigQueryConnection") -> "BigQueryCursor":
291
+ """Create context manager for cursor management.
292
+
293
+ Returns:
294
+ BigQueryCursor: Cursor object for query execution
295
+ """
296
+ return BigQueryCursor(connection)
297
+
298
+ def handle_database_exceptions(self) -> "BigQueryExceptionHandler":
299
+ """Handle database-specific exceptions and wrap them appropriately."""
300
+ return BigQueryExceptionHandler()
301
+
302
+ # ─────────────────────────────────────────────────────────────────────────────
303
+ # ARROW API METHODS
304
+ # ─────────────────────────────────────────────────────────────────────────────
305
+
306
+ def select_to_arrow(
307
+ self,
308
+ statement: "Statement | QueryBuilder",
309
+ /,
310
+ *parameters: "StatementParameters | StatementFilter",
311
+ statement_config: "StatementConfig | None" = None,
312
+ return_format: "ArrowReturnFormat" = "table",
313
+ native_only: bool = False,
314
+ batch_size: int | None = None,
315
+ arrow_schema: Any = None,
316
+ **kwargs: Any,
317
+ ) -> "ArrowResult":
318
+ """Execute query and return results as Apache Arrow (BigQuery native with Storage API).
319
+
320
+ BigQuery provides native Arrow via Storage API (query_job.to_arrow()).
321
+ Requires google-cloud-bigquery-storage package and API enabled.
322
+ Falls back to dict conversion if Storage API not available.
323
+
324
+ Args:
325
+ statement: SQL statement, string, or QueryBuilder
326
+ *parameters: Query parameters or filters
327
+ statement_config: Optional statement configuration override
328
+ return_format: "table" for pyarrow.Table (default), "batch" for RecordBatch,
329
+ "batches" for list of RecordBatch, "reader" for RecordBatchReader
330
+ native_only: If True, raise error if Storage API unavailable (default: False)
331
+ batch_size: Batch size hint (for future streaming implementation)
332
+ arrow_schema: Optional pyarrow.Schema for type casting
333
+ **kwargs: Additional keyword arguments
334
+
335
+ Returns:
336
+ ArrowResult with native Arrow data (if Storage API available) or converted data
337
+
338
+ Raises:
339
+ MissingDependencyError: If pyarrow not installed, or if Storage API not available and native_only=True
340
+
341
+ Example:
342
+ >>> # Will use native Arrow if Storage API available, otherwise converts
343
+ >>> result = driver.select_to_arrow(
344
+ ... "SELECT * FROM dataset.users WHERE age > @age",
345
+ ... {"age": 18},
346
+ ... )
347
+ >>> df = result.to_pandas()
348
+
349
+ >>> # Force native Arrow (raises if Storage API unavailable)
350
+ >>> result = driver.select_to_arrow(
351
+ ... "SELECT * FROM dataset.users", native_only=True
352
+ ... )
353
+ """
354
+ ensure_pyarrow()
355
+
356
+ if not storage_api_available():
357
+ if native_only:
358
+ msg = (
359
+ "BigQuery native Arrow requires Storage API.\n"
360
+ "1. Install: pip install google-cloud-bigquery-storage\n"
361
+ "2. Enable API: https://console.cloud.google.com/apis/library/bigquerystorage.googleapis.com\n"
362
+ "3. Grant permissions: roles/bigquery.dataViewer"
363
+ )
364
+ raise MissingDependencyError(
365
+ package="google-cloud-bigquery-storage", install_package="google-cloud-bigquery-storage"
366
+ ) from RuntimeError(msg)
367
+
368
+ # Fallback to conversion path
369
+ result: ArrowResult = super().select_to_arrow(
370
+ statement,
371
+ *parameters,
372
+ statement_config=statement_config,
373
+ return_format=return_format,
374
+ native_only=native_only,
375
+ batch_size=batch_size,
376
+ arrow_schema=arrow_schema,
377
+ **kwargs,
378
+ )
379
+ return result
380
+
381
+ # Use native path with Storage API
382
+ # Prepare statement
383
+ config = statement_config or self.statement_config
384
+ prepared_statement = self.prepare_statement(statement, parameters, statement_config=config, kwargs=kwargs)
385
+
386
+ # Get compiled SQL and parameters
387
+ sql, driver_params = self._get_compiled_sql(prepared_statement, config)
388
+
389
+ exc_handler = self.handle_database_exceptions()
390
+ arrow_result: ArrowResult | None = None
391
+
392
+ with exc_handler:
393
+ query_job = run_query_job(
394
+ self.connection,
395
+ sql,
396
+ driver_params,
397
+ default_job_config=self._default_query_job_config,
398
+ job_config=None,
399
+ json_serializer=self._json_serializer,
400
+ )
401
+ query_job.result() # Wait for completion
402
+
403
+ # Native Arrow via Storage API
404
+ arrow_table = query_job.to_arrow()
405
+
406
+ arrow_result = build_arrow_result_from_table(
407
+ prepared_statement,
408
+ arrow_table,
409
+ return_format=return_format,
410
+ batch_size=batch_size,
411
+ arrow_schema=arrow_schema,
412
+ )
413
+
414
+ if exc_handler.pending_exception is not None:
415
+ raise exc_handler.pending_exception from None
416
+
417
+ if arrow_result is None:
418
+ msg = "Unreachable"
419
+ raise RuntimeError(msg) # pragma: no cover
420
+
421
+ return arrow_result
422
+
423
+ # ─────────────────────────────────────────────────────────────────────────────
424
+ # STORAGE API METHODS
425
+ # ─────────────────────────────────────────────────────────────────────────────
426
+
427
+ def select_to_storage(
428
+ self,
429
+ statement: "Statement | QueryBuilder | SQL | str",
430
+ destination: "StorageDestination",
431
+ /,
432
+ *parameters: "StatementParameters | StatementFilter",
433
+ statement_config: "StatementConfig | None" = None,
434
+ partitioner: "dict[str, object] | None" = None,
435
+ format_hint: "StorageFormat | None" = None,
436
+ telemetry: "StorageTelemetry | None" = None,
437
+ **kwargs: Any,
438
+ ) -> "StorageBridgeJob":
439
+ """Execute a query and persist Arrow results to a storage backend."""
440
+
441
+ self._require_capability("arrow_export_enabled")
442
+ arrow_result = self.select_to_arrow(statement, *parameters, statement_config=statement_config, **kwargs)
443
+ sync_pipeline = self._storage_pipeline()
444
+ telemetry_payload = self._write_result_to_storage_sync(
445
+ arrow_result, destination, format_hint=format_hint, pipeline=sync_pipeline
446
+ )
447
+ self._attach_partition_telemetry(telemetry_payload, partitioner)
448
+ return self._create_storage_job(telemetry_payload, telemetry)
449
+
450
+ def load_from_arrow(
451
+ self,
452
+ table: str,
453
+ source: "ArrowResult | Any",
454
+ *,
455
+ partitioner: "dict[str, object] | None" = None,
456
+ overwrite: bool = False,
457
+ telemetry: "StorageTelemetry | None" = None,
458
+ ) -> "StorageBridgeJob":
459
+ """Load Arrow data by uploading a temporary Parquet payload to BigQuery."""
460
+
461
+ self._require_capability("parquet_import_enabled")
462
+ arrow_table = self._coerce_arrow_table(source)
463
+ ensure_pyarrow()
464
+
465
+ import pyarrow.parquet as pq
466
+
467
+ buffer = io.BytesIO()
468
+ pq.write_table(arrow_table, buffer)
469
+ buffer.seek(0)
470
+ job_config = build_load_job_config("parquet", overwrite)
471
+ job = self.connection.load_table_from_file(buffer, table, job_config=job_config)
472
+ job.result()
473
+ telemetry_payload = build_load_job_telemetry(job, table, format_label="parquet")
474
+ if telemetry:
475
+ telemetry_payload.setdefault("extra", {})
476
+ telemetry_payload["extra"]["arrow_rows"] = telemetry.get("rows_processed")
477
+ self._attach_partition_telemetry(telemetry_payload, partitioner)
478
+ return self._create_storage_job(telemetry_payload)
479
+
480
+ def load_from_storage(
481
+ self,
482
+ table: str,
483
+ source: "StorageDestination",
484
+ *,
485
+ file_format: "StorageFormat",
486
+ partitioner: "dict[str, object] | None" = None,
487
+ overwrite: bool = False,
488
+ ) -> "StorageBridgeJob":
489
+ """Load staged artifacts from storage into BigQuery."""
490
+
491
+ if file_format != "parquet":
492
+ msg = "BigQuery storage bridge currently supports Parquet ingest only"
493
+ raise StorageCapabilityError(msg, capability="parquet_import_enabled")
494
+ job_config = build_load_job_config(file_format, overwrite)
495
+ job = self.connection.load_table_from_uri(source, table, job_config=job_config)
496
+ job.result()
497
+ telemetry_payload = build_load_job_telemetry(job, table, format_label=file_format)
498
+ self._attach_partition_telemetry(telemetry_payload, partitioner)
499
+ return self._create_storage_job(telemetry_payload)
500
+
501
+ # ─────────────────────────────────────────────────────────────────────────────
502
+ # UTILITY METHODS
503
+ # ─────────────────────────────────────────────────────────────────────────────
504
+
505
+ @property
506
+ def data_dictionary(self) -> "BigQueryDataDictionary":
507
+ """Get the data dictionary for this driver.
508
+
509
+ Returns:
510
+ Data dictionary instance for metadata queries
511
+ """
512
+ if self._data_dictionary is None:
513
+ self._data_dictionary = BigQueryDataDictionary()
514
+ return self._data_dictionary
515
+
516
+ # ─────────────────────────────────────────────────────────────────────────────
517
+ # PRIVATE / INTERNAL METHODS
518
+ # ─────────────────────────────────────────────────────────────────────────────
519
+
520
+ def collect_rows(self, cursor: Any, fetched: "list[Any]") -> "tuple[list[Any], list[str], int]":
521
+ """Collect BigQuery rows for the direct execution path."""
522
+ schema = cursor.job.schema if cursor.job else None
523
+ column_names = resolve_column_names(schema, self._column_name_cache)
524
+ data, _ = collect_rows(fetched, schema, column_names=column_names)
525
+ return data, column_names, len(data)
526
+
527
+ def resolve_rowcount(self, cursor: Any) -> int:
528
+ """Resolve rowcount from BigQuery job for the direct execution path."""
529
+ return build_dml_rowcount(cursor.job, 0) if cursor.job else 0
530
+
531
+ def _connection_in_transaction(self) -> bool:
532
+ """Check if connection is in transaction.
533
+
534
+ BigQuery does not support transactions.
535
+
536
+ Returns:
537
+ False - BigQuery has no transaction support.
538
+ """
539
+ return False
540
+
541
+
542
+ register_driver_profile("bigquery", driver_profile)
@@ -0,0 +1,5 @@
1
+ """Events helpers for the BigQuery adapter."""
2
+
3
+ from sqlspec.adapters.bigquery.events.store import BigQueryEventQueueStore
4
+
5
+ __all__ = ("BigQueryEventQueueStore",)