dblift 2.5.0__tar.gz → 2.5.2__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 (480) hide show
  1. {dblift-2.5.0 → dblift-2.5.2}/PKG-INFO +3 -2
  2. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/redshift/plugin.py +5 -7
  3. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/redshift/provider.py +90 -0
  4. dblift-2.5.2/db/plugins/redshift/quirks.py +33 -0
  5. dblift-2.5.2/db/plugins/redshift/sqlalchemy_url.py +50 -0
  6. {dblift-2.5.0 → dblift-2.5.2}/dblift.egg-info/PKG-INFO +3 -2
  7. {dblift-2.5.0 → dblift-2.5.2}/dblift.egg-info/SOURCES.txt +1 -0
  8. {dblift-2.5.0 → dblift-2.5.2}/dblift.egg-info/requires.txt +2 -1
  9. {dblift-2.5.0 → dblift-2.5.2}/pyproject.toml +3 -2
  10. dblift-2.5.0/db/plugins/redshift/quirks.py +0 -18
  11. {dblift-2.5.0 → dblift-2.5.2}/LICENSE +0 -0
  12. {dblift-2.5.0 → dblift-2.5.2}/README.md +0 -0
  13. {dblift-2.5.0 → dblift-2.5.2}/api/__init__.py +0 -0
  14. {dblift-2.5.0 → dblift-2.5.2}/api/_cli_support.py +0 -0
  15. {dblift-2.5.0 → dblift-2.5.2}/api/_client_factory.py +0 -0
  16. {dblift-2.5.0 → dblift-2.5.2}/api/_client_operations.py +0 -0
  17. {dblift-2.5.0 → dblift-2.5.2}/api/_engine_config.py +0 -0
  18. {dblift-2.5.0 → dblift-2.5.2}/api/async_client.py +0 -0
  19. {dblift-2.5.0 → dblift-2.5.2}/api/client.py +0 -0
  20. {dblift-2.5.0 → dblift-2.5.2}/api/events.py +0 -0
  21. {dblift-2.5.0 → dblift-2.5.2}/api/migrations.py +0 -0
  22. {dblift-2.5.0 → dblift-2.5.2}/api/py.typed +0 -0
  23. {dblift-2.5.0 → dblift-2.5.2}/cli/__init__.py +0 -0
  24. {dblift-2.5.0 → dblift-2.5.2}/cli/_command_handlers.py +0 -0
  25. {dblift-2.5.0 → dblift-2.5.2}/cli/_config_helpers.py +0 -0
  26. {dblift-2.5.0 → dblift-2.5.2}/cli/_constants.py +0 -0
  27. {dblift-2.5.0 → dblift-2.5.2}/cli/_output.py +0 -0
  28. {dblift-2.5.0 → dblift-2.5.2}/cli/_parser_setup.py +0 -0
  29. {dblift-2.5.0 → dblift-2.5.2}/cli/commands/__init__.py +0 -0
  30. {dblift-2.5.0 → dblift-2.5.2}/cli/commands/config_command.py +0 -0
  31. {dblift-2.5.0 → dblift-2.5.2}/cli/db_utils.py +0 -0
  32. {dblift-2.5.0 → dblift-2.5.2}/cli/extensions.py +0 -0
  33. {dblift-2.5.0 → dblift-2.5.2}/cli/handlers/__init__.py +0 -0
  34. {dblift-2.5.0 → dblift-2.5.2}/cli/handlers/_shared.py +0 -0
  35. {dblift-2.5.0 → dblift-2.5.2}/cli/handlers/baseline.py +0 -0
  36. {dblift-2.5.0 → dblift-2.5.2}/cli/handlers/clean.py +0 -0
  37. {dblift-2.5.0 → dblift-2.5.2}/cli/handlers/import_flyway.py +0 -0
  38. {dblift-2.5.0 → dblift-2.5.2}/cli/handlers/info.py +0 -0
  39. {dblift-2.5.0 → dblift-2.5.2}/cli/handlers/migrate.py +0 -0
  40. {dblift-2.5.0 → dblift-2.5.2}/cli/handlers/repair.py +0 -0
  41. {dblift-2.5.0 → dblift-2.5.2}/cli/handlers/undo.py +0 -0
  42. {dblift-2.5.0 → dblift-2.5.2}/cli/handlers/validate.py +0 -0
  43. {dblift-2.5.0 → dblift-2.5.2}/cli/main.py +0 -0
  44. {dblift-2.5.0 → dblift-2.5.2}/config/__init__.py +0 -0
  45. {dblift-2.5.0 → dblift-2.5.2}/config/_credential_masking.py +0 -0
  46. {dblift-2.5.0 → dblift-2.5.2}/config/_subclasses/__init__.py +0 -0
  47. {dblift-2.5.0 → dblift-2.5.2}/config/_subclasses/dummy_config.py +0 -0
  48. {dblift-2.5.0 → dblift-2.5.2}/config/_url_builder_mixin.py +0 -0
  49. {dblift-2.5.0 → dblift-2.5.2}/config/config_builder.py +0 -0
  50. {dblift-2.5.0 → dblift-2.5.2}/config/database_config.py +0 -0
  51. {dblift-2.5.0 → dblift-2.5.2}/config/dblift_config.py +0 -0
  52. {dblift-2.5.0 → dblift-2.5.2}/config/errors.py +0 -0
  53. {dblift-2.5.0 → dblift-2.5.2}/config/property_registry.py +0 -0
  54. {dblift-2.5.0 → dblift-2.5.2}/config/secrets/__init__.py +0 -0
  55. {dblift-2.5.0 → dblift-2.5.2}/config/secrets/_cache.py +0 -0
  56. {dblift-2.5.0 → dblift-2.5.2}/config/secrets/_provider_base.py +0 -0
  57. {dblift-2.5.0 → dblift-2.5.2}/config/secrets/_registry.py +0 -0
  58. {dblift-2.5.0 → dblift-2.5.2}/config/secrets/_resolver.py +0 -0
  59. {dblift-2.5.0 → dblift-2.5.2}/config/secrets/_secrets_config.py +0 -0
  60. {dblift-2.5.0 → dblift-2.5.2}/core/__init__.py +0 -0
  61. {dblift-2.5.0 → dblift-2.5.2}/core/constants.py +0 -0
  62. {dblift-2.5.0 → dblift-2.5.2}/core/dialect_boundary.py +0 -0
  63. {dblift-2.5.0 → dblift-2.5.2}/core/exceptions.py +0 -0
  64. {dblift-2.5.0 → dblift-2.5.2}/core/introspection/__init__.py +0 -0
  65. {dblift-2.5.0 → dblift-2.5.2}/core/introspection/_column_enricher.py +0 -0
  66. {dblift-2.5.0 → dblift-2.5.2}/core/introspection/_partition_enricher.py +0 -0
  67. {dblift-2.5.0 → dblift-2.5.2}/core/introspection/_schema_orchestrator.py +0 -0
  68. {dblift-2.5.0 → dblift-2.5.2}/core/introspection/_utils.py +0 -0
  69. {dblift-2.5.0 → dblift-2.5.2}/core/introspection/_vendor_property_applier.py +0 -0
  70. {dblift-2.5.0 → dblift-2.5.2}/core/introspection/base_introspector.py +0 -0
  71. {dblift-2.5.0 → dblift-2.5.2}/core/introspection/extractors/__init__.py +0 -0
  72. {dblift-2.5.0 → dblift-2.5.2}/core/introspection/extractors/base_extractor.py +0 -0
  73. {dblift-2.5.0 → dblift-2.5.2}/core/introspection/extractors/column_extractor.py +0 -0
  74. {dblift-2.5.0 → dblift-2.5.2}/core/introspection/extractors/constraint_extractor.py +0 -0
  75. {dblift-2.5.0 → dblift-2.5.2}/core/introspection/extractors/index_extractor.py +0 -0
  76. {dblift-2.5.0 → dblift-2.5.2}/core/introspection/extractors/misc_extractor.py +0 -0
  77. {dblift-2.5.0 → dblift-2.5.2}/core/introspection/extractors/procedure_extractor.py +0 -0
  78. {dblift-2.5.0 → dblift-2.5.2}/core/introspection/extractors/sequence_extractor.py +0 -0
  79. {dblift-2.5.0 → dblift-2.5.2}/core/introspection/extractors/table_extractor.py +0 -0
  80. {dblift-2.5.0 → dblift-2.5.2}/core/introspection/extractors/trigger_extractor.py +0 -0
  81. {dblift-2.5.0 → dblift-2.5.2}/core/introspection/extractors/view_extractor.py +0 -0
  82. {dblift-2.5.0 → dblift-2.5.2}/core/introspection/introspector_factory.py +0 -0
  83. {dblift-2.5.0 → dblift-2.5.2}/core/introspection/result.py +0 -0
  84. {dblift-2.5.0 → dblift-2.5.2}/core/introspection/schema_introspector.py +0 -0
  85. {dblift-2.5.0 → dblift-2.5.2}/core/introspection/vendor_queries_base.py +0 -0
  86. {dblift-2.5.0 → dblift-2.5.2}/core/introspection/vendor_queries_factory.py +0 -0
  87. {dblift-2.5.0 → dblift-2.5.2}/core/introspection/vendor_queries_protocols.py +0 -0
  88. {dblift-2.5.0 → dblift-2.5.2}/core/introspection/version_detector.py +0 -0
  89. {dblift-2.5.0 → dblift-2.5.2}/core/logger/__init__.py +0 -0
  90. {dblift-2.5.0 → dblift-2.5.2}/core/logger/_base.py +0 -0
  91. {dblift-2.5.0 → dblift-2.5.2}/core/logger/_factory.py +0 -0
  92. {dblift-2.5.0 → dblift-2.5.2}/core/logger/_formatters.py +0 -0
  93. {dblift-2.5.0 → dblift-2.5.2}/core/logger/_levels.py +0 -0
  94. {dblift-2.5.0 → dblift-2.5.2}/core/logger/_multi.py +0 -0
  95. {dblift-2.5.0 → dblift-2.5.2}/core/logger/_null.py +0 -0
  96. {dblift-2.5.0 → dblift-2.5.2}/core/logger/console.py +0 -0
  97. {dblift-2.5.0 → dblift-2.5.2}/core/logger/formatters/__init__.py +0 -0
  98. {dblift-2.5.0 → dblift-2.5.2}/core/logger/formatters/_formatter_impl.py +0 -0
  99. {dblift-2.5.0 → dblift-2.5.2}/core/logger/formatters/factory.py +0 -0
  100. {dblift-2.5.0 → dblift-2.5.2}/core/logger/formatters/formatter.py +0 -0
  101. {dblift-2.5.0 → dblift-2.5.2}/core/logger/formatters/htmlformatter.py +0 -0
  102. {dblift-2.5.0 → dblift-2.5.2}/core/logger/formatters/jsonformatter.py +0 -0
  103. {dblift-2.5.0 → dblift-2.5.2}/core/logger/log.py +0 -0
  104. {dblift-2.5.0 → dblift-2.5.2}/core/logger/results.py +0 -0
  105. {dblift-2.5.0 → dblift-2.5.2}/core/logger/templates/oldreport.html +0 -0
  106. {dblift-2.5.0 → dblift-2.5.2}/core/logger/templates/report.html +0 -0
  107. {dblift-2.5.0 → dblift-2.5.2}/core/migration/__init__.py +0 -0
  108. {dblift-2.5.0 → dblift-2.5.2}/core/migration/_type_match.py +0 -0
  109. {dblift-2.5.0 → dblift-2.5.2}/core/migration/clean_summary.py +0 -0
  110. {dblift-2.5.0 → dblift-2.5.2}/core/migration/commands/__init__.py +0 -0
  111. {dblift-2.5.0 → dblift-2.5.2}/core/migration/commands/_script_events.py +0 -0
  112. {dblift-2.5.0 → dblift-2.5.2}/core/migration/commands/base_command.py +0 -0
  113. {dblift-2.5.0 → dblift-2.5.2}/core/migration/commands/baseline_command.py +0 -0
  114. {dblift-2.5.0 → dblift-2.5.2}/core/migration/commands/clean_command.py +0 -0
  115. {dblift-2.5.0 → dblift-2.5.2}/core/migration/commands/import_flyway_command.py +0 -0
  116. {dblift-2.5.0 → dblift-2.5.2}/core/migration/commands/info_command.py +0 -0
  117. {dblift-2.5.0 → dblift-2.5.2}/core/migration/commands/migrate_command.py +0 -0
  118. {dblift-2.5.0 → dblift-2.5.2}/core/migration/commands/repair_command.py +0 -0
  119. {dblift-2.5.0 → dblift-2.5.2}/core/migration/commands/undo_command.py +0 -0
  120. {dblift-2.5.0 → dblift-2.5.2}/core/migration/commands/validate_command.py +0 -0
  121. {dblift-2.5.0 → dblift-2.5.2}/core/migration/encoding.py +0 -0
  122. {dblift-2.5.0 → dblift-2.5.2}/core/migration/executor/__init__.py +0 -0
  123. {dblift-2.5.0 → dblift-2.5.2}/core/migration/executor/execution_engine.py +0 -0
  124. {dblift-2.5.0 → dblift-2.5.2}/core/migration/executor/migration_executor.py +0 -0
  125. {dblift-2.5.0 → dblift-2.5.2}/core/migration/executor/migration_helpers.py +0 -0
  126. {dblift-2.5.0 → dblift-2.5.2}/core/migration/executor/placeholder_manager.py +0 -0
  127. {dblift-2.5.0 → dblift-2.5.2}/core/migration/executor/transaction_policy.py +0 -0
  128. {dblift-2.5.0 → dblift-2.5.2}/core/migration/executors/__init__.py +0 -0
  129. {dblift-2.5.0 → dblift-2.5.2}/core/migration/executors/base_executor.py +0 -0
  130. {dblift-2.5.0 → dblift-2.5.2}/core/migration/executors/executor_factory.py +0 -0
  131. {dblift-2.5.0 → dblift-2.5.2}/core/migration/executors/python_executor.py +0 -0
  132. {dblift-2.5.0 → dblift-2.5.2}/core/migration/executors/sql_executor.py +0 -0
  133. {dblift-2.5.0 → dblift-2.5.2}/core/migration/formats/__init__.py +0 -0
  134. {dblift-2.5.0 → dblift-2.5.2}/core/migration/formats/format_detector.py +0 -0
  135. {dblift-2.5.0 → dblift-2.5.2}/core/migration/formats/migration_format.py +0 -0
  136. {dblift-2.5.0 → dblift-2.5.2}/core/migration/history/__init__.py +0 -0
  137. {dblift-2.5.0 → dblift-2.5.2}/core/migration/history/migration_history_manager.py +0 -0
  138. {dblift-2.5.0 → dblift-2.5.2}/core/migration/journals/__init__.py +0 -0
  139. {dblift-2.5.0 → dblift-2.5.2}/core/migration/journals/migration_journal.py +0 -0
  140. {dblift-2.5.0 → dblift-2.5.2}/core/migration/migration.py +0 -0
  141. {dblift-2.5.0 → dblift-2.5.2}/core/migration/placeholders/__init__.py +0 -0
  142. {dblift-2.5.0 → dblift-2.5.2}/core/migration/placeholders/placeholder_service.py +0 -0
  143. {dblift-2.5.0 → dblift-2.5.2}/core/migration/rules/__init__.py +0 -0
  144. {dblift-2.5.0 → dblift-2.5.2}/core/migration/rules/migration_rules.py +0 -0
  145. {dblift-2.5.0 → dblift-2.5.2}/core/migration/scripting/__init__.py +0 -0
  146. {dblift-2.5.0 → dblift-2.5.2}/core/migration/scripting/migration_script_manager.py +0 -0
  147. {dblift-2.5.0 → dblift-2.5.2}/core/migration/scripting/undo_script_generator/__init__.py +0 -0
  148. {dblift-2.5.0 → dblift-2.5.2}/core/migration/scripting/undo_script_generator/_ddl_reversers.py +0 -0
  149. {dblift-2.5.0 → dblift-2.5.2}/core/migration/scripting/undo_script_generator/_dml_reversers.py +0 -0
  150. {dblift-2.5.0 → dblift-2.5.2}/core/migration/scripting/undo_script_generator/_extractors.py +0 -0
  151. {dblift-2.5.0 → dblift-2.5.2}/core/migration/scripting/undo_script_generator/_generator.py +0 -0
  152. {dblift-2.5.0 → dblift-2.5.2}/core/migration/scripting/undo_script_generator/_helpers.py +0 -0
  153. {dblift-2.5.0 → dblift-2.5.2}/core/migration/scripting/undo_script_generator/_models.py +0 -0
  154. {dblift-2.5.0 → dblift-2.5.2}/core/migration/scripting/undo_script_generator/_reversers.py +0 -0
  155. {dblift-2.5.0 → dblift-2.5.2}/core/migration/sql/__init__.py +0 -0
  156. {dblift-2.5.0 → dblift-2.5.2}/core/migration/sql/execution_statement.py +0 -0
  157. {dblift-2.5.0 → dblift-2.5.2}/core/migration/sql/sql_analyzer.py +0 -0
  158. {dblift-2.5.0 → dblift-2.5.2}/core/migration/sql/sql_execution_service.py +0 -0
  159. {dblift-2.5.0 → dblift-2.5.2}/core/migration/sql/statement_splitter.py +0 -0
  160. {dblift-2.5.0 → dblift-2.5.2}/core/migration/state/__init__.py +0 -0
  161. {dblift-2.5.0 → dblift-2.5.2}/core/migration/state/migration_data_service.py +0 -0
  162. {dblift-2.5.0 → dblift-2.5.2}/core/migration/state/migration_display_state.py +0 -0
  163. {dblift-2.5.0 → dblift-2.5.2}/core/migration/state/migration_formatter.py +0 -0
  164. {dblift-2.5.0 → dblift-2.5.2}/core/migration/state/migration_state.py +0 -0
  165. {dblift-2.5.0 → dblift-2.5.2}/core/migration/state/migration_state_manager.py +0 -0
  166. {dblift-2.5.0 → dblift-2.5.2}/core/migration/state/migration_state_service.py +0 -0
  167. {dblift-2.5.0 → dblift-2.5.2}/core/migration/ui/__init__.py +0 -0
  168. {dblift-2.5.0 → dblift-2.5.2}/core/migration/ui/data_collector.py +0 -0
  169. {dblift-2.5.0 → dblift-2.5.2}/core/migration/ui/display_formatters.py +0 -0
  170. {dblift-2.5.0 → dblift-2.5.2}/core/migration/ui/migration_analyzer.py +0 -0
  171. {dblift-2.5.0 → dblift-2.5.2}/core/migration/ui/migration_ui.py +0 -0
  172. {dblift-2.5.0 → dblift-2.5.2}/core/migration/ui/table_renderer.py +0 -0
  173. {dblift-2.5.0 → dblift-2.5.2}/core/migration/version_utils.py +0 -0
  174. {dblift-2.5.0 → dblift-2.5.2}/core/normalization/__init__.py +0 -0
  175. {dblift-2.5.0 → dblift-2.5.2}/core/normalization/dependency_resolver.py +0 -0
  176. {dblift-2.5.0 → dblift-2.5.2}/core/normalization/identifier_normalizer.py +0 -0
  177. {dblift-2.5.0 → dblift-2.5.2}/core/normalization/object_orderer.py +0 -0
  178. {dblift-2.5.0 → dblift-2.5.2}/core/normalization/type_constants.py +0 -0
  179. {dblift-2.5.0 → dblift-2.5.2}/core/normalization/type_mapper.py +0 -0
  180. {dblift-2.5.0 → dblift-2.5.2}/core/normalization/type_mappings.py +0 -0
  181. {dblift-2.5.0 → dblift-2.5.2}/core/normalization/type_normalizer.py +0 -0
  182. {dblift-2.5.0 → dblift-2.5.2}/core/seams/__init__.py +0 -0
  183. {dblift-2.5.0 → dblift-2.5.2}/core/seams/capabilities.py +0 -0
  184. {dblift-2.5.0 → dblift-2.5.2}/core/seams/event_listeners.py +0 -0
  185. {dblift-2.5.0 → dblift-2.5.2}/core/seams/feature_loading.py +0 -0
  186. {dblift-2.5.0 → dblift-2.5.2}/core/seams/introspection.py +0 -0
  187. {dblift-2.5.0 → dblift-2.5.2}/core/seams/license_info.py +0 -0
  188. {dblift-2.5.0 → dblift-2.5.2}/core/seams/runtime_checks.py +0 -0
  189. {dblift-2.5.0 → dblift-2.5.2}/core/seams/sql_generators.py +0 -0
  190. {dblift-2.5.0 → dblift-2.5.2}/core/seams/tier_resolver.py +0 -0
  191. {dblift-2.5.0 → dblift-2.5.2}/core/sql_generator/__init__.py +0 -0
  192. {dblift-2.5.0 → dblift-2.5.2}/core/sql_generator/alter/__init__.py +0 -0
  193. {dblift-2.5.0 → dblift-2.5.2}/core/sql_generator/alter/alter_generator_factory.py +0 -0
  194. {dblift-2.5.0 → dblift-2.5.2}/core/sql_generator/alter/base_alter_generator.py +0 -0
  195. {dblift-2.5.0 → dblift-2.5.2}/core/sql_generator/alter_generator.py +0 -0
  196. {dblift-2.5.0 → dblift-2.5.2}/core/sql_generator/base_generator.py +0 -0
  197. {dblift-2.5.0 → dblift-2.5.2}/core/sql_generator/basic_table_ddl_generator.py +0 -0
  198. {dblift-2.5.0 → dblift-2.5.2}/core/sql_generator/dependency_analyzer.py +0 -0
  199. {dblift-2.5.0 → dblift-2.5.2}/core/sql_generator/diff_converters/__init__.py +0 -0
  200. {dblift-2.5.0 → dblift-2.5.2}/core/sql_generator/diff_converters/base_converter.py +0 -0
  201. {dblift-2.5.0 → dblift-2.5.2}/core/sql_generator/formatter.py +0 -0
  202. {dblift-2.5.0 → dblift-2.5.2}/core/sql_generator/generator_factory.py +0 -0
  203. {dblift-2.5.0 → dblift-2.5.2}/core/sql_generator/options.py +0 -0
  204. {dblift-2.5.0 → dblift-2.5.2}/core/sql_generator/script_organizer.py +0 -0
  205. {dblift-2.5.0 → dblift-2.5.2}/core/sql_generator/sql_generator.py +0 -0
  206. {dblift-2.5.0 → dblift-2.5.2}/core/sql_generator/sql_statement.py +0 -0
  207. {dblift-2.5.0 → dblift-2.5.2}/core/sql_generator/table_ddl_render.py +0 -0
  208. {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/__init__.py +0 -0
  209. {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/_base_parse_result.py +0 -0
  210. {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/_base_sql_column.py +0 -0
  211. {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/_base_sql_constraint.py +0 -0
  212. {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/_base_sql_object.py +0 -0
  213. {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/_base_sql_statement.py +0 -0
  214. {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/base.py +0 -0
  215. {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/constraint_validator.py +0 -0
  216. {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/database_link.py +0 -0
  217. {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/dialect.py +0 -0
  218. {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/event.py +0 -0
  219. {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/extension.py +0 -0
  220. {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/foreign_data_wrapper.py +0 -0
  221. {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/foreign_server.py +0 -0
  222. {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/index.py +0 -0
  223. {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/linked_server.py +0 -0
  224. {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/module.py +0 -0
  225. {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/package.py +0 -0
  226. {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/partition.py +0 -0
  227. {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/procedure.py +0 -0
  228. {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/sequence.py +0 -0
  229. {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/synonym.py +0 -0
  230. {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/table.py +0 -0
  231. {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/table_canonicalizer.py +0 -0
  232. {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/table_options.py +0 -0
  233. {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/trigger.py +0 -0
  234. {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/user_defined_type.py +0 -0
  235. {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/view.py +0 -0
  236. {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/view_options.py +0 -0
  237. {dblift-2.5.0 → dblift-2.5.2}/core/sql_parser/__init__.py +0 -0
  238. {dblift-2.5.0 → dblift-2.5.2}/core/sql_parser/_partition_handler.py +0 -0
  239. {dblift-2.5.0 → dblift-2.5.2}/core/sql_parser/_sqlglot_builders.py +0 -0
  240. {dblift-2.5.0 → dblift-2.5.2}/core/sql_parser/base_statement_parser.py +0 -0
  241. {dblift-2.5.0 → dblift-2.5.2}/core/sql_parser/base_tokenizer.py +0 -0
  242. {dblift-2.5.0 → dblift-2.5.2}/core/sql_parser/common/__init__.py +0 -0
  243. {dblift-2.5.0 → dblift-2.5.2}/core/sql_parser/common/base_parser.py +0 -0
  244. {dblift-2.5.0 → dblift-2.5.2}/core/sql_parser/dialects/__init__.py +0 -0
  245. {dblift-2.5.0 → dblift-2.5.2}/core/sql_parser/dialects/base_config.py +0 -0
  246. {dblift-2.5.0 → dblift-2.5.2}/core/sql_parser/enhanced_regex_parser.py +0 -0
  247. {dblift-2.5.0 → dblift-2.5.2}/core/sql_parser/hybrid_parser.py +0 -0
  248. {dblift-2.5.0 → dblift-2.5.2}/core/sql_parser/parser_context.py +0 -0
  249. {dblift-2.5.0 → dblift-2.5.2}/core/sql_parser/parser_factory.py +0 -0
  250. {dblift-2.5.0 → dblift-2.5.2}/core/sql_parser/parser_interface.py +0 -0
  251. {dblift-2.5.0 → dblift-2.5.2}/core/sql_parser/sqlglot_parser.py +0 -0
  252. {dblift-2.5.0 → dblift-2.5.2}/core/sql_parser/tokens.py +0 -0
  253. {dblift-2.5.0 → dblift-2.5.2}/core/sql_parser/unified_regex_parser.py +0 -0
  254. {dblift-2.5.0 → dblift-2.5.2}/core/sql_validator/__init__.py +0 -0
  255. {dblift-2.5.0 → dblift-2.5.2}/core/sql_validator/_checksum_validator.py +0 -0
  256. {dblift-2.5.0 → dblift-2.5.2}/core/sql_validator/_flyway_compatibility.py +0 -0
  257. {dblift-2.5.0 → dblift-2.5.2}/core/sql_validator/_migration_filter.py +0 -0
  258. {dblift-2.5.0 → dblift-2.5.2}/core/sql_validator/_sql_syntax_validator.py +0 -0
  259. {dblift-2.5.0 → dblift-2.5.2}/core/sql_validator/_strict_mode_validator.py +0 -0
  260. {dblift-2.5.0 → dblift-2.5.2}/core/sql_validator/migration_validator.py +0 -0
  261. {dblift-2.5.0 → dblift-2.5.2}/core/state/sql_script_formatter.py +0 -0
  262. {dblift-2.5.0 → dblift-2.5.2}/core/state/sql_statement.py +0 -0
  263. {dblift-2.5.0 → dblift-2.5.2}/core/utils/__init__.py +0 -0
  264. {dblift-2.5.0 → dblift-2.5.2}/core/utils/database_url_parser.py +0 -0
  265. {dblift-2.5.0 → dblift-2.5.2}/core/utils/metadata_helpers.py +0 -0
  266. {dblift-2.5.0 → dblift-2.5.2}/core/utils/row_access.py +0 -0
  267. {dblift-2.5.0 → dblift-2.5.2}/core/utils/string_utils.py +0 -0
  268. {dblift-2.5.0 → dblift-2.5.2}/core/utils/url_masking.py +0 -0
  269. {dblift-2.5.0 → dblift-2.5.2}/db/__init__.py +0 -0
  270. {dblift-2.5.0 → dblift-2.5.2}/db/base_provider.py +0 -0
  271. {dblift-2.5.0 → dblift-2.5.2}/db/base_quirks.py +0 -0
  272. {dblift-2.5.0 → dblift-2.5.2}/db/constants.py +0 -0
  273. {dblift-2.5.0 → dblift-2.5.2}/db/dml_analysis.py +0 -0
  274. {dblift-2.5.0 → dblift-2.5.2}/db/error.py +0 -0
  275. {dblift-2.5.0 → dblift-2.5.2}/db/error_handler.py +0 -0
  276. {dblift-2.5.0 → dblift-2.5.2}/db/exceptions.py +0 -0
  277. {dblift-2.5.0 → dblift-2.5.2}/db/native_connection_manager.py +0 -0
  278. {dblift-2.5.0 → dblift-2.5.2}/db/object_naming.py +0 -0
  279. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/__init__.py +0 -0
  280. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/alloydb/__init__.py +0 -0
  281. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/alloydb/plugin.py +0 -0
  282. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/alloydb/provider.py +0 -0
  283. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/alloydb/quirks.py +0 -0
  284. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/aurora_postgresql/__init__.py +0 -0
  285. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/aurora_postgresql/plugin.py +0 -0
  286. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/aurora_postgresql/provider.py +0 -0
  287. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/aurora_postgresql/quirks.py +0 -0
  288. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/base_history_manager.py +0 -0
  289. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/base_locking_manager.py +0 -0
  290. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/base_query_executor.py +0 -0
  291. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/base_schema_operations.py +0 -0
  292. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/base_snapshot_manager.py +0 -0
  293. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/base_undo_manager.py +0 -0
  294. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/citus/__init__.py +0 -0
  295. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/citus/plugin.py +0 -0
  296. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/citus/provider.py +0 -0
  297. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/citus/quirks.py +0 -0
  298. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cockroachdb/__init__.py +0 -0
  299. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cockroachdb/plugin.py +0 -0
  300. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cockroachdb/provider.py +0 -0
  301. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cockroachdb/quirks.py +0 -0
  302. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/__init__.py +0 -0
  303. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/config.py +0 -0
  304. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/cosmosdb/__init__.py +0 -0
  305. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/cosmosdb/_sdk.py +0 -0
  306. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/cosmosdb/connection_manager.py +0 -0
  307. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/cosmosdb/history_manager.py +0 -0
  308. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/cosmosdb/locking_manager.py +0 -0
  309. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/cosmosdb/query_executor.py +0 -0
  310. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/cosmosdb/schema_operations.py +0 -0
  311. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/introspection/__init__.py +0 -0
  312. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/parser/__init__.py +0 -0
  313. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/parser/cosmosdb_regex_parser.py +0 -0
  314. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/plugin.py +0 -0
  315. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/provider.py +0 -0
  316. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/quirks.py +0 -0
  317. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/sdk_translator/__init__.py +0 -0
  318. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/sdk_translator/_executor.py +0 -0
  319. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/sdk_translator/_executors.py +0 -0
  320. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/sdk_translator/_parsing.py +0 -0
  321. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/sdk_translator/_script_generation.py +0 -0
  322. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/sdk_translator/_translator.py +0 -0
  323. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/sdk_translator/_translators.py +0 -0
  324. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/db2/__init__.py +0 -0
  325. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/db2/config.py +0 -0
  326. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/db2/db2/__init__.py +0 -0
  327. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/db2/db2/history_manager.py +0 -0
  328. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/db2/db2/locking_manager.py +0 -0
  329. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/db2/db2/schema_operations.py +0 -0
  330. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/db2/introspection/__init__.py +0 -0
  331. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/db2/parser/__init__.py +0 -0
  332. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/db2/parser/db2_regex_parser.py +0 -0
  333. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/db2/parser/parser_config.py +0 -0
  334. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/db2/plugin.py +0 -0
  335. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/db2/provider.py +0 -0
  336. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/db2/quirks.py +0 -0
  337. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/db2/sqlalchemy_url.py +0 -0
  338. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/duckdb/__init__.py +0 -0
  339. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/duckdb/config.py +0 -0
  340. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/duckdb/parser/__init__.py +0 -0
  341. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/duckdb/parser/duckdb_regex_parser.py +0 -0
  342. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/duckdb/parser/parser_config.py +0 -0
  343. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/duckdb/plugin.py +0 -0
  344. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/duckdb/provider.py +0 -0
  345. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/duckdb/quirks.py +0 -0
  346. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/duckdb/sqlalchemy_url.py +0 -0
  347. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mariadb/__init__.py +0 -0
  348. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mariadb/plugin.py +0 -0
  349. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mariadb/provider.py +0 -0
  350. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mariadb/quirks.py +0 -0
  351. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mysql/__init__.py +0 -0
  352. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mysql/config.py +0 -0
  353. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mysql/introspection/__init__.py +0 -0
  354. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mysql/mysql/__init__.py +0 -0
  355. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mysql/mysql/history_manager.py +0 -0
  356. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mysql/mysql/locking_manager.py +0 -0
  357. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mysql/mysql/schema_operations.py +0 -0
  358. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mysql/parser/__init__.py +0 -0
  359. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mysql/parser/mysql_regex_parser.py +0 -0
  360. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mysql/parser/mysql_statement_parser.py +0 -0
  361. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mysql/parser/mysql_tokenizer.py +0 -0
  362. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mysql/parser/parser_config.py +0 -0
  363. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mysql/plugin.py +0 -0
  364. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mysql/provider.py +0 -0
  365. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mysql/quirks.py +0 -0
  366. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mysql/sqlalchemy_url.py +0 -0
  367. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/neon/__init__.py +0 -0
  368. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/neon/plugin.py +0 -0
  369. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/neon/provider.py +0 -0
  370. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/neon/quirks.py +0 -0
  371. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/__init__.py +0 -0
  372. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/config.py +0 -0
  373. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/introspection/__init__.py +0 -0
  374. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/introspection/oracle_utils.py +0 -0
  375. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/oracle/__init__.py +0 -0
  376. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/oracle/dbms_output.py +0 -0
  377. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/oracle/history_manager.py +0 -0
  378. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/oracle/locking_manager.py +0 -0
  379. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/oracle/schema_operations.py +0 -0
  380. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/parser/__init__.py +0 -0
  381. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/parser/_comments.py +0 -0
  382. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/parser/_object_extractor.py +0 -0
  383. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/parser/_plsql_block.py +0 -0
  384. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/parser/_sqlplus.py +0 -0
  385. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/parser/_statement_splitter.py +0 -0
  386. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/parser/oracle_parser.py +0 -0
  387. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/parser/oracle_statement_parser.py +0 -0
  388. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/parser/oracle_tokenizer.py +0 -0
  389. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/parser/parser_config.py +0 -0
  390. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/parser/sqlplus_context.py +0 -0
  391. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/plugin.py +0 -0
  392. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/provider.py +0 -0
  393. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/quirks.py +0 -0
  394. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/sqlalchemy_url.py +0 -0
  395. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/postgresql/__init__.py +0 -0
  396. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/postgresql/_provider_query_executor.py +0 -0
  397. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/postgresql/config.py +0 -0
  398. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/postgresql/introspection/__init__.py +0 -0
  399. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/postgresql/parser/__init__.py +0 -0
  400. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/postgresql/parser/parser_config.py +0 -0
  401. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/postgresql/parser/postgresql_regex_parser.py +0 -0
  402. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/postgresql/parser/postgresql_statement_parser.py +0 -0
  403. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/postgresql/parser/postgresql_tokenizer.py +0 -0
  404. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/postgresql/plugin.py +0 -0
  405. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/postgresql/postgresql/__init__.py +0 -0
  406. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/postgresql/postgresql/history_manager.py +0 -0
  407. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/postgresql/postgresql/locking_manager.py +0 -0
  408. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/postgresql/postgresql/schema_operations.py +0 -0
  409. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/postgresql/provider.py +0 -0
  410. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/postgresql/quirks.py +0 -0
  411. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/postgresql/sqlalchemy_url.py +0 -0
  412. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/redshift/__init__.py +0 -0
  413. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlite/__init__.py +0 -0
  414. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlite/config.py +0 -0
  415. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlite/introspection/__init__.py +0 -0
  416. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlite/parser/__init__.py +0 -0
  417. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlite/parser/parser_config.py +0 -0
  418. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlite/parser/sqlite_regex_parser.py +0 -0
  419. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlite/plugin.py +0 -0
  420. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlite/provider.py +0 -0
  421. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlite/quirks.py +0 -0
  422. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlite/sqlalchemy_url.py +0 -0
  423. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlite/sqlite/__init__.py +0 -0
  424. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlite/sqlite/connection_manager.py +0 -0
  425. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlite/sqlite/history_manager.py +0 -0
  426. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlite/sqlite/locking_manager.py +0 -0
  427. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlite/sqlite/query_executor.py +0 -0
  428. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlite/sqlite/schema_operations.py +0 -0
  429. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlserver/__init__.py +0 -0
  430. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlserver/config.py +0 -0
  431. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlserver/introspection/__init__.py +0 -0
  432. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlserver/parser/__init__.py +0 -0
  433. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlserver/parser/parser_config.py +0 -0
  434. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlserver/parser/sqlserver_regex_parser.py +0 -0
  435. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlserver/parser/sqlserver_statement_parser.py +0 -0
  436. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlserver/parser/sqlserver_tokenizer.py +0 -0
  437. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlserver/parser/tsql_batch_separator.py +0 -0
  438. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlserver/plugin.py +0 -0
  439. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlserver/provider.py +0 -0
  440. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlserver/quirks.py +0 -0
  441. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlserver/sqlalchemy_url.py +0 -0
  442. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlserver/sqlserver/__init__.py +0 -0
  443. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlserver/sqlserver/history_manager.py +0 -0
  444. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlserver/sqlserver/locking_manager.py +0 -0
  445. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlserver/sqlserver/schema_operations.py +0 -0
  446. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/supabase/__init__.py +0 -0
  447. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/supabase/plugin.py +0 -0
  448. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/supabase/provider.py +0 -0
  449. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/supabase/quirks.py +0 -0
  450. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/timescaledb/__init__.py +0 -0
  451. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/timescaledb/plugin.py +0 -0
  452. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/timescaledb/provider.py +0 -0
  453. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/timescaledb/quirks.py +0 -0
  454. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/yugabytedb/__init__.py +0 -0
  455. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/yugabytedb/plugin.py +0 -0
  456. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/yugabytedb/provider.py +0 -0
  457. {dblift-2.5.0 → dblift-2.5.2}/db/plugins/yugabytedb/quirks.py +0 -0
  458. {dblift-2.5.0 → dblift-2.5.2}/db/provider_capabilities.py +0 -0
  459. {dblift-2.5.0 → dblift-2.5.2}/db/provider_interfaces.py +0 -0
  460. {dblift-2.5.0 → dblift-2.5.2}/db/provider_registry.py +0 -0
  461. {dblift-2.5.0 → dblift-2.5.2}/db/sqlalchemy_provider.py +0 -0
  462. {dblift-2.5.0 → dblift-2.5.2}/db/value_utils.py +0 -0
  463. {dblift-2.5.0 → dblift-2.5.2}/dblift.egg-info/dependency_links.txt +0 -0
  464. {dblift-2.5.0 → dblift-2.5.2}/dblift.egg-info/entry_points.txt +0 -0
  465. {dblift-2.5.0 → dblift-2.5.2}/dblift.egg-info/top_level.txt +0 -0
  466. {dblift-2.5.0 → dblift-2.5.2}/integrations/__init__.py +0 -0
  467. {dblift-2.5.0 → dblift-2.5.2}/integrations/django/__init__.py +0 -0
  468. {dblift-2.5.0 → dblift-2.5.2}/integrations/django/_client.py +0 -0
  469. {dblift-2.5.0 → dblift-2.5.2}/integrations/django/_engine.py +0 -0
  470. {dblift-2.5.0 → dblift-2.5.2}/integrations/django/apps.py +0 -0
  471. {dblift-2.5.0 → dblift-2.5.2}/integrations/django/checks.py +0 -0
  472. {dblift-2.5.0 → dblift-2.5.2}/integrations/django/management/__init__.py +0 -0
  473. {dblift-2.5.0 → dblift-2.5.2}/integrations/django/management/commands/__init__.py +0 -0
  474. {dblift-2.5.0 → dblift-2.5.2}/integrations/django/management/commands/dblift_info.py +0 -0
  475. {dblift-2.5.0 → dblift-2.5.2}/integrations/django/management/commands/dblift_migrate.py +0 -0
  476. {dblift-2.5.0 → dblift-2.5.2}/integrations/django/management/commands/dblift_validate.py +0 -0
  477. {dblift-2.5.0 → dblift-2.5.2}/integrations/fastapi.py +0 -0
  478. {dblift-2.5.0 → dblift-2.5.2}/integrations/flask.py +0 -0
  479. {dblift-2.5.0 → dblift-2.5.2}/integrations/opentelemetry.py +0 -0
  480. {dblift-2.5.0 → dblift-2.5.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dblift
3
- Version: 2.5.0
3
+ Version: 2.5.2
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
@@ -86,7 +86,8 @@ Requires-Dist: psycopg[binary]>=3.1; extra == "citus"
86
86
  Provides-Extra: cockroachdb
87
87
  Requires-Dist: psycopg[binary]>=3.1; extra == "cockroachdb"
88
88
  Provides-Extra: redshift
89
- Requires-Dist: psycopg[binary]>=3.1; extra == "redshift"
89
+ Requires-Dist: sqlalchemy-redshift>=1.0.0; extra == "redshift"
90
+ Requires-Dist: redshift-connector>=2.1.0; extra == "redshift"
90
91
  Provides-Extra: fastapi
91
92
  Requires-Dist: fastapi>=0.100; extra == "fastapi"
92
93
  Provides-Extra: flask
@@ -1,17 +1,15 @@
1
1
  """Entry-point declaration for the Redshift plugin.
2
2
 
3
- Redshift is PostgreSQL-compatible: this plugin reuses PostgreSQL's config
4
- 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: redshift``.
3
+ Redshift is PostgreSQL-wire-compatible, but it needs the Redshift SQLAlchemy
4
+ dialect/driver instead of the standard PostgreSQL dialect because Redshift does
5
+ not implement every PostgreSQL connection bootstrap query.
8
6
  """
9
7
 
10
8
  from __future__ import annotations
11
9
 
12
- from db.plugins.postgresql.sqlalchemy_url import build_sqlalchemy_url
13
10
  from db.plugins.redshift.provider import RedshiftProvider
14
11
  from db.plugins.redshift.quirks import RedshiftQuirks
12
+ from db.plugins.redshift.sqlalchemy_url import build_sqlalchemy_url
15
13
  from db.provider_registry import PluginInfo
16
14
 
17
15
  PLUGIN: PluginInfo = PluginInfo(
@@ -24,5 +22,5 @@ PLUGIN: PluginInfo = PluginInfo(
24
22
  quirks_class=RedshiftQuirks,
25
23
  config_dialect="postgresql",
26
24
  sqlalchemy_url_builder=build_sqlalchemy_url,
27
- native_driver_module="psycopg",
25
+ native_driver_module="redshift_connector",
28
26
  )
@@ -2,6 +2,9 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ from typing import Any
6
+
7
+ from core.migration.clean_summary import CleanExecutionSummary
5
8
  from db.plugins.postgresql.provider import PostgreSqlProvider
6
9
 
7
10
 
@@ -14,6 +17,77 @@ class RedshiftProvider(PostgreSqlProvider):
14
17
  """Redshift provider with Redshift-specific history and locking SQL."""
15
18
 
16
19
  canonical_dialect_key = "redshift"
20
+ _migration_lock_connection: Any | None = None
21
+ _migration_lock_transaction: Any | None = None
22
+
23
+ def clean_schema(self, schema: str) -> CleanExecutionSummary:
24
+ """Drop Redshift objects without querying PostgreSQL-only catalogs."""
25
+ summary = CleanExecutionSummary()
26
+ object_names = self._redshift_clean_object_names
27
+ qualified_name = self.get_schema_qualified_name
28
+
29
+ for view_name in object_names(_REDSHIFT_VIEWS_QUERY, schema):
30
+ qualified_view = qualified_name(schema, view_name)
31
+ drop_sql = f"DROP VIEW IF EXISTS {qualified_view} CASCADE"
32
+ self.execute_statement(drop_sql)
33
+ summary.record_drop(
34
+ drop_sql,
35
+ object_type="view",
36
+ name=view_name,
37
+ schema=schema,
38
+ )
39
+
40
+ for table_name in object_names(_REDSHIFT_TABLES_QUERY, schema):
41
+ qualified_table = qualified_name(schema, table_name)
42
+ drop_sql = f"DROP TABLE IF EXISTS {qualified_table} CASCADE"
43
+ self.execute_statement(drop_sql)
44
+ summary.record_drop(
45
+ drop_sql,
46
+ object_type="table",
47
+ name=table_name,
48
+ schema=schema,
49
+ )
50
+
51
+ return summary
52
+
53
+ def get_clean_preview(self, schema: str) -> CleanExecutionSummary:
54
+ """Preview Redshift objects clean would drop."""
55
+ summary = CleanExecutionSummary()
56
+ object_names = self._redshift_clean_object_names
57
+ qualified_name = self.get_schema_qualified_name
58
+
59
+ for view_name in object_names(_REDSHIFT_VIEWS_QUERY, schema):
60
+ qualified_view = qualified_name(schema, view_name)
61
+ summary.record_drop(
62
+ f"DROP VIEW IF EXISTS {qualified_view} CASCADE",
63
+ object_type="view",
64
+ name=view_name,
65
+ schema=schema,
66
+ )
67
+
68
+ for table_name in object_names(_REDSHIFT_TABLES_QUERY, schema):
69
+ qualified_table = qualified_name(schema, table_name)
70
+ summary.record_drop(
71
+ f"DROP TABLE IF EXISTS {qualified_table} CASCADE",
72
+ object_type="table",
73
+ name=table_name,
74
+ schema=schema,
75
+ )
76
+
77
+ return summary
78
+
79
+ def _redshift_clean_object_names(
80
+ self,
81
+ query: str,
82
+ schema: str,
83
+ ) -> list[str]:
84
+ rows = self.execute_query(query, [schema])
85
+ column_name = "object_name"
86
+ return [
87
+ str(row.get(column_name) or row.get(column_name.upper()))
88
+ for row in rows
89
+ if row.get(column_name) or row.get(column_name.upper())
90
+ ]
17
91
 
18
92
  def acquire_migration_lock(
19
93
  self,
@@ -89,3 +163,19 @@ class RedshiftProvider(PostgreSqlProvider):
89
163
 
90
164
 
91
165
  __all__ = ["RedshiftProvider"]
166
+
167
+
168
+ _REDSHIFT_VIEWS_QUERY = """
169
+ SELECT table_name AS object_name
170
+ FROM information_schema.views
171
+ WHERE table_schema = ?
172
+ ORDER BY table_name
173
+ """
174
+
175
+ _REDSHIFT_TABLES_QUERY = """
176
+ SELECT table_name AS object_name
177
+ FROM information_schema.tables
178
+ WHERE table_schema = ?
179
+ AND table_type = 'BASE TABLE'
180
+ ORDER BY table_name
181
+ """
@@ -0,0 +1,33 @@
1
+ """Redshift :class:`DialectQuirks` - inherits PostgreSQL behavior."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from db.plugins.postgresql.quirks import PostgresqlQuirks
6
+
7
+
8
+ class RedshiftQuirks(PostgresqlQuirks):
9
+ """Redshift quirks, inheriting PostgreSQL behavior."""
10
+
11
+ is_ansi_reference_dialect = False
12
+ is_default_sqlglot_read_fallback = False
13
+
14
+ def __init__(self, dialect_name: str = "redshift") -> None:
15
+ super().__init__(dialect_name=dialect_name)
16
+
17
+ def build_snapshot_table_ddl(
18
+ self,
19
+ qualified_table: str,
20
+ snapshot_id_size: int,
21
+ checksum_size: int,
22
+ ) -> str:
23
+ """Render snapshot storage with Redshift's widest VARCHAR payload column."""
24
+ return (
25
+ f"CREATE TABLE {qualified_table} ("
26
+ f"snapshot_id VARCHAR({snapshot_id_size}) PRIMARY KEY, "
27
+ f"captured_at VARCHAR({snapshot_id_size}) NOT NULL, "
28
+ f"checksum VARCHAR({checksum_size}) NOT NULL, "
29
+ f"model_data VARCHAR(MAX) NOT NULL)"
30
+ )
31
+
32
+
33
+ __all__ = ["RedshiftQuirks"]
@@ -0,0 +1,50 @@
1
+ """SQLAlchemy URL construction for the Redshift plugin."""
2
+
3
+ from typing import Any, Dict, cast
4
+
5
+ from sqlalchemy.engine import URL, make_url
6
+
7
+
8
+ def _string_mapping(values: Any) -> Dict[str, str]:
9
+ if not isinstance(values, dict):
10
+ return {}
11
+ return {str(key): str(value) for key, value in values.items()}
12
+
13
+
14
+ def _query_mapping(database_config: Any, base_query: Any = None) -> Dict[str, str]:
15
+ query = _string_mapping(base_query)
16
+ query.update(_string_mapping(getattr(database_config, "extra_params", None)))
17
+ query.update(_string_mapping(getattr(database_config, "options", None)))
18
+
19
+ return query
20
+
21
+
22
+ def build_sqlalchemy_url(database_config: Any) -> str:
23
+ """Build a Redshift SQLAlchemy URL using the Amazon Redshift connector."""
24
+ raw_url = getattr(database_config, "url", None)
25
+ if isinstance(raw_url, str) and raw_url:
26
+ url = make_url(raw_url)
27
+ if url.drivername.startswith(("postgresql", "postgres", "redshift")):
28
+ url = url.set(drivername="redshift+redshift_connector")
29
+ username = getattr(database_config, "username", None) or url.username or None
30
+ password = getattr(database_config, "password", None) or url.password or None
31
+ if username != url.username or password != url.password:
32
+ url = url.set(username=username, password=password)
33
+ query = _query_mapping(database_config, url.query)
34
+ if query != dict(url.query):
35
+ url = url.set(query=query)
36
+ return cast(str, url.render_as_string(hide_password=False))
37
+ raise ValueError("Redshift native connections require a SQLAlchemy URL")
38
+
39
+ return cast(
40
+ str,
41
+ URL.create(
42
+ "redshift+redshift_connector",
43
+ username=getattr(database_config, "username", None) or None,
44
+ password=getattr(database_config, "password", None) or None,
45
+ host=getattr(database_config, "host", None) or "localhost",
46
+ port=getattr(database_config, "port", None),
47
+ database=getattr(database_config, "database", None),
48
+ query=_query_mapping(database_config),
49
+ ).render_as_string(hide_password=False),
50
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dblift
3
- Version: 2.5.0
3
+ Version: 2.5.2
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
@@ -86,7 +86,8 @@ Requires-Dist: psycopg[binary]>=3.1; extra == "citus"
86
86
  Provides-Extra: cockroachdb
87
87
  Requires-Dist: psycopg[binary]>=3.1; extra == "cockroachdb"
88
88
  Provides-Extra: redshift
89
- Requires-Dist: psycopg[binary]>=3.1; extra == "redshift"
89
+ Requires-Dist: sqlalchemy-redshift>=1.0.0; extra == "redshift"
90
+ Requires-Dist: redshift-connector>=2.1.0; extra == "redshift"
90
91
  Provides-Extra: fastapi
91
92
  Requires-Dist: fastapi>=0.100; extra == "fastapi"
92
93
  Provides-Extra: flask
@@ -409,6 +409,7 @@ db/plugins/redshift/__init__.py
409
409
  db/plugins/redshift/plugin.py
410
410
  db/plugins/redshift/provider.py
411
411
  db/plugins/redshift/quirks.py
412
+ db/plugins/redshift/sqlalchemy_url.py
412
413
  db/plugins/sqlite/__init__.py
413
414
  db/plugins/sqlite/config.py
414
415
  db/plugins/sqlite/plugin.py
@@ -92,7 +92,8 @@ opentelemetry-api>=1.20
92
92
  psycopg[binary]>=3.1
93
93
 
94
94
  [redshift]
95
- psycopg[binary]>=3.1
95
+ sqlalchemy-redshift>=1.0.0
96
+ redshift-connector>=2.1.0
96
97
 
97
98
  [sqlserver]
98
99
  pymssql>=2.3
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "dblift"
7
- version = "2.5.0"
7
+ version = "2.5.2"
8
8
  description = "A database migration tool that supports multiple databases with native Python drivers"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -134,7 +134,7 @@ yugabytedb = ["psycopg[binary]>=3.1"]
134
134
  timescaledb = ["psycopg[binary]>=3.1"]
135
135
  citus = ["psycopg[binary]>=3.1"]
136
136
  cockroachdb = ["psycopg[binary]>=3.1"]
137
- redshift = ["psycopg[binary]>=3.1"]
137
+ redshift = ["sqlalchemy-redshift>=1.0.0", "redshift-connector>=2.1.0"]
138
138
  fastapi = ["fastapi>=0.100"]
139
139
  flask = ["flask>=2.3"]
140
140
  django = ["Django>=4.2"]
@@ -717,6 +717,7 @@ module = [
717
717
  "db.plugins.redshift.plugin",
718
718
  "db.plugins.redshift.provider",
719
719
  "db.plugins.redshift.quirks",
720
+ "db.plugins.redshift.sqlalchemy_url",
720
721
  ]
721
722
  disallow_any_generics = true
722
723
  disallow_subclassing_any = true
@@ -1,18 +0,0 @@
1
- """Redshift :class:`DialectQuirks` - inherits PostgreSQL behavior."""
2
-
3
- from __future__ import annotations
4
-
5
- from db.plugins.postgresql.quirks import PostgresqlQuirks
6
-
7
-
8
- class RedshiftQuirks(PostgresqlQuirks):
9
- """Redshift quirks, inheriting PostgreSQL behavior."""
10
-
11
- is_ansi_reference_dialect = False
12
- is_default_sqlglot_read_fallback = False
13
-
14
- def __init__(self, dialect_name: str = "redshift") -> None:
15
- super().__init__(dialect_name=dialect_name)
16
-
17
-
18
- __all__ = ["RedshiftQuirks"]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes