dblift 2.3.0__tar.gz → 2.4.0__tar.gz

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 (470) hide show
  1. {dblift-2.3.0 → dblift-2.4.0}/PKG-INFO +15 -1
  2. {dblift-2.3.0 → dblift-2.4.0}/cli/main.py +40 -10
  3. dblift-2.4.0/db/plugins/alloydb/__init__.py +12 -0
  4. dblift-2.4.0/db/plugins/alloydb/plugin.py +28 -0
  5. dblift-2.4.0/db/plugins/alloydb/provider.py +14 -0
  6. dblift-2.4.0/db/plugins/alloydb/quirks.py +32 -0
  7. dblift-2.4.0/db/plugins/aurora_postgresql/__init__.py +12 -0
  8. dblift-2.4.0/db/plugins/aurora_postgresql/plugin.py +28 -0
  9. dblift-2.4.0/db/plugins/aurora_postgresql/provider.py +14 -0
  10. dblift-2.4.0/db/plugins/aurora_postgresql/quirks.py +32 -0
  11. dblift-2.4.0/db/plugins/citus/__init__.py +12 -0
  12. dblift-2.4.0/db/plugins/citus/plugin.py +28 -0
  13. dblift-2.4.0/db/plugins/citus/provider.py +14 -0
  14. dblift-2.4.0/db/plugins/citus/quirks.py +32 -0
  15. dblift-2.4.0/db/plugins/neon/__init__.py +12 -0
  16. dblift-2.4.0/db/plugins/neon/plugin.py +28 -0
  17. dblift-2.4.0/db/plugins/neon/provider.py +14 -0
  18. dblift-2.4.0/db/plugins/neon/quirks.py +32 -0
  19. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/postgresql/config.py +20 -1
  20. dblift-2.4.0/db/plugins/supabase/__init__.py +12 -0
  21. dblift-2.4.0/db/plugins/supabase/plugin.py +28 -0
  22. dblift-2.4.0/db/plugins/supabase/provider.py +14 -0
  23. dblift-2.4.0/db/plugins/supabase/quirks.py +32 -0
  24. dblift-2.4.0/db/plugins/timescaledb/__init__.py +12 -0
  25. dblift-2.4.0/db/plugins/timescaledb/plugin.py +28 -0
  26. dblift-2.4.0/db/plugins/timescaledb/provider.py +14 -0
  27. dblift-2.4.0/db/plugins/timescaledb/quirks.py +32 -0
  28. dblift-2.4.0/db/plugins/yugabytedb/__init__.py +12 -0
  29. dblift-2.4.0/db/plugins/yugabytedb/plugin.py +28 -0
  30. dblift-2.4.0/db/plugins/yugabytedb/provider.py +14 -0
  31. dblift-2.4.0/db/plugins/yugabytedb/quirks.py +32 -0
  32. {dblift-2.3.0 → dblift-2.4.0}/dblift.egg-info/PKG-INFO +15 -1
  33. {dblift-2.3.0 → dblift-2.4.0}/dblift.egg-info/SOURCES.txt +28 -0
  34. {dblift-2.3.0 → dblift-2.4.0}/dblift.egg-info/entry_points.txt +7 -0
  35. {dblift-2.3.0 → dblift-2.4.0}/dblift.egg-info/requires.txt +21 -0
  36. {dblift-2.3.0 → dblift-2.4.0}/pyproject.toml +64 -1
  37. {dblift-2.3.0 → dblift-2.4.0}/LICENSE +0 -0
  38. {dblift-2.3.0 → dblift-2.4.0}/README.md +0 -0
  39. {dblift-2.3.0 → dblift-2.4.0}/api/__init__.py +0 -0
  40. {dblift-2.3.0 → dblift-2.4.0}/api/_cli_support.py +0 -0
  41. {dblift-2.3.0 → dblift-2.4.0}/api/_client_factory.py +0 -0
  42. {dblift-2.3.0 → dblift-2.4.0}/api/_client_operations.py +0 -0
  43. {dblift-2.3.0 → dblift-2.4.0}/api/_engine_config.py +0 -0
  44. {dblift-2.3.0 → dblift-2.4.0}/api/async_client.py +0 -0
  45. {dblift-2.3.0 → dblift-2.4.0}/api/client.py +0 -0
  46. {dblift-2.3.0 → dblift-2.4.0}/api/events.py +0 -0
  47. {dblift-2.3.0 → dblift-2.4.0}/api/migrations.py +0 -0
  48. {dblift-2.3.0 → dblift-2.4.0}/api/py.typed +0 -0
  49. {dblift-2.3.0 → dblift-2.4.0}/cli/__init__.py +0 -0
  50. {dblift-2.3.0 → dblift-2.4.0}/cli/_command_handlers.py +0 -0
  51. {dblift-2.3.0 → dblift-2.4.0}/cli/_config_helpers.py +0 -0
  52. {dblift-2.3.0 → dblift-2.4.0}/cli/_constants.py +0 -0
  53. {dblift-2.3.0 → dblift-2.4.0}/cli/_output.py +0 -0
  54. {dblift-2.3.0 → dblift-2.4.0}/cli/_parser_setup.py +0 -0
  55. {dblift-2.3.0 → dblift-2.4.0}/cli/commands/__init__.py +0 -0
  56. {dblift-2.3.0 → dblift-2.4.0}/cli/commands/config_command.py +0 -0
  57. {dblift-2.3.0 → dblift-2.4.0}/cli/db_utils.py +0 -0
  58. {dblift-2.3.0 → dblift-2.4.0}/cli/extensions.py +0 -0
  59. {dblift-2.3.0 → dblift-2.4.0}/cli/handlers/__init__.py +0 -0
  60. {dblift-2.3.0 → dblift-2.4.0}/cli/handlers/_shared.py +0 -0
  61. {dblift-2.3.0 → dblift-2.4.0}/cli/handlers/baseline.py +0 -0
  62. {dblift-2.3.0 → dblift-2.4.0}/cli/handlers/clean.py +0 -0
  63. {dblift-2.3.0 → dblift-2.4.0}/cli/handlers/import_flyway.py +0 -0
  64. {dblift-2.3.0 → dblift-2.4.0}/cli/handlers/info.py +0 -0
  65. {dblift-2.3.0 → dblift-2.4.0}/cli/handlers/migrate.py +0 -0
  66. {dblift-2.3.0 → dblift-2.4.0}/cli/handlers/repair.py +0 -0
  67. {dblift-2.3.0 → dblift-2.4.0}/cli/handlers/undo.py +0 -0
  68. {dblift-2.3.0 → dblift-2.4.0}/cli/handlers/validate.py +0 -0
  69. {dblift-2.3.0 → dblift-2.4.0}/config/__init__.py +0 -0
  70. {dblift-2.3.0 → dblift-2.4.0}/config/_credential_masking.py +0 -0
  71. {dblift-2.3.0 → dblift-2.4.0}/config/_subclasses/__init__.py +0 -0
  72. {dblift-2.3.0 → dblift-2.4.0}/config/_subclasses/dummy_config.py +0 -0
  73. {dblift-2.3.0 → dblift-2.4.0}/config/_url_builder_mixin.py +0 -0
  74. {dblift-2.3.0 → dblift-2.4.0}/config/config_builder.py +0 -0
  75. {dblift-2.3.0 → dblift-2.4.0}/config/database_config.py +0 -0
  76. {dblift-2.3.0 → dblift-2.4.0}/config/dblift_config.py +0 -0
  77. {dblift-2.3.0 → dblift-2.4.0}/config/errors.py +0 -0
  78. {dblift-2.3.0 → dblift-2.4.0}/config/property_registry.py +0 -0
  79. {dblift-2.3.0 → dblift-2.4.0}/config/secrets/__init__.py +0 -0
  80. {dblift-2.3.0 → dblift-2.4.0}/config/secrets/_cache.py +0 -0
  81. {dblift-2.3.0 → dblift-2.4.0}/config/secrets/_provider_base.py +0 -0
  82. {dblift-2.3.0 → dblift-2.4.0}/config/secrets/_registry.py +0 -0
  83. {dblift-2.3.0 → dblift-2.4.0}/config/secrets/_resolver.py +0 -0
  84. {dblift-2.3.0 → dblift-2.4.0}/config/secrets/_secrets_config.py +0 -0
  85. {dblift-2.3.0 → dblift-2.4.0}/core/__init__.py +0 -0
  86. {dblift-2.3.0 → dblift-2.4.0}/core/constants.py +0 -0
  87. {dblift-2.3.0 → dblift-2.4.0}/core/dialect_boundary.py +0 -0
  88. {dblift-2.3.0 → dblift-2.4.0}/core/exceptions.py +0 -0
  89. {dblift-2.3.0 → dblift-2.4.0}/core/introspection/__init__.py +0 -0
  90. {dblift-2.3.0 → dblift-2.4.0}/core/introspection/_column_enricher.py +0 -0
  91. {dblift-2.3.0 → dblift-2.4.0}/core/introspection/_partition_enricher.py +0 -0
  92. {dblift-2.3.0 → dblift-2.4.0}/core/introspection/_schema_orchestrator.py +0 -0
  93. {dblift-2.3.0 → dblift-2.4.0}/core/introspection/_utils.py +0 -0
  94. {dblift-2.3.0 → dblift-2.4.0}/core/introspection/_vendor_property_applier.py +0 -0
  95. {dblift-2.3.0 → dblift-2.4.0}/core/introspection/base_introspector.py +0 -0
  96. {dblift-2.3.0 → dblift-2.4.0}/core/introspection/extractors/__init__.py +0 -0
  97. {dblift-2.3.0 → dblift-2.4.0}/core/introspection/extractors/base_extractor.py +0 -0
  98. {dblift-2.3.0 → dblift-2.4.0}/core/introspection/extractors/column_extractor.py +0 -0
  99. {dblift-2.3.0 → dblift-2.4.0}/core/introspection/extractors/constraint_extractor.py +0 -0
  100. {dblift-2.3.0 → dblift-2.4.0}/core/introspection/extractors/index_extractor.py +0 -0
  101. {dblift-2.3.0 → dblift-2.4.0}/core/introspection/extractors/misc_extractor.py +0 -0
  102. {dblift-2.3.0 → dblift-2.4.0}/core/introspection/extractors/procedure_extractor.py +0 -0
  103. {dblift-2.3.0 → dblift-2.4.0}/core/introspection/extractors/sequence_extractor.py +0 -0
  104. {dblift-2.3.0 → dblift-2.4.0}/core/introspection/extractors/table_extractor.py +0 -0
  105. {dblift-2.3.0 → dblift-2.4.0}/core/introspection/extractors/trigger_extractor.py +0 -0
  106. {dblift-2.3.0 → dblift-2.4.0}/core/introspection/extractors/view_extractor.py +0 -0
  107. {dblift-2.3.0 → dblift-2.4.0}/core/introspection/introspector_factory.py +0 -0
  108. {dblift-2.3.0 → dblift-2.4.0}/core/introspection/result.py +0 -0
  109. {dblift-2.3.0 → dblift-2.4.0}/core/introspection/schema_introspector.py +0 -0
  110. {dblift-2.3.0 → dblift-2.4.0}/core/introspection/vendor_queries_base.py +0 -0
  111. {dblift-2.3.0 → dblift-2.4.0}/core/introspection/vendor_queries_factory.py +0 -0
  112. {dblift-2.3.0 → dblift-2.4.0}/core/introspection/vendor_queries_protocols.py +0 -0
  113. {dblift-2.3.0 → dblift-2.4.0}/core/introspection/version_detector.py +0 -0
  114. {dblift-2.3.0 → dblift-2.4.0}/core/logger/__init__.py +0 -0
  115. {dblift-2.3.0 → dblift-2.4.0}/core/logger/_base.py +0 -0
  116. {dblift-2.3.0 → dblift-2.4.0}/core/logger/_factory.py +0 -0
  117. {dblift-2.3.0 → dblift-2.4.0}/core/logger/_formatters.py +0 -0
  118. {dblift-2.3.0 → dblift-2.4.0}/core/logger/_levels.py +0 -0
  119. {dblift-2.3.0 → dblift-2.4.0}/core/logger/_multi.py +0 -0
  120. {dblift-2.3.0 → dblift-2.4.0}/core/logger/_null.py +0 -0
  121. {dblift-2.3.0 → dblift-2.4.0}/core/logger/console.py +0 -0
  122. {dblift-2.3.0 → dblift-2.4.0}/core/logger/formatters/__init__.py +0 -0
  123. {dblift-2.3.0 → dblift-2.4.0}/core/logger/formatters/_formatter_impl.py +0 -0
  124. {dblift-2.3.0 → dblift-2.4.0}/core/logger/formatters/factory.py +0 -0
  125. {dblift-2.3.0 → dblift-2.4.0}/core/logger/formatters/formatter.py +0 -0
  126. {dblift-2.3.0 → dblift-2.4.0}/core/logger/formatters/htmlformatter.py +0 -0
  127. {dblift-2.3.0 → dblift-2.4.0}/core/logger/formatters/jsonformatter.py +0 -0
  128. {dblift-2.3.0 → dblift-2.4.0}/core/logger/log.py +0 -0
  129. {dblift-2.3.0 → dblift-2.4.0}/core/logger/results.py +0 -0
  130. {dblift-2.3.0 → dblift-2.4.0}/core/logger/templates/oldreport.html +0 -0
  131. {dblift-2.3.0 → dblift-2.4.0}/core/logger/templates/report.html +0 -0
  132. {dblift-2.3.0 → dblift-2.4.0}/core/migration/__init__.py +0 -0
  133. {dblift-2.3.0 → dblift-2.4.0}/core/migration/_type_match.py +0 -0
  134. {dblift-2.3.0 → dblift-2.4.0}/core/migration/clean_summary.py +0 -0
  135. {dblift-2.3.0 → dblift-2.4.0}/core/migration/commands/__init__.py +0 -0
  136. {dblift-2.3.0 → dblift-2.4.0}/core/migration/commands/_script_events.py +0 -0
  137. {dblift-2.3.0 → dblift-2.4.0}/core/migration/commands/base_command.py +0 -0
  138. {dblift-2.3.0 → dblift-2.4.0}/core/migration/commands/baseline_command.py +0 -0
  139. {dblift-2.3.0 → dblift-2.4.0}/core/migration/commands/clean_command.py +0 -0
  140. {dblift-2.3.0 → dblift-2.4.0}/core/migration/commands/import_flyway_command.py +0 -0
  141. {dblift-2.3.0 → dblift-2.4.0}/core/migration/commands/info_command.py +0 -0
  142. {dblift-2.3.0 → dblift-2.4.0}/core/migration/commands/migrate_command.py +0 -0
  143. {dblift-2.3.0 → dblift-2.4.0}/core/migration/commands/repair_command.py +0 -0
  144. {dblift-2.3.0 → dblift-2.4.0}/core/migration/commands/undo_command.py +0 -0
  145. {dblift-2.3.0 → dblift-2.4.0}/core/migration/commands/validate_command.py +0 -0
  146. {dblift-2.3.0 → dblift-2.4.0}/core/migration/encoding.py +0 -0
  147. {dblift-2.3.0 → dblift-2.4.0}/core/migration/executor/__init__.py +0 -0
  148. {dblift-2.3.0 → dblift-2.4.0}/core/migration/executor/execution_engine.py +0 -0
  149. {dblift-2.3.0 → dblift-2.4.0}/core/migration/executor/migration_executor.py +0 -0
  150. {dblift-2.3.0 → dblift-2.4.0}/core/migration/executor/migration_helpers.py +0 -0
  151. {dblift-2.3.0 → dblift-2.4.0}/core/migration/executor/placeholder_manager.py +0 -0
  152. {dblift-2.3.0 → dblift-2.4.0}/core/migration/executor/transaction_policy.py +0 -0
  153. {dblift-2.3.0 → dblift-2.4.0}/core/migration/executors/__init__.py +0 -0
  154. {dblift-2.3.0 → dblift-2.4.0}/core/migration/executors/base_executor.py +0 -0
  155. {dblift-2.3.0 → dblift-2.4.0}/core/migration/executors/executor_factory.py +0 -0
  156. {dblift-2.3.0 → dblift-2.4.0}/core/migration/executors/python_executor.py +0 -0
  157. {dblift-2.3.0 → dblift-2.4.0}/core/migration/executors/sql_executor.py +0 -0
  158. {dblift-2.3.0 → dblift-2.4.0}/core/migration/formats/__init__.py +0 -0
  159. {dblift-2.3.0 → dblift-2.4.0}/core/migration/formats/format_detector.py +0 -0
  160. {dblift-2.3.0 → dblift-2.4.0}/core/migration/formats/migration_format.py +0 -0
  161. {dblift-2.3.0 → dblift-2.4.0}/core/migration/history/__init__.py +0 -0
  162. {dblift-2.3.0 → dblift-2.4.0}/core/migration/history/migration_history_manager.py +0 -0
  163. {dblift-2.3.0 → dblift-2.4.0}/core/migration/journals/__init__.py +0 -0
  164. {dblift-2.3.0 → dblift-2.4.0}/core/migration/journals/migration_journal.py +0 -0
  165. {dblift-2.3.0 → dblift-2.4.0}/core/migration/migration.py +0 -0
  166. {dblift-2.3.0 → dblift-2.4.0}/core/migration/placeholders/__init__.py +0 -0
  167. {dblift-2.3.0 → dblift-2.4.0}/core/migration/placeholders/placeholder_service.py +0 -0
  168. {dblift-2.3.0 → dblift-2.4.0}/core/migration/rules/__init__.py +0 -0
  169. {dblift-2.3.0 → dblift-2.4.0}/core/migration/rules/migration_rules.py +0 -0
  170. {dblift-2.3.0 → dblift-2.4.0}/core/migration/scripting/__init__.py +0 -0
  171. {dblift-2.3.0 → dblift-2.4.0}/core/migration/scripting/migration_script_manager.py +0 -0
  172. {dblift-2.3.0 → dblift-2.4.0}/core/migration/scripting/undo_script_generator/__init__.py +0 -0
  173. {dblift-2.3.0 → dblift-2.4.0}/core/migration/scripting/undo_script_generator/_ddl_reversers.py +0 -0
  174. {dblift-2.3.0 → dblift-2.4.0}/core/migration/scripting/undo_script_generator/_dml_reversers.py +0 -0
  175. {dblift-2.3.0 → dblift-2.4.0}/core/migration/scripting/undo_script_generator/_extractors.py +0 -0
  176. {dblift-2.3.0 → dblift-2.4.0}/core/migration/scripting/undo_script_generator/_generator.py +0 -0
  177. {dblift-2.3.0 → dblift-2.4.0}/core/migration/scripting/undo_script_generator/_helpers.py +0 -0
  178. {dblift-2.3.0 → dblift-2.4.0}/core/migration/scripting/undo_script_generator/_models.py +0 -0
  179. {dblift-2.3.0 → dblift-2.4.0}/core/migration/scripting/undo_script_generator/_reversers.py +0 -0
  180. {dblift-2.3.0 → dblift-2.4.0}/core/migration/sql/__init__.py +0 -0
  181. {dblift-2.3.0 → dblift-2.4.0}/core/migration/sql/execution_statement.py +0 -0
  182. {dblift-2.3.0 → dblift-2.4.0}/core/migration/sql/sql_analyzer.py +0 -0
  183. {dblift-2.3.0 → dblift-2.4.0}/core/migration/sql/sql_execution_service.py +0 -0
  184. {dblift-2.3.0 → dblift-2.4.0}/core/migration/sql/statement_splitter.py +0 -0
  185. {dblift-2.3.0 → dblift-2.4.0}/core/migration/state/__init__.py +0 -0
  186. {dblift-2.3.0 → dblift-2.4.0}/core/migration/state/migration_data_service.py +0 -0
  187. {dblift-2.3.0 → dblift-2.4.0}/core/migration/state/migration_display_state.py +0 -0
  188. {dblift-2.3.0 → dblift-2.4.0}/core/migration/state/migration_formatter.py +0 -0
  189. {dblift-2.3.0 → dblift-2.4.0}/core/migration/state/migration_state.py +0 -0
  190. {dblift-2.3.0 → dblift-2.4.0}/core/migration/state/migration_state_manager.py +0 -0
  191. {dblift-2.3.0 → dblift-2.4.0}/core/migration/state/migration_state_service.py +0 -0
  192. {dblift-2.3.0 → dblift-2.4.0}/core/migration/ui/__init__.py +0 -0
  193. {dblift-2.3.0 → dblift-2.4.0}/core/migration/ui/data_collector.py +0 -0
  194. {dblift-2.3.0 → dblift-2.4.0}/core/migration/ui/display_formatters.py +0 -0
  195. {dblift-2.3.0 → dblift-2.4.0}/core/migration/ui/migration_analyzer.py +0 -0
  196. {dblift-2.3.0 → dblift-2.4.0}/core/migration/ui/migration_ui.py +0 -0
  197. {dblift-2.3.0 → dblift-2.4.0}/core/migration/ui/table_renderer.py +0 -0
  198. {dblift-2.3.0 → dblift-2.4.0}/core/migration/version_utils.py +0 -0
  199. {dblift-2.3.0 → dblift-2.4.0}/core/normalization/__init__.py +0 -0
  200. {dblift-2.3.0 → dblift-2.4.0}/core/normalization/dependency_resolver.py +0 -0
  201. {dblift-2.3.0 → dblift-2.4.0}/core/normalization/identifier_normalizer.py +0 -0
  202. {dblift-2.3.0 → dblift-2.4.0}/core/normalization/object_orderer.py +0 -0
  203. {dblift-2.3.0 → dblift-2.4.0}/core/normalization/type_constants.py +0 -0
  204. {dblift-2.3.0 → dblift-2.4.0}/core/normalization/type_mapper.py +0 -0
  205. {dblift-2.3.0 → dblift-2.4.0}/core/normalization/type_mappings.py +0 -0
  206. {dblift-2.3.0 → dblift-2.4.0}/core/normalization/type_normalizer.py +0 -0
  207. {dblift-2.3.0 → dblift-2.4.0}/core/seams/__init__.py +0 -0
  208. {dblift-2.3.0 → dblift-2.4.0}/core/seams/capabilities.py +0 -0
  209. {dblift-2.3.0 → dblift-2.4.0}/core/seams/event_listeners.py +0 -0
  210. {dblift-2.3.0 → dblift-2.4.0}/core/seams/feature_loading.py +0 -0
  211. {dblift-2.3.0 → dblift-2.4.0}/core/seams/introspection.py +0 -0
  212. {dblift-2.3.0 → dblift-2.4.0}/core/seams/license_info.py +0 -0
  213. {dblift-2.3.0 → dblift-2.4.0}/core/seams/runtime_checks.py +0 -0
  214. {dblift-2.3.0 → dblift-2.4.0}/core/seams/sql_generators.py +0 -0
  215. {dblift-2.3.0 → dblift-2.4.0}/core/seams/tier_resolver.py +0 -0
  216. {dblift-2.3.0 → dblift-2.4.0}/core/sql_generator/__init__.py +0 -0
  217. {dblift-2.3.0 → dblift-2.4.0}/core/sql_generator/alter/__init__.py +0 -0
  218. {dblift-2.3.0 → dblift-2.4.0}/core/sql_generator/alter/alter_generator_factory.py +0 -0
  219. {dblift-2.3.0 → dblift-2.4.0}/core/sql_generator/alter/base_alter_generator.py +0 -0
  220. {dblift-2.3.0 → dblift-2.4.0}/core/sql_generator/alter_generator.py +0 -0
  221. {dblift-2.3.0 → dblift-2.4.0}/core/sql_generator/base_generator.py +0 -0
  222. {dblift-2.3.0 → dblift-2.4.0}/core/sql_generator/basic_table_ddl_generator.py +0 -0
  223. {dblift-2.3.0 → dblift-2.4.0}/core/sql_generator/dependency_analyzer.py +0 -0
  224. {dblift-2.3.0 → dblift-2.4.0}/core/sql_generator/diff_converters/__init__.py +0 -0
  225. {dblift-2.3.0 → dblift-2.4.0}/core/sql_generator/diff_converters/base_converter.py +0 -0
  226. {dblift-2.3.0 → dblift-2.4.0}/core/sql_generator/formatter.py +0 -0
  227. {dblift-2.3.0 → dblift-2.4.0}/core/sql_generator/generator_factory.py +0 -0
  228. {dblift-2.3.0 → dblift-2.4.0}/core/sql_generator/options.py +0 -0
  229. {dblift-2.3.0 → dblift-2.4.0}/core/sql_generator/script_organizer.py +0 -0
  230. {dblift-2.3.0 → dblift-2.4.0}/core/sql_generator/sql_generator.py +0 -0
  231. {dblift-2.3.0 → dblift-2.4.0}/core/sql_generator/sql_statement.py +0 -0
  232. {dblift-2.3.0 → dblift-2.4.0}/core/sql_generator/table_ddl_render.py +0 -0
  233. {dblift-2.3.0 → dblift-2.4.0}/core/sql_model/__init__.py +0 -0
  234. {dblift-2.3.0 → dblift-2.4.0}/core/sql_model/_base_parse_result.py +0 -0
  235. {dblift-2.3.0 → dblift-2.4.0}/core/sql_model/_base_sql_column.py +0 -0
  236. {dblift-2.3.0 → dblift-2.4.0}/core/sql_model/_base_sql_constraint.py +0 -0
  237. {dblift-2.3.0 → dblift-2.4.0}/core/sql_model/_base_sql_object.py +0 -0
  238. {dblift-2.3.0 → dblift-2.4.0}/core/sql_model/_base_sql_statement.py +0 -0
  239. {dblift-2.3.0 → dblift-2.4.0}/core/sql_model/base.py +0 -0
  240. {dblift-2.3.0 → dblift-2.4.0}/core/sql_model/constraint_validator.py +0 -0
  241. {dblift-2.3.0 → dblift-2.4.0}/core/sql_model/database_link.py +0 -0
  242. {dblift-2.3.0 → dblift-2.4.0}/core/sql_model/dialect.py +0 -0
  243. {dblift-2.3.0 → dblift-2.4.0}/core/sql_model/event.py +0 -0
  244. {dblift-2.3.0 → dblift-2.4.0}/core/sql_model/extension.py +0 -0
  245. {dblift-2.3.0 → dblift-2.4.0}/core/sql_model/foreign_data_wrapper.py +0 -0
  246. {dblift-2.3.0 → dblift-2.4.0}/core/sql_model/foreign_server.py +0 -0
  247. {dblift-2.3.0 → dblift-2.4.0}/core/sql_model/index.py +0 -0
  248. {dblift-2.3.0 → dblift-2.4.0}/core/sql_model/linked_server.py +0 -0
  249. {dblift-2.3.0 → dblift-2.4.0}/core/sql_model/module.py +0 -0
  250. {dblift-2.3.0 → dblift-2.4.0}/core/sql_model/package.py +0 -0
  251. {dblift-2.3.0 → dblift-2.4.0}/core/sql_model/partition.py +0 -0
  252. {dblift-2.3.0 → dblift-2.4.0}/core/sql_model/procedure.py +0 -0
  253. {dblift-2.3.0 → dblift-2.4.0}/core/sql_model/sequence.py +0 -0
  254. {dblift-2.3.0 → dblift-2.4.0}/core/sql_model/synonym.py +0 -0
  255. {dblift-2.3.0 → dblift-2.4.0}/core/sql_model/table.py +0 -0
  256. {dblift-2.3.0 → dblift-2.4.0}/core/sql_model/table_canonicalizer.py +0 -0
  257. {dblift-2.3.0 → dblift-2.4.0}/core/sql_model/table_options.py +0 -0
  258. {dblift-2.3.0 → dblift-2.4.0}/core/sql_model/trigger.py +0 -0
  259. {dblift-2.3.0 → dblift-2.4.0}/core/sql_model/user_defined_type.py +0 -0
  260. {dblift-2.3.0 → dblift-2.4.0}/core/sql_model/view.py +0 -0
  261. {dblift-2.3.0 → dblift-2.4.0}/core/sql_model/view_options.py +0 -0
  262. {dblift-2.3.0 → dblift-2.4.0}/core/sql_parser/__init__.py +0 -0
  263. {dblift-2.3.0 → dblift-2.4.0}/core/sql_parser/_partition_handler.py +0 -0
  264. {dblift-2.3.0 → dblift-2.4.0}/core/sql_parser/_sqlglot_builders.py +0 -0
  265. {dblift-2.3.0 → dblift-2.4.0}/core/sql_parser/base_statement_parser.py +0 -0
  266. {dblift-2.3.0 → dblift-2.4.0}/core/sql_parser/base_tokenizer.py +0 -0
  267. {dblift-2.3.0 → dblift-2.4.0}/core/sql_parser/common/__init__.py +0 -0
  268. {dblift-2.3.0 → dblift-2.4.0}/core/sql_parser/common/base_parser.py +0 -0
  269. {dblift-2.3.0 → dblift-2.4.0}/core/sql_parser/dialects/__init__.py +0 -0
  270. {dblift-2.3.0 → dblift-2.4.0}/core/sql_parser/dialects/base_config.py +0 -0
  271. {dblift-2.3.0 → dblift-2.4.0}/core/sql_parser/enhanced_regex_parser.py +0 -0
  272. {dblift-2.3.0 → dblift-2.4.0}/core/sql_parser/hybrid_parser.py +0 -0
  273. {dblift-2.3.0 → dblift-2.4.0}/core/sql_parser/parser_context.py +0 -0
  274. {dblift-2.3.0 → dblift-2.4.0}/core/sql_parser/parser_factory.py +0 -0
  275. {dblift-2.3.0 → dblift-2.4.0}/core/sql_parser/parser_interface.py +0 -0
  276. {dblift-2.3.0 → dblift-2.4.0}/core/sql_parser/sqlglot_parser.py +0 -0
  277. {dblift-2.3.0 → dblift-2.4.0}/core/sql_parser/tokens.py +0 -0
  278. {dblift-2.3.0 → dblift-2.4.0}/core/sql_parser/unified_regex_parser.py +0 -0
  279. {dblift-2.3.0 → dblift-2.4.0}/core/sql_validator/__init__.py +0 -0
  280. {dblift-2.3.0 → dblift-2.4.0}/core/sql_validator/_checksum_validator.py +0 -0
  281. {dblift-2.3.0 → dblift-2.4.0}/core/sql_validator/_flyway_compatibility.py +0 -0
  282. {dblift-2.3.0 → dblift-2.4.0}/core/sql_validator/_migration_filter.py +0 -0
  283. {dblift-2.3.0 → dblift-2.4.0}/core/sql_validator/_sql_syntax_validator.py +0 -0
  284. {dblift-2.3.0 → dblift-2.4.0}/core/sql_validator/_strict_mode_validator.py +0 -0
  285. {dblift-2.3.0 → dblift-2.4.0}/core/sql_validator/migration_validator.py +0 -0
  286. {dblift-2.3.0 → dblift-2.4.0}/core/state/sql_script_formatter.py +0 -0
  287. {dblift-2.3.0 → dblift-2.4.0}/core/state/sql_statement.py +0 -0
  288. {dblift-2.3.0 → dblift-2.4.0}/core/utils/__init__.py +0 -0
  289. {dblift-2.3.0 → dblift-2.4.0}/core/utils/database_url_parser.py +0 -0
  290. {dblift-2.3.0 → dblift-2.4.0}/core/utils/metadata_helpers.py +0 -0
  291. {dblift-2.3.0 → dblift-2.4.0}/core/utils/row_access.py +0 -0
  292. {dblift-2.3.0 → dblift-2.4.0}/core/utils/string_utils.py +0 -0
  293. {dblift-2.3.0 → dblift-2.4.0}/core/utils/url_masking.py +0 -0
  294. {dblift-2.3.0 → dblift-2.4.0}/db/__init__.py +0 -0
  295. {dblift-2.3.0 → dblift-2.4.0}/db/base_provider.py +0 -0
  296. {dblift-2.3.0 → dblift-2.4.0}/db/base_quirks.py +0 -0
  297. {dblift-2.3.0 → dblift-2.4.0}/db/constants.py +0 -0
  298. {dblift-2.3.0 → dblift-2.4.0}/db/dml_analysis.py +0 -0
  299. {dblift-2.3.0 → dblift-2.4.0}/db/error.py +0 -0
  300. {dblift-2.3.0 → dblift-2.4.0}/db/error_handler.py +0 -0
  301. {dblift-2.3.0 → dblift-2.4.0}/db/exceptions.py +0 -0
  302. {dblift-2.3.0 → dblift-2.4.0}/db/native_connection_manager.py +0 -0
  303. {dblift-2.3.0 → dblift-2.4.0}/db/object_naming.py +0 -0
  304. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/__init__.py +0 -0
  305. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/base_history_manager.py +0 -0
  306. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/base_locking_manager.py +0 -0
  307. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/base_query_executor.py +0 -0
  308. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/base_schema_operations.py +0 -0
  309. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/base_snapshot_manager.py +0 -0
  310. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/base_undo_manager.py +0 -0
  311. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/cosmosdb/__init__.py +0 -0
  312. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/cosmosdb/config.py +0 -0
  313. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/cosmosdb/cosmosdb/__init__.py +0 -0
  314. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/cosmosdb/cosmosdb/_sdk.py +0 -0
  315. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/cosmosdb/cosmosdb/connection_manager.py +0 -0
  316. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/cosmosdb/cosmosdb/history_manager.py +0 -0
  317. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/cosmosdb/cosmosdb/locking_manager.py +0 -0
  318. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/cosmosdb/cosmosdb/query_executor.py +0 -0
  319. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/cosmosdb/cosmosdb/schema_operations.py +0 -0
  320. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/cosmosdb/introspection/__init__.py +0 -0
  321. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/cosmosdb/parser/__init__.py +0 -0
  322. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/cosmosdb/parser/cosmosdb_regex_parser.py +0 -0
  323. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/cosmosdb/plugin.py +0 -0
  324. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/cosmosdb/provider.py +0 -0
  325. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/cosmosdb/quirks.py +0 -0
  326. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/cosmosdb/sdk_translator/__init__.py +0 -0
  327. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/cosmosdb/sdk_translator/_executor.py +0 -0
  328. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/cosmosdb/sdk_translator/_executors.py +0 -0
  329. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/cosmosdb/sdk_translator/_parsing.py +0 -0
  330. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/cosmosdb/sdk_translator/_script_generation.py +0 -0
  331. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/cosmosdb/sdk_translator/_translator.py +0 -0
  332. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/cosmosdb/sdk_translator/_translators.py +0 -0
  333. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/db2/__init__.py +0 -0
  334. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/db2/config.py +0 -0
  335. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/db2/db2/__init__.py +0 -0
  336. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/db2/db2/history_manager.py +0 -0
  337. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/db2/db2/locking_manager.py +0 -0
  338. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/db2/db2/schema_operations.py +0 -0
  339. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/db2/introspection/__init__.py +0 -0
  340. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/db2/parser/__init__.py +0 -0
  341. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/db2/parser/db2_regex_parser.py +0 -0
  342. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/db2/parser/parser_config.py +0 -0
  343. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/db2/plugin.py +0 -0
  344. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/db2/provider.py +0 -0
  345. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/db2/quirks.py +0 -0
  346. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/db2/sqlalchemy_url.py +0 -0
  347. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/duckdb/__init__.py +0 -0
  348. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/duckdb/config.py +0 -0
  349. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/duckdb/parser/__init__.py +0 -0
  350. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/duckdb/parser/duckdb_regex_parser.py +0 -0
  351. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/duckdb/parser/parser_config.py +0 -0
  352. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/duckdb/plugin.py +0 -0
  353. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/duckdb/provider.py +0 -0
  354. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/duckdb/quirks.py +0 -0
  355. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/duckdb/sqlalchemy_url.py +0 -0
  356. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/mariadb/__init__.py +0 -0
  357. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/mariadb/plugin.py +0 -0
  358. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/mariadb/provider.py +0 -0
  359. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/mariadb/quirks.py +0 -0
  360. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/mysql/__init__.py +0 -0
  361. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/mysql/config.py +0 -0
  362. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/mysql/introspection/__init__.py +0 -0
  363. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/mysql/mysql/__init__.py +0 -0
  364. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/mysql/mysql/history_manager.py +0 -0
  365. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/mysql/mysql/locking_manager.py +0 -0
  366. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/mysql/mysql/schema_operations.py +0 -0
  367. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/mysql/parser/__init__.py +0 -0
  368. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/mysql/parser/mysql_regex_parser.py +0 -0
  369. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/mysql/parser/mysql_statement_parser.py +0 -0
  370. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/mysql/parser/mysql_tokenizer.py +0 -0
  371. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/mysql/parser/parser_config.py +0 -0
  372. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/mysql/plugin.py +0 -0
  373. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/mysql/provider.py +0 -0
  374. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/mysql/quirks.py +0 -0
  375. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/mysql/sqlalchemy_url.py +0 -0
  376. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/oracle/__init__.py +0 -0
  377. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/oracle/config.py +0 -0
  378. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/oracle/introspection/__init__.py +0 -0
  379. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/oracle/introspection/oracle_utils.py +0 -0
  380. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/oracle/oracle/__init__.py +0 -0
  381. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/oracle/oracle/dbms_output.py +0 -0
  382. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/oracle/oracle/history_manager.py +0 -0
  383. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/oracle/oracle/locking_manager.py +0 -0
  384. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/oracle/oracle/schema_operations.py +0 -0
  385. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/oracle/parser/__init__.py +0 -0
  386. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/oracle/parser/_comments.py +0 -0
  387. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/oracle/parser/_object_extractor.py +0 -0
  388. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/oracle/parser/_plsql_block.py +0 -0
  389. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/oracle/parser/_sqlplus.py +0 -0
  390. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/oracle/parser/_statement_splitter.py +0 -0
  391. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/oracle/parser/oracle_parser.py +0 -0
  392. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/oracle/parser/oracle_statement_parser.py +0 -0
  393. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/oracle/parser/oracle_tokenizer.py +0 -0
  394. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/oracle/parser/parser_config.py +0 -0
  395. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/oracle/parser/sqlplus_context.py +0 -0
  396. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/oracle/plugin.py +0 -0
  397. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/oracle/provider.py +0 -0
  398. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/oracle/quirks.py +0 -0
  399. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/oracle/sqlalchemy_url.py +0 -0
  400. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/postgresql/__init__.py +0 -0
  401. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/postgresql/_provider_query_executor.py +0 -0
  402. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/postgresql/introspection/__init__.py +0 -0
  403. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/postgresql/parser/__init__.py +0 -0
  404. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/postgresql/parser/parser_config.py +0 -0
  405. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/postgresql/parser/postgresql_regex_parser.py +0 -0
  406. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/postgresql/parser/postgresql_statement_parser.py +0 -0
  407. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/postgresql/parser/postgresql_tokenizer.py +0 -0
  408. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/postgresql/plugin.py +0 -0
  409. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/postgresql/postgresql/__init__.py +0 -0
  410. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/postgresql/postgresql/history_manager.py +0 -0
  411. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/postgresql/postgresql/locking_manager.py +0 -0
  412. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/postgresql/postgresql/schema_operations.py +0 -0
  413. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/postgresql/provider.py +0 -0
  414. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/postgresql/quirks.py +0 -0
  415. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/postgresql/sqlalchemy_url.py +0 -0
  416. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/sqlite/__init__.py +0 -0
  417. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/sqlite/config.py +0 -0
  418. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/sqlite/introspection/__init__.py +0 -0
  419. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/sqlite/parser/__init__.py +0 -0
  420. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/sqlite/parser/parser_config.py +0 -0
  421. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/sqlite/parser/sqlite_regex_parser.py +0 -0
  422. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/sqlite/plugin.py +0 -0
  423. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/sqlite/provider.py +0 -0
  424. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/sqlite/quirks.py +0 -0
  425. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/sqlite/sqlalchemy_url.py +0 -0
  426. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/sqlite/sqlite/__init__.py +0 -0
  427. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/sqlite/sqlite/connection_manager.py +0 -0
  428. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/sqlite/sqlite/history_manager.py +0 -0
  429. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/sqlite/sqlite/locking_manager.py +0 -0
  430. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/sqlite/sqlite/query_executor.py +0 -0
  431. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/sqlite/sqlite/schema_operations.py +0 -0
  432. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/sqlserver/__init__.py +0 -0
  433. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/sqlserver/config.py +0 -0
  434. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/sqlserver/introspection/__init__.py +0 -0
  435. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/sqlserver/parser/__init__.py +0 -0
  436. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/sqlserver/parser/parser_config.py +0 -0
  437. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/sqlserver/parser/sqlserver_regex_parser.py +0 -0
  438. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/sqlserver/parser/sqlserver_statement_parser.py +0 -0
  439. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/sqlserver/parser/sqlserver_tokenizer.py +0 -0
  440. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/sqlserver/parser/tsql_batch_separator.py +0 -0
  441. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/sqlserver/plugin.py +0 -0
  442. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/sqlserver/provider.py +0 -0
  443. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/sqlserver/quirks.py +0 -0
  444. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/sqlserver/sqlalchemy_url.py +0 -0
  445. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/sqlserver/sqlserver/__init__.py +0 -0
  446. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/sqlserver/sqlserver/history_manager.py +0 -0
  447. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/sqlserver/sqlserver/locking_manager.py +0 -0
  448. {dblift-2.3.0 → dblift-2.4.0}/db/plugins/sqlserver/sqlserver/schema_operations.py +0 -0
  449. {dblift-2.3.0 → dblift-2.4.0}/db/provider_capabilities.py +0 -0
  450. {dblift-2.3.0 → dblift-2.4.0}/db/provider_interfaces.py +0 -0
  451. {dblift-2.3.0 → dblift-2.4.0}/db/provider_registry.py +0 -0
  452. {dblift-2.3.0 → dblift-2.4.0}/db/sqlalchemy_provider.py +0 -0
  453. {dblift-2.3.0 → dblift-2.4.0}/db/value_utils.py +0 -0
  454. {dblift-2.3.0 → dblift-2.4.0}/dblift.egg-info/dependency_links.txt +0 -0
  455. {dblift-2.3.0 → dblift-2.4.0}/dblift.egg-info/top_level.txt +0 -0
  456. {dblift-2.3.0 → dblift-2.4.0}/integrations/__init__.py +0 -0
  457. {dblift-2.3.0 → dblift-2.4.0}/integrations/django/__init__.py +0 -0
  458. {dblift-2.3.0 → dblift-2.4.0}/integrations/django/_client.py +0 -0
  459. {dblift-2.3.0 → dblift-2.4.0}/integrations/django/_engine.py +0 -0
  460. {dblift-2.3.0 → dblift-2.4.0}/integrations/django/apps.py +0 -0
  461. {dblift-2.3.0 → dblift-2.4.0}/integrations/django/checks.py +0 -0
  462. {dblift-2.3.0 → dblift-2.4.0}/integrations/django/management/__init__.py +0 -0
  463. {dblift-2.3.0 → dblift-2.4.0}/integrations/django/management/commands/__init__.py +0 -0
  464. {dblift-2.3.0 → dblift-2.4.0}/integrations/django/management/commands/dblift_info.py +0 -0
  465. {dblift-2.3.0 → dblift-2.4.0}/integrations/django/management/commands/dblift_migrate.py +0 -0
  466. {dblift-2.3.0 → dblift-2.4.0}/integrations/django/management/commands/dblift_validate.py +0 -0
  467. {dblift-2.3.0 → dblift-2.4.0}/integrations/fastapi.py +0 -0
  468. {dblift-2.3.0 → dblift-2.4.0}/integrations/flask.py +0 -0
  469. {dblift-2.3.0 → dblift-2.4.0}/integrations/opentelemetry.py +0 -0
  470. {dblift-2.3.0 → dblift-2.4.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dblift
3
- Version: 2.3.0
3
+ Version: 2.4.0
4
4
  Summary: A database migration tool that supports multiple databases with native Python drivers
5
5
  Classifier: Development Status :: 5 - Production/Stable
6
6
  Classifier: Intended Audience :: Developers
@@ -69,6 +69,20 @@ Requires-Dist: ibm_db_sa>=0.4; extra == "db2"
69
69
  Provides-Extra: duckdb
70
70
  Requires-Dist: duckdb>=1.0; extra == "duckdb"
71
71
  Requires-Dist: duckdb_engine>=0.13; extra == "duckdb"
72
+ Provides-Extra: neon
73
+ Requires-Dist: psycopg[binary]>=3.1; extra == "neon"
74
+ Provides-Extra: supabase
75
+ Requires-Dist: psycopg[binary]>=3.1; extra == "supabase"
76
+ Provides-Extra: aurora-postgresql
77
+ Requires-Dist: psycopg[binary]>=3.1; extra == "aurora-postgresql"
78
+ Provides-Extra: alloydb
79
+ Requires-Dist: psycopg[binary]>=3.1; extra == "alloydb"
80
+ Provides-Extra: yugabytedb
81
+ Requires-Dist: psycopg[binary]>=3.1; extra == "yugabytedb"
82
+ Provides-Extra: timescaledb
83
+ Requires-Dist: psycopg[binary]>=3.1; extra == "timescaledb"
84
+ Provides-Extra: citus
85
+ Requires-Dist: psycopg[binary]>=3.1; extra == "citus"
72
86
  Provides-Extra: fastapi
73
87
  Requires-Dist: fastapi>=0.100; extra == "fastapi"
74
88
  Provides-Extra: flask
@@ -145,6 +145,44 @@ class _CliContext:
145
145
  license_info: Optional[Any] = None
146
146
 
147
147
 
148
+ def _format_version() -> str:
149
+ """Render the ``--version`` output.
150
+
151
+ The published ``dblift`` wheel is the OSS *core*. The paid tiers ship as
152
+ separate distributions (``dblift-pro`` / ``dblift-enterprise``) bundled into
153
+ the compiled binary, each on its own release lifecycle — so their versions
154
+ need not match the core's. Report the most-derived installed tier as the
155
+ headline (that is the product the user actually runs) and, when a paid tier
156
+ is present, list every component so a bare number is never ambiguous. In a
157
+ plain OSS install only the core is present, so the output stays a single
158
+ ``dblift version X`` line — unchanged from before.
159
+ """
160
+ from importlib.metadata import PackageNotFoundError
161
+ from importlib.metadata import version as _version
162
+
163
+ def _get(dist: str) -> Optional[str]:
164
+ try:
165
+ return _version(dist)
166
+ except PackageNotFoundError:
167
+ return None
168
+
169
+ core = _get("dblift")
170
+ pro = _get("dblift-pro")
171
+ enterprise = _get("dblift-enterprise")
172
+
173
+ # Headline = most-derived installed tier (the product actually running).
174
+ product = enterprise or pro or core
175
+ lines = [f"dblift version {product}"]
176
+ # Component manifest only when a paid tier is present; OSS stays one line.
177
+ if pro or enterprise:
178
+ lines.append(f" core (OSS): {core}")
179
+ if pro:
180
+ lines.append(f" pro: {pro}")
181
+ if enterprise:
182
+ lines.append(f" enterprise: {enterprise}")
183
+ return "\n".join(lines)
184
+
185
+
148
186
  def main() -> None:
149
187
  """Main entry point for DBLift CLI application.
150
188
 
@@ -211,22 +249,14 @@ def _parse_argv_and_load_config(argv: List[str]) -> _CliContext:
211
249
  if commands and commands[0] in terminal_commands:
212
250
  args = _build_terminal_args(commands[0], global_arguments, subcommand_args)
213
251
  if hasattr(args, "version") and args.version:
214
- from importlib.metadata import version as _version
215
-
216
- __version__ = _version("dblift")
217
-
218
- print(f"dblift version {__version__}") # lint: allow-print --version terminal action
252
+ print(_format_version()) # lint: allow-print --version terminal action
219
253
  sys.exit(0)
220
254
  sys.exit(terminal_commands[commands[0]](args))
221
255
 
222
256
  args, _unknown_args = _build_args_namespace(commands, global_arguments, subcommand_args)
223
257
 
224
258
  if hasattr(args, "version") and args.version:
225
- from importlib.metadata import version as _version
226
-
227
- __version__ = _version("dblift")
228
-
229
- print(f"dblift version {__version__}") # lint: allow-print --version terminal action
259
+ print(_format_version()) # lint: allow-print --version terminal action
230
260
  sys.exit(0)
231
261
 
232
262
  if not commands and (not hasattr(args, "command") or not args.command):
@@ -0,0 +1,12 @@
1
+ """Google AlloyDB for PostgreSQL database provider plugin (PostgreSQL-compatible)."""
2
+
3
+ __plugin_name__ = "alloydb"
4
+ __plugin_version__ = "1.0.0"
5
+ __plugin_description__ = "Google AlloyDB for PostgreSQL database provider"
6
+ __plugin_dialects__ = ["alloydb"]
7
+ __plugin_transport__ = "native"
8
+ __plugin_class__ = "AlloydbProvider"
9
+
10
+ from .provider import AlloydbProvider
11
+
12
+ __all__ = ["AlloydbProvider"]
@@ -0,0 +1,28 @@
1
+ """Entry-point declaration for the Google AlloyDB for PostgreSQL plugin.
2
+
3
+ Google AlloyDB for PostgreSQL is wire-compatible with PostgreSQL: this plugin reuses PostgreSQL's
4
+ config class (``config_dialect="postgresql"``), SQLAlchemy URL builder, and
5
+ ``psycopg`` driver, attaching only a distinct identity + quirks subclass. Users
6
+ keep their ``postgresql://`` connection string and select this engine via
7
+ ``type: alloydb``.
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ from db.plugins.alloydb.provider import AlloydbProvider
13
+ from db.plugins.alloydb.quirks import AlloydbQuirks
14
+ from db.plugins.postgresql.sqlalchemy_url import build_sqlalchemy_url
15
+ from db.provider_registry import PluginInfo
16
+
17
+ PLUGIN: PluginInfo = PluginInfo(
18
+ name="alloydb",
19
+ version="1.0.0",
20
+ description="Google AlloyDB for PostgreSQL database provider",
21
+ dialects=["alloydb"],
22
+ provider_class=AlloydbProvider,
23
+ transport="native",
24
+ quirks_class=AlloydbQuirks,
25
+ config_dialect="postgresql", # Google AlloyDB for PostgreSQL shares PostgreSQL's config class
26
+ sqlalchemy_url_builder=build_sqlalchemy_url,
27
+ native_driver_module="psycopg",
28
+ )
@@ -0,0 +1,14 @@
1
+ """Google AlloyDB for PostgreSQL native provider (PostgreSQL-compatible)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from db.plugins.postgresql.provider import PostgreSqlProvider
6
+
7
+
8
+ class AlloydbProvider(PostgreSqlProvider):
9
+ """Google AlloyDB for PostgreSQL — wire-compatible with PostgreSQL; reuses the PostgreSQL provider."""
10
+
11
+ canonical_dialect_key = "alloydb"
12
+
13
+
14
+ __all__ = ["AlloydbProvider"]
@@ -0,0 +1,32 @@
1
+ """Google AlloyDB for PostgreSQL :class:`DialectQuirks` — inherits PostgreSQL behavior."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from db.plugins.postgresql.quirks import PostgresqlQuirks
6
+
7
+
8
+ class AlloydbQuirks(PostgresqlQuirks):
9
+ """Google AlloyDB for PostgreSQL quirks, inheriting every PostgreSQL quirk.
10
+
11
+ Google AlloyDB for PostgreSQL speaks the PostgreSQL wire protocol, so statement splitting,
12
+ rendering, comparison, and introspection all reuse PostgreSQL's behavior.
13
+ Only the ANSI-reference flag is overridden: exactly one registered plugin
14
+ (PostgreSQL) may be the reference dialect, so PostgreSQL-derived plugins
15
+ must not re-claim it. Engine-specific deviations land here if and when the
16
+ codebase needs them.
17
+ """
18
+
19
+ # Exactly one plugin owns the ANSI reference dialect (PostgreSQL); a
20
+ # PG-derived plugin that inherited ``True`` would break
21
+ # ``ProviderRegistry.reference_dialect_name`` (which requires a single
22
+ # winner), so reset it here.
23
+ is_ansi_reference_dialect = False
24
+ # PostgreSQL is likewise the single owner of the sqlglot read-dialect
25
+ # fallback; a PG-derived plugin must not claim it either.
26
+ is_default_sqlglot_read_fallback = False
27
+
28
+ def __init__(self, dialect_name: str = "alloydb") -> None:
29
+ super().__init__(dialect_name=dialect_name)
30
+
31
+
32
+ __all__ = ["AlloydbQuirks"]
@@ -0,0 +1,12 @@
1
+ """Amazon Aurora PostgreSQL database provider plugin (PostgreSQL-compatible)."""
2
+
3
+ __plugin_name__ = "aurora-postgresql"
4
+ __plugin_version__ = "1.0.0"
5
+ __plugin_description__ = "Amazon Aurora PostgreSQL database provider"
6
+ __plugin_dialects__ = ["aurora-postgresql"]
7
+ __plugin_transport__ = "native"
8
+ __plugin_class__ = "AuroraPostgresqlProvider"
9
+
10
+ from .provider import AuroraPostgresqlProvider
11
+
12
+ __all__ = ["AuroraPostgresqlProvider"]
@@ -0,0 +1,28 @@
1
+ """Entry-point declaration for the Amazon Aurora PostgreSQL plugin.
2
+
3
+ Amazon Aurora PostgreSQL is wire-compatible with PostgreSQL: this plugin reuses PostgreSQL's
4
+ config class (``config_dialect="postgresql"``), SQLAlchemy URL builder, and
5
+ ``psycopg`` driver, attaching only a distinct identity + quirks subclass. Users
6
+ keep their ``postgresql://`` connection string and select this engine via
7
+ ``type: aurora-postgresql``.
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ from db.plugins.aurora_postgresql.provider import AuroraPostgresqlProvider
13
+ from db.plugins.aurora_postgresql.quirks import AuroraPostgresqlQuirks
14
+ from db.plugins.postgresql.sqlalchemy_url import build_sqlalchemy_url
15
+ from db.provider_registry import PluginInfo
16
+
17
+ PLUGIN: PluginInfo = PluginInfo(
18
+ name="aurora-postgresql",
19
+ version="1.0.0",
20
+ description="Amazon Aurora PostgreSQL database provider",
21
+ dialects=["aurora-postgresql"],
22
+ provider_class=AuroraPostgresqlProvider,
23
+ transport="native",
24
+ quirks_class=AuroraPostgresqlQuirks,
25
+ config_dialect="postgresql", # Amazon Aurora PostgreSQL shares PostgreSQL's config class
26
+ sqlalchemy_url_builder=build_sqlalchemy_url,
27
+ native_driver_module="psycopg",
28
+ )
@@ -0,0 +1,14 @@
1
+ """Amazon Aurora PostgreSQL native provider (PostgreSQL-compatible)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from db.plugins.postgresql.provider import PostgreSqlProvider
6
+
7
+
8
+ class AuroraPostgresqlProvider(PostgreSqlProvider):
9
+ """Amazon Aurora PostgreSQL — wire-compatible with PostgreSQL; reuses the PostgreSQL provider."""
10
+
11
+ canonical_dialect_key = "aurora-postgresql"
12
+
13
+
14
+ __all__ = ["AuroraPostgresqlProvider"]
@@ -0,0 +1,32 @@
1
+ """Amazon Aurora PostgreSQL :class:`DialectQuirks` — inherits PostgreSQL behavior."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from db.plugins.postgresql.quirks import PostgresqlQuirks
6
+
7
+
8
+ class AuroraPostgresqlQuirks(PostgresqlQuirks):
9
+ """Amazon Aurora PostgreSQL quirks, inheriting every PostgreSQL quirk.
10
+
11
+ Amazon Aurora PostgreSQL speaks the PostgreSQL wire protocol, so statement splitting,
12
+ rendering, comparison, and introspection all reuse PostgreSQL's behavior.
13
+ Only the ANSI-reference flag is overridden: exactly one registered plugin
14
+ (PostgreSQL) may be the reference dialect, so PostgreSQL-derived plugins
15
+ must not re-claim it. Engine-specific deviations land here if and when the
16
+ codebase needs them.
17
+ """
18
+
19
+ # Exactly one plugin owns the ANSI reference dialect (PostgreSQL); a
20
+ # PG-derived plugin that inherited ``True`` would break
21
+ # ``ProviderRegistry.reference_dialect_name`` (which requires a single
22
+ # winner), so reset it here.
23
+ is_ansi_reference_dialect = False
24
+ # PostgreSQL is likewise the single owner of the sqlglot read-dialect
25
+ # fallback; a PG-derived plugin must not claim it either.
26
+ is_default_sqlglot_read_fallback = False
27
+
28
+ def __init__(self, dialect_name: str = "aurora-postgresql") -> None:
29
+ super().__init__(dialect_name=dialect_name)
30
+
31
+
32
+ __all__ = ["AuroraPostgresqlQuirks"]
@@ -0,0 +1,12 @@
1
+ """Citus (distributed PostgreSQL) database provider plugin (PostgreSQL-compatible)."""
2
+
3
+ __plugin_name__ = "citus"
4
+ __plugin_version__ = "1.0.0"
5
+ __plugin_description__ = "Citus (distributed PostgreSQL) database provider"
6
+ __plugin_dialects__ = ["citus"]
7
+ __plugin_transport__ = "native"
8
+ __plugin_class__ = "CitusProvider"
9
+
10
+ from .provider import CitusProvider
11
+
12
+ __all__ = ["CitusProvider"]
@@ -0,0 +1,28 @@
1
+ """Entry-point declaration for the Citus (distributed PostgreSQL) plugin.
2
+
3
+ Citus (distributed PostgreSQL) is wire-compatible with PostgreSQL: this plugin reuses PostgreSQL's
4
+ config class (``config_dialect="postgresql"``), SQLAlchemy URL builder, and
5
+ ``psycopg`` driver, attaching only a distinct identity + quirks subclass. Users
6
+ keep their ``postgresql://`` connection string and select this engine via
7
+ ``type: citus``.
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ from db.plugins.citus.provider import CitusProvider
13
+ from db.plugins.citus.quirks import CitusQuirks
14
+ from db.plugins.postgresql.sqlalchemy_url import build_sqlalchemy_url
15
+ from db.provider_registry import PluginInfo
16
+
17
+ PLUGIN: PluginInfo = PluginInfo(
18
+ name="citus",
19
+ version="1.0.0",
20
+ description="Citus (distributed PostgreSQL) database provider",
21
+ dialects=["citus"],
22
+ provider_class=CitusProvider,
23
+ transport="native",
24
+ quirks_class=CitusQuirks,
25
+ config_dialect="postgresql", # Citus (distributed PostgreSQL) shares PostgreSQL's config class
26
+ sqlalchemy_url_builder=build_sqlalchemy_url,
27
+ native_driver_module="psycopg",
28
+ )
@@ -0,0 +1,14 @@
1
+ """Citus (distributed PostgreSQL) native provider (PostgreSQL-compatible)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from db.plugins.postgresql.provider import PostgreSqlProvider
6
+
7
+
8
+ class CitusProvider(PostgreSqlProvider):
9
+ """Citus (distributed PostgreSQL) — wire-compatible with PostgreSQL; reuses the PostgreSQL provider."""
10
+
11
+ canonical_dialect_key = "citus"
12
+
13
+
14
+ __all__ = ["CitusProvider"]
@@ -0,0 +1,32 @@
1
+ """Citus (distributed PostgreSQL) :class:`DialectQuirks` — inherits PostgreSQL behavior."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from db.plugins.postgresql.quirks import PostgresqlQuirks
6
+
7
+
8
+ class CitusQuirks(PostgresqlQuirks):
9
+ """Citus (distributed PostgreSQL) quirks, inheriting every PostgreSQL quirk.
10
+
11
+ Citus (distributed PostgreSQL) speaks the PostgreSQL wire protocol, so statement splitting,
12
+ rendering, comparison, and introspection all reuse PostgreSQL's behavior.
13
+ Only the ANSI-reference flag is overridden: exactly one registered plugin
14
+ (PostgreSQL) may be the reference dialect, so PostgreSQL-derived plugins
15
+ must not re-claim it. Engine-specific deviations land here if and when the
16
+ codebase needs them.
17
+ """
18
+
19
+ # Exactly one plugin owns the ANSI reference dialect (PostgreSQL); a
20
+ # PG-derived plugin that inherited ``True`` would break
21
+ # ``ProviderRegistry.reference_dialect_name`` (which requires a single
22
+ # winner), so reset it here.
23
+ is_ansi_reference_dialect = False
24
+ # PostgreSQL is likewise the single owner of the sqlglot read-dialect
25
+ # fallback; a PG-derived plugin must not claim it either.
26
+ is_default_sqlglot_read_fallback = False
27
+
28
+ def __init__(self, dialect_name: str = "citus") -> None:
29
+ super().__init__(dialect_name=dialect_name)
30
+
31
+
32
+ __all__ = ["CitusQuirks"]
@@ -0,0 +1,12 @@
1
+ """Neon (serverless PostgreSQL) database provider plugin (PostgreSQL-compatible)."""
2
+
3
+ __plugin_name__ = "neon"
4
+ __plugin_version__ = "1.0.0"
5
+ __plugin_description__ = "Neon (serverless PostgreSQL) database provider"
6
+ __plugin_dialects__ = ["neon"]
7
+ __plugin_transport__ = "native"
8
+ __plugin_class__ = "NeonProvider"
9
+
10
+ from .provider import NeonProvider
11
+
12
+ __all__ = ["NeonProvider"]
@@ -0,0 +1,28 @@
1
+ """Entry-point declaration for the Neon (serverless PostgreSQL) plugin.
2
+
3
+ Neon (serverless PostgreSQL) is wire-compatible with PostgreSQL: this plugin reuses PostgreSQL's
4
+ config class (``config_dialect="postgresql"``), SQLAlchemy URL builder, and
5
+ ``psycopg`` driver, attaching only a distinct identity + quirks subclass. Users
6
+ keep their ``postgresql://`` connection string and select this engine via
7
+ ``type: neon``.
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ from db.plugins.neon.provider import NeonProvider
13
+ from db.plugins.neon.quirks import NeonQuirks
14
+ from db.plugins.postgresql.sqlalchemy_url import build_sqlalchemy_url
15
+ from db.provider_registry import PluginInfo
16
+
17
+ PLUGIN: PluginInfo = PluginInfo(
18
+ name="neon",
19
+ version="1.0.0",
20
+ description="Neon (serverless PostgreSQL) database provider",
21
+ dialects=["neon"],
22
+ provider_class=NeonProvider,
23
+ transport="native",
24
+ quirks_class=NeonQuirks,
25
+ config_dialect="postgresql", # Neon (serverless PostgreSQL) shares PostgreSQL's config class
26
+ sqlalchemy_url_builder=build_sqlalchemy_url,
27
+ native_driver_module="psycopg",
28
+ )
@@ -0,0 +1,14 @@
1
+ """Neon (serverless PostgreSQL) native provider (PostgreSQL-compatible)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from db.plugins.postgresql.provider import PostgreSqlProvider
6
+
7
+
8
+ class NeonProvider(PostgreSqlProvider):
9
+ """Neon (serverless PostgreSQL) — wire-compatible with PostgreSQL; reuses the PostgreSQL provider."""
10
+
11
+ canonical_dialect_key = "neon"
12
+
13
+
14
+ __all__ = ["NeonProvider"]
@@ -0,0 +1,32 @@
1
+ """Neon (serverless PostgreSQL) :class:`DialectQuirks` — inherits PostgreSQL behavior."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from db.plugins.postgresql.quirks import PostgresqlQuirks
6
+
7
+
8
+ class NeonQuirks(PostgresqlQuirks):
9
+ """Neon (serverless PostgreSQL) quirks, inheriting every PostgreSQL quirk.
10
+
11
+ Neon (serverless PostgreSQL) speaks the PostgreSQL wire protocol, so statement splitting,
12
+ rendering, comparison, and introspection all reuse PostgreSQL's behavior.
13
+ Only the ANSI-reference flag is overridden: exactly one registered plugin
14
+ (PostgreSQL) may be the reference dialect, so PostgreSQL-derived plugins
15
+ must not re-claim it. Engine-specific deviations land here if and when the
16
+ codebase needs them.
17
+ """
18
+
19
+ # Exactly one plugin owns the ANSI reference dialect (PostgreSQL); a
20
+ # PG-derived plugin that inherited ``True`` would break
21
+ # ``ProviderRegistry.reference_dialect_name`` (which requires a single
22
+ # winner), so reset it here.
23
+ is_ansi_reference_dialect = False
24
+ # PostgreSQL is likewise the single owner of the sqlglot read-dialect
25
+ # fallback; a PG-derived plugin must not claim it either.
26
+ is_default_sqlglot_read_fallback = False
27
+
28
+ def __init__(self, dialect_name: str = "neon") -> None:
29
+ super().__init__(dialect_name=dialect_name)
30
+
31
+
32
+ __all__ = ["NeonQuirks"]
@@ -15,9 +15,28 @@ class PostgreSqlConfig(BaseDatabaseConfig):
15
15
  # PostgreSQL specific attributes
16
16
  ssl_mode: Optional[str] = None
17
17
 
18
+ # PostgreSQL-compatible distributions share this config class via
19
+ # ``PluginInfo.config_dialect="postgresql"``. Membership here preserves their
20
+ # own ``type`` identity (mirrors MySQL/MariaDB's ``_MYSQL_FAMILY``); anything
21
+ # else — including the ``postgres`` alias — normalises to ``postgresql``.
22
+ # lint: allow-dialect-string: config family membership
23
+ _POSTGRESQL_FAMILY = frozenset(
24
+ {
25
+ "postgresql",
26
+ "neon",
27
+ "supabase",
28
+ "aurora-postgresql",
29
+ "alloydb",
30
+ "yugabytedb",
31
+ "timescaledb",
32
+ "citus",
33
+ }
34
+ )
35
+
18
36
  def __post_init__(self) -> None:
19
37
  super().__post_init__()
20
- self.type = "postgresql" # lint: allow-dialect-string: config type identity
38
+ if self.type not in self._POSTGRESQL_FAMILY:
39
+ self.type = "postgresql" # lint: allow-dialect-string: config type identity
21
40
 
22
41
  def to_dict(self) -> Dict[str, Any]:
23
42
  """Convert to dictionary with PostgreSQL specific parameters."""
@@ -0,0 +1,12 @@
1
+ """Supabase (PostgreSQL) database provider plugin (PostgreSQL-compatible)."""
2
+
3
+ __plugin_name__ = "supabase"
4
+ __plugin_version__ = "1.0.0"
5
+ __plugin_description__ = "Supabase (PostgreSQL) database provider"
6
+ __plugin_dialects__ = ["supabase"]
7
+ __plugin_transport__ = "native"
8
+ __plugin_class__ = "SupabaseProvider"
9
+
10
+ from .provider import SupabaseProvider
11
+
12
+ __all__ = ["SupabaseProvider"]
@@ -0,0 +1,28 @@
1
+ """Entry-point declaration for the Supabase (PostgreSQL) plugin.
2
+
3
+ Supabase (PostgreSQL) is wire-compatible with PostgreSQL: this plugin reuses PostgreSQL's
4
+ config class (``config_dialect="postgresql"``), SQLAlchemy URL builder, and
5
+ ``psycopg`` driver, attaching only a distinct identity + quirks subclass. Users
6
+ keep their ``postgresql://`` connection string and select this engine via
7
+ ``type: supabase``.
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ from db.plugins.postgresql.sqlalchemy_url import build_sqlalchemy_url
13
+ from db.plugins.supabase.provider import SupabaseProvider
14
+ from db.plugins.supabase.quirks import SupabaseQuirks
15
+ from db.provider_registry import PluginInfo
16
+
17
+ PLUGIN: PluginInfo = PluginInfo(
18
+ name="supabase",
19
+ version="1.0.0",
20
+ description="Supabase (PostgreSQL) database provider",
21
+ dialects=["supabase"],
22
+ provider_class=SupabaseProvider,
23
+ transport="native",
24
+ quirks_class=SupabaseQuirks,
25
+ config_dialect="postgresql", # Supabase (PostgreSQL) shares PostgreSQL's config class
26
+ sqlalchemy_url_builder=build_sqlalchemy_url,
27
+ native_driver_module="psycopg",
28
+ )
@@ -0,0 +1,14 @@
1
+ """Supabase (PostgreSQL) native provider (PostgreSQL-compatible)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from db.plugins.postgresql.provider import PostgreSqlProvider
6
+
7
+
8
+ class SupabaseProvider(PostgreSqlProvider):
9
+ """Supabase (PostgreSQL) — wire-compatible with PostgreSQL; reuses the PostgreSQL provider."""
10
+
11
+ canonical_dialect_key = "supabase"
12
+
13
+
14
+ __all__ = ["SupabaseProvider"]
@@ -0,0 +1,32 @@
1
+ """Supabase (PostgreSQL) :class:`DialectQuirks` — inherits PostgreSQL behavior."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from db.plugins.postgresql.quirks import PostgresqlQuirks
6
+
7
+
8
+ class SupabaseQuirks(PostgresqlQuirks):
9
+ """Supabase (PostgreSQL) quirks, inheriting every PostgreSQL quirk.
10
+
11
+ Supabase (PostgreSQL) speaks the PostgreSQL wire protocol, so statement splitting,
12
+ rendering, comparison, and introspection all reuse PostgreSQL's behavior.
13
+ Only the ANSI-reference flag is overridden: exactly one registered plugin
14
+ (PostgreSQL) may be the reference dialect, so PostgreSQL-derived plugins
15
+ must not re-claim it. Engine-specific deviations land here if and when the
16
+ codebase needs them.
17
+ """
18
+
19
+ # Exactly one plugin owns the ANSI reference dialect (PostgreSQL); a
20
+ # PG-derived plugin that inherited ``True`` would break
21
+ # ``ProviderRegistry.reference_dialect_name`` (which requires a single
22
+ # winner), so reset it here.
23
+ is_ansi_reference_dialect = False
24
+ # PostgreSQL is likewise the single owner of the sqlglot read-dialect
25
+ # fallback; a PG-derived plugin must not claim it either.
26
+ is_default_sqlglot_read_fallback = False
27
+
28
+ def __init__(self, dialect_name: str = "supabase") -> None:
29
+ super().__init__(dialect_name=dialect_name)
30
+
31
+
32
+ __all__ = ["SupabaseQuirks"]
@@ -0,0 +1,12 @@
1
+ """TimescaleDB (PostgreSQL extension) database provider plugin (PostgreSQL-compatible)."""
2
+
3
+ __plugin_name__ = "timescaledb"
4
+ __plugin_version__ = "1.0.0"
5
+ __plugin_description__ = "TimescaleDB (PostgreSQL extension) database provider"
6
+ __plugin_dialects__ = ["timescaledb"]
7
+ __plugin_transport__ = "native"
8
+ __plugin_class__ = "TimescaledbProvider"
9
+
10
+ from .provider import TimescaledbProvider
11
+
12
+ __all__ = ["TimescaledbProvider"]
@@ -0,0 +1,28 @@
1
+ """Entry-point declaration for the TimescaleDB (PostgreSQL extension) plugin.
2
+
3
+ TimescaleDB (PostgreSQL extension) is wire-compatible with PostgreSQL: this plugin reuses PostgreSQL's
4
+ config class (``config_dialect="postgresql"``), SQLAlchemy URL builder, and
5
+ ``psycopg`` driver, attaching only a distinct identity + quirks subclass. Users
6
+ keep their ``postgresql://`` connection string and select this engine via
7
+ ``type: timescaledb``.
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ from db.plugins.postgresql.sqlalchemy_url import build_sqlalchemy_url
13
+ from db.plugins.timescaledb.provider import TimescaledbProvider
14
+ from db.plugins.timescaledb.quirks import TimescaledbQuirks
15
+ from db.provider_registry import PluginInfo
16
+
17
+ PLUGIN: PluginInfo = PluginInfo(
18
+ name="timescaledb",
19
+ version="1.0.0",
20
+ description="TimescaleDB (PostgreSQL extension) database provider",
21
+ dialects=["timescaledb"],
22
+ provider_class=TimescaledbProvider,
23
+ transport="native",
24
+ quirks_class=TimescaledbQuirks,
25
+ config_dialect="postgresql", # TimescaleDB (PostgreSQL extension) shares PostgreSQL's config class
26
+ sqlalchemy_url_builder=build_sqlalchemy_url,
27
+ native_driver_module="psycopg",
28
+ )
@@ -0,0 +1,14 @@
1
+ """TimescaleDB (PostgreSQL extension) native provider (PostgreSQL-compatible)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from db.plugins.postgresql.provider import PostgreSqlProvider
6
+
7
+
8
+ class TimescaledbProvider(PostgreSqlProvider):
9
+ """TimescaleDB (PostgreSQL extension) — wire-compatible with PostgreSQL; reuses the PostgreSQL provider."""
10
+
11
+ canonical_dialect_key = "timescaledb"
12
+
13
+
14
+ __all__ = ["TimescaledbProvider"]