hare-orm 0.9.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2267) hide show
  1. hare/__init__.py +47 -0
  2. hare/__main__.py +8 -0
  3. hare/classes/__init__.py +1 -0
  4. hare/classes/class_path.py +50 -0
  5. hare/classes/class_property.py +18 -0
  6. hare/classes/comparable_values.py +113 -0
  7. hare/classes/constants.py +11 -0
  8. hare/classes/declared_subclass.py +26 -0
  9. hare/classes/lazy_exports.py +56 -0
  10. hare/classes/shown_value_repr.py +21 -0
  11. hare/classes/value_descriptions.py +81 -0
  12. hare/cli/__init__.py +3 -0
  13. hare/cli/__main__.py +7 -0
  14. hare/cli/arg_parser_builder.py +344 -0
  15. hare/cli/commands/__init__.py +0 -0
  16. hare/cli/commands/database_shell_commands.py +56 -0
  17. hare/cli/commands/distributed_recovery_commands.py +86 -0
  18. hare/cli/commands/interactive_rename_questions.py +30 -0
  19. hare/cli/commands/migration_commands.py +579 -0
  20. hare/cli/commands/schema_commands.py +123 -0
  21. hare/cli/commands/stub_commands.py +52 -0
  22. hare/cli/config_locator.py +37 -0
  23. hare/cli/constants.py +24 -0
  24. hare/cli/context/__init__.py +9 -0
  25. hare/cli/context/cli_context.py +17 -0
  26. hare/cli/context/command_context.py +108 -0
  27. hare/cli/exceptions.py +9 -0
  28. hare/cli/hare_cli.py +111 -0
  29. hare/cli/output/__init__.py +1 -0
  30. hare/cli/output/output_formatter.py +145 -0
  31. hare/cli/output/terminal_colors.py +89 -0
  32. hare/cli/plugins/__init__.py +16 -0
  33. hare/cli/plugins/cli_command.py +43 -0
  34. hare/cli/plugins/cli_command_registry.py +144 -0
  35. hare/cli/plugins/loaded_cli_command.py +13 -0
  36. hare/cli/shell_launcher.py +95 -0
  37. hare/contrib/__init__.py +0 -0
  38. hare/contrib/application_lifecycle.py +157 -0
  39. hare/contrib/factories/__init__.py +39 -0
  40. hare/contrib/factories/constants.py +21 -0
  41. hare/contrib/factories/factory_reference.py +27 -0
  42. hare/contrib/factories/field_declarations/__init__.py +1 -0
  43. hare/contrib/factories/field_declarations/declaration.py +19 -0
  44. hare/contrib/factories/field_declarations/faker.py +49 -0
  45. hare/contrib/factories/field_declarations/iterator.py +36 -0
  46. hare/contrib/factories/field_declarations/lazy_attribute.py +35 -0
  47. hare/contrib/factories/field_declarations/lazy_function.py +22 -0
  48. hare/contrib/factories/field_declarations/many_to_many.py +40 -0
  49. hare/contrib/factories/field_declarations/post_declaration.py +22 -0
  50. hare/contrib/factories/field_declarations/related_factory.py +37 -0
  51. hare/contrib/factories/field_declarations/sequence.py +22 -0
  52. hare/contrib/factories/field_declarations/sub_factory.py +30 -0
  53. hare/contrib/factories/model_factory.py +284 -0
  54. hare/contrib/factories/trait.py +23 -0
  55. hare/contrib/frameworks/__init__.py +14 -0
  56. hare/contrib/frameworks/constants.py +45 -0
  57. hare/contrib/frameworks/error_answers.py +93 -0
  58. hare/contrib/frameworks/exceptions.py +19 -0
  59. hare/contrib/frameworks/fastapi/__init__.py +12 -0
  60. hare/contrib/frameworks/fastapi/constants.py +4 -0
  61. hare/contrib/frameworks/fastapi/hare_exception_handlers.py +103 -0
  62. hare/contrib/frameworks/fastapi/hare_fast_api.py +139 -0
  63. hare/contrib/frameworks/fastapi/middleware/__init__.py +7 -0
  64. hare/contrib/frameworks/fastapi/middleware/request_state_reset_middleware.py +27 -0
  65. hare/contrib/frameworks/fastapi/middleware/transaction_failing_handler.py +31 -0
  66. hare/contrib/frameworks/fastapi/middleware/transaction_middleware.py +72 -0
  67. hare/contrib/frameworks/fastapi/request_query_dependency.py +88 -0
  68. hare/contrib/frameworks/hare_lifecycle.py +50 -0
  69. hare/contrib/frameworks/health_routes.py +101 -0
  70. hare/contrib/frameworks/litestar/__init__.py +14 -0
  71. hare/contrib/frameworks/litestar/constants.py +18 -0
  72. hare/contrib/frameworks/litestar/hare_dto.py +194 -0
  73. hare/contrib/frameworks/litestar/hare_exception_handlers.py +77 -0
  74. hare/contrib/frameworks/litestar/hare_plugin.py +181 -0
  75. hare/contrib/frameworks/litestar/hare_transfer_function_factory.py +38 -0
  76. hare/contrib/frameworks/litestar/middleware/__init__.py +7 -0
  77. hare/contrib/frameworks/litestar/middleware/request_state_reset_middleware.py +23 -0
  78. hare/contrib/frameworks/litestar/middleware/transaction_middleware.py +35 -0
  79. hare/contrib/frameworks/litestar/request_query_di_plugin.py +96 -0
  80. hare/contrib/frameworks/pages/__init__.py +22 -0
  81. hare/contrib/frameworks/pages/cursor_page_schema.py +25 -0
  82. hare/contrib/frameworks/pages/page_schema.py +25 -0
  83. hare/contrib/frameworks/pages/scroll_page_schema.py +23 -0
  84. hare/contrib/frameworks/parameter_annotation.py +110 -0
  85. hare/contrib/frameworks/request_state.py +16 -0
  86. hare/contrib/frameworks/request_transaction.py +186 -0
  87. hare/contrib/frameworks/robyn/__init__.py +13 -0
  88. hare/contrib/frameworks/robyn/application/__init__.py +11 -0
  89. hare/contrib/frameworks/robyn/application/hare_robyn.py +199 -0
  90. hare/contrib/frameworks/robyn/application/hare_sub_router.py +50 -0
  91. hare/contrib/frameworks/robyn/constants.py +32 -0
  92. hare/contrib/frameworks/robyn/hare_exception_handlers.py +128 -0
  93. hare/contrib/frameworks/robyn/hare_open_api.py +91 -0
  94. hare/contrib/frameworks/robyn/route_handler.py +198 -0
  95. hare/contrib/mypy/__init__.py +11 -0
  96. hare/contrib/mypy/annotation_types.py +170 -0
  97. hare/contrib/mypy/constants.py +83 -0
  98. hare/contrib/mypy/enums.py +18 -0
  99. hare/contrib/mypy/field_names_check.py +222 -0
  100. hare/contrib/mypy/filter_arguments_check.py +129 -0
  101. hare/contrib/mypy/hare_mypy_plugin.py +166 -0
  102. hare/contrib/mypy/instance_attribute_types.py +137 -0
  103. hare/contrib/mypy/model_registry.py +127 -0
  104. hare/contrib/mypy/mypy_types.py +383 -0
  105. hare/contrib/mypy/queryset_extension_methods.py +109 -0
  106. hare/contrib/mypy/values_row_types.py +146 -0
  107. hare/contrib/mypy/write_arguments_check.py +159 -0
  108. hare/contrib/notify/__init__.py +5 -0
  109. hare/contrib/notify/constants.py +14 -0
  110. hare/contrib/notify/notification_listener.py +317 -0
  111. hare/contrib/opentelemetry/__init__.py +16 -0
  112. hare/contrib/opentelemetry/constants.py +31 -0
  113. hare/contrib/opentelemetry/open_telemetry_instrumentor.py +60 -0
  114. hare/contrib/opentelemetry/pool_metric_instruments.py +210 -0
  115. hare/contrib/opentelemetry/query_spans.py +69 -0
  116. hare/contrib/outbox/__init__.py +65 -0
  117. hare/contrib/outbox/broker_arguments.py +40 -0
  118. hare/contrib/outbox/brokers/__init__.py +1 -0
  119. hare/contrib/outbox/brokers/rabbitmq_connection.py +55 -0
  120. hare/contrib/outbox/brokers/redis_connection.py +42 -0
  121. hare/contrib/outbox/capture/__init__.py +6 -0
  122. hare/contrib/outbox/capture/change_capture.py +366 -0
  123. hare/contrib/outbox/capture/change_extension.py +22 -0
  124. hare/contrib/outbox/capture/constants.py +19 -0
  125. hare/contrib/outbox/constants.py +31 -0
  126. hare/contrib/outbox/deliveries/__init__.py +22 -0
  127. hare/contrib/outbox/deliveries/callable_delivery.py +44 -0
  128. hare/contrib/outbox/deliveries/constants.py +19 -0
  129. hare/contrib/outbox/deliveries/kafka_delivery.py +124 -0
  130. hare/contrib/outbox/deliveries/outbox_delivery.py +106 -0
  131. hare/contrib/outbox/deliveries/rabbitmq_delivery.py +63 -0
  132. hare/contrib/outbox/deliveries/redis_streams_delivery.py +110 -0
  133. hare/contrib/outbox/deliveries/topic_router.py +103 -0
  134. hare/contrib/outbox/deliveries/webhook_delivery.py +106 -0
  135. hare/contrib/outbox/exceptions.py +7 -0
  136. hare/contrib/outbox/outbox_event.py +362 -0
  137. hare/contrib/outbox/outbox_json_encoding.py +87 -0
  138. hare/contrib/outbox/relay/__init__.py +7 -0
  139. hare/contrib/outbox/relay/constants.py +41 -0
  140. hare/contrib/outbox/relay/declarations.py +76 -0
  141. hare/contrib/outbox/relay/outbox_backlog.py +18 -0
  142. hare/contrib/outbox/relay/outbox_relay.py +646 -0
  143. hare/contrib/outbox/wakeups/__init__.py +20 -0
  144. hare/contrib/outbox/wakeups/constants.py +20 -0
  145. hare/contrib/outbox/wakeups/in_process_wakeup.py +17 -0
  146. hare/contrib/outbox/wakeups/kafka_wakeup.py +123 -0
  147. hare/contrib/outbox/wakeups/listen_notify_wakeup.py +75 -0
  148. hare/contrib/outbox/wakeups/outbox_wakeup.py +202 -0
  149. hare/contrib/outbox/wakeups/rabbitmq_wakeup.py +64 -0
  150. hare/contrib/outbox/wakeups/redis_wakeup.py +53 -0
  151. hare/contrib/pydantic/__init__.py +12 -0
  152. hare/contrib/pydantic/constants.py +41 -0
  153. hare/contrib/pydantic/creation/__init__.py +1 -0
  154. hare/contrib/pydantic/creation/computed_field_schemas.py +77 -0
  155. hare/contrib/pydantic/creation/data_field_schemas.py +230 -0
  156. hare/contrib/pydantic/creation/field_descriptions.py +17 -0
  157. hare/contrib/pydantic/creation/field_map.py +138 -0
  158. hare/contrib/pydantic/creation/generic_foreign_key_schemas.py +136 -0
  159. hare/contrib/pydantic/creation/generic_foreign_key_tag_reader.py +35 -0
  160. hare/contrib/pydantic/creation/model_annotations.py +44 -0
  161. hare/contrib/pydantic/creation/pydantic_creators.py +163 -0
  162. hare/contrib/pydantic/creation/pydantic_meta_reading.py +134 -0
  163. hare/contrib/pydantic/creation/pydantic_model_creator.py +434 -0
  164. hare/contrib/pydantic/creation/relation_field_schemas.py +269 -0
  165. hare/contrib/pydantic/descriptions/__init__.py +5 -0
  166. hare/contrib/pydantic/descriptions/computed_field_description.py +12 -0
  167. hare/contrib/pydantic/descriptions/model_description.py +69 -0
  168. hare/contrib/pydantic/descriptions/pydantic_meta_data.py +144 -0
  169. hare/contrib/pydantic/enums.py +12 -0
  170. hare/contrib/pydantic/models/__init__.py +9 -0
  171. hare/contrib/pydantic/models/pydantic_list_model.py +34 -0
  172. hare/contrib/pydantic/models/pydantic_model.py +292 -0
  173. hare/contrib/pytest/__init__.py +17 -0
  174. hare/contrib/pytest/constants.py +26 -0
  175. hare/contrib/pytest/hare_fixtures.py +112 -0
  176. hare/contrib/pytest/missing_pytest_asyncio_fixtures.py +34 -0
  177. hare/contrib/pytest/plugin.py +49 -0
  178. hare/contrib/repeated_queries/__init__.py +19 -0
  179. hare/contrib/repeated_queries/constants.py +10 -0
  180. hare/contrib/repeated_queries/repeated_query_collection.py +116 -0
  181. hare/contrib/repeated_queries/repeated_query_detector.py +227 -0
  182. hare/contrib/repeated_queries/repeated_query_entry.py +20 -0
  183. hare/contrib/repeated_queries/repeated_query_report.py +31 -0
  184. hare/contrib/repeated_queries/shape_stats.py +18 -0
  185. hare/contrib/request_query/__init__.py +71 -0
  186. hare/contrib/request_query/bounds/__init__.py +6 -0
  187. hare/contrib/request_query/bounds/constants.py +4 -0
  188. hare/contrib/request_query/bounds/lookup_pair_bounds.py +40 -0
  189. hare/contrib/request_query/bounds/parameter_bounds.py +41 -0
  190. hare/contrib/request_query/bounds/range_bounds.py +30 -0
  191. hare/contrib/request_query/constants.py +45 -0
  192. hare/contrib/request_query/declaration/__init__.py +6 -0
  193. hare/contrib/request_query/declaration/constants.py +19 -0
  194. hare/contrib/request_query/declaration/declaration_builder.py +515 -0
  195. hare/contrib/request_query/declaration/filter_declaration.py +25 -0
  196. hare/contrib/request_query/declaration/filter_parameter_builder.py +201 -0
  197. hare/contrib/request_query/declaration/parameter_filter.py +17 -0
  198. hare/contrib/request_query/declaration/request_query_declaration.py +138 -0
  199. hare/contrib/request_query/declaration/request_query_parameters.py +54 -0
  200. hare/contrib/request_query/declaration/request_query_registry.py +90 -0
  201. hare/contrib/request_query/descriptions/__init__.py +11 -0
  202. hare/contrib/request_query/descriptions/constants.py +11 -0
  203. hare/contrib/request_query/descriptions/parameter_choice.py +17 -0
  204. hare/contrib/request_query/descriptions/parameter_describer.py +240 -0
  205. hare/contrib/request_query/descriptions/parameter_description.py +66 -0
  206. hare/contrib/request_query/descriptions/relation_description.py +30 -0
  207. hare/contrib/request_query/enums.py +69 -0
  208. hare/contrib/request_query/exceptions.py +52 -0
  209. hare/contrib/request_query/options/__init__.py +33 -0
  210. hare/contrib/request_query/options/constants.py +25 -0
  211. hare/contrib/request_query/options/deleted_config.py +90 -0
  212. hare/contrib/request_query/options/fields_config.py +55 -0
  213. hare/contrib/request_query/options/filter.py +34 -0
  214. hare/contrib/request_query/options/filter_field.py +81 -0
  215. hare/contrib/request_query/options/in_path.py +12 -0
  216. hare/contrib/request_query/options/include_config.py +56 -0
  217. hare/contrib/request_query/options/latest_versions.py +71 -0
  218. hare/contrib/request_query/options/no_filter.py +11 -0
  219. hare/contrib/request_query/options/ordering_config.py +81 -0
  220. hare/contrib/request_query/options/parameter_field.py +27 -0
  221. hare/contrib/request_query/options/request_option.py +152 -0
  222. hare/contrib/request_query/options/search_config.py +83 -0
  223. hare/contrib/request_query/paginations/__init__.py +1 -0
  224. hare/contrib/request_query/paginations/base_offset_pagination.py +78 -0
  225. hare/contrib/request_query/paginations/constants.py +17 -0
  226. hare/contrib/request_query/paginations/cursor.py +83 -0
  227. hare/contrib/request_query/paginations/cursor_pagination.py +184 -0
  228. hare/contrib/request_query/paginations/offset_pagination.py +31 -0
  229. hare/contrib/request_query/paginations/pagination.py +120 -0
  230. hare/contrib/request_query/paginations/scroll_pagination.py +31 -0
  231. hare/contrib/request_query/request_query.py +1259 -0
  232. hare/contrib/request_query/results/__init__.py +11 -0
  233. hare/contrib/request_query/results/cursor_page.py +25 -0
  234. hare/contrib/request_query/results/page.py +25 -0
  235. hare/contrib/request_query/results/scroll_page.py +23 -0
  236. hare/contrib/request_query/row_changes.py +80 -0
  237. hare/contrib/request_query/types/__init__.py +15 -0
  238. hare/contrib/request_query/types/comma_separated.py +46 -0
  239. hare/contrib/request_query/types/constants.py +16 -0
  240. hare/contrib/request_query/types/generic_target.py +87 -0
  241. hare/contrib/request_query/types/key_columns.py +60 -0
  242. hare/contrib/request_query/types/text_parameter.py +18 -0
  243. hare/contrib/request_query/value_annotation.py +216 -0
  244. hare/contrib/request_query/value_counter.py +115 -0
  245. hare/contrib/request_query/value_target.py +50 -0
  246. hare/contrib/taskiq/__init__.py +15 -0
  247. hare/contrib/taskiq/constants.py +23 -0
  248. hare/contrib/taskiq/hare_taskiq.py +76 -0
  249. hare/contrib/taskiq/hare_taskiq_middleware.py +195 -0
  250. hare/contrib/taskiq/running_task.py +29 -0
  251. hare/contrib/taskiq/task_tenant_labels.py +102 -0
  252. hare/contrib/taskiq/taskiq_delivery.py +117 -0
  253. hare/contrib/test/__init__.py +39 -0
  254. hare/contrib/test/conditions/__init__.py +10 -0
  255. hare/contrib/test/conditions/condition.py +11 -0
  256. hare/contrib/test/conditions/in_condition.py +21 -0
  257. hare/contrib/test/conditions/not_eq.py +18 -0
  258. hare/contrib/test/conditions/not_in.py +21 -0
  259. hare/contrib/test/constants.py +18 -0
  260. hare/contrib/test/databases/__init__.py +1 -0
  261. hare/contrib/test/databases/kept_test_schema.py +51 -0
  262. hare/contrib/test/databases/model_truncation.py +128 -0
  263. hare/contrib/test/databases/reusable_test_databases.py +244 -0
  264. hare/contrib/test/databases/rollback_isolation.py +149 -0
  265. hare/contrib/test/databases/temporary_databases.py +118 -0
  266. hare/contrib/test/exceptions.py +5 -0
  267. hare/contrib/test/features/__init__.py +1 -0
  268. hare/contrib/test/features/feature_conditions.py +65 -0
  269. hare/contrib/test/features/feature_requirements.py +84 -0
  270. hare/contrib/test/isolated_contexts.py +144 -0
  271. hare/contrib/test/queries/__init__.py +1 -0
  272. hare/contrib/test/queries/query_counter.py +35 -0
  273. hare/contrib/test/queries/query_counting.py +59 -0
  274. hare/contrib/versioning/__init__.py +7 -0
  275. hare/contrib/versioning/constants.py +5 -0
  276. hare/contrib/versioning/versioned_model.py +139 -0
  277. hare/core/__init__.py +4 -0
  278. hare/core/apps/__init__.py +8 -0
  279. hare/core/apps/apps.py +693 -0
  280. hare/core/apps/cross_connection_checks.py +76 -0
  281. hare/core/apps/model_connection_checks.py +199 -0
  282. hare/core/apps/model_discovery.py +142 -0
  283. hare/core/apps/relation_linking.py +773 -0
  284. hare/core/apps/swappable_models.py +118 -0
  285. hare/core/apps/table_names.py +39 -0
  286. hare/core/caching/__init__.py +1 -0
  287. hare/core/caching/cache.py +426 -0
  288. hare/core/caching/caches.py +58 -0
  289. hare/core/caching/constants.py +13 -0
  290. hare/core/caching/declarations.py +8 -0
  291. hare/core/caching/forgettable_cache.py +16 -0
  292. hare/core/caching/model_cache.py +138 -0
  293. hare/core/config/__init__.py +25 -0
  294. hare/core/config/app_config.py +64 -0
  295. hare/core/config/cli_config.py +38 -0
  296. hare/core/config/config_secrets.py +101 -0
  297. hare/core/config/config_section.py +37 -0
  298. hare/core/config/connection_config.py +69 -0
  299. hare/core/config/constants.py +17 -0
  300. hare/core/config/db_url_config.py +24 -0
  301. hare/core/config/hare_config.py +407 -0
  302. hare/core/config/migration_safety_config.py +54 -0
  303. hare/core/config/migrations_config.py +72 -0
  304. hare/core/connections/__init__.py +1 -0
  305. hare/core/connections/connection_handler.py +457 -0
  306. hare/core/connections/connection_token.py +36 -0
  307. hare/core/connections/connections.py +133 -0
  308. hare/core/constants.py +40 -0
  309. hare/core/hare.py +205 -0
  310. hare/core/hare_context.py +854 -0
  311. hare/core/hare_meta.py +18 -0
  312. hare/core/log.py +6 -0
  313. hare/core/registries.py +22 -0
  314. hare/core/routing/__init__.py +5 -0
  315. hare/core/routing/connection_router.py +109 -0
  316. hare/core/routing/primary_reads.py +42 -0
  317. hare/core/routing/routing.py +28 -0
  318. hare/core/routing/written_connections.py +63 -0
  319. hare/ddl/__init__.py +57 -0
  320. hare/ddl/conditions/__init__.py +1 -0
  321. hare/ddl/conditions/constraint_condition.py +154 -0
  322. hare/ddl/conditions/exclusive_arc_condition.py +80 -0
  323. hare/ddl/conditions/tenant_condition.py +48 -0
  324. hare/ddl/conditions/trigger_condition.py +44 -0
  325. hare/ddl/constants.py +68 -0
  326. hare/ddl/constraints/__init__.py +7 -0
  327. hare/ddl/constraints/check_constraint.py +38 -0
  328. hare/ddl/constraints/exclusion_constraint.py +116 -0
  329. hare/ddl/constraints/foreign_key_constraint.py +39 -0
  330. hare/ddl/constraints/unique_constraint.py +150 -0
  331. hare/ddl/ddl_term_sql.py +45 -0
  332. hare/ddl/declared_names.py +47 -0
  333. hare/ddl/enums.py +117 -0
  334. hare/ddl/expressions/__init__.py +0 -0
  335. hare/ddl/expressions/declared_expressions.py +102 -0
  336. hare/ddl/expressions/expression_field_renaming.py +150 -0
  337. hare/ddl/generated_names.py +87 -0
  338. hare/ddl/indexes/__init__.py +11 -0
  339. hare/ddl/indexes/index.py +531 -0
  340. hare/ddl/indexes/ordered_index_key.py +27 -0
  341. hare/ddl/indexes/partial_index.py +75 -0
  342. hare/ddl/raw_sql_term.py +44 -0
  343. hare/ddl/schema_objects/__init__.py +12 -0
  344. hare/ddl/schema_objects/database_function.py +91 -0
  345. hare/ddl/schema_objects/database_sequence.py +87 -0
  346. hare/ddl/schema_objects/dictionary.py +69 -0
  347. hare/ddl/schema_objects/enum_type.py +24 -0
  348. hare/ddl/schema_objects/materialized_view.py +52 -0
  349. hare/ddl/schema_objects/named_schema_object.py +24 -0
  350. hare/ddl/schema_objects/trigger.py +151 -0
  351. hare/ddl/schema_objects/view.py +132 -0
  352. hare/ddl/security/__init__.py +8 -0
  353. hare/ddl/security/grant.py +106 -0
  354. hare/ddl/security/policy.py +92 -0
  355. hare/ddl/table_options.py +364 -0
  356. hare/dialects/__init__.py +0 -0
  357. hare/dialects/base/__init__.py +0 -0
  358. hare/dialects/base/clauses/__init__.py +1 -0
  359. hare/dialects/base/clauses/enums.py +37 -0
  360. hare/dialects/base/clauses/limit_returning_conflict_query_clauses.py +194 -0
  361. hare/dialects/base/clauses/merge_when_sql.py +24 -0
  362. hare/dialects/base/clauses/query_clauses.py +636 -0
  363. hare/dialects/base/client/__init__.py +16 -0
  364. hare/dialects/base/client/connect_failure_reports.py +49 -0
  365. hare/dialects/base/client/connection_ping.py +48 -0
  366. hare/dialects/base/client/connection_wrapper.py +126 -0
  367. hare/dialects/base/client/constants.py +41 -0
  368. hare/dialects/base/client/database_client.py +1187 -0
  369. hare/dialects/base/client/declarations.py +37 -0
  370. hare/dialects/base/client/driver_statement_log_filter.py +33 -0
  371. hare/dialects/base/client/password_provider.py +144 -0
  372. hare/dialects/base/client/pool/__init__.py +1 -0
  373. hare/dialects/base/client/pool/pool_connection_wrapper.py +37 -0
  374. hare/dialects/base/client/pool/pool_statistics.py +84 -0
  375. hare/dialects/base/client/pool/pool_timeouts.py +48 -0
  376. hare/dialects/base/client/transaction_client.py +621 -0
  377. hare/dialects/base/client/transaction_lifecycle/__init__.py +1 -0
  378. hare/dialects/base/client/transaction_lifecycle/pending_statements.py +74 -0
  379. hare/dialects/base/client/transaction_lifecycle/transaction_callbacks.py +128 -0
  380. hare/dialects/base/client/transaction_lifecycle/transaction_ending.py +360 -0
  381. hare/dialects/base/connection/__init__.py +1 -0
  382. hare/dialects/base/connection/connection_option.py +142 -0
  383. hare/dialects/base/connection/connection_options.py +69 -0
  384. hare/dialects/base/connection/constants.py +27 -0
  385. hare/dialects/base/connection/db_url_config_generator.py +194 -0
  386. hare/dialects/base/connection/driver.py +136 -0
  387. hare/dialects/base/constants.py +72 -0
  388. hare/dialects/base/dialect.py +360 -0
  389. hare/dialects/base/features.py +369 -0
  390. hare/dialects/base/literals/__init__.py +1 -0
  391. hare/dialects/base/literals/constants.py +12 -0
  392. hare/dialects/base/literals/sql_literals.py +254 -0
  393. hare/dialects/base/lookups/__init__.py +1 -0
  394. hare/dialects/base/lookups/filter_operators.py +171 -0
  395. hare/dialects/base/migration_safety/__init__.py +12 -0
  396. hare/dialects/base/migration_safety/add_field_backfill_rule.py +37 -0
  397. hare/dialects/base/migration_safety/alter_field_rewrite_rule.py +39 -0
  398. hare/dialects/base/migration_safety/constants.py +4 -0
  399. hare/dialects/base/migration_safety/delete_model_rule.py +33 -0
  400. hare/dialects/base/migration_safety/migration_safety_rule.py +45 -0
  401. hare/dialects/base/migration_safety/migration_safety_rules.py +72 -0
  402. hare/dialects/base/migration_safety/remove_field_rule.py +31 -0
  403. hare/dialects/base/migration_safety/rename_field_rule.py +41 -0
  404. hare/dialects/base/migration_safety/rename_model_rule.py +42 -0
  405. hare/dialects/base/migration_safety/run_sql_rule.py +27 -0
  406. hare/dialects/base/migration_safety/schema_change_with_run_python_rule.py +49 -0
  407. hare/dialects/base/parameters/__init__.py +1 -0
  408. hare/dialects/base/parameters/large_in_list.py +147 -0
  409. hare/dialects/base/parameters/sql_parameters.py +185 -0
  410. hare/dialects/base/renderers/__init__.py +7 -0
  411. hare/dialects/base/renderers/checked_term_renderers.py +61 -0
  412. hare/dialects/base/renderers/json_renderers.py +60 -0
  413. hare/dialects/base/renderers/term_renderers.py +508 -0
  414. hare/dialects/base/results/__init__.py +9 -0
  415. hare/dialects/base/results/described_result.py +22 -0
  416. hare/dialects/base/results/statement_result.py +53 -0
  417. hare/dialects/base/schema/__init__.py +0 -0
  418. hare/dialects/base/schema/base_schema_editor.py +1139 -0
  419. hare/dialects/base/schema/columns/__init__.py +1 -0
  420. hare/dialects/base/schema/columns/column_backfill.py +347 -0
  421. hare/dialects/base/schema/columns/column_conversion_check.py +51 -0
  422. hare/dialects/base/schema/columns/column_definitions.py +473 -0
  423. hare/dialects/base/schema/columns/column_narrowing_check.py +178 -0
  424. hare/dialects/base/schema/columns/column_renames.py +77 -0
  425. hare/dialects/base/schema/columns/column_type_changes.py +140 -0
  426. hare/dialects/base/schema/constants.py +30 -0
  427. hare/dialects/base/schema/constraints/__init__.py +1 -0
  428. hare/dialects/base/schema/constraints/constraint_names.py +45 -0
  429. hare/dialects/base/schema/constraints/constraint_statements.py +262 -0
  430. hare/dialects/base/schema/data/__init__.py +9 -0
  431. hare/dialects/base/schema/data/model_sql_data.py +41 -0
  432. hare/dialects/base/schema/data/referencing_key_columns.py +24 -0
  433. hare/dialects/base/schema/indexes/__init__.py +1 -0
  434. hare/dialects/base/schema/indexes/generated_index_names.py +180 -0
  435. hare/dialects/base/schema/indexes/index_statements.py +397 -0
  436. hare/dialects/base/schema/relations/__init__.py +1 -0
  437. hare/dialects/base/schema/relations/foreign_key_rebuild.py +480 -0
  438. hare/dialects/base/schema/relations/many_to_many_through_tables.py +285 -0
  439. hare/dialects/base/schema/runtime_statements/__init__.py +1 -0
  440. hare/dialects/base/schema/runtime_statements/table_clearing.py +54 -0
  441. hare/dialects/base/schema/runtime_statements/table_locks.py +34 -0
  442. hare/dialects/base/schema/runtime_statements/tenant_conditions.py +71 -0
  443. hare/dialects/base/schema/schema_editor_part.py +34 -0
  444. hare/dialects/base/schema/schema_objects/__init__.py +1 -0
  445. hare/dialects/base/schema/schema_objects/database_functions.py +74 -0
  446. hare/dialects/base/schema/schema_objects/dictionaries.py +75 -0
  447. hare/dialects/base/schema/schema_objects/enum_types.py +88 -0
  448. hare/dialects/base/schema/schema_objects/extensions.py +69 -0
  449. hare/dialects/base/schema/schema_objects/grants.py +49 -0
  450. hare/dialects/base/schema/schema_objects/materialized_views.py +111 -0
  451. hare/dialects/base/schema/schema_objects/row_level_security_policies.py +82 -0
  452. hare/dialects/base/schema/schema_objects/schemas.py +65 -0
  453. hare/dialects/base/schema/schema_objects/sequences.py +95 -0
  454. hare/dialects/base/schema/schema_objects/views.py +81 -0
  455. hare/dialects/base/schema/shadow/__init__.py +0 -0
  456. hare/dialects/base/schema/shadow/shadow_database.py +77 -0
  457. hare/dialects/base/schema/tables/__init__.py +1 -0
  458. hare/dialects/base/schema/tables/table_comments.py +92 -0
  459. hare/dialects/base/schema/tables/table_creation.py +742 -0
  460. hare/dialects/base/schema/tables/table_partitions.py +78 -0
  461. hare/dialects/base/schema/tables/table_rebuild.py +268 -0
  462. hare/dialects/base/schema/triggers/__init__.py +1 -0
  463. hare/dialects/base/schema/triggers/trigger_statements.py +85 -0
  464. hare/dialects/base/search/__init__.py +1 -0
  465. hare/dialects/base/search/text_search.py +135 -0
  466. hare/dialects/base/sql_dialect.py +23 -0
  467. hare/dialects/base/transactions/__init__.py +1 -0
  468. hare/dialects/base/transactions/constants.py +5 -0
  469. hare/dialects/base/transactions/contexts/__init__.py +1 -0
  470. hare/dialects/base/transactions/contexts/joined_transaction_context.py +36 -0
  471. hare/dialects/base/transactions/contexts/nested_transaction_context.py +149 -0
  472. hare/dialects/base/transactions/contexts/non_transactional_context.py +32 -0
  473. hare/dialects/base/transactions/contexts/top_level_transaction_context.py +79 -0
  474. hare/dialects/base/transactions/contexts/transaction_context.py +148 -0
  475. hare/dialects/base/transactions/savepoints/__init__.py +1 -0
  476. hare/dialects/base/transactions/savepoints/nested_savepoint_lock.py +152 -0
  477. hare/dialects/base/transactions/savepoints/savepoint_span.py +51 -0
  478. hare/dialects/base/transactions/transaction_callback.py +32 -0
  479. hare/dialects/base/transactions/transaction_statements.py +128 -0
  480. hare/dialects/base/transactions/two_phase_commit.py +134 -0
  481. hare/dialects/base/types/__init__.py +9 -0
  482. hare/dialects/base/types/type_mapping.py +63 -0
  483. hare/dialects/base/types/type_registry.py +395 -0
  484. hare/dialects/clickhouse/__init__.py +1 -0
  485. hare/dialects/clickhouse/clauses/__init__.py +1 -0
  486. hare/dialects/clickhouse/clauses/clickhouse_query_clauses.py +475 -0
  487. hare/dialects/clickhouse/clauses/constants.py +42 -0
  488. hare/dialects/clickhouse/clickhouse_dialect.py +260 -0
  489. hare/dialects/clickhouse/clickhouse_introspector.py +414 -0
  490. hare/dialects/clickhouse/clickhouse_table_options.py +727 -0
  491. hare/dialects/clickhouse/client/__init__.py +1 -0
  492. hare/dialects/clickhouse/client/clickhouse_client.py +913 -0
  493. hare/dialects/clickhouse/client/clickhouse_connection.py +30 -0
  494. hare/dialects/clickhouse/client/clickhouse_error_codes.py +26 -0
  495. hare/dialects/clickhouse/client/clickhouse_external_sets.py +109 -0
  496. hare/dialects/clickhouse/client/clickhouse_query_templates.py +79 -0
  497. hare/dialects/clickhouse/client/clickhouse_statement_result.py +15 -0
  498. hare/dialects/clickhouse/client/clickhouse_streamed_row.py +52 -0
  499. hare/dialects/clickhouse/client/clickhouse_transaction_client.py +188 -0
  500. hare/dialects/clickhouse/client/constants.py +211 -0
  501. hare/dialects/clickhouse/client/declarations.py +47 -0
  502. hare/dialects/clickhouse/cluster/__init__.py +0 -0
  503. hare/dialects/clickhouse/cluster/clickhouse_cluster.py +162 -0
  504. hare/dialects/clickhouse/cluster/clickhouse_cluster_statements.py +154 -0
  505. hare/dialects/clickhouse/cluster/constants.py +82 -0
  506. hare/dialects/clickhouse/connection/__init__.py +1 -0
  507. hare/dialects/clickhouse/connection/clickhouse_driver.py +40 -0
  508. hare/dialects/clickhouse/constants.py +226 -0
  509. hare/dialects/clickhouse/drivers/__init__.py +1 -0
  510. hare/dialects/clickhouse/drivers/clickhouse_connect/__init__.py +1 -0
  511. hare/dialects/clickhouse/drivers/clickhouse_connect/clickhouse_connect_driver.py +43 -0
  512. hare/dialects/clickhouse/drivers/clickhouse_connect/client/__init__.py +1 -0
  513. hare/dialects/clickhouse/drivers/clickhouse_connect/client/clickhouse_connect_client.py +390 -0
  514. hare/dialects/clickhouse/drivers/clickhouse_connect/client/clickhouse_connect_dynamic_type.py +76 -0
  515. hare/dialects/clickhouse/drivers/clickhouse_connect/client/clickhouse_connect_totals_query.py +70 -0
  516. hare/dialects/clickhouse/drivers/clickhouse_connect/client/clickhouse_connect_transaction_client.py +56 -0
  517. hare/dialects/clickhouse/drivers/clickhouse_connect/client/clickhouse_connect_whole_response_query.py +127 -0
  518. hare/dialects/clickhouse/drivers/clickhouse_connect/client/clickhouse_json_compact_values.py +96 -0
  519. hare/dialects/clickhouse/drivers/clickhouse_connect/constants.py +60 -0
  520. hare/dialects/clickhouse/drivers/clickhouse_driver/__init__.py +1 -0
  521. hare/dialects/clickhouse/drivers/clickhouse_driver/clickhouse_driver_driver.py +48 -0
  522. hare/dialects/clickhouse/drivers/clickhouse_driver/client/__init__.py +1 -0
  523. hare/dialects/clickhouse/drivers/clickhouse_driver/client/clickhouse_driver_client.py +361 -0
  524. hare/dialects/clickhouse/drivers/clickhouse_driver/client/clickhouse_driver_client_info.py +70 -0
  525. hare/dialects/clickhouse/drivers/clickhouse_driver/client/clickhouse_driver_column_types.py +104 -0
  526. hare/dialects/clickhouse/drivers/clickhouse_driver/client/clickhouse_driver_connections.py +189 -0
  527. hare/dialects/clickhouse/drivers/clickhouse_driver/client/clickhouse_driver_decompressors.py +48 -0
  528. hare/dialects/clickhouse/drivers/clickhouse_driver/client/clickhouse_driver_dynamic_column.py +51 -0
  529. hare/dialects/clickhouse/drivers/clickhouse_driver/client/clickhouse_driver_library_client.py +239 -0
  530. hare/dialects/clickhouse/drivers/clickhouse_driver/client/clickhouse_driver_library_connection.py +16 -0
  531. hare/dialects/clickhouse/drivers/clickhouse_driver/client/clickhouse_driver_map_columns.py +49 -0
  532. hare/dialects/clickhouse/drivers/clickhouse_driver/client/clickhouse_driver_moment_columns.py +85 -0
  533. hare/dialects/clickhouse/drivers/clickhouse_driver/client/clickhouse_driver_query_result.py +24 -0
  534. hare/dialects/clickhouse/drivers/clickhouse_driver/client/clickhouse_driver_row_stream.py +127 -0
  535. hare/dialects/clickhouse/drivers/clickhouse_driver/client/clickhouse_driver_service_block_stream.py +95 -0
  536. hare/dialects/clickhouse/drivers/clickhouse_driver/client/clickhouse_driver_settings.py +62 -0
  537. hare/dialects/clickhouse/drivers/clickhouse_driver/client/clickhouse_driver_transaction_client.py +23 -0
  538. hare/dialects/clickhouse/drivers/clickhouse_driver/client/clickhouse_driver_tuple_columns.py +38 -0
  539. hare/dialects/clickhouse/drivers/clickhouse_driver/client/clickhouse_driver_variant_column.py +76 -0
  540. hare/dialects/clickhouse/drivers/clickhouse_driver/constants.py +133 -0
  541. hare/dialects/clickhouse/drivers/clickhouse_shared_variant_values.py +878 -0
  542. hare/dialects/clickhouse/drivers/constants.py +143 -0
  543. hare/dialects/clickhouse/enums.py +38 -0
  544. hare/dialects/clickhouse/fields/__init__.py +43 -0
  545. hare/dialects/clickhouse/fields/clickhouse_date_field.py +32 -0
  546. hare/dialects/clickhouse/fields/clickhouse_datetime_field.py +162 -0
  547. hare/dialects/clickhouse/fields/clickhouse_integer_field.py +20 -0
  548. hare/dialects/clickhouse/fields/constants.py +31 -0
  549. hare/dialects/clickhouse/fields/declarations.py +81 -0
  550. hare/dialects/clickhouse/fields/dynamic_field.py +122 -0
  551. hare/dialects/clickhouse/fields/fixed_string_field.py +81 -0
  552. hare/dialects/clickhouse/fields/float32_field.py +39 -0
  553. hare/dialects/clickhouse/fields/low_cardinality_field.py +72 -0
  554. hare/dialects/clickhouse/fields/variant_field.py +174 -0
  555. hare/dialects/clickhouse/functions/__init__.py +39 -0
  556. hare/dialects/clickhouse/functions/aggregates/__init__.py +37 -0
  557. hare/dialects/clickhouse/functions/aggregates/arg_extremum.py +23 -0
  558. hare/dialects/clickhouse/functions/aggregates/declarations.py +120 -0
  559. hare/dialects/clickhouse/functions/aggregates/group_array.py +48 -0
  560. hare/dialects/clickhouse/functions/aggregates/median.py +18 -0
  561. hare/dialects/clickhouse/functions/aggregates/parametric_aggregate.py +48 -0
  562. hare/dialects/clickhouse/functions/aggregates/parametric_aggregate_function.py +45 -0
  563. hare/dialects/clickhouse/functions/aggregates/parametric_analytic_function.py +27 -0
  564. hare/dialects/clickhouse/functions/aggregates/quantile.py +74 -0
  565. hare/dialects/clickhouse/functions/aggregates/quantiles.py +58 -0
  566. hare/dialects/clickhouse/functions/aggregates/top_k.py +44 -0
  567. hare/dialects/clickhouse/functions/dict_get.py +199 -0
  568. hare/dialects/clickhouse/indexes/__init__.py +19 -0
  569. hare/dialects/clickhouse/indexes/bloom_filter_index.py +49 -0
  570. hare/dialects/clickhouse/indexes/clickhouse_index.py +145 -0
  571. hare/dialects/clickhouse/indexes/constants.py +14 -0
  572. hare/dialects/clickhouse/indexes/min_max_index.py +22 -0
  573. hare/dialects/clickhouse/indexes/ngram_bloom_filter_index.py +43 -0
  574. hare/dialects/clickhouse/indexes/set_index.py +35 -0
  575. hare/dialects/clickhouse/indexes/token_bloom_filter_index.py +60 -0
  576. hare/dialects/clickhouse/introspection/__init__.py +0 -0
  577. hare/dialects/clickhouse/introspection/clickhouse_check_constraints.py +40 -0
  578. hare/dialects/clickhouse/introspection/clickhouse_observed_table_options.py +280 -0
  579. hare/dialects/clickhouse/introspection/clickhouse_sql_parts.py +302 -0
  580. hare/dialects/clickhouse/introspection/clickhouse_type_parser.py +276 -0
  581. hare/dialects/clickhouse/introspection/constants.py +69 -0
  582. hare/dialects/clickhouse/keeper/__init__.py +0 -0
  583. hare/dialects/clickhouse/keeper/clickhouse_migration_lock.py +114 -0
  584. hare/dialects/clickhouse/keeper/constants.py +38 -0
  585. hare/dialects/clickhouse/keeper/keeper_codec.py +152 -0
  586. hare/dialects/clickhouse/keeper/keeper_session.py +213 -0
  587. hare/dialects/clickhouse/literals/__init__.py +1 -0
  588. hare/dialects/clickhouse/literals/clickhouse_literals.py +362 -0
  589. hare/dialects/clickhouse/lookups/__init__.py +0 -0
  590. hare/dialects/clickhouse/lookups/clickhouse_array_elements_key.py +32 -0
  591. hare/dialects/clickhouse/lookups/clickhouse_filter_operators.py +49 -0
  592. hare/dialects/clickhouse/lookups/clickhouse_global_lookups.py +129 -0
  593. hare/dialects/clickhouse/lookups/clickhouse_json_equality.py +78 -0
  594. hare/dialects/clickhouse/lookups/clickhouse_json_key_existence.py +38 -0
  595. hare/dialects/clickhouse/lookups/clickhouse_json_lookups.py +57 -0
  596. hare/dialects/clickhouse/lookups/clickhouse_json_path_lookups.py +102 -0
  597. hare/dialects/clickhouse/lookups/clickhouse_json_value_text.py +24 -0
  598. hare/dialects/clickhouse/lookups/clickhouse_typed_value_lookups.py +213 -0
  599. hare/dialects/clickhouse/lookups/constants.py +67 -0
  600. hare/dialects/clickhouse/lookups/declarations.py +14 -0
  601. hare/dialects/clickhouse/lookups/global_contains_criterion.py +15 -0
  602. hare/dialects/clickhouse/lookups/in_list/__init__.py +0 -0
  603. hare/dialects/clickhouse/lookups/in_list/clickhouse_large_in_list.py +95 -0
  604. hare/dialects/clickhouse/lookups/in_list/clickhouse_value_set_values.py +45 -0
  605. hare/dialects/clickhouse/migration_safety/__init__.py +9 -0
  606. hare/dialects/clickhouse/migration_safety/clickhouse_migration_safety_rules.py +34 -0
  607. hare/dialects/clickhouse/migration_safety/constants.py +10 -0
  608. hare/dialects/clickhouse/parameters/__init__.py +1 -0
  609. hare/dialects/clickhouse/parameters/clickhouse_parameters.py +42 -0
  610. hare/dialects/clickhouse/query/__init__.py +1 -0
  611. hare/dialects/clickhouse/query/clickhouse_dialect_variants.py +31 -0
  612. hare/dialects/clickhouse/query/clickhouse_queryset_methods.py +356 -0
  613. hare/dialects/clickhouse/query/clickhouse_sql_context.py +47 -0
  614. hare/dialects/clickhouse/query/clickhouse_totals.py +34 -0
  615. hare/dialects/clickhouse/query/constants.py +24 -0
  616. hare/dialects/clickhouse/query/declarations.py +21 -0
  617. hare/dialects/clickhouse/query/totals_result.py +21 -0
  618. hare/dialects/clickhouse/renderers/__init__.py +1 -0
  619. hare/dialects/clickhouse/renderers/clickhouse_aggregate_renderers.py +124 -0
  620. hare/dialects/clickhouse/renderers/clickhouse_assigned_enum_number.py +30 -0
  621. hare/dialects/clickhouse/renderers/clickhouse_cast_renderers.py +49 -0
  622. hare/dialects/clickhouse/renderers/clickhouse_checked_integer_result.py +34 -0
  623. hare/dialects/clickhouse/renderers/clickhouse_condition_renderers.py +27 -0
  624. hare/dialects/clickhouse/renderers/clickhouse_container_renderers.py +129 -0
  625. hare/dialects/clickhouse/renderers/clickhouse_json_renderers.py +105 -0
  626. hare/dialects/clickhouse/renderers/clickhouse_json_texts.py +34 -0
  627. hare/dialects/clickhouse/renderers/clickhouse_number_renderers.py +76 -0
  628. hare/dialects/clickhouse/renderers/clickhouse_renderers.py +339 -0
  629. hare/dialects/clickhouse/renderers/clickhouse_temporal_renderers.py +262 -0
  630. hare/dialects/clickhouse/renderers/clickhouse_text_renderers.py +117 -0
  631. hare/dialects/clickhouse/renderers/clickhouse_value_casts.py +115 -0
  632. hare/dialects/clickhouse/renderers/clickhouse_window_renderers.py +72 -0
  633. hare/dialects/clickhouse/renderers/constants.py +341 -0
  634. hare/dialects/clickhouse/schema/__init__.py +1 -0
  635. hare/dialects/clickhouse/schema/columns/__init__.py +1 -0
  636. hare/dialects/clickhouse/schema/columns/clickhouse_column_backfill.py +106 -0
  637. hare/dialects/clickhouse/schema/columns/clickhouse_column_conversion_check.py +173 -0
  638. hare/dialects/clickhouse/schema/columns/clickhouse_column_definitions.py +62 -0
  639. hare/dialects/clickhouse/schema/columns/clickhouse_column_narrowing_check.py +109 -0
  640. hare/dialects/clickhouse/schema/columns/clickhouse_column_renames.py +45 -0
  641. hare/dialects/clickhouse/schema/constants.py +201 -0
  642. hare/dialects/clickhouse/schema/declarations.py +95 -0
  643. hare/dialects/clickhouse/schema/indexes/__init__.py +0 -0
  644. hare/dialects/clickhouse/schema/indexes/clickhouse_index_statements.py +60 -0
  645. hare/dialects/clickhouse/schema/runtime_statements/__init__.py +1 -0
  646. hare/dialects/clickhouse/schema/runtime_statements/clickhouse_table_clearing.py +19 -0
  647. hare/dialects/clickhouse/schema/schema_objects/__init__.py +0 -0
  648. hare/dialects/clickhouse/schema/schema_objects/clickhouse_dictionaries.py +169 -0
  649. hare/dialects/clickhouse/schema/schema_objects/clickhouse_materialized_views.py +221 -0
  650. hare/dialects/clickhouse/schema/schema_objects/clickhouse_schemas.py +69 -0
  651. hare/dialects/clickhouse/schema/schema_objects/clickhouse_views.py +59 -0
  652. hare/dialects/clickhouse/schema/shadow/__init__.py +0 -0
  653. hare/dialects/clickhouse/schema/shadow/clickhouse_shadow_database.py +155 -0
  654. hare/dialects/clickhouse/schema/tables/__init__.py +1 -0
  655. hare/dialects/clickhouse/schema/tables/clickhouse_table_comments.py +43 -0
  656. hare/dialects/clickhouse/schema/tables/clickhouse_table_creation.py +50 -0
  657. hare/dialects/clickhouse/schema/tables/clickhouse_table_partitions.py +160 -0
  658. hare/dialects/clickhouse/schema/tables/clickhouse_table_rebuild.py +227 -0
  659. hare/dialects/clickhouse/schema_objects/__init__.py +5 -0
  660. hare/dialects/clickhouse/schema_objects/clickhouse_dictionary.py +118 -0
  661. hare/dialects/clickhouse/schema_objects/clickhouse_materialized_view.py +159 -0
  662. hare/dialects/clickhouse/schema_objects/clickhouse_projection.py +204 -0
  663. hare/dialects/clickhouse/server_versions.py +5 -0
  664. hare/dialects/clickhouse/spatial/__init__.py +0 -0
  665. hare/dialects/clickhouse/spatial/clickhouse_geometry_values.py +208 -0
  666. hare/dialects/clickhouse/spatial/clickhouse_spatial_renderers.py +265 -0
  667. hare/dialects/clickhouse/spatial/constants.py +66 -0
  668. hare/dialects/clickhouse/transactions/__init__.py +0 -0
  669. hare/dialects/clickhouse/transactions/clickhouse_transaction_statements.py +19 -0
  670. hare/dialects/clickhouse/types/__init__.py +1 -0
  671. hare/dialects/clickhouse/types/clickhouse_address_values.py +35 -0
  672. hare/dialects/clickhouse/types/clickhouse_binary_values.py +58 -0
  673. hare/dialects/clickhouse/types/clickhouse_container_values.py +267 -0
  674. hare/dialects/clickhouse/types/clickhouse_dynamic_values.py +307 -0
  675. hare/dialects/clickhouse/types/clickhouse_enum_types.py +232 -0
  676. hare/dialects/clickhouse/types/clickhouse_json_values.py +202 -0
  677. hare/dialects/clickhouse/types/clickhouse_low_cardinality_values.py +95 -0
  678. hare/dialects/clickhouse/types/clickhouse_nullable_types.py +27 -0
  679. hare/dialects/clickhouse/types/clickhouse_type_names.py +128 -0
  680. hare/dialects/clickhouse/types/clickhouse_types.py +258 -0
  681. hare/dialects/clickhouse/types/clickhouse_variant_values.py +128 -0
  682. hare/dialects/clickhouse/types/constants.py +139 -0
  683. hare/dialects/clickhouse/types/declarations.py +23 -0
  684. hare/dialects/constants.py +32 -0
  685. hare/dialects/dialect_registry.py +340 -0
  686. hare/dialects/enums.py +34 -0
  687. hare/dialects/postgresql/__init__.py +0 -0
  688. hare/dialects/postgresql/clauses/__init__.py +1 -0
  689. hare/dialects/postgresql/clauses/constants.py +44 -0
  690. hare/dialects/postgresql/clauses/postgresql_query_clauses.py +114 -0
  691. hare/dialects/postgresql/client/__init__.py +10 -0
  692. hare/dialects/postgresql/client/constants.py +328 -0
  693. hare/dialects/postgresql/client/postgresql_client.py +1224 -0
  694. hare/dialects/postgresql/client/postgresql_connect_errors.py +66 -0
  695. hare/dialects/postgresql/client/postgresql_transaction_client.py +80 -0
  696. hare/dialects/postgresql/client/reusable_test_schemas.py +197 -0
  697. hare/dialects/postgresql/client/transaction_pooler.py +137 -0
  698. hare/dialects/postgresql/connection/__init__.py +1 -0
  699. hare/dialects/postgresql/connection/constants.py +11 -0
  700. hare/dialects/postgresql/connection/postgresql_driver.py +99 -0
  701. hare/dialects/postgresql/constants.py +862 -0
  702. hare/dialects/postgresql/drivers/__init__.py +0 -0
  703. hare/dialects/postgresql/drivers/asyncpg/__init__.py +0 -0
  704. hare/dialects/postgresql/drivers/asyncpg/asyncpg_date_codec.py +81 -0
  705. hare/dialects/postgresql/drivers/asyncpg/asyncpg_driver.py +37 -0
  706. hare/dialects/postgresql/drivers/asyncpg/asyncpg_extension_type_codecs.py +78 -0
  707. hare/dialects/postgresql/drivers/asyncpg/asyncpg_hstore_codec.py +84 -0
  708. hare/dialects/postgresql/drivers/asyncpg/asyncpg_interval_codec.py +72 -0
  709. hare/dialects/postgresql/drivers/asyncpg/asyncpg_timestamp_codec.py +74 -0
  710. hare/dialects/postgresql/drivers/asyncpg/asyncpg_timestamptz_codec.py +88 -0
  711. hare/dialects/postgresql/drivers/asyncpg/asyncpg_tsvector_codec.py +264 -0
  712. hare/dialects/postgresql/drivers/asyncpg/client/__init__.py +9 -0
  713. hare/dialects/postgresql/drivers/asyncpg/client/asyncpg_client.py +738 -0
  714. hare/dialects/postgresql/drivers/asyncpg/client/asyncpg_transaction_client.py +197 -0
  715. hare/dialects/postgresql/drivers/asyncpg/constants.py +150 -0
  716. hare/dialects/postgresql/drivers/asyncpg/pre_epoch_local_zone.py +27 -0
  717. hare/dialects/postgresql/drivers/constants.py +22 -0
  718. hare/dialects/postgresql/drivers/rust_pg/__init__.py +0 -0
  719. hare/dialects/postgresql/drivers/rust_pg/client/__init__.py +9 -0
  720. hare/dialects/postgresql/drivers/rust_pg/client/rust_pg_client.py +461 -0
  721. hare/dialects/postgresql/drivers/rust_pg/client/rust_pg_transaction_client.py +306 -0
  722. hare/dialects/postgresql/drivers/rust_pg/client/rust_pg_transaction_connection_wrapper.py +53 -0
  723. hare/dialects/postgresql/drivers/rust_pg/constants.py +43 -0
  724. hare/dialects/postgresql/drivers/rust_pg/rust_pg_driver.py +66 -0
  725. hare/dialects/postgresql/enums.py +99 -0
  726. hare/dialects/postgresql/fields/__init__.py +68 -0
  727. hare/dialects/postgresql/fields/citext_field.py +42 -0
  728. hare/dialects/postgresql/fields/constants.py +115 -0
  729. hare/dialects/postgresql/fields/fixed_char_field.py +23 -0
  730. hare/dialects/postgresql/fields/hstore/__init__.py +5 -0
  731. hare/dialects/postgresql/fields/hstore/h_store_field.py +105 -0
  732. hare/dialects/postgresql/fields/hstore/h_store_text.py +86 -0
  733. hare/dialects/postgresql/fields/interval_field.py +31 -0
  734. hare/dialects/postgresql/fields/ltree_field.py +98 -0
  735. hare/dialects/postgresql/fields/multiranges/__init__.py +19 -0
  736. hare/dialects/postgresql/fields/multiranges/declarations.py +55 -0
  737. hare/dialects/postgresql/fields/multiranges/multi_range_field.py +326 -0
  738. hare/dialects/postgresql/fields/naive_datetime_field.py +74 -0
  739. hare/dialects/postgresql/fields/naive_time_field.py +64 -0
  740. hare/dialects/postgresql/fields/native_enum/__init__.py +5 -0
  741. hare/dialects/postgresql/fields/native_enum/native_enum_field.py +23 -0
  742. hare/dialects/postgresql/fields/native_enum/native_enum_field_instance.py +87 -0
  743. hare/dialects/postgresql/fields/network/__init__.py +7 -0
  744. hare/dialects/postgresql/fields/network/cidr_field.py +24 -0
  745. hare/dialects/postgresql/fields/network/inet_field.py +25 -0
  746. hare/dialects/postgresql/fields/network/mac_address_field.py +59 -0
  747. hare/dialects/postgresql/fields/network/network_field.py +80 -0
  748. hare/dialects/postgresql/fields/postgis_field.py +206 -0
  749. hare/dialects/postgresql/fields/ranges/__init__.py +19 -0
  750. hare/dialects/postgresql/fields/ranges/date_range_field.py +48 -0
  751. hare/dialects/postgresql/fields/ranges/date_time_range_field.py +153 -0
  752. hare/dialects/postgresql/fields/ranges/decimal_range_field.py +42 -0
  753. hare/dialects/postgresql/fields/ranges/declarations.py +15 -0
  754. hare/dialects/postgresql/fields/ranges/int_range_field.py +60 -0
  755. hare/dialects/postgresql/fields/ranges/range.py +26 -0
  756. hare/dialects/postgresql/fields/ranges/range_field.py +349 -0
  757. hare/dialects/postgresql/fields/ts_vector_field.py +143 -0
  758. hare/dialects/postgresql/functions/__init__.py +72 -0
  759. hare/dialects/postgresql/functions/aggregates/__init__.py +21 -0
  760. hare/dialects/postgresql/functions/aggregates/declarations.py +67 -0
  761. hare/dialects/postgresql/functions/aggregates/jsonb_agg.py +35 -0
  762. hare/dialects/postgresql/functions/aggregates/jsonb_agg_field.py +29 -0
  763. hare/dialects/postgresql/functions/aggregates/range_agg.py +22 -0
  764. hare/dialects/postgresql/functions/aggregates/string_agg.py +101 -0
  765. hare/dialects/postgresql/functions/aggregates/string_agg_function.py +13 -0
  766. hare/dialects/postgresql/functions/array/__init__.py +13 -0
  767. hare/dialects/postgresql/functions/array/any_value.py +13 -0
  768. hare/dialects/postgresql/functions/array/array_slice.py +28 -0
  769. hare/dialects/postgresql/functions/array/array_subquery.py +62 -0
  770. hare/dialects/postgresql/functions/array/array_subscript.py +66 -0
  771. hare/dialects/postgresql/functions/constants.py +8 -0
  772. hare/dialects/postgresql/functions/ltree/__init__.py +7 -0
  773. hare/dialects/postgresql/functions/ltree/subpath.py +54 -0
  774. hare/dialects/postgresql/functions/random_uuid.py +26 -0
  775. hare/dialects/postgresql/functions/spatial/__init__.py +9 -0
  776. hare/dialects/postgresql/functions/spatial/st_distance.py +63 -0
  777. hare/dialects/postgresql/functions/spatial/std_within.py +46 -0
  778. hare/dialects/postgresql/functions/statistics/__init__.py +31 -0
  779. hare/dialects/postgresql/functions/statistics/covar_pop.py +49 -0
  780. hare/dialects/postgresql/functions/statistics/declarations.py +84 -0
  781. hare/dialects/postgresql/functions/statistics/regr_count.py +21 -0
  782. hare/dialects/postgresql/functions/statistics/statistic_pair_aggregate.py +55 -0
  783. hare/dialects/postgresql/functions/transaction_now.py +27 -0
  784. hare/dialects/postgresql/functions/trigram/__init__.py +21 -0
  785. hare/dialects/postgresql/functions/trigram/declarations.py +53 -0
  786. hare/dialects/postgresql/functions/trigram/trigram_function.py +61 -0
  787. hare/dialects/postgresql/functions/trigram/trigram_word_similarity.py +19 -0
  788. hare/dialects/postgresql/indexes/__init__.py +25 -0
  789. hare/dialects/postgresql/indexes/constants.py +16 -0
  790. hare/dialects/postgresql/indexes/declarations.py +36 -0
  791. hare/dialects/postgresql/indexes/hnsw_index.py +63 -0
  792. hare/dialects/postgresql/indexes/ivfflat_index.py +37 -0
  793. hare/dialects/postgresql/indexes/postgresql_index.py +112 -0
  794. hare/dialects/postgresql/introspection/__init__.py +0 -0
  795. hare/dialects/postgresql/introspection/postgresql_array_literals.py +101 -0
  796. hare/dialects/postgresql/introspection/postgresql_definitions.py +193 -0
  797. hare/dialects/postgresql/introspection/postgresql_inspected_schema_objects.py +196 -0
  798. hare/dialects/postgresql/introspection/postgresql_object_parts.py +102 -0
  799. hare/dialects/postgresql/literals/__init__.py +1 -0
  800. hare/dialects/postgresql/literals/postgresql_literals.py +99 -0
  801. hare/dialects/postgresql/lookups/__init__.py +0 -0
  802. hare/dialects/postgresql/lookups/array/__init__.py +5 -0
  803. hare/dialects/postgresql/lookups/array/array_length.py +26 -0
  804. hare/dialects/postgresql/lookups/constants.py +44 -0
  805. hare/dialects/postgresql/lookups/hstore/__init__.py +11 -0
  806. hare/dialects/postgresql/lookups/hstore/h_store_value_term.py +18 -0
  807. hare/dialects/postgresql/lookups/hstore/postgresql_h_store_field_lookups.py +75 -0
  808. hare/dialects/postgresql/lookups/hstore/postgresql_h_store_lookups.py +38 -0
  809. hare/dialects/postgresql/lookups/in_list/__init__.py +11 -0
  810. hare/dialects/postgresql/lookups/in_list/array_parameter.py +104 -0
  811. hare/dialects/postgresql/lookups/in_list/postgresql_large_in_list.py +78 -0
  812. hare/dialects/postgresql/lookups/in_list/unnest_row_values.py +32 -0
  813. hare/dialects/postgresql/lookups/json/__init__.py +9 -0
  814. hare/dialects/postgresql/lookups/json/postgresql_json_filter_guards.py +111 -0
  815. hare/dialects/postgresql/lookups/json/postgresql_json_lookups.py +59 -0
  816. hare/dialects/postgresql/lookups/ltree/__init__.py +9 -0
  817. hare/dialects/postgresql/lookups/ltree/postgresql_ltree_field_lookups.py +54 -0
  818. hare/dialects/postgresql/lookups/ltree/postgresql_ltree_lookups.py +35 -0
  819. hare/dialects/postgresql/lookups/multiranges/__init__.py +9 -0
  820. hare/dialects/postgresql/lookups/multiranges/postgresql_multi_range_field_lookups.py +50 -0
  821. hare/dialects/postgresql/lookups/network/__init__.py +1 -0
  822. hare/dialects/postgresql/lookups/network/postgresql_network_field_lookups.py +46 -0
  823. hare/dialects/postgresql/lookups/network/postgresql_network_lookups.py +35 -0
  824. hare/dialects/postgresql/lookups/postgresql_filter_operators.py +96 -0
  825. hare/dialects/postgresql/lookups/postgresql_regex_lookups.py +22 -0
  826. hare/dialects/postgresql/lookups/postgresql_value_encoders.py +163 -0
  827. hare/dialects/postgresql/lookups/ranges/__init__.py +9 -0
  828. hare/dialects/postgresql/lookups/ranges/postgresql_range_field_lookups.py +49 -0
  829. hare/dialects/postgresql/lookups/ranges/postgresql_range_lookups.py +49 -0
  830. hare/dialects/postgresql/lookups/trigram/__init__.py +1 -0
  831. hare/dialects/postgresql/lookups/trigram/postgresql_trigram_lookups.py +69 -0
  832. hare/dialects/postgresql/lookups/trigram/trigram_operator_term.py +16 -0
  833. hare/dialects/postgresql/lookups/unaccent_transform.py +39 -0
  834. hare/dialects/postgresql/migration_safety/__init__.py +9 -0
  835. hare/dialects/postgresql/migration_safety/check_constraint_validation_rule.py +36 -0
  836. hare/dialects/postgresql/migration_safety/constants.py +18 -0
  837. hare/dialects/postgresql/migration_safety/foreign_key_validation_rule.py +74 -0
  838. hare/dialects/postgresql/migration_safety/index_without_concurrently_rule.py +45 -0
  839. hare/dialects/postgresql/migration_safety/postgresql_migration_safety_rules.py +59 -0
  840. hare/dialects/postgresql/migration_safety/set_not_null_rule.py +47 -0
  841. hare/dialects/postgresql/migration_safety/unique_constraint_index_rule.py +65 -0
  842. hare/dialects/postgresql/migration_safety/volatile_default_rule.py +40 -0
  843. hare/dialects/postgresql/parameters/__init__.py +1 -0
  844. hare/dialects/postgresql/parameters/constants.py +83 -0
  845. hare/dialects/postgresql/parameters/postgresql_parameters.py +86 -0
  846. hare/dialects/postgresql/partitioning/__init__.py +23 -0
  847. hare/dialects/postgresql/partitioning/constants.py +56 -0
  848. hare/dialects/postgresql/partitioning/explicit_partitioning.py +97 -0
  849. hare/dialects/postgresql/partitioning/hash_partitioning.py +50 -0
  850. hare/dialects/postgresql/partitioning/list_partitioning.py +55 -0
  851. hare/dialects/postgresql/partitioning/observed_partitioning.py +205 -0
  852. hare/dialects/postgresql/partitioning/partitioning.py +280 -0
  853. hare/dialects/postgresql/partitioning/partitions/__init__.py +1 -0
  854. hare/dialects/postgresql/partitioning/partitions/default_partition.py +30 -0
  855. hare/dialects/postgresql/partitioning/partitions/list_partition.py +36 -0
  856. hare/dialects/postgresql/partitioning/partitions/partition.py +46 -0
  857. hare/dialects/postgresql/partitioning/partitions/range_partition.py +94 -0
  858. hare/dialects/postgresql/partitioning/range_partitioning.py +60 -0
  859. hare/dialects/postgresql/postgresql_dialect.py +207 -0
  860. hare/dialects/postgresql/postgresql_introspector.py +1055 -0
  861. hare/dialects/postgresql/postgresql_table_options.py +165 -0
  862. hare/dialects/postgresql/query/__init__.py +7 -0
  863. hare/dialects/postgresql/query/declarations.py +13 -0
  864. hare/dialects/postgresql/renderers/__init__.py +7 -0
  865. hare/dialects/postgresql/renderers/constants.py +43 -0
  866. hare/dialects/postgresql/renderers/postgresql_container_renderers.py +90 -0
  867. hare/dialects/postgresql/renderers/postgresql_defaults.py +88 -0
  868. hare/dialects/postgresql/renderers/postgresql_json_renderers.py +57 -0
  869. hare/dialects/postgresql/renderers/postgresql_number_renderers.py +58 -0
  870. hare/dialects/postgresql/renderers/postgresql_renderers.py +82 -0
  871. hare/dialects/postgresql/renderers/postgresql_temporal_renderers.py +179 -0
  872. hare/dialects/postgresql/renderers/postgresql_text_renderers.py +67 -0
  873. hare/dialects/postgresql/request_query/__init__.py +8 -0
  874. hare/dialects/postgresql/request_query/declarations.py +17 -0
  875. hare/dialects/postgresql/schema/__init__.py +0 -0
  876. hare/dialects/postgresql/schema/columns/__init__.py +1 -0
  877. hare/dialects/postgresql/schema/columns/postgresql_column_backfill.py +13 -0
  878. hare/dialects/postgresql/schema/columns/postgresql_column_narrowing_check.py +42 -0
  879. hare/dialects/postgresql/schema/columns/postgresql_column_type_changes.py +129 -0
  880. hare/dialects/postgresql/schema/constants.py +384 -0
  881. hare/dialects/postgresql/schema/constraints/__init__.py +1 -0
  882. hare/dialects/postgresql/schema/constraints/postgresql_constraint_statements.py +119 -0
  883. hare/dialects/postgresql/schema/indexes/__init__.py +1 -0
  884. hare/dialects/postgresql/schema/indexes/postgresql_index_statements.py +24 -0
  885. hare/dialects/postgresql/schema/postgresql_schema_editor.py +280 -0
  886. hare/dialects/postgresql/schema/relations/__init__.py +1 -0
  887. hare/dialects/postgresql/schema/relations/postgresql_foreign_key_rebuild.py +230 -0
  888. hare/dialects/postgresql/schema/runtime_statements/__init__.py +1 -0
  889. hare/dialects/postgresql/schema/runtime_statements/postgresql_foreign_key_deferral.py +109 -0
  890. hare/dialects/postgresql/schema/runtime_statements/postgresql_table_clearing.py +80 -0
  891. hare/dialects/postgresql/schema/runtime_statements/postgresql_table_locks.py +27 -0
  892. hare/dialects/postgresql/schema/runtime_statements/postgresql_tenant_conditions.py +34 -0
  893. hare/dialects/postgresql/schema/schema_objects/__init__.py +1 -0
  894. hare/dialects/postgresql/schema/schema_objects/postgresql_database_functions.py +95 -0
  895. hare/dialects/postgresql/schema/schema_objects/postgresql_enum_types.py +130 -0
  896. hare/dialects/postgresql/schema/schema_objects/postgresql_extensions.py +35 -0
  897. hare/dialects/postgresql/schema/schema_objects/postgresql_grants.py +89 -0
  898. hare/dialects/postgresql/schema/schema_objects/postgresql_materialized_views.py +107 -0
  899. hare/dialects/postgresql/schema/schema_objects/postgresql_row_level_security_policies.py +125 -0
  900. hare/dialects/postgresql/schema/schema_objects/postgresql_schemas.py +51 -0
  901. hare/dialects/postgresql/schema/schema_objects/postgresql_sequences.py +132 -0
  902. hare/dialects/postgresql/schema/schema_objects/postgresql_views.py +53 -0
  903. hare/dialects/postgresql/schema/shadow/__init__.py +0 -0
  904. hare/dialects/postgresql/schema/shadow/postgresql_shadow_database.py +78 -0
  905. hare/dialects/postgresql/schema/tables/__init__.py +1 -0
  906. hare/dialects/postgresql/schema/tables/postgresql_table_comments.py +74 -0
  907. hare/dialects/postgresql/schema/tables/postgresql_table_partitions.py +229 -0
  908. hare/dialects/postgresql/schema/tables/postgresql_table_rebuild.py +118 -0
  909. hare/dialects/postgresql/schema/triggers/__init__.py +1 -0
  910. hare/dialects/postgresql/schema/triggers/postgresql_trigger_statements.py +141 -0
  911. hare/dialects/postgresql/search/__init__.py +8 -0
  912. hare/dialects/postgresql/search/constants.py +43 -0
  913. hare/dialects/postgresql/search/criterion/__init__.py +14 -0
  914. hare/dialects/postgresql/search/criterion/declarations.py +14 -0
  915. hare/dialects/postgresql/search/criterion/search_criterion.py +62 -0
  916. hare/dialects/postgresql/search/criterion/ts_query_function.py +20 -0
  917. hare/dialects/postgresql/search/criterion/ts_query_invert.py +32 -0
  918. hare/dialects/postgresql/search/enums.py +12 -0
  919. hare/dialects/postgresql/search/functions/__init__.py +9 -0
  920. hare/dialects/postgresql/search/functions/plain_to_ts_query.py +18 -0
  921. hare/dialects/postgresql/search/functions/to_ts_vector.py +20 -0
  922. hare/dialects/postgresql/search/lexemes/__init__.py +1 -0
  923. hare/dialects/postgresql/search/lexemes/combined_lexeme.py +35 -0
  924. hare/dialects/postgresql/search/lexemes/lexeme.py +77 -0
  925. hare/dialects/postgresql/search/lexemes/lexeme_combinable.py +59 -0
  926. hare/dialects/postgresql/search/postgresql_text_search.py +237 -0
  927. hare/dialects/postgresql/search/ts_vector_expression_reader.py +106 -0
  928. hare/dialects/postgresql/server_versions.py +26 -0
  929. hare/dialects/postgresql/spatial/__init__.py +7 -0
  930. hare/dialects/postgresql/spatial/constants.py +118 -0
  931. hare/dialects/postgresql/spatial/postgresql_spatial_renderers.py +102 -0
  932. hare/dialects/postgresql/transactions/__init__.py +1 -0
  933. hare/dialects/postgresql/transactions/constants.py +21 -0
  934. hare/dialects/postgresql/transactions/postgresql_transaction_statements.py +40 -0
  935. hare/dialects/postgresql/transactions/postgresql_two_phase_commit.py +87 -0
  936. hare/dialects/postgresql/types/__init__.py +1 -0
  937. hare/dialects/postgresql/types/postgresql_container_values.py +104 -0
  938. hare/dialects/postgresql/types/postgresql_types.py +213 -0
  939. hare/dialects/postgresql/validators/__init__.py +15 -0
  940. hare/dialects/postgresql/validators/keys_validator.py +32 -0
  941. hare/dialects/postgresql/validators/range_bound_validator.py +33 -0
  942. hare/dialects/postgresql/validators/range_max_value_validator.py +17 -0
  943. hare/dialects/postgresql/validators/range_min_value_validator.py +17 -0
  944. hare/dialects/postgresql/vectors/__init__.py +1 -0
  945. hare/dialects/postgresql/vectors/constants.py +13 -0
  946. hare/dialects/postgresql/vectors/postgresql_vector_renderers.py +40 -0
  947. hare/dialects/postgresql/vectors/postgresql_vector_values.py +94 -0
  948. hare/dialects/sqlite/__init__.py +0 -0
  949. hare/dialects/sqlite/clauses/__init__.py +1 -0
  950. hare/dialects/sqlite/clauses/constants.py +7 -0
  951. hare/dialects/sqlite/clauses/sqlite_query_clauses.py +100 -0
  952. hare/dialects/sqlite/client/__init__.py +12 -0
  953. hare/dialects/sqlite/client/constants.py +103 -0
  954. hare/dialects/sqlite/client/declarations.py +27 -0
  955. hare/dialects/sqlite/client/sqlite_client.py +507 -0
  956. hare/dialects/sqlite/client/sqlite_migration_lock.py +76 -0
  957. hare/dialects/sqlite/client/sqlite_transaction_client.py +160 -0
  958. hare/dialects/sqlite/connection/__init__.py +1 -0
  959. hare/dialects/sqlite/connection/constants.py +7 -0
  960. hare/dialects/sqlite/connection/sqlite_driver.py +59 -0
  961. hare/dialects/sqlite/constants.py +451 -0
  962. hare/dialects/sqlite/drivers/__init__.py +1 -0
  963. hare/dialects/sqlite/drivers/aiosqlite/__init__.py +1 -0
  964. hare/dialects/sqlite/drivers/aiosqlite/aiosqlite_driver.py +41 -0
  965. hare/dialects/sqlite/drivers/aiosqlite/client/__init__.py +23 -0
  966. hare/dialects/sqlite/drivers/aiosqlite/client/aiosqlite_client.py +428 -0
  967. hare/dialects/sqlite/drivers/aiosqlite/client/aiosqlite_client_with_regexp_support.py +16 -0
  968. hare/dialects/sqlite/drivers/aiosqlite/client/aiosqlite_connection_wrapper.py +62 -0
  969. hare/dialects/sqlite/drivers/aiosqlite/client/aiosqlite_statement_timeout_connection_wrapper.py +53 -0
  970. hare/dialects/sqlite/drivers/aiosqlite/client/aiosqlite_transaction_client.py +176 -0
  971. hare/dialects/sqlite/drivers/aiosqlite/client/aiosqlite_transaction_connection_wrapper.py +23 -0
  972. hare/dialects/sqlite/drivers/aiosqlite/constants.py +11 -0
  973. hare/dialects/sqlite/drivers/constants.py +19 -0
  974. hare/dialects/sqlite/enums.py +37 -0
  975. hare/dialects/sqlite/exceptions.py +10 -0
  976. hare/dialects/sqlite/functions/__init__.py +0 -0
  977. hare/dialects/sqlite/functions/comparison/__init__.py +11 -0
  978. hare/dialects/sqlite/functions/comparison/sqlite_cast.py +204 -0
  979. hare/dialects/sqlite/functions/comparison/sqlite_greatest_least.py +63 -0
  980. hare/dialects/sqlite/functions/constants.py +102 -0
  981. hare/dialects/sqlite/functions/datetime/__init__.py +13 -0
  982. hare/dialects/sqlite/functions/datetime/date_truncation.py +115 -0
  983. hare/dialects/sqlite/functions/datetime/sqlite_date_part_extraction.py +77 -0
  984. hare/dialects/sqlite/functions/datetime/sqlite_date_timestamp.py +48 -0
  985. hare/dialects/sqlite/functions/datetime/sqlite_local_now.py +54 -0
  986. hare/dialects/sqlite/functions/datetime/temporal_arithmetic_functions.py +147 -0
  987. hare/dialects/sqlite/functions/decimal/__init__.py +1 -0
  988. hare/dialects/sqlite/functions/decimal/sqlite_decimal_arithmetic.py +152 -0
  989. hare/dialects/sqlite/functions/decimal/sqlite_decimal_average.py +23 -0
  990. hare/dialects/sqlite/functions/decimal/sqlite_decimal_collation.py +125 -0
  991. hare/dialects/sqlite/functions/decimal/sqlite_decimal_comparand.py +23 -0
  992. hare/dialects/sqlite/functions/decimal/sqlite_decimal_operation.py +33 -0
  993. hare/dialects/sqlite/functions/decimal/sqlite_decimal_round.py +50 -0
  994. hare/dialects/sqlite/functions/decimal/sqlite_decimal_storage.py +77 -0
  995. hare/dialects/sqlite/functions/decimal/sqlite_decimal_sum.py +62 -0
  996. hare/dialects/sqlite/functions/decimal/sqlite_decimal_text.py +22 -0
  997. hare/dialects/sqlite/functions/decimal/sqlite_stored_decimal.py +29 -0
  998. hare/dialects/sqlite/functions/json/__init__.py +9 -0
  999. hare/dialects/sqlite/functions/json/sqlite_json_datetime.py +124 -0
  1000. hare/dialects/sqlite/functions/json/sqlite_json_path.py +116 -0
  1001. hare/dialects/sqlite/functions/regex/__init__.py +5 -0
  1002. hare/dialects/sqlite/functions/regex/sqlite_posix_regex.py +102 -0
  1003. hare/dialects/sqlite/functions/regex/sqlite_regex_criterion.py +18 -0
  1004. hare/dialects/sqlite/functions/sqlite_checked_integer.py +15 -0
  1005. hare/dialects/sqlite/functions/sqlite_collation.py +51 -0
  1006. hare/dialects/sqlite/functions/sqlite_connection_function.py +17 -0
  1007. hare/dialects/sqlite/functions/sqlite_function_errors.py +45 -0
  1008. hare/dialects/sqlite/functions/sqlite_integer_range.py +48 -0
  1009. hare/dialects/sqlite/functions/sqlite_math_functions.py +233 -0
  1010. hare/dialects/sqlite/functions/sqlite_native_functions.py +12 -0
  1011. hare/dialects/sqlite/functions/sqlite_sort_keys.py +58 -0
  1012. hare/dialects/sqlite/functions/statistics/__init__.py +19 -0
  1013. hare/dialects/sqlite/functions/statistics/declarations.py +31 -0
  1014. hare/dialects/sqlite/functions/statistics/sqlite_statistic.py +118 -0
  1015. hare/dialects/sqlite/functions/statistics/sqlite_statistics.py +51 -0
  1016. hare/dialects/sqlite/functions/text/__init__.py +1 -0
  1017. hare/dialects/sqlite/functions/text/sqlite_text_functions.py +140 -0
  1018. hare/dialects/sqlite/indexes/__init__.py +7 -0
  1019. hare/dialects/sqlite/indexes/constants.py +45 -0
  1020. hare/dialects/sqlite/indexes/full_text_index.py +228 -0
  1021. hare/dialects/sqlite/indexes/separate_table_index.py +105 -0
  1022. hare/dialects/sqlite/indexes/spatialite_index.py +228 -0
  1023. hare/dialects/sqlite/literals/__init__.py +1 -0
  1024. hare/dialects/sqlite/literals/sqlite_literals.py +51 -0
  1025. hare/dialects/sqlite/lookups/__init__.py +0 -0
  1026. hare/dialects/sqlite/lookups/constants.py +18 -0
  1027. hare/dialects/sqlite/lookups/in_list/__init__.py +11 -0
  1028. hare/dialects/sqlite/lookups/in_list/json_array_row_values.py +39 -0
  1029. hare/dialects/sqlite/lookups/in_list/json_array_values.py +116 -0
  1030. hare/dialects/sqlite/lookups/in_list/sqlite_large_in_list.py +96 -0
  1031. hare/dialects/sqlite/lookups/json/__init__.py +1 -0
  1032. hare/dialects/sqlite/lookups/json/sqlite_json_filter_guards.py +128 -0
  1033. hare/dialects/sqlite/lookups/json/sqlite_json_lookups.py +51 -0
  1034. hare/dialects/sqlite/lookups/json/sqlite_json_path_lookups.py +56 -0
  1035. hare/dialects/sqlite/lookups/json/sqlite_json_type_criterion.py +13 -0
  1036. hare/dialects/sqlite/lookups/sqlite_filter_operators.py +89 -0
  1037. hare/dialects/sqlite/migration_safety/__init__.py +9 -0
  1038. hare/dialects/sqlite/migration_safety/sqlite_migration_safety_rules.py +32 -0
  1039. hare/dialects/sqlite/parameters/__init__.py +1 -0
  1040. hare/dialects/sqlite/parameters/constants.py +11 -0
  1041. hare/dialects/sqlite/parameters/sqlite_parameter_adapters.py +61 -0
  1042. hare/dialects/sqlite/parameters/sqlite_parameters.py +27 -0
  1043. hare/dialects/sqlite/query/__init__.py +7 -0
  1044. hare/dialects/sqlite/query/declarations.py +13 -0
  1045. hare/dialects/sqlite/renderers/__init__.py +7 -0
  1046. hare/dialects/sqlite/renderers/constants.py +43 -0
  1047. hare/dialects/sqlite/renderers/sqlite_defaults.py +84 -0
  1048. hare/dialects/sqlite/renderers/sqlite_json_renderers.py +142 -0
  1049. hare/dialects/sqlite/renderers/sqlite_number_renderers.py +137 -0
  1050. hare/dialects/sqlite/renderers/sqlite_renderers.py +235 -0
  1051. hare/dialects/sqlite/renderers/sqlite_temporal_renderers.py +138 -0
  1052. hare/dialects/sqlite/renderers/sqlite_text_renderers.py +60 -0
  1053. hare/dialects/sqlite/request_query/__init__.py +8 -0
  1054. hare/dialects/sqlite/request_query/declarations.py +16 -0
  1055. hare/dialects/sqlite/schema/__init__.py +0 -0
  1056. hare/dialects/sqlite/schema/columns/__init__.py +1 -0
  1057. hare/dialects/sqlite/schema/columns/sqlite_column_backfill.py +29 -0
  1058. hare/dialects/sqlite/schema/columns/sqlite_column_conversion_check.py +181 -0
  1059. hare/dialects/sqlite/schema/columns/sqlite_column_narrowing_check.py +24 -0
  1060. hare/dialects/sqlite/schema/columns/sqlite_column_type_changes.py +148 -0
  1061. hare/dialects/sqlite/schema/constants.py +108 -0
  1062. hare/dialects/sqlite/schema/constraints/__init__.py +1 -0
  1063. hare/dialects/sqlite/schema/constraints/sqlite_constraint_statements.py +32 -0
  1064. hare/dialects/sqlite/schema/indexes/__init__.py +1 -0
  1065. hare/dialects/sqlite/schema/indexes/sqlite_generated_index_names.py +61 -0
  1066. hare/dialects/sqlite/schema/indexes/sqlite_index_statements.py +78 -0
  1067. hare/dialects/sqlite/schema/relations/__init__.py +1 -0
  1068. hare/dialects/sqlite/schema/relations/sqlite_foreign_key_rebuild.py +100 -0
  1069. hare/dialects/sqlite/schema/runtime_statements/__init__.py +1 -0
  1070. hare/dialects/sqlite/schema/runtime_statements/sqlite_foreign_key_deferral.py +87 -0
  1071. hare/dialects/sqlite/schema/runtime_statements/sqlite_table_clearing.py +39 -0
  1072. hare/dialects/sqlite/schema/runtime_statements/sqlite_tenant_conditions.py +21 -0
  1073. hare/dialects/sqlite/schema/shadow/__init__.py +0 -0
  1074. hare/dialects/sqlite/schema/shadow/sqlite_shadow_database.py +36 -0
  1075. hare/dialects/sqlite/schema/sqlite_schema_editor.py +492 -0
  1076. hare/dialects/sqlite/schema/tables/__init__.py +1 -0
  1077. hare/dialects/sqlite/schema/tables/sqlite_table_comments.py +32 -0
  1078. hare/dialects/sqlite/schema/tables/sqlite_table_rebuild.py +164 -0
  1079. hare/dialects/sqlite/schema/triggers/__init__.py +1 -0
  1080. hare/dialects/sqlite/schema/triggers/sqlite_trigger_statements.py +70 -0
  1081. hare/dialects/sqlite/search/__init__.py +8 -0
  1082. hare/dialects/sqlite/search/constants.py +33 -0
  1083. hare/dialects/sqlite/search/sqlite_full_text_query.py +137 -0
  1084. hare/dialects/sqlite/search/sqlite_search_renderers.py +33 -0
  1085. hare/dialects/sqlite/search/sqlite_text_search.py +308 -0
  1086. hare/dialects/sqlite/search/terms/__init__.py +1 -0
  1087. hare/dialects/sqlite/search/terms/full_text_headline.py +56 -0
  1088. hare/dialects/sqlite/search/terms/full_text_match.py +73 -0
  1089. hare/dialects/sqlite/search/terms/full_text_query.py +42 -0
  1090. hare/dialects/sqlite/search/terms/full_text_query_combination.py +82 -0
  1091. hare/dialects/sqlite/search/terms/full_text_rank.py +34 -0
  1092. hare/dialects/sqlite/search/terms/full_text_row_value.py +104 -0
  1093. hare/dialects/sqlite/server_versions.py +17 -0
  1094. hare/dialects/sqlite/spatial/__init__.py +0 -0
  1095. hare/dialects/sqlite/spatial/constants.py +173 -0
  1096. hare/dialects/sqlite/spatial/spatialite_blob_reader.py +166 -0
  1097. hare/dialects/sqlite/spatial/spatialite_blob_writer.py +105 -0
  1098. hare/dialects/sqlite/spatial/sqlite_geometry_values.py +75 -0
  1099. hare/dialects/sqlite/spatial/sqlite_spatial_extension.py +116 -0
  1100. hare/dialects/sqlite/spatial/sqlite_spatial_renderers.py +202 -0
  1101. hare/dialects/sqlite/sqlite_dialect.py +138 -0
  1102. hare/dialects/sqlite/sqlite_introspector.py +1025 -0
  1103. hare/dialects/sqlite/sqlite_table_options.py +92 -0
  1104. hare/dialects/sqlite/table_option_constants.py +15 -0
  1105. hare/dialects/sqlite/transactions/__init__.py +1 -0
  1106. hare/dialects/sqlite/transactions/constants.py +10 -0
  1107. hare/dialects/sqlite/transactions/sqlite_transaction_statements.py +19 -0
  1108. hare/dialects/sqlite/types/__init__.py +1 -0
  1109. hare/dialects/sqlite/types/sqlite_types.py +87 -0
  1110. hare/dialects/sqlite/vectors/__init__.py +1 -0
  1111. hare/dialects/sqlite/vectors/constants.py +16 -0
  1112. hare/dialects/sqlite/vectors/sqlite_vector_extension.py +112 -0
  1113. hare/dialects/sqlite/vectors/sqlite_vector_renderers.py +55 -0
  1114. hare/dialects/sqlite/vectors/sqlite_vector_values.py +113 -0
  1115. hare/exceptions.py +397 -0
  1116. hare/fields/__init__.py +133 -0
  1117. hare/fields/composite_primary_key.py +40 -0
  1118. hare/fields/constants.py +120 -0
  1119. hare/fields/data/__init__.py +3 -0
  1120. hare/fields/data/binary_field.py +62 -0
  1121. hare/fields/data/boolean_field.py +57 -0
  1122. hare/fields/data/choices/__init__.py +16 -0
  1123. hare/fields/data/choices/char_enum_field.py +27 -0
  1124. hare/fields/data/choices/char_enum_field_instance.py +117 -0
  1125. hare/fields/data/choices/int_enum_field.py +23 -0
  1126. hare/fields/data/choices/int_enum_field_instance.py +102 -0
  1127. hare/fields/data/constants.py +122 -0
  1128. hare/fields/data/containers/__init__.py +10 -0
  1129. hare/fields/data/containers/array_field.py +152 -0
  1130. hare/fields/data/containers/constants.py +25 -0
  1131. hare/fields/data/containers/container_field.py +342 -0
  1132. hare/fields/data/containers/declarations.py +13 -0
  1133. hare/fields/data/containers/map_field.py +165 -0
  1134. hare/fields/data/containers/nested_field.py +47 -0
  1135. hare/fields/data/containers/tuple_field.py +177 -0
  1136. hare/fields/data/json/__init__.py +7 -0
  1137. hare/fields/data/json/json_codec.py +152 -0
  1138. hare/fields/data/json/json_field.py +387 -0
  1139. hare/fields/data/json/json_path_field.py +77 -0
  1140. hare/fields/data/json/json_text_field.py +13 -0
  1141. hare/fields/data/network/__init__.py +8 -0
  1142. hare/fields/data/network/constants.py +6 -0
  1143. hare/fields/data/network/ip_address_field.py +109 -0
  1144. hare/fields/data/network/ipv4_address_field.py +26 -0
  1145. hare/fields/data/numeric/__init__.py +23 -0
  1146. hare/fields/data/numeric/big_int_field.py +22 -0
  1147. hare/fields/data/numeric/decimal_field.py +187 -0
  1148. hare/fields/data/numeric/float_field.py +83 -0
  1149. hare/fields/data/numeric/int_field.py +239 -0
  1150. hare/fields/data/numeric/positive_big_int_field.py +19 -0
  1151. hare/fields/data/numeric/positive_int_field.py +19 -0
  1152. hare/fields/data/numeric/positive_small_int_field.py +19 -0
  1153. hare/fields/data/numeric/small_int_field.py +22 -0
  1154. hare/fields/data/temporal/__init__.py +11 -0
  1155. hare/fields/data/temporal/date_field.py +87 -0
  1156. hare/fields/data/temporal/datetime_field.py +384 -0
  1157. hare/fields/data/temporal/parse_datetime.py +17 -0
  1158. hare/fields/data/temporal/temporal_values.py +119 -0
  1159. hare/fields/data/temporal/time_delta_field.py +111 -0
  1160. hare/fields/data/temporal/time_field.py +193 -0
  1161. hare/fields/data/text/__init__.py +20 -0
  1162. hare/fields/data/text/char_field.py +78 -0
  1163. hare/fields/data/text/email_field.py +76 -0
  1164. hare/fields/data/text/phone_field.py +114 -0
  1165. hare/fields/data/text/slug_field.py +52 -0
  1166. hare/fields/data/text/text_field.py +33 -0
  1167. hare/fields/data/text/text_values.py +39 -0
  1168. hare/fields/data/text/url_field.py +62 -0
  1169. hare/fields/data/uuid_field.py +82 -0
  1170. hare/fields/database_default.py +28 -0
  1171. hare/fields/db_default_not_set.py +36 -0
  1172. hare/fields/db_defaults/__init__.py +13 -0
  1173. hare/fields/db_defaults/now.py +108 -0
  1174. hare/fields/db_defaults/random_hex.py +30 -0
  1175. hare/fields/db_defaults/sql_default.py +95 -0
  1176. hare/fields/db_defaults/uuid_v7.py +36 -0
  1177. hare/fields/encrypted/__init__.py +7 -0
  1178. hare/fields/encrypted/blind_index_field.py +49 -0
  1179. hare/fields/encrypted/constants.py +41 -0
  1180. hare/fields/encrypted/encrypted_field_base.py +143 -0
  1181. hare/fields/encrypted/encrypted_json_field.py +238 -0
  1182. hare/fields/encrypted/encrypted_text_field.py +130 -0
  1183. hare/fields/encrypted/field_encryption.py +267 -0
  1184. hare/fields/enums.py +91 -0
  1185. hare/fields/field.py +1231 -0
  1186. hare/fields/field_meta.py +16 -0
  1187. hare/fields/generated_field.py +211 -0
  1188. hare/fields/narrowing/__init__.py +7 -0
  1189. hare/fields/narrowing/decimal_digits_limit.py +11 -0
  1190. hare/fields/narrowing/enum_values_limit.py +32 -0
  1191. hare/fields/narrowing/integer_range_limit.py +13 -0
  1192. hare/fields/narrowing/narrowing_limit.py +8 -0
  1193. hare/fields/narrowing/text_length_limit.py +13 -0
  1194. hare/fields/registrations/__init__.py +1 -0
  1195. hare/fields/registrations/registered_lookup.py +29 -0
  1196. hare/fields/registrations/registered_transform.py +22 -0
  1197. hare/fields/relations/__init__.py +3 -0
  1198. hare/fields/relations/constants.py +10 -0
  1199. hare/fields/relations/declarations.py +5 -0
  1200. hare/fields/relations/fields/__init__.py +35 -0
  1201. hare/fields/relations/fields/backward_foreign_key_relation.py +46 -0
  1202. hare/fields/relations/fields/declarations.py +21 -0
  1203. hare/fields/relations/fields/foreign_key_field.py +89 -0
  1204. hare/fields/relations/fields/foreign_key_field_instance.py +124 -0
  1205. hare/fields/relations/fields/generic_foreign_key_field.py +56 -0
  1206. hare/fields/relations/fields/generic_foreign_key_field_instance.py +455 -0
  1207. hare/fields/relations/fields/many_to_many_field.py +60 -0
  1208. hare/fields/relations/fields/many_to_many_field_instance.py +126 -0
  1209. hare/fields/relations/fields/one_to_one_field.py +89 -0
  1210. hare/fields/relations/fields/one_to_one_field_instance.py +45 -0
  1211. hare/fields/relations/fields/relational_field.py +153 -0
  1212. hare/fields/relations/inherited_relation.py +30 -0
  1213. hare/fields/relations/relation_accessors.py +271 -0
  1214. hare/fields/relations/relation_values.py +106 -0
  1215. hare/fields/relations/swappable_model_reference.py +60 -0
  1216. hare/fields/validators/__init__.py +63 -0
  1217. hare/fields/validators/exceptions.py +52 -0
  1218. hare/fields/validators/formats/__init__.py +1 -0
  1219. hare/fields/validators/formats/comma_separated_integer_list_validator.py +22 -0
  1220. hare/fields/validators/formats/domain_name_validator.py +74 -0
  1221. hare/fields/validators/formats/e164_phone_validator.py +32 -0
  1222. hare/fields/validators/formats/email_validator.py +87 -0
  1223. hare/fields/validators/formats/ipv46_validator.py +28 -0
  1224. hare/fields/validators/formats/ipv4_validator.py +23 -0
  1225. hare/fields/validators/formats/ipv6_validator.py +23 -0
  1226. hare/fields/validators/formats/regex_validator.py +38 -0
  1227. hare/fields/validators/formats/slug_validator.py +36 -0
  1228. hare/fields/validators/formats/url_validator.py +95 -0
  1229. hare/fields/validators/limits/__init__.py +1 -0
  1230. hare/fields/validators/limits/length_validator.py +17 -0
  1231. hare/fields/validators/limits/max_digits_validator.py +58 -0
  1232. hare/fields/validators/limits/max_length_validator.py +20 -0
  1233. hare/fields/validators/limits/max_value_validator.py +19 -0
  1234. hare/fields/validators/limits/min_length_validator.py +20 -0
  1235. hare/fields/validators/limits/min_value_validator.py +19 -0
  1236. hare/fields/validators/limits/numeric_validator.py +19 -0
  1237. hare/fields/validators/validator.py +34 -0
  1238. hare/gis/__init__.py +52 -0
  1239. hare/gis/aggregates/__init__.py +5 -0
  1240. hare/gis/aggregates/declarations.py +42 -0
  1241. hare/gis/aggregates/spatial_aggregate.py +57 -0
  1242. hare/gis/constants.py +126 -0
  1243. hare/gis/enums.py +74 -0
  1244. hare/gis/fields/__init__.py +23 -0
  1245. hare/gis/fields/declarations.py +61 -0
  1246. hare/gis/fields/extent_field.py +60 -0
  1247. hare/gis/fields/geometry_field.py +239 -0
  1248. hare/gis/fields/made_line_field.py +86 -0
  1249. hare/gis/functions/__init__.py +53 -0
  1250. hare/gis/functions/buffer.py +29 -0
  1251. hare/gis/functions/constants.py +17 -0
  1252. hare/gis/functions/declarations.py +188 -0
  1253. hare/gis/functions/simplify.py +29 -0
  1254. hare/gis/functions/spatial_function.py +115 -0
  1255. hare/gis/functions/transform.py +41 -0
  1256. hare/gis/geometries/__init__.py +19 -0
  1257. hare/gis/geometries/declarations.py +38 -0
  1258. hare/gis/geometries/geometry.py +297 -0
  1259. hare/gis/geometries/geometry_collection.py +62 -0
  1260. hare/gis/geometries/line_string.py +46 -0
  1261. hare/gis/geometries/multi_geometry.py +75 -0
  1262. hare/gis/geometries/point.py +65 -0
  1263. hare/gis/geometries/polygon.py +89 -0
  1264. hare/gis/lookups/__init__.py +3 -0
  1265. hare/gis/lookups/spatial_field_lookups.py +219 -0
  1266. hare/gis/readers/__init__.py +11 -0
  1267. hare/gis/readers/constants.py +15 -0
  1268. hare/gis/readers/ewkb_reader.py +148 -0
  1269. hare/gis/readers/geo_json_reader.py +54 -0
  1270. hare/gis/readers/wkt_reader.py +226 -0
  1271. hare/gis/spatial_features.py +57 -0
  1272. hare/gis/terms/__init__.py +11 -0
  1273. hare/gis/terms/geometry_value.py +33 -0
  1274. hare/gis/terms/spatial_aggregate_function.py +30 -0
  1275. hare/gis/terms/spatial_function_term.py +39 -0
  1276. hare/gis/terms/spatial_relation_term.py +39 -0
  1277. hare/health/__init__.py +19 -0
  1278. hare/health/constants.py +32 -0
  1279. hare/health/criteria/__init__.py +27 -0
  1280. hare/health/criteria/acquire_wait_time.py +35 -0
  1281. hare/health/criteria/all_of.py +38 -0
  1282. hare/health/criteria/declarations.py +33 -0
  1283. hare/health/criteria/health_criterion.py +87 -0
  1284. hare/health/criteria/ping_failed.py +27 -0
  1285. hare/health/criteria/ping_latency.py +29 -0
  1286. hare/health/criteria/pool_count_criterion.py +37 -0
  1287. hare/health/criteria/pool_saturation.py +35 -0
  1288. hare/health/criteria/waiting_requests.py +33 -0
  1289. hare/health/declarations.py +83 -0
  1290. hare/health/enums.py +14 -0
  1291. hare/health/health_check.py +240 -0
  1292. hare/health/health_report.py +65 -0
  1293. hare/inspectdb/__init__.py +38 -0
  1294. hare/inspectdb/constants.py +60 -0
  1295. hare/inspectdb/exceptions.py +72 -0
  1296. hare/inspectdb/generation/__init__.py +1 -0
  1297. hare/inspectdb/generation/column_type_mapper.py +113 -0
  1298. hare/inspectdb/generation/declarations.py +34 -0
  1299. hare/inspectdb/generation/inspected_model.py +35 -0
  1300. hare/inspectdb/generation/inspected_model_builder.py +1174 -0
  1301. hare/inspectdb/generation/many_to_many_tables.py +91 -0
  1302. hare/inspectdb/generation/model_factory.py +88 -0
  1303. hare/inspectdb/generation/model_naming.py +75 -0
  1304. hare/inspectdb/generation/model_source_builder.py +148 -0
  1305. hare/inspectdb/introspection/__init__.py +28 -0
  1306. hare/inspectdb/introspection/column_info.py +67 -0
  1307. hare/inspectdb/introspection/composite_foreign_key_info.py +27 -0
  1308. hare/inspectdb/introspection/database_catalog.py +252 -0
  1309. hare/inspectdb/introspection/enums.py +26 -0
  1310. hare/inspectdb/introspection/foreign_key_info.py +25 -0
  1311. hare/inspectdb/introspection/index_info.py +265 -0
  1312. hare/inspectdb/introspection/inspected_field_specification.py +47 -0
  1313. hare/inspectdb/introspection/schema_introspector.py +564 -0
  1314. hare/inspectdb/introspection/schema_part.py +103 -0
  1315. hare/inspectdb/introspection/table_info.py +112 -0
  1316. hare/inspectdb/introspection/table_parts.py +101 -0
  1317. hare/inspectdb/schema_inspector.py +224 -0
  1318. hare/instrumentation/__init__.py +31 -0
  1319. hare/instrumentation/capture/__init__.py +9 -0
  1320. hare/instrumentation/capture/capture_needs.py +54 -0
  1321. hare/instrumentation/capture/captured_change.py +38 -0
  1322. hare/instrumentation/capture/captured_write.py +223 -0
  1323. hare/instrumentation/capture/change_capturing.py +496 -0
  1324. hare/instrumentation/capture/change_sink.py +57 -0
  1325. hare/instrumentation/change_events.py +246 -0
  1326. hare/instrumentation/constants.py +41 -0
  1327. hare/instrumentation/declarations.py +196 -0
  1328. hare/instrumentation/enums.py +35 -0
  1329. hare/instrumentation/observers/__init__.py +1 -0
  1330. hare/instrumentation/observers/observer.py +56 -0
  1331. hare/instrumentation/observers/observer_dispatch.py +197 -0
  1332. hare/instrumentation/observers/observer_set.py +138 -0
  1333. hare/instrumentation/observers/observers.py +368 -0
  1334. hare/instrumentation/pools/__init__.py +1 -0
  1335. hare/instrumentation/pools/duration_records.py +50 -0
  1336. hare/instrumentation/pools/pool_metrics.py +50 -0
  1337. hare/instrumentation/pools/pool_registry.py +49 -0
  1338. hare/instrumentation/queries/__init__.py +1 -0
  1339. hare/instrumentation/queries/query_tags.py +133 -0
  1340. hare/instrumentation/queries/query_wrapper.py +37 -0
  1341. hare/lazy_loading/__init__.py +1 -0
  1342. hare/lazy_loading/lazy_pattern.py +45 -0
  1343. hare/lazy_loading/pydantic_classes.py +96 -0
  1344. hare/migrations/__init__.py +90 -0
  1345. hare/migrations/api/__init__.py +24 -0
  1346. hare/migrations/api/checkmigrations.py +55 -0
  1347. hare/migrations/api/makemigrations.py +78 -0
  1348. hare/migrations/api/migrate.py +47 -0
  1349. hare/migrations/api/migration_request_parser.py +86 -0
  1350. hare/migrations/api/plan.py +39 -0
  1351. hare/migrations/api/sqlmigrate.py +51 -0
  1352. hare/migrations/api/squashmigrations.py +51 -0
  1353. hare/migrations/autodetection/__init__.py +4 -0
  1354. hare/migrations/autodetection/constants.py +49 -0
  1355. hare/migrations/autodetection/diffs/__init__.py +1 -0
  1356. hare/migrations/autodetection/diffs/constraint_diff.py +48 -0
  1357. hare/migrations/autodetection/diffs/declarations.py +73 -0
  1358. hare/migrations/autodetection/diffs/declared_schema_object_diff.py +47 -0
  1359. hare/migrations/autodetection/diffs/grant_diff.py +24 -0
  1360. hare/migrations/autodetection/diffs/index_diff.py +73 -0
  1361. hare/migrations/autodetection/diffs/materialized_view_diff.py +44 -0
  1362. hare/migrations/autodetection/diffs/partition_diff.py +99 -0
  1363. hare/migrations/autodetection/diffs/schema_object_diff.py +153 -0
  1364. hare/migrations/autodetection/diffs/state_field_diff.py +566 -0
  1365. hare/migrations/autodetection/diffs/state_model_diff.py +355 -0
  1366. hare/migrations/autodetection/diffs/trigger_diff.py +31 -0
  1367. hare/migrations/autodetection/diffs/view_diff.py +24 -0
  1368. hare/migrations/autodetection/field_comparable_values.py +20 -0
  1369. hare/migrations/autodetection/migration_autodetector.py +337 -0
  1370. hare/migrations/autodetection/migration_splitter.py +151 -0
  1371. hare/migrations/autodetection/operation_generator.py +1115 -0
  1372. hare/migrations/autodetection/operation_sorter.py +213 -0
  1373. hare/migrations/autodetection/rename_questions.py +98 -0
  1374. hare/migrations/autodetection/required_extensions.py +118 -0
  1375. hare/migrations/autodetection/schema_object_operations.py +150 -0
  1376. hare/migrations/autodetection/split_migration.py +24 -0
  1377. hare/migrations/autodetection/state_signatures.py +192 -0
  1378. hare/migrations/constants.py +109 -0
  1379. hare/migrations/drift/__init__.py +13 -0
  1380. hare/migrations/drift/column_mismatch.py +14 -0
  1381. hare/migrations/drift/constants.py +43 -0
  1382. hare/migrations/drift/detect_drift.py +40 -0
  1383. hare/migrations/drift/detect_drift_for_alias.py +87 -0
  1384. hare/migrations/drift/drift_result.py +22 -0
  1385. hare/migrations/drift/shadow/__init__.py +0 -0
  1386. hare/migrations/drift/shadow/column_field_names.py +26 -0
  1387. hare/migrations/drift/shadow/schema_comparison.py +557 -0
  1388. hare/migrations/drift/shadow/shadow_drift.py +318 -0
  1389. hare/migrations/drift/shadow/shadow_state.py +83 -0
  1390. hare/migrations/exceptions.py +69 -0
  1391. hare/migrations/execution/__init__.py +3 -0
  1392. hare/migrations/execution/connections_plan.py +192 -0
  1393. hare/migrations/execution/constants.py +4 -0
  1394. hare/migrations/execution/executor/__init__.py +11 -0
  1395. hare/migrations/execution/executor/migration_executor.py +640 -0
  1396. hare/migrations/execution/executor/migration_target.py +9 -0
  1397. hare/migrations/execution/executor/plan_step.py +30 -0
  1398. hare/migrations/execution/migration_runner.py +304 -0
  1399. hare/migrations/execution/swappable_setting_check.py +161 -0
  1400. hare/migrations/loading/__init__.py +4 -0
  1401. hare/migrations/loading/graph/__init__.py +13 -0
  1402. hare/migrations/loading/graph/dummy_node.py +22 -0
  1403. hare/migrations/loading/graph/migration_graph.py +235 -0
  1404. hare/migrations/loading/graph/migration_key.py +14 -0
  1405. hare/migrations/loading/graph/node.py +40 -0
  1406. hare/migrations/loading/migration_loader.py +256 -0
  1407. hare/migrations/loading/migrations_modules.py +207 -0
  1408. hare/migrations/loading/recorder/__init__.py +9 -0
  1409. hare/migrations/loading/recorder/migration_recorder.py +130 -0
  1410. hare/migrations/loading/recorder/noop_recorder.py +26 -0
  1411. hare/migrations/making/__init__.py +1 -0
  1412. hare/migrations/making/declared_attribute_values.py +27 -0
  1413. hare/migrations/making/migration_changes.py +27 -0
  1414. hare/migrations/making/migration_checks.py +115 -0
  1415. hare/migrations/making/migration_maker.py +291 -0
  1416. hare/migrations/making/migration_optimizer.py +70 -0
  1417. hare/migrations/making/migration_squasher.py +193 -0
  1418. hare/migrations/making/squashed_migration.py +24 -0
  1419. hare/migrations/migration.py +341 -0
  1420. hare/migrations/operations/__init__.py +132 -0
  1421. hare/migrations/operations/columns/__init__.py +11 -0
  1422. hare/migrations/operations/columns/alter_column_not_null_safe.py +140 -0
  1423. hare/migrations/operations/columns/backfill_column.py +118 -0
  1424. hare/migrations/operations/constants.py +20 -0
  1425. hare/migrations/operations/constraints/__init__.py +15 -0
  1426. hare/migrations/operations/constraints/add_constraint.py +129 -0
  1427. hare/migrations/operations/constraints/declarations.py +13 -0
  1428. hare/migrations/operations/constraints/rename_constraint.py +21 -0
  1429. hare/migrations/operations/constraints/validate_constraint.py +66 -0
  1430. hare/migrations/operations/database_functions/__init__.py +10 -0
  1431. hare/migrations/operations/database_functions/add_function.py +28 -0
  1432. hare/migrations/operations/database_functions/alter_function.py +30 -0
  1433. hare/migrations/operations/database_functions/remove_function.py +20 -0
  1434. hare/migrations/operations/database_functions/rename_function.py +21 -0
  1435. hare/migrations/operations/declared_uniqueness_checks.py +76 -0
  1436. hare/migrations/operations/dependencies/__init__.py +1 -0
  1437. hare/migrations/operations/dependencies/operation_dependency.py +89 -0
  1438. hare/migrations/operations/dependencies/relation_dependencies.py +157 -0
  1439. hare/migrations/operations/dictionaries/__init__.py +10 -0
  1440. hare/migrations/operations/dictionaries/add_dictionary.py +28 -0
  1441. hare/migrations/operations/dictionaries/alter_dictionary.py +29 -0
  1442. hare/migrations/operations/dictionaries/remove_dictionary.py +20 -0
  1443. hare/migrations/operations/dictionaries/rename_dictionary.py +21 -0
  1444. hare/migrations/operations/enum_types/__init__.py +7 -0
  1445. hare/migrations/operations/enum_types/alter_enum_type.py +64 -0
  1446. hare/migrations/operations/enum_types/create_enum_type.py +57 -0
  1447. hare/migrations/operations/enum_types/drop_enum_type.py +66 -0
  1448. hare/migrations/operations/enum_types/enum_type_operation.py +35 -0
  1449. hare/migrations/operations/enums.py +24 -0
  1450. hare/migrations/operations/extensions/__init__.py +15 -0
  1451. hare/migrations/operations/extensions/create_collation.py +82 -0
  1452. hare/migrations/operations/extensions/create_extension.py +47 -0
  1453. hare/migrations/operations/extensions/remove_collation.py +35 -0
  1454. hare/migrations/operations/extensions/remove_extension.py +40 -0
  1455. hare/migrations/operations/fields/__init__.py +11 -0
  1456. hare/migrations/operations/fields/add_field.py +135 -0
  1457. hare/migrations/operations/fields/alter_field.py +128 -0
  1458. hare/migrations/operations/fields/field_add_remove_operation.py +41 -0
  1459. hare/migrations/operations/fields/field_like.py +14 -0
  1460. hare/migrations/operations/fields/remove_field.py +326 -0
  1461. hare/migrations/operations/fields/rename_field.py +725 -0
  1462. hare/migrations/operations/grants/__init__.py +8 -0
  1463. hare/migrations/operations/grants/add_grant.py +31 -0
  1464. hare/migrations/operations/grants/remove_grant.py +35 -0
  1465. hare/migrations/operations/hare_operation.py +174 -0
  1466. hare/migrations/operations/indexes/__init__.py +13 -0
  1467. hare/migrations/operations/indexes/add_index.py +42 -0
  1468. hare/migrations/operations/indexes/declarations.py +12 -0
  1469. hare/migrations/operations/indexes/remove_index.py +36 -0
  1470. hare/migrations/operations/materialized_views/__init__.py +17 -0
  1471. hare/migrations/operations/materialized_views/add_materialized_view.py +37 -0
  1472. hare/migrations/operations/materialized_views/alter_materialized_view.py +32 -0
  1473. hare/migrations/operations/materialized_views/refresh_materialized_view.py +57 -0
  1474. hare/migrations/operations/materialized_views/remove_materialized_view.py +28 -0
  1475. hare/migrations/operations/materialized_views/rename_materialized_view.py +23 -0
  1476. hare/migrations/operations/model_bound_operation.py +95 -0
  1477. hare/migrations/operations/models/__init__.py +12 -0
  1478. hare/migrations/operations/models/alter_model_options.py +158 -0
  1479. hare/migrations/operations/models/alter_model_schema.py +114 -0
  1480. hare/migrations/operations/models/alter_model_table.py +65 -0
  1481. hare/migrations/operations/models/create_model.py +407 -0
  1482. hare/migrations/operations/models/delete_model.py +122 -0
  1483. hare/migrations/operations/models/model_table_operation.py +45 -0
  1484. hare/migrations/operations/models/rename_model.py +165 -0
  1485. hare/migrations/operations/models/table_renaming_operation.py +101 -0
  1486. hare/migrations/operations/operation.py +252 -0
  1487. hare/migrations/operations/partitions/__init__.py +11 -0
  1488. hare/migrations/operations/partitions/add_partition.py +36 -0
  1489. hare/migrations/operations/partitions/partition_operation.py +93 -0
  1490. hare/migrations/operations/partitions/remove_partition.py +36 -0
  1491. hare/migrations/operations/policies/__init__.py +11 -0
  1492. hare/migrations/operations/policies/add_policy.py +28 -0
  1493. hare/migrations/operations/policies/alter_policy.py +30 -0
  1494. hare/migrations/operations/policies/alter_row_level_security.py +90 -0
  1495. hare/migrations/operations/policies/remove_policy.py +21 -0
  1496. hare/migrations/operations/policies/rename_policy.py +21 -0
  1497. hare/migrations/operations/schema_objects/__init__.py +11 -0
  1498. hare/migrations/operations/schema_objects/add_schema_object.py +103 -0
  1499. hare/migrations/operations/schema_objects/alter_schema_object.py +89 -0
  1500. hare/migrations/operations/schema_objects/object_types/__init__.py +1 -0
  1501. hare/migrations/operations/schema_objects/object_types/constraint_object_type.py +98 -0
  1502. hare/migrations/operations/schema_objects/object_types/dictionary_object_type.py +51 -0
  1503. hare/migrations/operations/schema_objects/object_types/function_object_type.py +55 -0
  1504. hare/migrations/operations/schema_objects/object_types/grant_object_type.py +71 -0
  1505. hare/migrations/operations/schema_objects/object_types/index_object_type.py +140 -0
  1506. hare/migrations/operations/schema_objects/object_types/materialized_view_object_type.py +63 -0
  1507. hare/migrations/operations/schema_objects/object_types/policy_object_type.py +53 -0
  1508. hare/migrations/operations/schema_objects/object_types/schema_object_type.py +234 -0
  1509. hare/migrations/operations/schema_objects/object_types/sequence_object_type.py +54 -0
  1510. hare/migrations/operations/schema_objects/object_types/trigger_object_type.py +46 -0
  1511. hare/migrations/operations/schema_objects/object_types/view_object_type.py +60 -0
  1512. hare/migrations/operations/schema_objects/remove_schema_object.py +105 -0
  1513. hare/migrations/operations/schema_objects/rename_schema_object.py +116 -0
  1514. hare/migrations/operations/schemas/__init__.py +11 -0
  1515. hare/migrations/operations/schemas/create_schema.py +45 -0
  1516. hare/migrations/operations/schemas/drop_schema.py +40 -0
  1517. hare/migrations/operations/sequences/__init__.py +10 -0
  1518. hare/migrations/operations/sequences/add_sequence.py +28 -0
  1519. hare/migrations/operations/sequences/alter_sequence.py +29 -0
  1520. hare/migrations/operations/sequences/remove_sequence.py +20 -0
  1521. hare/migrations/operations/sequences/rename_sequence.py +21 -0
  1522. hare/migrations/operations/special/__init__.py +16 -0
  1523. hare/migrations/operations/special/run_python.py +82 -0
  1524. hare/migrations/operations/special/run_sql.py +107 -0
  1525. hare/migrations/operations/special/separate_database_and_state.py +95 -0
  1526. hare/migrations/operations/special/synchronize_key_series.py +51 -0
  1527. hare/migrations/operations/triggers/__init__.py +15 -0
  1528. hare/migrations/operations/triggers/add_trigger.py +28 -0
  1529. hare/migrations/operations/triggers/alter_trigger.py +28 -0
  1530. hare/migrations/operations/triggers/remove_trigger.py +20 -0
  1531. hare/migrations/operations/triggers/rename_trigger.py +21 -0
  1532. hare/migrations/operations/views/__init__.py +10 -0
  1533. hare/migrations/operations/views/add_view.py +29 -0
  1534. hare/migrations/operations/views/alter_view.py +29 -0
  1535. hare/migrations/operations/views/remove_view.py +20 -0
  1536. hare/migrations/operations/views/rename_view.py +21 -0
  1537. hare/migrations/reports/__init__.py +12 -0
  1538. hare/migrations/reports/operation_effect.py +28 -0
  1539. hare/migrations/reports/operation_plan.py +23 -0
  1540. hare/migrations/runtime_enums.py +88 -0
  1541. hare/migrations/safety/__init__.py +16 -0
  1542. hare/migrations/safety/enums.py +37 -0
  1543. hare/migrations/safety/migration_risk.py +33 -0
  1544. hare/migrations/safety/migration_safety_checker.py +250 -0
  1545. hare/migrations/safety/migration_safety_context.py +142 -0
  1546. hare/migrations/state/__init__.py +11 -0
  1547. hare/migrations/state/model_state.py +359 -0
  1548. hare/migrations/state/state.py +297 -0
  1549. hare/migrations/state/state_apps.py +315 -0
  1550. hare/migrations/state/state_rendering.py +222 -0
  1551. hare/migrations/swappable_dependency.py +36 -0
  1552. hare/migrations/writer/__init__.py +9 -0
  1553. hare/migrations/writer/constants.py +28 -0
  1554. hare/migrations/writer/import_manager.py +106 -0
  1555. hare/migrations/writer/migration_writer.py +986 -0
  1556. hare/models/__init__.py +20 -0
  1557. hare/models/class_building/__init__.py +1 -0
  1558. hare/models/class_building/abstract_meta_inheritance.py +116 -0
  1559. hare/models/class_building/blind_indexes.py +54 -0
  1560. hare/models/class_building/constants.py +61 -0
  1561. hare/models/class_building/extension_model_options.py +20 -0
  1562. hare/models/class_building/field_comments.py +131 -0
  1563. hare/models/class_building/generic_foreign_keys.py +287 -0
  1564. hare/models/class_building/instance_constructors.py +110 -0
  1565. hare/models/class_building/lazy_relation_fields.py +140 -0
  1566. hare/models/class_building/model_definition_checks.py +710 -0
  1567. hare/models/class_building/model_field_collection.py +185 -0
  1568. hare/models/class_building/model_managers.py +62 -0
  1569. hare/models/class_building/primary_key_declaration.py +204 -0
  1570. hare/models/class_building/schema_object_declarations.py +106 -0
  1571. hare/models/constants.py +75 -0
  1572. hare/models/deletion/__init__.py +0 -0
  1573. hare/models/deletion/cascade/__init__.py +1 -0
  1574. hare/models/deletion/cascade/cascade_deletion.py +818 -0
  1575. hare/models/deletion/cascade/cascade_restore.py +150 -0
  1576. hare/models/deletion/cascade/deletion_collector.py +646 -0
  1577. hare/models/deletion/cascade/deletion_graph.py +418 -0
  1578. hare/models/deletion/cascade/deletion_plan.py +94 -0
  1579. hare/models/deletion/cascade/protect_constraint_deferral.py +91 -0
  1580. hare/models/deletion/cascade/related_rows.py +417 -0
  1581. hare/models/deletion/cascade/tenant_schema_visits.py +96 -0
  1582. hare/models/deletion/constants.py +29 -0
  1583. hare/models/deletion/instance_deletion.py +288 -0
  1584. hare/models/deletion/preview/__init__.py +1 -0
  1585. hare/models/deletion/preview/delete_preview.py +93 -0
  1586. hare/models/deletion/preview/delete_preview_builder.py +431 -0
  1587. hare/models/deletion/soft_deletion.py +207 -0
  1588. hare/models/enums.py +76 -0
  1589. hare/models/instances/__init__.py +1 -0
  1590. hare/models/instances/dirty_fields.py +99 -0
  1591. hare/models/instances/field_snapshot.py +116 -0
  1592. hare/models/instances/instance_connections.py +61 -0
  1593. hare/models/instances/instance_copies.py +46 -0
  1594. hare/models/instances/instance_initialization.py +323 -0
  1595. hare/models/instances/instance_refresh.py +158 -0
  1596. hare/models/instances/instance_saving.py +512 -0
  1597. hare/models/meta_info.py +1143 -0
  1598. hare/models/model.py +935 -0
  1599. hare/models/model_meta.py +255 -0
  1600. hare/models/tenancy/__init__.py +1 -0
  1601. hare/models/tenancy/constants.py +16 -0
  1602. hare/models/tenancy/tenancy.py +363 -0
  1603. hare/models/tenancy/tenant_row_level_security.py +76 -0
  1604. hare/models/tenancy/tenant_schemas.py +232 -0
  1605. hare/models/uniqueness/__init__.py +0 -0
  1606. hare/models/uniqueness/declared_uniqueness.py +99 -0
  1607. hare/models/write/__init__.py +3 -0
  1608. hare/models/write/generated_keys.py +97 -0
  1609. hare/models/write/insert/__init__.py +1 -0
  1610. hare/models/write/insert/insert_conflict.py +88 -0
  1611. hare/models/write/insert/insert_statement.py +155 -0
  1612. hare/models/write/instance_capture.py +173 -0
  1613. hare/models/write/instance_values.py +126 -0
  1614. hare/models/write/instance_writer.py +949 -0
  1615. hare/models/write/returned_values.py +98 -0
  1616. hare/models/write/rollback_restores.py +213 -0
  1617. hare/models/write/rules/__init__.py +2 -0
  1618. hare/models/write/rules/constants.py +65 -0
  1619. hare/models/write/rules/enums.py +18 -0
  1620. hare/models/write/rules/relation_key_values.py +50 -0
  1621. hare/models/write/rules/row_write_rules.py +635 -0
  1622. hare/models/write/rules/tenant_write_rules.py +300 -0
  1623. hare/models/write/rules/written_instances.py +37 -0
  1624. hare/models/write/rules/written_target_checks.py +63 -0
  1625. hare/models/write/update/__init__.py +1 -0
  1626. hare/models/write/update/expression_assignment.py +162 -0
  1627. hare/models/write/update/update_parameter_slot.py +43 -0
  1628. hare/models/write/write_steps.py +98 -0
  1629. hare/native/__init__.py +1 -0
  1630. hare/native/native_modules.py +19 -0
  1631. hare/numbers/__init__.py +1 -0
  1632. hare/numbers/finite_numbers.py +27 -0
  1633. hare/py.typed +0 -0
  1634. hare/query/__init__.py +0 -0
  1635. hare/query/constants.py +41 -0
  1636. hare/query/enums.py +129 -0
  1637. hare/query/expressions/__init__.py +63 -0
  1638. hare/query/expressions/aggregate.py +442 -0
  1639. hare/query/expressions/aggregate_paths/__init__.py +9 -0
  1640. hare/query/expressions/aggregate_paths/aggregate_crossing.py +20 -0
  1641. hare/query/expressions/aggregate_paths/aggregated_multi_valued_paths.py +581 -0
  1642. hare/query/expressions/aggregate_paths/constants.py +10 -0
  1643. hare/query/expressions/arithmetic/__init__.py +1 -0
  1644. hare/query/expressions/arithmetic/arithmetic_operators.py +57 -0
  1645. hare/query/expressions/arithmetic/combinable_expression.py +47 -0
  1646. hare/query/expressions/arithmetic/combined_expression.py +614 -0
  1647. hare/query/expressions/arithmetic/constants.py +37 -0
  1648. hare/query/expressions/case/__init__.py +1 -0
  1649. hare/query/expressions/case/case.py +230 -0
  1650. hare/query/expressions/case/case_branch_value.py +14 -0
  1651. hare/query/expressions/case/when.py +167 -0
  1652. hare/query/expressions/compatibility/__init__.py +9 -0
  1653. hare/query/expressions/compatibility/constants.py +107 -0
  1654. hare/query/expressions/compatibility/output_field_compatibility.py +248 -0
  1655. hare/query/expressions/compatibility/result_branch.py +46 -0
  1656. hare/query/expressions/conditions/__init__.py +1 -0
  1657. hare/query/expressions/conditions/q.py +525 -0
  1658. hare/query/expressions/conditions/query_modifier.py +90 -0
  1659. hare/query/expressions/constants.py +120 -0
  1660. hare/query/expressions/declarations.py +12 -0
  1661. hare/query/expressions/enums.py +39 -0
  1662. hare/query/expressions/expression.py +129 -0
  1663. hare/query/expressions/expression_context.py +63 -0
  1664. hare/query/expressions/expression_result.py +41 -0
  1665. hare/query/expressions/f.py +212 -0
  1666. hare/query/expressions/frames/__init__.py +12 -0
  1667. hare/query/expressions/frames/constants.py +14 -0
  1668. hare/query/expressions/frames/declarations.py +22 -0
  1669. hare/query/expressions/frames/window_frame.py +126 -0
  1670. hare/query/expressions/function.py +490 -0
  1671. hare/query/expressions/joins/__init__.py +1 -0
  1672. hare/query/expressions/joins/array_join.py +147 -0
  1673. hare/query/expressions/joins/array_join_element.py +27 -0
  1674. hare/query/expressions/joins/asof_join.py +263 -0
  1675. hare/query/expressions/joins/filtered_relation.py +338 -0
  1676. hare/query/expressions/joins/json_table.py +147 -0
  1677. hare/query/expressions/joins/json_table_column.py +21 -0
  1678. hare/query/expressions/joins/lateral.py +88 -0
  1679. hare/query/expressions/joins/merge_source_row.py +44 -0
  1680. hare/query/expressions/joins/named_columns.py +43 -0
  1681. hare/query/expressions/joins/named_join.py +204 -0
  1682. hare/query/expressions/numeric/__init__.py +11 -0
  1683. hare/query/expressions/numeric/numeric_type.py +18 -0
  1684. hare/query/expressions/numeric/numeric_typing.py +216 -0
  1685. hare/query/expressions/numeric/unrounded_decimal_field.py +16 -0
  1686. hare/query/expressions/ordering.py +55 -0
  1687. hare/query/expressions/raw_sql.py +168 -0
  1688. hare/query/expressions/subqueries/__init__.py +1 -0
  1689. hare/query/expressions/subqueries/cte_rows.py +46 -0
  1690. hare/query/expressions/subqueries/declarations.py +8 -0
  1691. hare/query/expressions/subqueries/exists.py +181 -0
  1692. hare/query/expressions/subqueries/outer_reference.py +157 -0
  1693. hare/query/expressions/subqueries/outer_scope.py +74 -0
  1694. hare/query/expressions/subqueries/recursive_rows.py +177 -0
  1695. hare/query/expressions/subqueries/subquery.py +236 -0
  1696. hare/query/expressions/temporal/__init__.py +9 -0
  1697. hare/query/expressions/temporal/constants.py +43 -0
  1698. hare/query/expressions/temporal/temporal_arithmetic.py +254 -0
  1699. hare/query/expressions/temporal/temporal_operand.py +25 -0
  1700. hare/query/expressions/term_expression.py +28 -0
  1701. hare/query/expressions/value.py +259 -0
  1702. hare/query/expressions/value_references/__init__.py +49 -0
  1703. hare/query/expressions/value_references/array_value_reference.py +41 -0
  1704. hare/query/expressions/value_references/composite_key_value_reference.py +61 -0
  1705. hare/query/expressions/value_references/cursor_value_reference.py +41 -0
  1706. hare/query/expressions/value_references/encoded_value_reference.py +43 -0
  1707. hare/query/expressions/value_references/expression_arguments.py +181 -0
  1708. hare/query/expressions/value_references/like_value_reference.py +46 -0
  1709. hare/query/expressions/value_references/list_parameter_value_reference.py +65 -0
  1710. hare/query/expressions/value_references/list_value_reference.py +55 -0
  1711. hare/query/expressions/value_references/literal_value_reference.py +38 -0
  1712. hare/query/expressions/value_references/open_range_value_reference.py +53 -0
  1713. hare/query/expressions/value_references/range_value_reference.py +49 -0
  1714. hare/query/expressions/value_references/rebuilt_criterion_value_reference.py +93 -0
  1715. hare/query/expressions/value_references/related_key_value_reference.py +67 -0
  1716. hare/query/expressions/value_references/related_value_reference.py +33 -0
  1717. hare/query/expressions/value_references/row_list_value_reference.py +67 -0
  1718. hare/query/expressions/value_references/scalar_value_reference.py +41 -0
  1719. hare/query/expressions/value_references/value_reference_types.py +65 -0
  1720. hare/query/expressions/value_references/write_value_reference.py +41 -0
  1721. hare/query/expressions/window.py +220 -0
  1722. hare/query/filters/__init__.py +21 -0
  1723. hare/query/filters/constants.py +89 -0
  1724. hare/query/filters/lookups/__init__.py +1 -0
  1725. hare/query/filters/lookups/annotation_container_lookups.py +40 -0
  1726. hare/query/filters/lookups/constants.py +60 -0
  1727. hare/query/filters/lookups/containers/__init__.py +3 -0
  1728. hare/query/filters/lookups/containers/container_field_lookups.py +78 -0
  1729. hare/query/filters/lookups/containers/container_lookups.py +80 -0
  1730. hare/query/filters/lookups/containers/container_value_encoders.py +94 -0
  1731. hare/query/filters/lookups/date_part_lookups.py +292 -0
  1732. hare/query/filters/lookups/dialect_implemented_operators.py +39 -0
  1733. hare/query/filters/lookups/field_lookup.py +59 -0
  1734. hare/query/filters/lookups/field_lookups.py +289 -0
  1735. hare/query/filters/lookups/field_transforms.py +98 -0
  1736. hare/query/filters/lookups/json/__init__.py +1 -0
  1737. hare/query/filters/lookups/json/json_filter_guards.py +412 -0
  1738. hare/query/filters/lookups/json/json_filter_parser.py +82 -0
  1739. hare/query/filters/lookups/json/json_lookups.py +67 -0
  1740. hare/query/filters/lookups/json/json_path_lookups.py +184 -0
  1741. hare/query/filters/lookups/lookups.py +371 -0
  1742. hare/query/filters/lookups/value_encoders.py +246 -0
  1743. hare/query/filters/resolution/__init__.py +1 -0
  1744. hare/query/filters/resolution/annotation_filters.py +280 -0
  1745. hare/query/filters/resolution/composite_key_filters.py +439 -0
  1746. hare/query/filters/resolution/filter_kwargs.py +704 -0
  1747. hare/query/filters/resolution/filter_values.py +565 -0
  1748. hare/query/filters/resolution/json_path_filters.py +157 -0
  1749. hare/query/filters/resolution/lookup_support.py +84 -0
  1750. hare/query/filters/resolution/relation_filters.py +510 -0
  1751. hare/query/filters/resolution/sensitive_filter_keys.py +91 -0
  1752. hare/query/filters/resolution/to_many_filters.py +436 -0
  1753. hare/query/functions/__init__.py +185 -0
  1754. hare/query/functions/aggregates/__init__.py +9 -0
  1755. hare/query/functions/aggregates/array_agg.py +48 -0
  1756. hare/query/functions/aggregates/avg.py +59 -0
  1757. hare/query/functions/aggregates/constants.py +5 -0
  1758. hare/query/functions/aggregates/count.py +81 -0
  1759. hare/query/functions/aggregates/declarations.py +51 -0
  1760. hare/query/functions/aggregates/statistic_aggregate.py +67 -0
  1761. hare/query/functions/aggregates/sum.py +55 -0
  1762. hare/query/functions/comparison/__init__.py +9 -0
  1763. hare/query/functions/comparison/cast.py +121 -0
  1764. hare/query/functions/comparison/coalesce.py +140 -0
  1765. hare/query/functions/comparison/collate.py +45 -0
  1766. hare/query/functions/comparison/declarations.py +21 -0
  1767. hare/query/functions/comparison/function_arguments.py +70 -0
  1768. hare/query/functions/comparison/greatest_least_function.py +108 -0
  1769. hare/query/functions/comparison/null_if.py +78 -0
  1770. hare/query/functions/containers/__init__.py +7 -0
  1771. hare/query/functions/containers/array_item.py +69 -0
  1772. hare/query/functions/datetime/__init__.py +55 -0
  1773. hare/query/functions/datetime/date_function_source.py +31 -0
  1774. hare/query/functions/datetime/declarations.py +193 -0
  1775. hare/query/functions/datetime/extract.py +97 -0
  1776. hare/query/functions/datetime/now.py +26 -0
  1777. hare/query/functions/datetime/trunc.py +124 -0
  1778. hare/query/functions/json/__init__.py +6 -0
  1779. hare/query/functions/json/json_array.py +34 -0
  1780. hare/query/functions/json/json_object.py +161 -0
  1781. hare/query/functions/math/__init__.py +53 -0
  1782. hare/query/functions/math/declarations.py +192 -0
  1783. hare/query/functions/math/enums.py +16 -0
  1784. hare/query/functions/math/math_function.py +110 -0
  1785. hare/query/functions/math/mod.py +52 -0
  1786. hare/query/functions/math/pi.py +21 -0
  1787. hare/query/functions/math/random.py +22 -0
  1788. hare/query/functions/math/round.py +85 -0
  1789. hare/query/functions/text/__init__.py +55 -0
  1790. hare/query/functions/text/concat.py +99 -0
  1791. hare/query/functions/text/declarations.py +197 -0
  1792. hare/query/functions/text/l_pad.py +17 -0
  1793. hare/query/functions/text/length.py +38 -0
  1794. hare/query/functions/text/r_pad.py +17 -0
  1795. hare/query/functions/text/replace.py +17 -0
  1796. hare/query/functions/text/text_function.py +114 -0
  1797. hare/query/functions/window/__init__.py +45 -0
  1798. hare/query/functions/window/aggregate_window_function.py +43 -0
  1799. hare/query/functions/window/avg.py +23 -0
  1800. hare/query/functions/window/constants.py +3 -0
  1801. hare/query/functions/window/count.py +54 -0
  1802. hare/query/functions/window/declarations.py +153 -0
  1803. hare/query/functions/window/distribution_window_function.py +21 -0
  1804. hare/query/functions/window/field_window_function.py +149 -0
  1805. hare/query/functions/window/n_tile.py +41 -0
  1806. hare/query/functions/window/nth_value.py +54 -0
  1807. hare/query/functions/window/offset_window_function.py +85 -0
  1808. hare/query/functions/window/rank_like_window_function.py +21 -0
  1809. hare/query/functions/window/statistic_window_function.py +44 -0
  1810. hare/query/functions/window/sum.py +23 -0
  1811. hare/query/functions/window/window_function.py +134 -0
  1812. hare/query/generic_foreign_keys/__init__.py +3 -0
  1813. hare/query/generic_foreign_keys/constants.py +21 -0
  1814. hare/query/generic_foreign_keys/generic_foreign_key_filters.py +251 -0
  1815. hare/query/generic_foreign_keys/generic_foreign_key_paths.py +183 -0
  1816. hare/query/generic_foreign_keys/generic_foreign_key_types.py +94 -0
  1817. hare/query/grouping/__init__.py +14 -0
  1818. hare/query/grouping/declarations.py +21 -0
  1819. hare/query/grouping/grouping.py +60 -0
  1820. hare/query/grouping/grouping_set.py +67 -0
  1821. hare/query/grouping/grouping_sets.py +55 -0
  1822. hare/query/key_columns.py +297 -0
  1823. hare/query/lookup_info/__init__.py +12 -0
  1824. hare/query/lookup_info/declarations.py +27 -0
  1825. hare/query/lookup_info/lookup_info.py +89 -0
  1826. hare/query/lookup_info/lookup_info_builder.py +807 -0
  1827. hare/query/lookup_info/lookup_path.py +94 -0
  1828. hare/query/lookup_info/lookup_paths.py +415 -0
  1829. hare/query/lookup_info/ordering_info.py +43 -0
  1830. hare/query/lookup_info/value_paths.py +135 -0
  1831. hare/query/managers/__init__.py +1 -0
  1832. hare/query/managers/base_manager.py +20 -0
  1833. hare/query/managers/manager.py +130 -0
  1834. hare/query/plans/__init__.py +4 -0
  1835. hare/query/plans/call_signatures/__init__.py +1 -0
  1836. hare/query/plans/call_signatures/call_signature_plans.py +318 -0
  1837. hare/query/plans/call_signatures/call_signature_runs.py +466 -0
  1838. hare/query/plans/constants.py +37 -0
  1839. hare/query/plans/description/__init__.py +11 -0
  1840. hare/query/plans/description/declared_plan_parts.py +7 -0
  1841. hare/query/plans/description/filter_plan_descriptions.py +229 -0
  1842. hare/query/plans/description/hashable_values.py +22 -0
  1843. hare/query/plans/description/plan_context.py +33 -0
  1844. hare/query/plans/description/plan_describer_compiler.py +355 -0
  1845. hare/query/plans/description/plan_description.py +66 -0
  1846. hare/query/plans/description/plan_parts.py +150 -0
  1847. hare/query/plans/description/plannable.py +69 -0
  1848. hare/query/plans/description/term_plan_descriptions.py +92 -0
  1849. hare/query/plans/enums.py +97 -0
  1850. hare/query/plans/plan_origins.py +99 -0
  1851. hare/query/plans/recording/__init__.py +1 -0
  1852. hare/query/plans/recording/plan_recording.py +100 -0
  1853. hare/query/plans/recording/scope_value_source.py +67 -0
  1854. hare/query/plans/statement/__init__.py +1 -0
  1855. hare/query/plans/statement/declared_plan_slots.py +11 -0
  1856. hare/query/plans/statement/query_key_compiler.py +171 -0
  1857. hare/query/plans/statement/raw_sql_plan.py +47 -0
  1858. hare/query/plans/statement/statement_plan.py +522 -0
  1859. hare/query/plans/statement/statement_plan_descriptions.py +451 -0
  1860. hare/query/plans/statement/statement_plan_runs.py +306 -0
  1861. hare/query/plans/statement/statement_plans.py +128 -0
  1862. hare/query/query_connection.py +110 -0
  1863. hare/query/queryset/__init__.py +19 -0
  1864. hare/query/queryset/annotation_access_tracker.py +20 -0
  1865. hare/query/queryset/arguments/__init__.py +1 -0
  1866. hare/query/queryset/arguments/annotation_arguments.py +215 -0
  1867. hare/query/queryset/arguments/collection_arguments.py +29 -0
  1868. hare/query/queryset/arguments/filter_arguments.py +260 -0
  1869. hare/query/queryset/arguments/ordering_arguments.py +242 -0
  1870. hare/query/queryset/arguments/values_arguments.py +145 -0
  1871. hare/query/queryset/combination/__init__.py +1 -0
  1872. hare/query/queryset/combination/combination.py +58 -0
  1873. hare/query/queryset/combination/queryset_combination.py +109 -0
  1874. hare/query/queryset/concrete_field_paths.py +109 -0
  1875. hare/query/queryset/constants.py +83 -0
  1876. hare/query/queryset/date_lists.py +74 -0
  1877. hare/query/queryset/declarations.py +7 -0
  1878. hare/query/queryset/extensions/__init__.py +9 -0
  1879. hare/query/queryset/extensions/query_set_extension.py +78 -0
  1880. hare/query/queryset/extensions/query_set_extension_call.py +19 -0
  1881. hare/query/queryset/extensions/query_set_extension_query.py +146 -0
  1882. hare/query/queryset/extensions/query_set_extensions.py +247 -0
  1883. hare/query/queryset/lazy_relation_names.py +33 -0
  1884. hare/query/queryset/model_query.py +79 -0
  1885. hare/query/queryset/objects_by_key.py +79 -0
  1886. hare/query/queryset/options/__init__.py +1 -0
  1887. hare/query/queryset/options/query_option.py +42 -0
  1888. hare/query/queryset/options/query_options.py +313 -0
  1889. hare/query/queryset/pending_calls/__init__.py +1 -0
  1890. hare/query/queryset/pending_calls/calls_before_setup.py +185 -0
  1891. hare/query/queryset/pending_calls/pending_filter_calls.py +144 -0
  1892. hare/query/queryset/query_specification.py +1088 -0
  1893. hare/query/queryset/queryset.py +2527 -0
  1894. hare/query/queryset/relations/__init__.py +3 -0
  1895. hare/query/queryset/relations/linked_many_to_many_relation.py +41 -0
  1896. hare/query/queryset/relations/many_to_many/__init__.py +1 -0
  1897. hare/query/queryset/relations/many_to_many/linked_keys.py +147 -0
  1898. hare/query/queryset/relations/many_to_many/linked_rows_queries.py +175 -0
  1899. hare/query/queryset/relations/many_to_many/many_to_many_members.py +173 -0
  1900. hare/query/queryset/relations/many_to_many/many_to_many_scope_checks.py +332 -0
  1901. hare/query/queryset/relations/many_to_many/through_defaults.py +244 -0
  1902. hare/query/queryset/relations/many_to_many/through_row_inserting.py +516 -0
  1903. hare/query/queryset/relations/many_to_many/through_row_unlinking.py +333 -0
  1904. hare/query/queryset/relations/many_to_many/through_rows.py +185 -0
  1905. hare/query/queryset/relations/many_to_many_relation.py +382 -0
  1906. hare/query/queryset/relations/related_queryset/__init__.py +9 -0
  1907. hare/query/queryset/relations/related_queryset/related_query_set.py +366 -0
  1908. hare/query/queryset/relations/related_queryset/related_rows_iterator.py +42 -0
  1909. hare/query/queryset/relations/related_queryset/relation_rows.py +73 -0
  1910. hare/query/queryset/relations/related_queryset/unsaved_owner_condition.py +37 -0
  1911. hare/query/queryset/relations/reverse_relation.py +474 -0
  1912. hare/query/queryset/row_multiplication.py +151 -0
  1913. hare/query/queryset/schema_object_calls.py +45 -0
  1914. hare/query/queryset/selection/__init__.py +1 -0
  1915. hare/query/queryset/selection/statement_selection.py +217 -0
  1916. hare/query/queryset/selection/values_selection.py +65 -0
  1917. hare/query/queryset/single_rows/__init__.py +1 -0
  1918. hare/query/queryset/single_rows/get_exception_argument.py +7 -0
  1919. hare/query/queryset/single_rows/get_exceptions.py +91 -0
  1920. hare/query/queryset/single_rows/none_awaitable_type.py +21 -0
  1921. hare/query/queryset/single_rows/query_set_single.py +49 -0
  1922. hare/query/queryset/single_rows/single_row.py +103 -0
  1923. hare/query/queryset/specification_copying.py +123 -0
  1924. hare/query/queryset/table_sample.py +60 -0
  1925. hare/query/raw_sql/__init__.py +6 -0
  1926. hare/query/raw_sql/execute_sql.py +71 -0
  1927. hare/query/raw_sql/sql_query_result.py +38 -0
  1928. hare/query/relation_loading/__init__.py +14 -0
  1929. hare/query/relation_loading/constants.py +8 -0
  1930. hare/query/relation_loading/prefetching/__init__.py +1 -0
  1931. hare/query/relation_loading/prefetching/declarations.py +32 -0
  1932. hare/query/relation_loading/prefetching/direct_relation_prefetch.py +234 -0
  1933. hare/query/relation_loading/prefetching/many_to_many_prefetch.py +496 -0
  1934. hare/query/relation_loading/prefetching/prefetch.py +198 -0
  1935. hare/query/relation_loading/prefetching/prefetch_checks.py +80 -0
  1936. hare/query/relation_loading/prefetching/prefetch_related_objects.py +48 -0
  1937. hare/query/relation_loading/prefetching/prefetch_request.py +30 -0
  1938. hare/query/relation_loading/prefetching/prefetcher.py +200 -0
  1939. hare/query/relation_loading/prefetching/related_rows_fetch.py +116 -0
  1940. hare/query/relation_loading/prefetching/reverse_relation_prefetch.py +201 -0
  1941. hare/query/relation_loading/prefetching/sliced_prefetch.py +165 -0
  1942. hare/query/relation_loading/select.py +26 -0
  1943. hare/query/rows/__init__.py +3 -0
  1944. hare/query/rows/constants.py +33 -0
  1945. hare/query/rows/enums.py +81 -0
  1946. hare/query/rows/model_rows/__init__.py +1 -0
  1947. hare/query/rows/model_rows/combined_model_rows.py +254 -0
  1948. hare/query/rows/model_rows/model_columns.py +210 -0
  1949. hare/query/rows/model_rows/model_rows.py +462 -0
  1950. hare/query/rows/native/__init__.py +1 -0
  1951. hare/query/rows/native/enums.py +12 -0
  1952. hare/query/rows/native/field_codecs.py +450 -0
  1953. hare/query/rows/native/hydrate_accelerator.py +264 -0
  1954. hare/query/rows/native/hydration_layout.py +114 -0
  1955. hare/query/rows/values_rows/__init__.py +1 -0
  1956. hare/query/rows/values_rows/combined_values_rows.py +133 -0
  1957. hare/query/rows/values_rows/dict_rows.py +92 -0
  1958. hare/query/rows/values_rows/flat_rows.py +33 -0
  1959. hare/query/rows/values_rows/named_rows.py +52 -0
  1960. hare/query/rows/values_rows/tuple_rows.py +128 -0
  1961. hare/query/rows/values_rows/value_field.py +26 -0
  1962. hare/query/rows/values_rows/values_rows.py +175 -0
  1963. hare/query/scopes/__init__.py +21 -0
  1964. hare/query/scopes/constants.py +14 -0
  1965. hare/query/scopes/manager_scope.py +51 -0
  1966. hare/query/scopes/row_scope.py +46 -0
  1967. hare/query/scopes/row_scopes.py +281 -0
  1968. hare/query/scopes/row_visibility.py +89 -0
  1969. hare/query/scopes/scope_join_conditions.py +273 -0
  1970. hare/query/scopes/soft_delete_scope.py +17 -0
  1971. hare/query/scopes/tenants/__init__.py +1 -0
  1972. hare/query/scopes/tenants/all_tenants.py +11 -0
  1973. hare/query/scopes/tenants/model_tenants.py +79 -0
  1974. hare/query/scopes/tenants/tenant_scope.py +70 -0
  1975. hare/query/scopes/tenants/tenant_values.py +52 -0
  1976. hare/query/statements/__init__.py +30 -0
  1977. hare/query/statements/awaitable_query.py +709 -0
  1978. hare/query/statements/building/__init__.py +1 -0
  1979. hare/query/statements/building/keyset_bounds.py +179 -0
  1980. hare/query/statements/building/query_annotations.py +350 -0
  1981. hare/query/statements/building/query_conditions.py +244 -0
  1982. hare/query/statements/building/query_ctes.py +70 -0
  1983. hare/query/statements/building/query_grouping.py +347 -0
  1984. hare/query/statements/building/query_joins.py +282 -0
  1985. hare/query/statements/building/query_ordering.py +275 -0
  1986. hare/query/statements/building/row_locks.py +216 -0
  1987. hare/query/statements/constants.py +111 -0
  1988. hare/query/statements/select/__init__.py +4 -0
  1989. hare/query/statements/select/combined/__init__.py +1 -0
  1990. hare/query/statements/select/combined/combined_branches.py +380 -0
  1991. hare/query/statements/select/combined/combined_derived_queries.py +220 -0
  1992. hare/query/statements/select/combined/combined_plan_descriptions.py +43 -0
  1993. hare/query/statements/select/combined_query.py +354 -0
  1994. hare/query/statements/select/model_rows/__init__.py +1 -0
  1995. hare/query/statements/select/model_rows/instance_hydration.py +162 -0
  1996. hare/query/statements/select/model_rows/model_rows_plan_descriptions.py +108 -0
  1997. hare/query/statements/select/model_rows/only_defer_fields.py +243 -0
  1998. hare/query/statements/select/model_rows/select_related_joins.py +112 -0
  1999. hare/query/statements/select/model_rows_query.py +416 -0
  2000. hare/query/statements/select/raw_sql_query.py +151 -0
  2001. hare/query/statements/select/rows_query.py +210 -0
  2002. hare/query/statements/select/select_query.py +110 -0
  2003. hare/query/statements/select/values/__init__.py +1 -0
  2004. hare/query/statements/select/values/constants.py +9 -0
  2005. hare/query/statements/select/values/values_distinct.py +41 -0
  2006. hare/query/statements/select/values/values_grouping.py +118 -0
  2007. hare/query/statements/select/values/values_output.py +298 -0
  2008. hare/query/statements/select/values/values_reading.py +26 -0
  2009. hare/query/statements/select/values/window_filter_wrapping.py +91 -0
  2010. hare/query/statements/select/values_query.py +754 -0
  2011. hare/query/statements/summary/__init__.py +3 -0
  2012. hare/query/statements/summary/aggregate_query.py +732 -0
  2013. hare/query/statements/summary/contains_query.py +66 -0
  2014. hare/query/statements/summary/count_query.py +117 -0
  2015. hare/query/statements/summary/exists_query.py +151 -0
  2016. hare/query/statements/summary/rows_summary_query.py +187 -0
  2017. hare/query/statements/write/__init__.py +3 -0
  2018. hare/query/statements/write/bulk/__init__.py +1 -0
  2019. hare/query/statements/write/bulk/bulk_objects.py +61 -0
  2020. hare/query/statements/write/bulk/bulk_update_checks.py +92 -0
  2021. hare/query/statements/write/bulk/bulk_update_query.py +1012 -0
  2022. hare/query/statements/write/bulk/bulk_write_batches.py +368 -0
  2023. hare/query/statements/write/bulk/create/__init__.py +1 -0
  2024. hare/query/statements/write/bulk/create/bulk_create_query.py +936 -0
  2025. hare/query/statements/write/bulk/create/bulk_create_reports.py +316 -0
  2026. hare/query/statements/write/bulk/create/conflict_clause.py +137 -0
  2027. hare/query/statements/write/bulk/create/copy_insert.py +143 -0
  2028. hare/query/statements/write/bulk/create/default_rows_insert.py +85 -0
  2029. hare/query/statements/write/bulk/create/inline_insert.py +93 -0
  2030. hare/query/statements/write/bulk/create/multi_row_insert.py +277 -0
  2031. hare/query/statements/write/bulk/create/returned_rows_matching.py +136 -0
  2032. hare/query/statements/write/bulk/create/template_insert.py +185 -0
  2033. hare/query/statements/write/bulk/declarations.py +61 -0
  2034. hare/query/statements/write/create_or_update.py +193 -0
  2035. hare/query/statements/write/declarations.py +26 -0
  2036. hare/query/statements/write/delete_query.py +402 -0
  2037. hare/query/statements/write/insert_from_query.py +373 -0
  2038. hare/query/statements/write/matching_rows_query.py +268 -0
  2039. hare/query/statements/write/merge/__init__.py +1 -0
  2040. hare/query/statements/write/merge/merge_query.py +818 -0
  2041. hare/query/statements/write/merge/merge_when.py +87 -0
  2042. hare/query/statements/write/restore_query.py +105 -0
  2043. hare/query/statements/write/returning/__init__.py +1 -0
  2044. hare/query/statements/write/returning/delete_returning_query.py +154 -0
  2045. hare/query/statements/write/returning/returned_rows.py +246 -0
  2046. hare/query/statements/write/returning/update_returning_query.py +120 -0
  2047. hare/query/statements/write/update_query.py +851 -0
  2048. hare/search/__init__.py +29 -0
  2049. hare/search/constants.py +22 -0
  2050. hare/search/enums.py +26 -0
  2051. hare/search/query/__init__.py +8 -0
  2052. hare/search/query/combined_search_query.py +46 -0
  2053. hare/search/query/declarations.py +9 -0
  2054. hare/search/query/search_query.py +75 -0
  2055. hare/search/query/search_query_combinable.py +40 -0
  2056. hare/search/search_arguments.py +79 -0
  2057. hare/search/search_features.py +35 -0
  2058. hare/search/search_headline.py +186 -0
  2059. hare/search/search_rank.py +144 -0
  2060. hare/search/types.py +16 -0
  2061. hare/search/vector/__init__.py +7 -0
  2062. hare/search/vector/combined_search_vector.py +32 -0
  2063. hare/search/vector/search_vector.py +77 -0
  2064. hare/search/vector/search_vector_combinable.py +30 -0
  2065. hare/sql/__init__.py +71 -0
  2066. hare/sql/analytics/__init__.py +17 -0
  2067. hare/sql/analytics/count.py +13 -0
  2068. hare/sql/analytics/current_row.py +10 -0
  2069. hare/sql/analytics/declarations.py +15 -0
  2070. hare/sql/analytics/row_number.py +13 -0
  2071. hare/sql/builder/__init__.py +29 -0
  2072. hare/sql/builder/joins/__init__.py +16 -0
  2073. hare/sql/builder/joins/join.py +71 -0
  2074. hare/sql/builder/joins/join_on.py +73 -0
  2075. hare/sql/builder/joins/joiner.py +38 -0
  2076. hare/sql/builder/queries/__init__.py +17 -0
  2077. hare/sql/builder/queries/constants.py +5 -0
  2078. hare/sql/builder/queries/correlated_subqueries.py +583 -0
  2079. hare/sql/builder/queries/pagination_sql.py +19 -0
  2080. hare/sql/builder/queries/query.py +109 -0
  2081. hare/sql/builder/queries/query_builder.py +1090 -0
  2082. hare/sql/builder/queries/query_sql_rendering.py +407 -0
  2083. hare/sql/builder/queries/set_operation_query.py +203 -0
  2084. hare/sql/builder/returned_value.py +19 -0
  2085. hare/sql/builder/tables/__init__.py +22 -0
  2086. hare/sql/builder/tables/aliased_query.py +33 -0
  2087. hare/sql/builder/tables/array_join_source.py +39 -0
  2088. hare/sql/builder/tables/asof_join_source.py +29 -0
  2089. hare/sql/builder/tables/cte.py +18 -0
  2090. hare/sql/builder/tables/database.py +12 -0
  2091. hare/sql/builder/tables/json_table_query.py +76 -0
  2092. hare/sql/builder/tables/lateral_query.py +26 -0
  2093. hare/sql/builder/tables/schema.py +42 -0
  2094. hare/sql/builder/tables/selectable.py +83 -0
  2095. hare/sql/builder/tables/table.py +170 -0
  2096. hare/sql/builder_methods.py +56 -0
  2097. hare/sql/constants.py +87 -0
  2098. hare/sql/enums.py +211 -0
  2099. hare/sql/exceptions.py +31 -0
  2100. hare/sql/functions/__init__.py +81 -0
  2101. hare/sql/functions/address_text.py +18 -0
  2102. hare/sql/functions/cast.py +19 -0
  2103. hare/sql/functions/cast_to.py +38 -0
  2104. hare/sql/functions/coalesce.py +13 -0
  2105. hare/sql/functions/count.py +14 -0
  2106. hare/sql/functions/datetime/__init__.py +1 -0
  2107. hare/sql/functions/datetime/date.py +16 -0
  2108. hare/sql/functions/datetime/date_as_timestamp.py +23 -0
  2109. hare/sql/functions/datetime/date_trunc.py +65 -0
  2110. hare/sql/functions/datetime/datetime_as_text.py +16 -0
  2111. hare/sql/functions/datetime/datetime_cast.py +68 -0
  2112. hare/sql/functions/datetime/extract.py +92 -0
  2113. hare/sql/functions/datetime/now.py +14 -0
  2114. hare/sql/functions/datetime/temporal_difference.py +26 -0
  2115. hare/sql/functions/datetime/temporal_shift.py +38 -0
  2116. hare/sql/functions/datetime/timestamp_comparand.py +18 -0
  2117. hare/sql/functions/declarations.py +19 -0
  2118. hare/sql/functions/distinct_option_function.py +33 -0
  2119. hare/sql/functions/greatest_least.py +25 -0
  2120. hare/sql/functions/grouping_function.py +13 -0
  2121. hare/sql/functions/json/__init__.py +1 -0
  2122. hare/sql/functions/json/json_array.py +14 -0
  2123. hare/sql/functions/json/json_object.py +14 -0
  2124. hare/sql/functions/json/json_sort_key.py +15 -0
  2125. hare/sql/functions/json/json_value.py +19 -0
  2126. hare/sql/functions/numeric_cast.py +16 -0
  2127. hare/sql/functions/random_number.py +13 -0
  2128. hare/sql/functions/round.py +20 -0
  2129. hare/sql/functions/statistic.py +20 -0
  2130. hare/sql/functions/std_dev.py +13 -0
  2131. hare/sql/functions/text/__init__.py +1 -0
  2132. hare/sql/functions/text/collate.py +61 -0
  2133. hare/sql/functions/text/concat.py +18 -0
  2134. hare/sql/functions/text/concat_function.py +53 -0
  2135. hare/sql/functions/text/decimal_text_collate.py +16 -0
  2136. hare/sql/functions/text/lower.py +12 -0
  2137. hare/sql/functions/text/replace.py +12 -0
  2138. hare/sql/functions/text/upper.py +12 -0
  2139. hare/sql/identifiers.py +61 -0
  2140. hare/sql/sql_context.py +155 -0
  2141. hare/sql/terms/__init__.py +90 -0
  2142. hare/sql/terms/arithmetic_expression.py +120 -0
  2143. hare/sql/terms/array.py +109 -0
  2144. hare/sql/terms/bracket.py +12 -0
  2145. hare/sql/terms/case/__init__.py +1 -0
  2146. hare/sql/terms/case/case.py +123 -0
  2147. hare/sql/terms/case/when_then.py +11 -0
  2148. hare/sql/terms/constants.py +5 -0
  2149. hare/sql/terms/containers/__init__.py +35 -0
  2150. hare/sql/terms/containers/array_element_term.py +58 -0
  2151. hare/sql/terms/containers/array_slice_term.py +28 -0
  2152. hare/sql/terms/containers/constants.py +6 -0
  2153. hare/sql/terms/containers/container_function.py +22 -0
  2154. hare/sql/terms/containers/container_literal.py +37 -0
  2155. hare/sql/terms/containers/declarations.py +47 -0
  2156. hare/sql/terms/containers/map_value_term.py +30 -0
  2157. hare/sql/terms/containers/tuple_element_term.py +21 -0
  2158. hare/sql/terms/criteria/__init__.py +37 -0
  2159. hare/sql/terms/criteria/basic_criterion.py +92 -0
  2160. hare/sql/terms/criteria/between_criterion.py +39 -0
  2161. hare/sql/terms/criteria/complex_criterion.py +47 -0
  2162. hare/sql/terms/criteria/contains_criterion.py +81 -0
  2163. hare/sql/terms/criteria/criterion.py +87 -0
  2164. hare/sql/terms/criteria/empty_criterion.py +38 -0
  2165. hare/sql/terms/criteria/is_distinct_from_criterion.py +52 -0
  2166. hare/sql/terms/criteria/is_not_true_criterion.py +49 -0
  2167. hare/sql/terms/criteria/json_attribute_criterion.py +62 -0
  2168. hare/sql/terms/criteria/like.py +56 -0
  2169. hare/sql/terms/criteria/nested_criterion.py +78 -0
  2170. hare/sql/terms/criteria/not_criterion.py +78 -0
  2171. hare/sql/terms/criteria/null_criterion.py +47 -0
  2172. hare/sql/terms/criteria/range_criterion.py +28 -0
  2173. hare/sql/terms/criteria/true_criterion.py +13 -0
  2174. hare/sql/terms/field.py +65 -0
  2175. hare/sql/terms/functions/__init__.py +30 -0
  2176. hare/sql/terms/functions/aggregate_function.py +119 -0
  2177. hare/sql/terms/functions/analytic_function.py +107 -0
  2178. hare/sql/terms/functions/custom_function.py +39 -0
  2179. hare/sql/terms/functions/decimal_mod.py +27 -0
  2180. hare/sql/terms/functions/float_mod.py +24 -0
  2181. hare/sql/terms/functions/function.py +131 -0
  2182. hare/sql/terms/functions/interval.py +110 -0
  2183. hare/sql/terms/functions/mod.py +22 -0
  2184. hare/sql/terms/functions/pow.py +11 -0
  2185. hare/sql/terms/functions/window_frame_analytic_function.py +78 -0
  2186. hare/sql/terms/grouping/__init__.py +14 -0
  2187. hare/sql/terms/grouping/declarations.py +17 -0
  2188. hare/sql/terms/grouping/grouping_element.py +42 -0
  2189. hare/sql/terms/grouping/grouping_sets_element.py +46 -0
  2190. hare/sql/terms/index.py +15 -0
  2191. hare/sql/terms/infix_operator.py +34 -0
  2192. hare/sql/terms/json.py +100 -0
  2193. hare/sql/terms/negative.py +49 -0
  2194. hare/sql/terms/node.py +135 -0
  2195. hare/sql/terms/parameters/__init__.py +1 -0
  2196. hare/sql/terms/parameters/list_parameter.py +33 -0
  2197. hare/sql/terms/parameters/parameter.py +35 -0
  2198. hare/sql/terms/parameters/parameterized_value_wrapper.py +19 -0
  2199. hare/sql/terms/parameters/parameterizer.py +99 -0
  2200. hare/sql/terms/parameters/query_parameters.py +74 -0
  2201. hare/sql/terms/parameters/recording_parameterizer.py +27 -0
  2202. hare/sql/terms/qualified_outer_field.py +58 -0
  2203. hare/sql/terms/select_reference.py +80 -0
  2204. hare/sql/terms/star.py +30 -0
  2205. hare/sql/terms/subqueries/__init__.py +1 -0
  2206. hare/sql/terms/subqueries/exists_term.py +111 -0
  2207. hare/sql/terms/subqueries/outer_aggregate_term.py +51 -0
  2208. hare/sql/terms/term.py +334 -0
  2209. hare/sql/terms/term_identity_text.py +60 -0
  2210. hare/sql/terms/tuple.py +52 -0
  2211. hare/sql/terms/values/__init__.py +1 -0
  2212. hare/sql/terms/values/literal_value.py +21 -0
  2213. hare/sql/terms/values/null_value.py +10 -0
  2214. hare/sql/terms/values/old_row_value.py +28 -0
  2215. hare/sql/terms/values/row_value_list.py +15 -0
  2216. hare/sql/terms/values/value_wrapper.py +129 -0
  2217. hare/sql/types/__init__.py +1 -0
  2218. hare/sql/types/sql_type.py +13 -0
  2219. hare/sql/types/sql_types.py +17 -0
  2220. hare/stubs/__init__.py +2 -0
  2221. hare/stubs/constants.py +18 -0
  2222. hare/stubs/model_stub.py +415 -0
  2223. hare/stubs/module_stub.py +150 -0
  2224. hare/stubs/stub_imports.py +91 -0
  2225. hare/stubs/stub_writer.py +60 -0
  2226. hare/stubs/value_type_text.py +98 -0
  2227. hare/time/__init__.py +12 -0
  2228. hare/time/constants.py +27 -0
  2229. hare/time/system_clock.py +84 -0
  2230. hare/time/timezone.py +534 -0
  2231. hare/time/zone_info.py +13 -0
  2232. hare/transactions/__init__.py +25 -0
  2233. hare/transactions/atomic/__init__.py +1 -0
  2234. hare/transactions/atomic/atomic.py +138 -0
  2235. hare/transactions/atomic/atomic_attempt.py +62 -0
  2236. hare/transactions/atomic/atomic_attempts.py +73 -0
  2237. hare/transactions/constants.py +41 -0
  2238. hare/transactions/distributed/__init__.py +9 -0
  2239. hare/transactions/distributed/declarations.py +32 -0
  2240. hare/transactions/distributed/distributed_coordinator.py +784 -0
  2241. hare/transactions/distributed/distributed_transactions.py +26 -0
  2242. hare/transactions/distributed/stale_prepared_transaction.py +23 -0
  2243. hare/transactions/enums.py +31 -0
  2244. hare/transactions/transaction_options.py +86 -0
  2245. hare/transactions/transactions.py +228 -0
  2246. hare/typing_info/__init__.py +3 -0
  2247. hare/typing_info/bound_models.py +73 -0
  2248. hare/typing_info/constants.py +13 -0
  2249. hare/typing_info/declarations.py +44 -0
  2250. hare/typing_info/filter_value_types.py +144 -0
  2251. hare/vectors/__init__.py +18 -0
  2252. hare/vectors/constants.py +10 -0
  2253. hare/vectors/declarations.py +41 -0
  2254. hare/vectors/enums.py +14 -0
  2255. hare/vectors/terms/__init__.py +6 -0
  2256. hare/vectors/terms/vector_distance_term.py +22 -0
  2257. hare/vectors/terms/vector_literal.py +18 -0
  2258. hare/vectors/vector_distance_expression.py +107 -0
  2259. hare/vectors/vector_field.py +147 -0
  2260. hare/warnings.py +13 -0
  2261. hare_orm-0.9.0.dist-info/LICENSE +27 -0
  2262. hare_orm-0.9.0.dist-info/METADATA +321 -0
  2263. hare_orm-0.9.0.dist-info/NOTICE.md +96 -0
  2264. hare_orm-0.9.0.dist-info/NOTICE.ru.md +98 -0
  2265. hare_orm-0.9.0.dist-info/RECORD +2267 -0
  2266. hare_orm-0.9.0.dist-info/WHEEL +4 -0
  2267. hare_orm-0.9.0.dist-info/entry_points.txt +6 -0
@@ -0,0 +1,1088 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import (
4
+ Callable,
5
+ Collection,
6
+ Iterable,
7
+ Mapping,
8
+ Sequence,
9
+ )
10
+ from copy import copy
11
+ from typing import TYPE_CHECKING, Any, ClassVar, Generic, Self, TypeVar, cast
12
+
13
+ from hare.classes.value_descriptions import ValueDescriptions
14
+ from hare.core.hare_context import HareContext
15
+ from hare.dialects.base.client.database_client import DatabaseClient
16
+ from hare.dialects.base.dialect import Dialect
17
+ from hare.dialects.base.features import Features
18
+ from hare.exceptions import (
19
+ ConfigurationError,
20
+ FieldError,
21
+ QueryError,
22
+ UnSupportedError,
23
+ )
24
+ from hare.fields.encrypted.encrypted_field_base import EncryptedFieldBase
25
+ from hare.models.constants import MISSING_DEFAULT_CONNECTION_MESSAGE
26
+ from hare.models.tenancy.tenancy import Tenancy
27
+ from hare.query.constants import AMBIENT_TENANT_NOT_OVERRIDDEN
28
+ from hare.query.enums import Connector, SpecificationSlotPlanRole
29
+ from hare.query.expressions import (
30
+ Expression,
31
+ ExpressionContext,
32
+ F,
33
+ Ordering,
34
+ Q,
35
+ )
36
+ from hare.query.expressions.aggregate_paths.aggregated_multi_valued_paths import AggregatedMultiValuedPaths
37
+ from hare.query.expressions.subqueries.outer_scope import OuterScope
38
+ from hare.query.lookup_info.lookup_path import LookupPath
39
+ from hare.query.plans.description.plannable import Plannable
40
+ from hare.query.plans.statement.statement_plan import StatementPlan
41
+ from hare.query.query_connection import QueryConnection
42
+ from hare.query.queryset.annotation_access_tracker import AnnotationAccessTracker
43
+ from hare.query.queryset.constants import (
44
+ AGGREGATE_GROUP_NAME_MESSAGE,
45
+ ANNOTATION_NAME_COUNTED_LENGTH,
46
+ FORBIDDEN_ANNOTATION_NAME_PATTERN,
47
+ MAX_ROW_COUNT,
48
+ )
49
+ from hare.query.queryset.extensions.query_set_extension_call import QuerySetExtensionCall
50
+ from hare.query.queryset.extensions.query_set_extensions import QuerySetExtensions
51
+ from hare.query.queryset.lazy_relation_names import LazyRelationNames
52
+ from hare.query.queryset.options.query_option import QueryOption
53
+ from hare.query.queryset.options.query_options import QueryOptions
54
+ from hare.query.queryset.pending_calls.calls_before_setup import CallsBeforeSetup
55
+ from hare.query.queryset.pending_calls.pending_filter_calls import PendingFilterCalls
56
+ from hare.query.queryset.specification_copying import SpecificationCopying
57
+ from hare.query.relation_loading.prefetching.prefetch import Prefetch
58
+ from hare.query.scopes.row_visibility import RowVisibility
59
+ from hare.sql import Order, Table
60
+ from hare.sql.builder.queries.query_builder import QueryBuilder
61
+ from hare.sql.constants import IDENTIFIER_LENGTH_LIMIT
62
+ from hare.sql.identifiers import Identifiers
63
+ from hare.sql.terms.term import Term
64
+
65
+ if TYPE_CHECKING:
66
+ from hare.models import Model
67
+ from hare.query.queryset.combination.combination import Combination
68
+ from hare.query.queryset.queryset import QuerySet
69
+ from hare.query.queryset.selection.values_selection import ValuesSelection
70
+
71
+ TModel = TypeVar("TModel", bound="Model")
72
+
73
+ TDerivedAwaitableQuery = TypeVar("TDerivedAwaitableQuery", bound="QuerySpecification[Any]")
74
+
75
+
76
+ class QuerySpecification(Plannable, Generic[TModel], abstract=True):
77
+ """What a query asks for - the model, the connection choice, the filters, annotations, ordering,
78
+ slice and the other settings the chained methods declare. ``QuerySet`` adds the methods changing
79
+ it; an ``AwaitableQuery`` takes one over, builds and runs its SQL.
80
+ """
81
+
82
+ __slots__ = (
83
+ "model",
84
+ "_connection",
85
+ "_features",
86
+ # Whether .using() pinned the connection - _connection is also set once the router or the default
87
+ # connection chose it. A pinned connection is offered to the prefetch queries.
88
+ "_connection_explicitly_chosen",
89
+ # The connection the parent queryset pinned with .using(), offered to its prefetch query:
90
+ # taken after the router and before the model's default connection.
91
+ "_router_fallback_connection",
92
+ # Set by a relation read off a model instance: the alias of the connection the instance was
93
+ # loaded from or saved to - taken after the router and before the model's default
94
+ # connection, looked up when the query runs.
95
+ "_instance_connection_alias",
96
+ "_annotations",
97
+ "_q_object_list",
98
+ # Incremented once per .filter()/.exclude() call - the generation its Q objects are stamped
99
+ # with.
100
+ "_filter_call_counter",
101
+ # The filter() calls of plain values a queryset made by simple calls alone keeps unbuilt - built
102
+ # into _q_object_list on the first read of _q_objects. A query running on the plan of its calls
103
+ # never builds them.
104
+ "_pending_filter_calls",
105
+ # Shared by QuerySet and the queries built from it.
106
+ "_single",
107
+ "_raise_does_not_exist",
108
+ "_limit",
109
+ "_offset",
110
+ "_orderings",
111
+ "_distinct",
112
+ # Set by QuerySet.none(): every query built from the queryset gives its empty result without
113
+ # touching the database.
114
+ "_is_none",
115
+ # Set by Manager.get_queryset() and handed to every query built from such a queryset: the
116
+ # query runs under the model's default scope, resolved when it is compiled.
117
+ "_uses_default_scope",
118
+ # Which rows the default scopes let the query see - its own model's and those of
119
+ # every model it JOINs.
120
+ "_visibility",
121
+ # The rarely set settings, shared with clones - see QueryOptions and the QueryOption
122
+ # attributes below.
123
+ "_options",
124
+ # How many leading entries of _q_objects a build's default scope put there - a query
125
+ # taking the filters over replaces them with its own.
126
+ "_ambient_q_count",
127
+ # QuerySet's own: the relations to load with the model instances.
128
+ "_prefetch_map",
129
+ "_prefetch_queries",
130
+ "_select_related",
131
+ # Descriptions of keys starting with an annotation (see _get_annotation_description()),
132
+ # shared with clones until one of them changes its annotations.
133
+ "_annotation_descriptions",
134
+ # What .values()/.values_list() select - the rows come back in its shape - or None for
135
+ # model instances.
136
+ "_selection",
137
+ # The querysets union()/intersection()/difference() combine - the rows are the combined
138
+ # ones - or None for a queryset of its own model's rows.
139
+ "_combination",
140
+ )
141
+
142
+ # Settings kept in self._options (QueryOptions) - read and assigned like attributes. An assigned
143
+ # collection is stored immutable, so change one by assigning a new value, never in place.
144
+ # select_for_update() and its flags.
145
+ _select_for_update = QueryOption[bool]("select_for_update")
146
+ _select_for_update_nowait = QueryOption[bool]("select_for_update_nowait")
147
+ _select_for_update_skip_locked = QueryOption[bool]("select_for_update_skip_locked")
148
+ _select_for_update_of = QueryOption[frozenset[str]]("select_for_update_of")
149
+ _select_for_update_strength = QueryOption[Any]("select_for_update_strength")
150
+ # The keyset boundary .after_cursor() set: rows strictly after these values in `_orderings`.
151
+ _cursor_values = QueryOption[tuple[Any, ...]]("cursor_values")
152
+ # The second keyset boundary: rows strictly BEFORE these values in `_orderings` - set
153
+ # only when both .after_cursor() and .before_cursor() bound one query (a window).
154
+ _before_cursor_values = QueryOption[tuple[Any, ...]]("before_cursor_values")
155
+ # Set by .before_cursor(): `_orderings` already holds the reversed ordering (so LIMIT
156
+ # counts back from the cursor), and the fetched rows are reversed back afterwards.
157
+ _reverse_result_order = QueryOption[bool]("reverse_result_order")
158
+ # (name, query) pairs populated by QuerySet.with_cte() and threaded through to count()/
159
+ # exists()/values()/values_list(), the same way _group_bys is - see QueryCtes.apply_with_ctes().
160
+ _with_ctes = QueryOption[tuple[tuple[str, Any], ...]]("with_ctes")
161
+ # Calls of QuerySet methods a dialect registered (QuerySetExtensions), applied once the
162
+ # query is built for its connection.
163
+ _extension_calls = QueryOption[tuple[QuerySetExtensionCall, ...]]("extension_calls")
164
+ # Select(relation, extra_condition=Q(...))'s condition per relation path.
165
+ _select_related_extra_conditions = QueryOption[Mapping[str, Q]]("select_related_extra_conditions")
166
+ # The fields of .distinct(*fields) (DISTINCT ON).
167
+ _distinct_on = QueryOption[tuple[str, ...]]("distinct_on")
168
+ # The fields of .group_by().
169
+ _group_bys = QueryOption[tuple[str, ...]]("group_bys")
170
+ # The Rollup/Cube/GroupingSets of .group_by() - its fields are in _group_bys too.
171
+ _grouping_set = QueryOption[Any]("grouping_set")
172
+ # The sample of the model's table .sample() reads (a TableSample) - None for every row.
173
+ _table_sample = QueryOption[Any]("table_sample")
174
+ # The `_annotations` keys registered by .alias(): usable in filter()/order_by(), selected only
175
+ # when .values()/.values_list() names them.
176
+ _alias_keys = QueryOption[frozenset[str]]("alias_keys")
177
+ # The exception .get(..., does_not_exist_exception=...) raises for no row instead of
178
+ # DoesNotExist - a class or an instance.
179
+ _does_not_exist_exception = QueryOption[type[BaseException] | BaseException | None]("does_not_exist_exception")
180
+ # The exception .get(..., multiple_objects_returned_exception=...) raises for more than one row
181
+ # instead of MultipleObjectsReturned - a class or an instance.
182
+ _multiple_objects_returned_exception = QueryOption[type[BaseException] | BaseException | None](
183
+ "multiple_objects_returned_exception"
184
+ )
185
+ # Set when a single-row query (first(), an index) narrows an already sliced query - its row
186
+ # is picked from the slice, so it can't be filtered or reordered any more.
187
+ _is_single_row_of_slice = QueryOption[bool]("is_single_row_of_slice")
188
+ # Whether Meta.ordering is left out when no ordering is given - set by order_by() with no
189
+ # arguments, and on a branch of a set operation, where only the combined rows can be ordered.
190
+ _default_ordering_disabled = QueryOption[bool]("default_ordering_disabled")
191
+
192
+ # The .only() field names.
193
+ _fields_for_select = QueryOption[tuple[str, ...]]("fields_for_select")
194
+ # The .defer() field names.
195
+ _deferred_fields = QueryOption[tuple[str, ...]]("deferred_fields")
196
+ # Relations whose field-level lazy= default .defer_related() switched off.
197
+ _deferred_related_fields = QueryOption[frozenset[str]]("deferred_related_fields")
198
+ # The calls kept before Hare.init() set the model up.
199
+ _calls_before_setup = QueryOption[CallsBeforeSetup | None]("calls_before_setup")
200
+ # Relations named by an explicit .select_related(...) call, not joined by a field-level
201
+ # lazy="joined" default - only an explicit one is fetched whatever .only() lists.
202
+ _explicitly_select_related = QueryOption[frozenset[str]]("explicitly_select_related")
203
+
204
+ #: The slots a query built from a specification takes over, in the order it copies them.
205
+ SPECIFICATION_SLOTS: ClassVar[tuple[str, ...]] = __slots__
206
+ #: The specification slots holding a container a build changes - a query gets its own copy -
207
+ #: each with the source of an empty container of its type, made instead of copying an empty one.
208
+ MUTABLE_SPECIFICATION_SLOTS: ClassVar[dict[str, str]] = {
209
+ "_prefetch_map": "{}",
210
+ "_orderings": "[]",
211
+ "_q_object_list": "[]",
212
+ "_annotations": "{}",
213
+ "_select_related": "set()",
214
+ }
215
+ #: How each slot meets a plan key - every slot is named, checked when the module loads. A slot
216
+ #: holding SQL that no plan key reads would let two queries of different SQL share a plan.
217
+ SLOT_PLAN_ROLES: ClassVar[dict[str, SpecificationSlotPlanRole]] = {
218
+ "model": SpecificationSlotPlanRole.KEYED,
219
+ "_connection": SpecificationSlotPlanRole.CONNECTION,
220
+ "_features": SpecificationSlotPlanRole.CONNECTION,
221
+ "_connection_explicitly_chosen": SpecificationSlotPlanRole.CONNECTION,
222
+ "_router_fallback_connection": SpecificationSlotPlanRole.CONNECTION,
223
+ "_instance_connection_alias": SpecificationSlotPlanRole.CONNECTION,
224
+ "_annotations": SpecificationSlotPlanRole.DESCRIBED,
225
+ "_q_object_list": SpecificationSlotPlanRole.DESCRIBED,
226
+ "_filter_call_counter": SpecificationSlotPlanRole.DESCRIBED,
227
+ "_pending_filter_calls": SpecificationSlotPlanRole.DESCRIBED,
228
+ "_single": SpecificationSlotPlanRole.KEYED,
229
+ "_raise_does_not_exist": SpecificationSlotPlanRole.RESULT,
230
+ "_limit": SpecificationSlotPlanRole.KEYED,
231
+ "_offset": SpecificationSlotPlanRole.KEYED,
232
+ "_orderings": SpecificationSlotPlanRole.KEYED,
233
+ "_distinct": SpecificationSlotPlanRole.KEYED,
234
+ "_is_none": SpecificationSlotPlanRole.KEYED,
235
+ "_uses_default_scope": SpecificationSlotPlanRole.DESCRIBED,
236
+ "_visibility": SpecificationSlotPlanRole.KEYED,
237
+ "_options": SpecificationSlotPlanRole.KEYED,
238
+ "_ambient_q_count": SpecificationSlotPlanRole.BOOKKEEPING,
239
+ "_prefetch_map": SpecificationSlotPlanRole.RESULT,
240
+ "_prefetch_queries": SpecificationSlotPlanRole.RESULT,
241
+ "_select_related": SpecificationSlotPlanRole.KEYED,
242
+ "_annotation_descriptions": SpecificationSlotPlanRole.BOOKKEEPING,
243
+ "_selection": SpecificationSlotPlanRole.KEYED,
244
+ "_combination": SpecificationSlotPlanRole.KEYED,
245
+ }
246
+
247
+ @classmethod
248
+ def raise_if_slots_unclassified(cls) -> None:
249
+ """Rejects a slot of ``SPECIFICATION_SLOTS`` without its role in ``SLOT_PLAN_ROLES``, and a role of no slot.
250
+
251
+ Raises:
252
+ TypeError: The two disagree.
253
+ """
254
+ if set(cls.SLOT_PLAN_ROLES) != set(cls.SPECIFICATION_SLOTS):
255
+ raise TypeError(
256
+ "QuerySpecification.SLOT_PLAN_ROLES names every slot of SPECIFICATION_SLOTS and no other - "
257
+ "unclassified: "
258
+ f"{sorted(set(cls.SPECIFICATION_SLOTS) - set(cls.SLOT_PLAN_ROLES))}, unknown: "
259
+ f"{sorted(set(cls.SLOT_PLAN_ROLES) - set(cls.SPECIFICATION_SLOTS))}"
260
+ )
261
+
262
+ def __init__(self, model: type[TModel]) -> None:
263
+ self.model: type[TModel] = model
264
+ self._options: QueryOptions = QueryOptions.DEFAULT
265
+ self._connection: DatabaseClient = None # type: ignore[assignment]
266
+ self._features: Features | None = None
267
+ self._connection_explicitly_chosen: bool = False
268
+ self._router_fallback_connection: DatabaseClient | None = None
269
+ self._instance_connection_alias: str | None = None
270
+ self._annotations: dict[str, Expression | Term] = {}
271
+ self._q_object_list: list[Q] = []
272
+ #: The filter calls kept unbuilt: (is exclude(), generation, Q conditions, kwargs) each.
273
+ self._pending_filter_calls: tuple[tuple[bool, int, tuple[Q, ...], dict[str, Any]], ...] = ()
274
+ self._filter_call_counter: int = 0
275
+ self._single: bool = False
276
+ self._raise_does_not_exist: bool = False
277
+ self._limit: int | None = None
278
+ self._offset: int | None = None
279
+ self._orderings: Sequence[tuple[str, Order]] = []
280
+ self._distinct: bool = False
281
+ self._is_none: bool = False
282
+ self._visibility: RowVisibility = RowVisibility.DEFAULT
283
+ self._uses_default_scope: bool = False
284
+ self._ambient_q_count: int = 0
285
+ self._prefetch_map: dict[str, set[str | Prefetch]] = {}
286
+ self._prefetch_queries: dict[str, list[tuple[str | None, QuerySet[Model]]]] = {}
287
+ self._select_related: set[str] = set()
288
+ self._annotation_descriptions: dict[tuple[str, str, Dialect], Any] | None = None
289
+ self._selection: ValuesSelection | None = None
290
+ self._combination: Combination | None = None
291
+
292
+ @property
293
+ def _q_objects(self) -> list[Q]:
294
+ """The conditions the query filters by - the filter calls a queryset made by simple calls
295
+ alone keeps unbuilt (``_pending_filter_calls``) are built on the first read."""
296
+ if self._pending_filter_calls:
297
+ PendingFilterCalls.build_pending_filter_calls(self)
298
+ return self._q_object_list
299
+
300
+ @_q_objects.setter
301
+ def _q_objects(self, q_objects: list[Q]) -> None:
302
+ # The conditions given replace every condition, built or not.
303
+ self._pending_filter_calls = ()
304
+ self._q_object_list = q_objects
305
+
306
+ def _build_conditions_for_copies(self) -> None:
307
+ """Builds the filter calls kept unbuilt before the query is copied for a description or a
308
+ build of a query it is part of - every copy then holds the same conditions, the origins of
309
+ their values (``PlanOrigins``)."""
310
+ if self._pending_filter_calls:
311
+ PendingFilterCalls.build_pending_filter_calls(self)
312
+
313
+ def _apply_lazy_relation_defaults(self) -> None:
314
+ """Adds the relations the model loads by default (``lazy=``) and ``.defer_related()``
315
+ didn't switch off to the ones this query joins or prefetches - on the copy a build makes,
316
+ before it reads them."""
317
+ joined, prefetched = LazyRelationNames.get(self.model)
318
+ self._select_related.update(joined - self._deferred_related_fields)
319
+ for field_name in prefetched - self._deferred_related_fields:
320
+ self._prefetch_map.setdefault(field_name, set())
321
+
322
+ def _model_is_set_up(self) -> bool:
323
+ """Whether ``Hare.init()`` has set the model up - its relations resolved. A query built
324
+ before that checks its field names, relations and lookups when it is compiled instead of
325
+ when each method is called."""
326
+ return self.model._meta._inited
327
+
328
+ def _loads_relations(self) -> bool:
329
+ """Whether reading this query's rows loads relations - asked for, or by default when the
330
+ rows are model instances."""
331
+ if self._select_related or self._prefetch_map or self._prefetch_queries:
332
+ return True
333
+ if self._selection is not None:
334
+ return False
335
+ joined, prefetched = LazyRelationNames.get(self.model)
336
+ return bool((joined | prefetched) - self._deferred_related_fields)
337
+
338
+ def _take_rows_of(
339
+ self, source: QuerySpecification[Any], *, keeps_ordering: bool = False, keeps_grouping: bool = False
340
+ ) -> None:
341
+ """Takes over which rows ``source`` matches - its model, connection choice, default scope,
342
+ filters, annotations, ``.distinct()``, slice, keyset boundaries, CTEs and dialect method
343
+ calls - and nothing of how it returns them.
344
+
345
+ Args:
346
+ source: The queryset, or a query made from one.
347
+ keeps_ordering: Keep the ordering - a slice is taken in it. Without it the ordering is
348
+ kept only for the keyset boundaries.
349
+ keeps_grouping: Keep the ``.group_by()`` fields.
350
+ """
351
+ SpecificationCopying.copy_specification(source, self)
352
+ self._single = False
353
+ self._raise_does_not_exist = False
354
+ self._prefetch_map = {}
355
+ self._prefetch_queries = {}
356
+ self._select_related = set()
357
+ self._annotation_descriptions = None
358
+ self._selection = None
359
+ self._combination = None
360
+ options = self._options
361
+ if options is not QueryOptions.DEFAULT:
362
+ if not keeps_grouping and options.group_bys:
363
+ source._raise_if_group_names_invalid()
364
+ options = options.without(*QueryOptions.ROW_RETURN_SETTINGS)
365
+ self._options = options if keeps_grouping else options.without("group_bys")
366
+ if not keeps_ordering and not (options.cursor_values or options.before_cursor_values):
367
+ self._orderings = []
368
+ elif not keeps_ordering:
369
+ self._orderings = []
370
+
371
+ def _raise_if_group_names_invalid(self) -> None:
372
+ """Refuses a ``group_by()`` name that is neither an annotation nor a field, and one of an
373
+ aggregate annotation - a query reading no group (``count()``, ``exists()``, model rows) would
374
+ leave it unread.
375
+
376
+ Raises:
377
+ FieldError: A name reads no field, or is an aggregate annotation's.
378
+ """
379
+ for name in self._group_bys:
380
+ if (annotation := self._annotations.get(name)) is not None:
381
+ term = (
382
+ annotation.get_result(self._get_probe_expression_context(self._annotations)).term
383
+ if isinstance(annotation, Expression)
384
+ else annotation
385
+ )
386
+ if term.contains_aggregate:
387
+ raise FieldError(AGGREGATE_GROUP_NAME_MESSAGE.format(name=name))
388
+ continue
389
+ if name == "pk":
390
+ continue
391
+ lookup_path = LookupPath.parse(self.model, name)
392
+ # Refused on model rows too, which group by the primary key and would leave it unread.
393
+ EncryptedFieldBase.raise_if_encrypted(lookup_path.get_target_field(), "GROUP BY")
394
+ if lookup_path.get_target_field() is None and lookup_path.rest != ("pk",):
395
+ missing_name = lookup_path.rest[0] if lookup_path.rest else name
396
+ raise FieldError(f"Unknown field {name!r}: {lookup_path.model.__name__} has no field {missing_name!r}")
397
+
398
+ @staticmethod
399
+ def _raise_if_annotation_names_are_unsafe(names: Iterable[str]) -> None:
400
+ """Rejects an empty annotation, alias or aggregate name, and one with quotes, brackets, a
401
+ semicolon, whitespace or an SQL comment - an output column name taken from user input stays a
402
+ plain name, like Django's own check.
403
+
404
+ Args:
405
+ names: The new names.
406
+
407
+ Raises:
408
+ QueryError: A name is empty, contains one of them, or is longer than a database keeps
409
+ an identifier (``IDENTIFIER_LENGTH_LIMIT`` bytes) - the column read back would be
410
+ named otherwise.
411
+ """
412
+ for name in names:
413
+ if not name:
414
+ raise QueryError("An annotation name can't be empty")
415
+ if len(name) >= ANNOTATION_NAME_COUNTED_LENGTH and len(name.encode()) > IDENTIFIER_LENGTH_LIMIT:
416
+ raise QueryError(
417
+ f"Annotation name {name!r} is {len(name.encode())} bytes - a database keeps "
418
+ f"{IDENTIFIER_LENGTH_LIMIT} bytes of an identifier"
419
+ )
420
+ # An identifier - most names - holds none of them.
421
+ if not name.isidentifier() and FORBIDDEN_ANNOTATION_NAME_PATTERN.search(name):
422
+ raise QueryError(
423
+ f"Annotation name {name!r} can't contain whitespace, quotation marks, brackets, "
424
+ "semicolons or SQL comments"
425
+ )
426
+
427
+ @property
428
+ def features(self) -> Features:
429
+ """What the connection the query runs on supports.
430
+
431
+ Raises:
432
+ QueryError: No connection is chosen yet - the query isn't running.
433
+ """
434
+ if self._features is None:
435
+ self._features = QueryConnection.get_bound_connection(self).features
436
+ return self._features
437
+
438
+ @property
439
+ def dialect(self) -> Dialect:
440
+ """The dialect of the connection the query runs on.
441
+
442
+ Raises:
443
+ QueryError: No connection is chosen yet - the query isn't running.
444
+ """
445
+ return QueryConnection.get_bound_connection(self).dialect
446
+
447
+ def _get_top_level_conditions_by_generation(self) -> dict[int, list[tuple[str, Any]]]:
448
+ """The filter kwargs every kept row satisfies, per ``.filter()`` call generation.
449
+
450
+ Returns:
451
+ Generation -> key and value of each kwarg.
452
+ """
453
+ conditions_by_generation: dict[int, list[tuple[str, Any]]] = {}
454
+ for q_object in self._q_objects:
455
+ conditions_by_generation.setdefault(q_object._filter_call_generation, []).extend(
456
+ self._get_top_level_conditions(q_object)
457
+ )
458
+ return conditions_by_generation
459
+
460
+ def _get_probe_expression_context(
461
+ self,
462
+ annotations: dict[str, Any],
463
+ aggregated_multi_valued_paths: AggregatedMultiValuedPaths | None = None,
464
+ multi_valued_join_generations: dict[str, int] | None = None,
465
+ ) -> ExpressionContext:
466
+ """Builds a throwaway context over ``annotations``, used only to find out which annotations or
467
+ to-many relations an expression or a filter reads. Before the query runs it resolves with
468
+ the neutral SQL dialect.
469
+
470
+ Args:
471
+ annotations: The annotation mapping expressions are resolved against.
472
+ aggregated_multi_valued_paths: A tracker recording the to-many JOINs made.
473
+ multi_valued_join_generations: Collects the ``.filter()`` call generation owning each
474
+ to-many JOIN.
475
+
476
+ Returns:
477
+ A fresh context with the scope the real query resolves in.
478
+ """
479
+ return ExpressionContext(
480
+ model=self.model,
481
+ dialect=QueryConnection.get_analysis_dialect(self),
482
+ connection=self._connection,
483
+ table=self._effective_basetable(),
484
+ annotations=annotations,
485
+ aggregated_multi_valued_paths=aggregated_multi_valued_paths,
486
+ multi_valued_join_generations=multi_valued_join_generations,
487
+ select_related_extra_conditions=self._select_related_extra_conditions,
488
+ visibility=self._visibility,
489
+ # Building the real query rejects a filter on a window function where SQL can't apply it.
490
+ window_function_filter_allowed=True,
491
+ )
492
+
493
+ @staticmethod
494
+ def _get_ordering_string(
495
+ ordering: str | Ordering | Expression, reverse: bool = False
496
+ ) -> tuple[str | Expression, Order]:
497
+ """Splits one ordering item into what it orders by and its direction.
498
+
499
+ Args:
500
+ ordering: A ``"field"``/``"-field"`` string, an ``Ordering``
501
+ (``F("field").desc(nulls_last=True)``, ``Lower("name").asc()``) or an expression,
502
+ ascending.
503
+ reverse: Whether to reverse the ordering - direction and any explicit NULL placement.
504
+
505
+ Returns:
506
+ The field name - an ``F()``'s too - or the expression, and the direction.
507
+
508
+ Raises:
509
+ QueryError: If the item is neither a string, an ``Ordering`` nor an expression.
510
+ """
511
+ field_name: str | Expression
512
+ if isinstance(ordering, Ordering):
513
+ field_name = ordering.target
514
+ order_type = ordering.order
515
+ elif isinstance(ordering, F):
516
+ field_name = ordering.name
517
+ order_type = Order.ASC
518
+ elif isinstance(ordering, Expression):
519
+ field_name = ordering
520
+ order_type = Order.ASC
521
+ elif isinstance(ordering, str):
522
+ if ordering.startswith("-"):
523
+ field_name = ordering[1:]
524
+ order_type = Order.DESC
525
+ else:
526
+ field_name = ordering
527
+ order_type = Order.ASC
528
+ else:
529
+ raise QueryError(
530
+ "An ordering must be a field name string, an expression or an Ordering "
531
+ f"(F('field').asc()/.desc()), got {ordering!r}"
532
+ )
533
+
534
+ if reverse:
535
+ order_type = order_type.get_reversed()
536
+
537
+ return field_name, order_type
538
+
539
+ @staticmethod
540
+ def _get_ordering_name(ordering: str | Ordering | Expression, reverse: bool = False) -> tuple[str, Order]:
541
+ """Splits one ordering item that names what it orders by into the name and the direction.
542
+
543
+ Args:
544
+ ordering: The item.
545
+ reverse: Whether to reverse the ordering.
546
+
547
+ Returns:
548
+ The name and the direction.
549
+
550
+ Raises:
551
+ QueryError: The item orders by an expression, which isn't taken there.
552
+ """
553
+ field_name, order = QuerySpecification._get_ordering_string(ordering, reverse=reverse)
554
+ if not isinstance(field_name, str):
555
+ raise QueryError(
556
+ f"An ordering by an expression ({ordering!r}) isn't taken here - annotate the expression and "
557
+ "order by the annotation's name"
558
+ )
559
+ return field_name, order
560
+
561
+ def _apply_default_ordering(self, orderings: Iterable[tuple[str, Order]]) -> Iterable[tuple[str, Order]]:
562
+ """Falls back to ``Meta.ordering`` when no ordering was given and the default ordering isn't
563
+ disabled.
564
+
565
+ Args:
566
+ orderings: The explicit ordering.
567
+
568
+ Returns:
569
+ The ordering to apply.
570
+ """
571
+ if not orderings and not self._default_ordering_disabled and self.model._meta.ordering:
572
+ return self.model._meta.ordering
573
+ return orderings
574
+
575
+ @staticmethod
576
+ def _check_chunk_size(chunk_size: int, highest: int = MAX_ROW_COUNT - 1) -> None:
577
+ """Checks the page size of ``iterator()`` / ``stream()``.
578
+
579
+ Args:
580
+ chunk_size: The page size.
581
+ highest: The greatest page size - ``MAX_ROW_COUNT - 1`` for a page read with one row more.
582
+
583
+ Raises:
584
+ QueryError: ``chunk_size`` isn't an int in ``1..highest``.
585
+ """
586
+ if isinstance(chunk_size, bool) or not isinstance(chunk_size, int) or not 1 <= chunk_size <= highest:
587
+ raise QueryError(
588
+ f"chunk_size must be an int from 1 to {highest}, got {ValueDescriptions.get_shown_value(chunk_size)}"
589
+ )
590
+
591
+ @staticmethod
592
+ def _check_streamable(connection: DatabaseClient | None) -> DatabaseClient:
593
+ """Checks that ``stream()`` can run on ``connection``: a server-side cursor / portal, inside a
594
+ transaction - only one transaction gives it a consistent snapshot for the whole iteration;
595
+ outside one on a database sending a query's rows as it computes them.
596
+
597
+ Args:
598
+ connection: The connection the query runs on.
599
+
600
+ Returns:
601
+ The connection - the transaction's client inside one.
602
+
603
+ Raises:
604
+ UnSupportedError: The database has no streaming (``features.supports_streaming``).
605
+ QueryError: No transaction is open, on a database streaming inside one alone.
606
+ """
607
+ connection = cast("DatabaseClient", connection)
608
+ if not connection.features.supports_streaming:
609
+ raise UnSupportedError(
610
+ f"stream() is not supported on the {connection.dialect.name} backend - it "
611
+ "has no useful server-side row streaming to offer; use iterator() instead"
612
+ )
613
+ if not connection.is_transaction_client and not connection.features.streams_without_transaction:
614
+ raise QueryError(
615
+ "stream() requires an active Transactions.atomic() block - its server-side "
616
+ "cursor/portal only gets a consistent snapshot for the whole iteration when scoped "
617
+ "to one transaction"
618
+ )
619
+ return connection
620
+
621
+ @staticmethod
622
+ def check_row_count(value: Any, name: str) -> None:
623
+ """Refuses a count of rows - a limit, an offset, a slice's bound - that isn't an integer from 0
624
+ to ``MAX_ROW_COUNT``.
625
+
626
+ Args:
627
+ value: The count.
628
+ name: What it is, for the message.
629
+
630
+ Raises:
631
+ QueryError: The count isn't such an integer.
632
+ """
633
+ if isinstance(value, bool) or not isinstance(value, int):
634
+ raise QueryError(f"{name} should be an integer, got {value!r}")
635
+ if value < 0:
636
+ raise QueryError(f"{name} should be non-negative, got {ValueDescriptions.get_shown_text(value)}")
637
+ if value > MAX_ROW_COUNT:
638
+ raise QueryError(
639
+ f"{name} should be at most {MAX_ROW_COUNT}, got {ValueDescriptions.get_shown_text(value)}"
640
+ )
641
+
642
+ @staticmethod
643
+ def _get_sliced_bounds(key: slice, base_offset: int | None, base_limit: int | None) -> tuple[int, int | None]:
644
+ """The OFFSET and LIMIT of a query sliced by ``key`` - the slice taken within the query's
645
+ own OFFSET and LIMIT.
646
+
647
+ Args:
648
+ key: The slice.
649
+ base_offset: The query's own OFFSET.
650
+ base_limit: The query's own LIMIT, None for none.
651
+
652
+ Returns:
653
+ The OFFSET and the LIMIT, None for no LIMIT.
654
+
655
+ Raises:
656
+ QueryError: A step other than 1, or a start or stop that isn't a non-negative integer.
657
+ """
658
+ if not (key.step is None or (type(key.step) is int and key.step == 1)):
659
+ raise QueryError(f"Slice steps should be 1 or None, got {key.step!r}.")
660
+ start = key.start if key.start is not None else 0
661
+ QuerySpecification.check_row_count(start, "Slice start")
662
+ if key.stop is not None:
663
+ QuerySpecification.check_row_count(key.stop, "Slice stop")
664
+ base_offset = base_offset or 0
665
+ offset = base_offset + start
666
+ stop: int | None
667
+ if key.stop is not None:
668
+ stop = base_offset + key.stop
669
+ if base_limit is not None:
670
+ stop = min(stop, base_offset + base_limit)
671
+ else:
672
+ stop = base_offset + base_limit if base_limit is not None else None
673
+ return offset, (max(stop - offset, 0) if stop is not None else None)
674
+
675
+ def _share_default_scope(self, query: TDerivedAwaitableQuery) -> TDerivedAwaitableQuery:
676
+ """Hands this query's default scope to a query built from its filters.
677
+
678
+ Args:
679
+ query: The derived query.
680
+
681
+ Returns:
682
+ ``query`` itself.
683
+ """
684
+ query._uses_default_scope = self._uses_default_scope
685
+ query._ambient_q_count = self._ambient_q_count
686
+ query._visibility = self._visibility
687
+ query._options = query._options.updated(extension_calls=self._extension_calls)
688
+ return query
689
+
690
+ def _effective_basetable(self) -> Table:
691
+ """The table this query's own fields and filters are read from: the model's table, aliased when
692
+ the query is a correlated subquery over the table its enclosing query selects from - an
693
+ ``OuterReference`` would otherwise bind to this query's own row.
694
+ """
695
+
696
+ table = self.model._meta.basetable
697
+ outer_context = OuterScope.current_expression_context.get()
698
+ if outer_context is not None and table.get_table_name() == outer_context.table.get_table_name():
699
+ return table.as_(Identifiers.get_within_limit(f"{table.get_table_name()}__exists_inner"))
700
+ return table
701
+
702
+ @classmethod
703
+ def _get_top_level_conditions(cls, q_object: Q, including_alternatives: bool = False) -> list[tuple[str, Any]]:
704
+ """The kwargs of a filter every kept row satisfies - ANDed, not negated. A negated node,
705
+ and a node negated twice, crossing a relation renders as a ``NOT EXISTS``/``EXISTS``
706
+ subquery instead of a JOIN of the query, so its kwargs are never included.
707
+
708
+ Args:
709
+ q_object: The filter.
710
+ including_alternatives: Also the kwargs of OR-ed nodes.
711
+
712
+ Returns:
713
+ Key and value of each kwarg.
714
+ """
715
+ if q_object._is_negated or q_object._needs_double_negation_rewrite:
716
+ return []
717
+ if not including_alternatives and q_object.connector != Connector.AND:
718
+ return []
719
+ conditions = list(q_object.filters.items())
720
+ for child in q_object.children:
721
+ conditions.extend(cls._get_top_level_conditions(child, including_alternatives))
722
+ return conditions
723
+
724
+ def _get_selected_field_names(self) -> Collection[str]:
725
+ """The field/annotation names a ``values()``/``values_list()`` query selects.
726
+
727
+ Returns:
728
+ The names, empty for a query that selects whole rows.
729
+ """
730
+ return ()
731
+
732
+ def _get_unused_alias_keys(self, fields_for_select: Collection[str] | None = None) -> set[str]:
733
+ """The ``.alias()`` annotations nothing in the query reads - left out of the query
734
+ entirely, so their JOINs don't repeat rows.
735
+
736
+ Args:
737
+ fields_for_select: The names selected explicitly, if any.
738
+
739
+ Returns:
740
+ The unused alias names.
741
+ """
742
+ if not self._alias_keys:
743
+ return set()
744
+ directly_used_names = {
745
+ *(fields_for_select or ()),
746
+ *self._get_selected_field_names(),
747
+ *self._group_bys,
748
+ *self._distinct_on,
749
+ # Meta.ordering's too - an expression of it is ordered by an alias.
750
+ *(field_name for field_name, _order in self._orderings or self.model._meta.ordering),
751
+ }
752
+ tracker = AnnotationAccessTracker(self._annotations)
753
+ for annotation_name, annotation in self._annotations.items():
754
+ if annotation_name in self._alias_keys and annotation_name not in directly_used_names:
755
+ continue
756
+ if isinstance(annotation, Expression):
757
+ annotation.get_result(self._get_probe_expression_context(tracker))
758
+ for q_object in self._q_objects:
759
+ q_object.get_result(self._get_probe_expression_context(tracker))
760
+ return {
761
+ alias_key
762
+ for alias_key in self._alias_keys
763
+ if alias_key not in directly_used_names
764
+ and alias_key not in tracker.accessed_keys
765
+ and not getattr(self._annotations.get(alias_key), "repeats_rows", False)
766
+ }
767
+
768
+ # Declared for the type checker: _apply_connection() assigns None.
769
+ _features: Features | None
770
+
771
+ # Declared for the type checker: the slot of the queryset and query classes, set only on a
772
+ # query made again for each description or build (PlanOrigins).
773
+ _plan_origin: Any
774
+
775
+ # Declared for the type checker, as _connection and _features are - get_connection() (this
776
+ # class, not a subclass) reads it directly.
777
+ _router_fallback_connection: DatabaseClient | None
778
+
779
+ _instance_connection_alias: str | None
780
+
781
+ _visibility: RowVisibility
782
+
783
+ model: type[TModel]
784
+
785
+ #: Whether the query takes the QuerySet methods dialects registered (QuerySetExtensions).
786
+ accepts_extension_methods: ClassVar[bool] = False
787
+
788
+ #: Whether the query binds the values of an annotation a GROUP BY, ORDER BY or DISTINCT ON
789
+ #: resolves again into its full expression (QueryAnnotations.get_expression_term_value_references()) - a query of
790
+ #: another type ordering by such an annotation keeps no plan.
791
+ binds_expression_term_values: ClassVar[bool] = False
792
+
793
+ if not TYPE_CHECKING:
794
+
795
+ def __getattr__(self, name: str) -> Any:
796
+ # A QuerySet method a dialect registered (QuerySetExtensions).
797
+ if self.accepts_extension_methods and name in QuerySetExtensions.registered:
798
+ return QuerySetExtensions.get_method(cast("QuerySet[Any]", self), name)
799
+ raise AttributeError(f"{type(self).__name__!r} object has no attribute {name!r}")
800
+
801
+ # The slot names of the class, cached per subclass.
802
+ clone_slots_cache: ClassVar[tuple[str, ...] | None] = None
803
+
804
+ # The compiled per-subclass copy function SpecificationCopying.compile_copy() builds - see its own docstring.
805
+ compiled_copy_cache: ClassVar[Callable[[Any, Any], None] | None] = None
806
+
807
+ # The slots holding a mutable container, each with the source of an empty container of its type
808
+ # - a clone gets its own shallow copy.
809
+ mutable_clone_slots: ClassVar[dict[str, str]] = {}
810
+
811
+ def __copy__(self) -> QuerySpecification[TModel]:
812
+ cls = type(self)
813
+ newone = cls.__new__(cls)
814
+ (cls.__dict__.get("compiled_copy_cache") or SpecificationCopying.compile_copy(cls))(self, newone)
815
+ # A subclass without __slots__ keeps its own attributes in a __dict__ - asked of the class:
816
+ # hasattr() on a slotted instance would raise through __getattr__().
817
+ if cls.__dictoffset__:
818
+ newone.__dict__.update(self.__dict__)
819
+ return newone
820
+
821
+ def get_connection(self, *, for_write: bool = False) -> DatabaseClient:
822
+ """Returns the connection this query would run on now: the one pinned with ``using()``, else
823
+ the router's choice (asked under the tenant the query was built for), else the connection of
824
+ the instance a relation was read off, else the one a parent queryset offered to its
825
+ prefetch, else the model's default. Inside an open transaction on it, the transaction's
826
+ client. Nothing is bound - pass the result to ``using()`` to pin it.
827
+
828
+ Args:
829
+ for_write: Whether the connection is chosen for a write.
830
+
831
+ Returns:
832
+ The chosen connection.
833
+
834
+ Raises:
835
+ ConfigurationError: No connection is pinned and no Hare context is active; the model has
836
+ no default connection, or its tenancy needs a setting of the connection it lacks
837
+ (``MetaInfo.check_tenant_client()``).
838
+ QueryError: The model's tenancy needs a single active tenant, or a transaction that set
839
+ its tenants (``MetaInfo.check_tenant_client()``).
840
+ """
841
+ if self._connection:
842
+ return self._connection
843
+ # HareContext.require_current() - its calls left for the error.
844
+ context = HareContext.current_context.get() or HareContext.global_context or HareContext.require_current()
845
+ # The connection is chosen under the tenant this query's WHERE was built for, not the one
846
+ # active when the query is awaited - a router routing by tenant, or a connection with a schema
847
+ # per tenant, would otherwise pick another tenant's database or schema.
848
+ tenant_snapshot = self._visibility.tenant
849
+ tenant_token = (
850
+ None
851
+ if tenant_snapshot is AMBIENT_TENANT_NOT_OVERRIDDEN
852
+ or tenant_snapshot is None
853
+ or tenant_snapshot is Tenancy.current.get()
854
+ else Tenancy.current.set(tenant_snapshot)
855
+ )
856
+ # One method, not two: this is the hottest path of the ORM, and a try costs nothing until
857
+ # something raises.
858
+ try:
859
+ # HareContext.router/connections and ConnectionRouter.db_for_read/write() when there are
860
+ # routers - read without their calls.
861
+ router = context._router
862
+ connection = (
863
+ (router.db_for_write(self.model) if for_write else router.db_for_read(self.model))
864
+ if router is not None and router._routers
865
+ else None
866
+ )
867
+ meta = self.model._meta
868
+ if connection is None:
869
+ connections = context._connections if context._connections is not None else context.connections
870
+ if self._instance_connection_alias is not None:
871
+ connection = connections.get(self._instance_connection_alias)
872
+ elif self._router_fallback_connection is not None:
873
+ connection = self._router_fallback_connection
874
+ else:
875
+ # The model's default connection, read from the context already in hand.
876
+ default_connection = meta.default_connection
877
+ if default_connection is None:
878
+ raise ConfigurationError(
879
+ MISSING_DEFAULT_CONNECTION_MESSAGE.format(model_name=self.model.__name__)
880
+ )
881
+ connection = connections.get(default_connection)
882
+ if meta.checks_tenant_client:
883
+ meta.check_tenant_client(connection)
884
+ return connection
885
+ finally:
886
+ if tenant_token is not None:
887
+ Tenancy.current.reset(tenant_token)
888
+
889
+ def _apply_connection(self, connection: DatabaseClient | None) -> None:
890
+ """Binds this query to the connection it runs on.
891
+
892
+ Args:
893
+ connection: The database connection to use for this query.
894
+ """
895
+ # None leaves the connection to be chosen when the query runs.
896
+ self._connection = connection # type: ignore[assignment]
897
+ self._features = None
898
+
899
+ def _get_base_query(self) -> QueryBuilder:
900
+ """A fresh ``SELECT ... FROM`` the model's table, built for the connection the query runs on.
901
+
902
+ Returns:
903
+ The query builder.
904
+ """
905
+ meta = self.model._meta
906
+ connection = self._connection if self._connection is not None else meta.connection
907
+ if connection.query_class is meta.connection.query_class:
908
+ return self._get_sampled_query(copy(meta.basequery), connection)
909
+ return self._get_sampled_query(connection.query_class.from_(meta.basetable), connection)
910
+
911
+ def _get_base_query_all_fields(self) -> QueryBuilder:
912
+ """``_get_base_query()`` selecting every column of the model.
913
+
914
+ Returns:
915
+ The query builder.
916
+ """
917
+ meta = self.model._meta
918
+ connection = self._connection if self._connection is not None else meta.connection
919
+ if connection.query_class is meta.connection.query_class:
920
+ return self._get_sampled_query(copy(meta.basequery_all_fields), connection)
921
+ return self._get_sampled_query(
922
+ connection.query_class.from_(meta.basetable).select(*meta.db_fields), connection
923
+ )
924
+
925
+ def _get_sampled_query(self, query: QueryBuilder, connection: DatabaseClient) -> QueryBuilder:
926
+ """``query`` reading the sample of the model's table ``sample()`` asked for.
927
+
928
+ Args:
929
+ query: A ``SELECT ... FROM`` the model's table.
930
+ connection: The connection the query runs on.
931
+
932
+ Returns:
933
+ The query - itself without a sample.
934
+
935
+ Raises:
936
+ UnSupportedError: The database can't read a sample of a table.
937
+ QueryError: The model's table options allow no sample (``TableOptions.raise_if_unsampled()``).
938
+ """
939
+ table_sample = self._table_sample
940
+ if table_sample is None:
941
+ return query
942
+ if not connection.features.supports_table_sample:
943
+ raise UnSupportedError(f"sample() needs TABLESAMPLE, which {connection.dialect} doesn't have")
944
+ table_options = self.model._meta.get_table_options(connection.dialect)
945
+ if table_options is not None:
946
+ table_options.raise_if_unsampled(self.model)
947
+ return query.sample(table_sample.method, table_sample.percent, table_sample.seed)
948
+
949
+ def _get_execution_query(self, for_write: bool = False) -> Self:
950
+ """Returns the query to run now: itself when its connection is pinned, otherwise a copy
951
+ bound to the connection chosen for this one execution, so a queryset evaluated again later
952
+ (after a transaction ends, inside another one, from another task) chooses afresh.
953
+
954
+ Args:
955
+ for_write: Whether the connection is chosen for a write.
956
+
957
+ Returns:
958
+ The query bound to a connection.
959
+ """
960
+ if cast("DatabaseClient | None", self._connection) is not None:
961
+ return self
962
+ execution_query = copy(self)
963
+ execution_query._apply_connection(execution_query.get_connection(for_write=for_write))
964
+ return execution_query
965
+
966
+ def _get_compiler(self) -> QuerySpecification[Any]:
967
+ """The query building this query's SQL - the query itself, unless it only describes the
968
+ rows another query builds.
969
+
970
+ Returns:
971
+ The query.
972
+ """
973
+ return self
974
+
975
+ def _make_query(self) -> None:
976
+ """Builds the query for the connection it runs on."""
977
+ raise NotImplementedError()
978
+
979
+ def _get_statements(self, parameters_inline: bool) -> list[tuple[str, list[Any]]]:
980
+ """The statements the query runs, built for the connection it runs on.
981
+
982
+ Args:
983
+ parameters_inline: Whether values are rendered into the SQL instead of bound.
984
+
985
+ Returns:
986
+ ``(sql, bound values)`` of each statement.
987
+ """
988
+ raise NotImplementedError()
989
+
990
+ def _get_read_columns(self) -> set[tuple[str, str]]:
991
+ """The columns the query reads, by the tables they belong to.
992
+
993
+ Returns:
994
+ ``(table, column)`` of each column.
995
+ """
996
+ raise NotImplementedError()
997
+
998
+ def _get_explain_statements(
999
+ self, statements: list[tuple[str, list[Any]]], output_format: str | None, options: dict[str, bool]
1000
+ ) -> list[tuple[str, list[Any]]]:
1001
+ """The EXPLAIN statement of each statement, in the dialect of the connection the query runs on.
1002
+
1003
+ Args:
1004
+ statements: ``(sql, bound values)`` of each explained statement.
1005
+ output_format: The plan's output format, None for the dialect's default.
1006
+ options: The EXPLAIN options.
1007
+
1008
+ Returns:
1009
+ ``(sql, bound values)`` of each EXPLAIN statement.
1010
+ """
1011
+ connection = self._connection
1012
+ clauses = connection.dialect.clauses
1013
+ return [
1014
+ (clauses.get_explain_sql(sql, output_format, options, connection.features), values)
1015
+ for sql, values in statements
1016
+ ]
1017
+
1018
+ def sql(
1019
+ self,
1020
+ parameters_inline: bool = False,
1021
+ *,
1022
+ explain: bool = False,
1023
+ output_format: str | None = None,
1024
+ **explain_options: bool,
1025
+ ) -> str:
1026
+ """The SQL the query runs, in the dialect of the connection it runs on.
1027
+
1028
+ Args:
1029
+ parameters_inline: Whether values are rendered into the SQL instead of placeholders.
1030
+ explain: Return the ``EXPLAIN`` statement of the query instead - what ``explain()`` runs.
1031
+ output_format: The plan's output format with ``explain=True``.
1032
+ explain_options: The EXPLAIN options with ``explain=True``.
1033
+
1034
+ Returns:
1035
+ The SQL; several statements are joined with ``;``.
1036
+
1037
+ Raises:
1038
+ QueryError: ``output_format`` or an EXPLAIN option is given without ``explain=True``.
1039
+ UnSupportedError: The dialect has no such EXPLAIN format or option.
1040
+ """
1041
+ if not explain and (output_format is not None or explain_options):
1042
+ raise QueryError("output_format and EXPLAIN options apply only with explain=True")
1043
+ execution_query = self._get_compiler()._get_execution_query()
1044
+ statements = execution_query._get_statements(parameters_inline)
1045
+ if explain:
1046
+ statements = execution_query._get_explain_statements(statements, output_format, explain_options)
1047
+ return ";".join(sql for sql, _values in statements)
1048
+
1049
+ def get_read_columns(self) -> set[tuple[str, str]]:
1050
+ """The columns the query reads - in its joins and subqueries too - by the tables they belong to:
1051
+ what a view selecting it depends on.
1052
+
1053
+ Returns:
1054
+ ``(table, column)`` of each column.
1055
+ """
1056
+ return self._get_compiler()._get_execution_query()._get_read_columns()
1057
+
1058
+ async def explain(self, output_format: str | None = None, **options: bool) -> list[dict[str, Any]]:
1059
+ """Runs the query's ``EXPLAIN`` statement - the one ``sql(explain=True)`` returns - and
1060
+ returns the plan rows.
1061
+
1062
+ Args:
1063
+ output_format: The plan's output format - one the dialect has (``text``, ``json``, ...),
1064
+ its own default when None.
1065
+ options: The EXPLAIN options - those of ``Features.explain_options``.
1066
+
1067
+ Returns:
1068
+ The plan rows as dicts of column name and value - the columns and their content depend
1069
+ on the database, never on its driver.
1070
+
1071
+ Raises:
1072
+ UnSupportedError: The dialect has no such format or option.
1073
+ """
1074
+ execution_query = self._get_compiler()._get_execution_query()
1075
+ connection = execution_query._connection
1076
+ statements = execution_query._get_explain_statements(
1077
+ execution_query._get_statements(parameters_inline=False), output_format, options
1078
+ )
1079
+ rows: list[dict[str, Any]] = []
1080
+ for sql, values in statements:
1081
+ rows.extend(dict(row) for row in (await connection.execute(sql, values))[1])
1082
+ return rows
1083
+
1084
+
1085
+ # The query classes are defined above, and the expressions imported - a value of any of them is
1086
+ # written into a statement or a subquery, never bound as a parameter.
1087
+ StatementPlan.unbindable_value_classes = (Term, Expression, QuerySpecification)
1088
+ QuerySpecification.raise_if_slots_unclassified()