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.
- {dblift-2.5.0 → dblift-2.5.2}/PKG-INFO +3 -2
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/redshift/plugin.py +5 -7
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/redshift/provider.py +90 -0
- dblift-2.5.2/db/plugins/redshift/quirks.py +33 -0
- dblift-2.5.2/db/plugins/redshift/sqlalchemy_url.py +50 -0
- {dblift-2.5.0 → dblift-2.5.2}/dblift.egg-info/PKG-INFO +3 -2
- {dblift-2.5.0 → dblift-2.5.2}/dblift.egg-info/SOURCES.txt +1 -0
- {dblift-2.5.0 → dblift-2.5.2}/dblift.egg-info/requires.txt +2 -1
- {dblift-2.5.0 → dblift-2.5.2}/pyproject.toml +3 -2
- dblift-2.5.0/db/plugins/redshift/quirks.py +0 -18
- {dblift-2.5.0 → dblift-2.5.2}/LICENSE +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/README.md +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/api/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/api/_cli_support.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/api/_client_factory.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/api/_client_operations.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/api/_engine_config.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/api/async_client.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/api/client.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/api/events.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/api/migrations.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/api/py.typed +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/cli/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/cli/_command_handlers.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/cli/_config_helpers.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/cli/_constants.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/cli/_output.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/cli/_parser_setup.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/cli/commands/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/cli/commands/config_command.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/cli/db_utils.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/cli/extensions.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/cli/handlers/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/cli/handlers/_shared.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/cli/handlers/baseline.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/cli/handlers/clean.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/cli/handlers/import_flyway.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/cli/handlers/info.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/cli/handlers/migrate.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/cli/handlers/repair.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/cli/handlers/undo.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/cli/handlers/validate.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/cli/main.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/config/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/config/_credential_masking.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/config/_subclasses/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/config/_subclasses/dummy_config.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/config/_url_builder_mixin.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/config/config_builder.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/config/database_config.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/config/dblift_config.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/config/errors.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/config/property_registry.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/config/secrets/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/config/secrets/_cache.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/config/secrets/_provider_base.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/config/secrets/_registry.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/config/secrets/_resolver.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/config/secrets/_secrets_config.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/constants.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/dialect_boundary.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/exceptions.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/introspection/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/introspection/_column_enricher.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/introspection/_partition_enricher.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/introspection/_schema_orchestrator.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/introspection/_utils.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/introspection/_vendor_property_applier.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/introspection/base_introspector.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/introspection/extractors/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/introspection/extractors/base_extractor.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/introspection/extractors/column_extractor.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/introspection/extractors/constraint_extractor.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/introspection/extractors/index_extractor.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/introspection/extractors/misc_extractor.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/introspection/extractors/procedure_extractor.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/introspection/extractors/sequence_extractor.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/introspection/extractors/table_extractor.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/introspection/extractors/trigger_extractor.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/introspection/extractors/view_extractor.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/introspection/introspector_factory.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/introspection/result.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/introspection/schema_introspector.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/introspection/vendor_queries_base.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/introspection/vendor_queries_factory.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/introspection/vendor_queries_protocols.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/introspection/version_detector.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/logger/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/logger/_base.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/logger/_factory.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/logger/_formatters.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/logger/_levels.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/logger/_multi.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/logger/_null.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/logger/console.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/logger/formatters/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/logger/formatters/_formatter_impl.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/logger/formatters/factory.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/logger/formatters/formatter.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/logger/formatters/htmlformatter.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/logger/formatters/jsonformatter.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/logger/log.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/logger/results.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/logger/templates/oldreport.html +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/logger/templates/report.html +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/_type_match.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/clean_summary.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/commands/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/commands/_script_events.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/commands/base_command.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/commands/baseline_command.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/commands/clean_command.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/commands/import_flyway_command.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/commands/info_command.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/commands/migrate_command.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/commands/repair_command.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/commands/undo_command.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/commands/validate_command.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/encoding.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/executor/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/executor/execution_engine.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/executor/migration_executor.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/executor/migration_helpers.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/executor/placeholder_manager.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/executor/transaction_policy.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/executors/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/executors/base_executor.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/executors/executor_factory.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/executors/python_executor.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/executors/sql_executor.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/formats/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/formats/format_detector.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/formats/migration_format.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/history/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/history/migration_history_manager.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/journals/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/journals/migration_journal.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/migration.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/placeholders/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/placeholders/placeholder_service.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/rules/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/rules/migration_rules.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/scripting/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/scripting/migration_script_manager.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/scripting/undo_script_generator/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/scripting/undo_script_generator/_ddl_reversers.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/scripting/undo_script_generator/_dml_reversers.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/scripting/undo_script_generator/_extractors.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/scripting/undo_script_generator/_generator.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/scripting/undo_script_generator/_helpers.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/scripting/undo_script_generator/_models.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/scripting/undo_script_generator/_reversers.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/sql/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/sql/execution_statement.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/sql/sql_analyzer.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/sql/sql_execution_service.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/sql/statement_splitter.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/state/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/state/migration_data_service.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/state/migration_display_state.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/state/migration_formatter.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/state/migration_state.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/state/migration_state_manager.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/state/migration_state_service.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/ui/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/ui/data_collector.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/ui/display_formatters.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/ui/migration_analyzer.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/ui/migration_ui.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/ui/table_renderer.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/migration/version_utils.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/normalization/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/normalization/dependency_resolver.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/normalization/identifier_normalizer.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/normalization/object_orderer.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/normalization/type_constants.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/normalization/type_mapper.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/normalization/type_mappings.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/normalization/type_normalizer.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/seams/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/seams/capabilities.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/seams/event_listeners.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/seams/feature_loading.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/seams/introspection.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/seams/license_info.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/seams/runtime_checks.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/seams/sql_generators.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/seams/tier_resolver.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_generator/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_generator/alter/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_generator/alter/alter_generator_factory.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_generator/alter/base_alter_generator.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_generator/alter_generator.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_generator/base_generator.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_generator/basic_table_ddl_generator.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_generator/dependency_analyzer.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_generator/diff_converters/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_generator/diff_converters/base_converter.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_generator/formatter.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_generator/generator_factory.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_generator/options.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_generator/script_organizer.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_generator/sql_generator.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_generator/sql_statement.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_generator/table_ddl_render.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/_base_parse_result.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/_base_sql_column.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/_base_sql_constraint.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/_base_sql_object.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/_base_sql_statement.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/base.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/constraint_validator.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/database_link.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/dialect.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/event.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/extension.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/foreign_data_wrapper.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/foreign_server.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/index.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/linked_server.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/module.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/package.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/partition.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/procedure.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/sequence.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/synonym.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/table.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/table_canonicalizer.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/table_options.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/trigger.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/user_defined_type.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/view.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_model/view_options.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_parser/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_parser/_partition_handler.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_parser/_sqlglot_builders.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_parser/base_statement_parser.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_parser/base_tokenizer.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_parser/common/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_parser/common/base_parser.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_parser/dialects/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_parser/dialects/base_config.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_parser/enhanced_regex_parser.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_parser/hybrid_parser.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_parser/parser_context.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_parser/parser_factory.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_parser/parser_interface.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_parser/sqlglot_parser.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_parser/tokens.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_parser/unified_regex_parser.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_validator/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_validator/_checksum_validator.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_validator/_flyway_compatibility.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_validator/_migration_filter.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_validator/_sql_syntax_validator.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_validator/_strict_mode_validator.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/sql_validator/migration_validator.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/state/sql_script_formatter.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/state/sql_statement.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/utils/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/utils/database_url_parser.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/utils/metadata_helpers.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/utils/row_access.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/utils/string_utils.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/core/utils/url_masking.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/base_provider.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/base_quirks.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/constants.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/dml_analysis.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/error.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/error_handler.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/exceptions.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/native_connection_manager.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/object_naming.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/alloydb/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/alloydb/plugin.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/alloydb/provider.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/alloydb/quirks.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/aurora_postgresql/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/aurora_postgresql/plugin.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/aurora_postgresql/provider.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/aurora_postgresql/quirks.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/base_history_manager.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/base_locking_manager.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/base_query_executor.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/base_schema_operations.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/base_snapshot_manager.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/base_undo_manager.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/citus/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/citus/plugin.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/citus/provider.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/citus/quirks.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cockroachdb/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cockroachdb/plugin.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cockroachdb/provider.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cockroachdb/quirks.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/config.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/cosmosdb/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/cosmosdb/_sdk.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/cosmosdb/connection_manager.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/cosmosdb/history_manager.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/cosmosdb/locking_manager.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/cosmosdb/query_executor.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/cosmosdb/schema_operations.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/introspection/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/parser/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/parser/cosmosdb_regex_parser.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/plugin.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/provider.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/quirks.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/sdk_translator/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/sdk_translator/_executor.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/sdk_translator/_executors.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/sdk_translator/_parsing.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/sdk_translator/_script_generation.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/sdk_translator/_translator.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/cosmosdb/sdk_translator/_translators.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/db2/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/db2/config.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/db2/db2/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/db2/db2/history_manager.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/db2/db2/locking_manager.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/db2/db2/schema_operations.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/db2/introspection/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/db2/parser/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/db2/parser/db2_regex_parser.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/db2/parser/parser_config.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/db2/plugin.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/db2/provider.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/db2/quirks.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/db2/sqlalchemy_url.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/duckdb/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/duckdb/config.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/duckdb/parser/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/duckdb/parser/duckdb_regex_parser.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/duckdb/parser/parser_config.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/duckdb/plugin.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/duckdb/provider.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/duckdb/quirks.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/duckdb/sqlalchemy_url.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mariadb/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mariadb/plugin.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mariadb/provider.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mariadb/quirks.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mysql/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mysql/config.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mysql/introspection/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mysql/mysql/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mysql/mysql/history_manager.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mysql/mysql/locking_manager.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mysql/mysql/schema_operations.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mysql/parser/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mysql/parser/mysql_regex_parser.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mysql/parser/mysql_statement_parser.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mysql/parser/mysql_tokenizer.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mysql/parser/parser_config.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mysql/plugin.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mysql/provider.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mysql/quirks.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/mysql/sqlalchemy_url.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/neon/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/neon/plugin.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/neon/provider.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/neon/quirks.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/config.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/introspection/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/introspection/oracle_utils.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/oracle/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/oracle/dbms_output.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/oracle/history_manager.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/oracle/locking_manager.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/oracle/schema_operations.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/parser/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/parser/_comments.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/parser/_object_extractor.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/parser/_plsql_block.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/parser/_sqlplus.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/parser/_statement_splitter.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/parser/oracle_parser.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/parser/oracle_statement_parser.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/parser/oracle_tokenizer.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/parser/parser_config.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/parser/sqlplus_context.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/plugin.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/provider.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/quirks.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/oracle/sqlalchemy_url.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/postgresql/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/postgresql/_provider_query_executor.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/postgresql/config.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/postgresql/introspection/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/postgresql/parser/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/postgresql/parser/parser_config.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/postgresql/parser/postgresql_regex_parser.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/postgresql/parser/postgresql_statement_parser.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/postgresql/parser/postgresql_tokenizer.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/postgresql/plugin.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/postgresql/postgresql/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/postgresql/postgresql/history_manager.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/postgresql/postgresql/locking_manager.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/postgresql/postgresql/schema_operations.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/postgresql/provider.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/postgresql/quirks.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/postgresql/sqlalchemy_url.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/redshift/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlite/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlite/config.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlite/introspection/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlite/parser/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlite/parser/parser_config.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlite/parser/sqlite_regex_parser.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlite/plugin.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlite/provider.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlite/quirks.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlite/sqlalchemy_url.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlite/sqlite/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlite/sqlite/connection_manager.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlite/sqlite/history_manager.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlite/sqlite/locking_manager.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlite/sqlite/query_executor.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlite/sqlite/schema_operations.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlserver/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlserver/config.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlserver/introspection/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlserver/parser/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlserver/parser/parser_config.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlserver/parser/sqlserver_regex_parser.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlserver/parser/sqlserver_statement_parser.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlserver/parser/sqlserver_tokenizer.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlserver/parser/tsql_batch_separator.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlserver/plugin.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlserver/provider.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlserver/quirks.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlserver/sqlalchemy_url.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlserver/sqlserver/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlserver/sqlserver/history_manager.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlserver/sqlserver/locking_manager.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/sqlserver/sqlserver/schema_operations.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/supabase/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/supabase/plugin.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/supabase/provider.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/supabase/quirks.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/timescaledb/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/timescaledb/plugin.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/timescaledb/provider.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/timescaledb/quirks.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/yugabytedb/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/yugabytedb/plugin.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/yugabytedb/provider.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/plugins/yugabytedb/quirks.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/provider_capabilities.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/provider_interfaces.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/provider_registry.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/sqlalchemy_provider.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/db/value_utils.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/dblift.egg-info/dependency_links.txt +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/dblift.egg-info/entry_points.txt +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/dblift.egg-info/top_level.txt +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/integrations/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/integrations/django/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/integrations/django/_client.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/integrations/django/_engine.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/integrations/django/apps.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/integrations/django/checks.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/integrations/django/management/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/integrations/django/management/commands/__init__.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/integrations/django/management/commands/dblift_info.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/integrations/django/management/commands/dblift_migrate.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/integrations/django/management/commands/dblift_validate.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/integrations/fastapi.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/integrations/flask.py +0 -0
- {dblift-2.5.0 → dblift-2.5.2}/integrations/opentelemetry.py +0 -0
- {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.
|
|
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:
|
|
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
|
|
4
|
-
|
|
5
|
-
|
|
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="
|
|
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.
|
|
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:
|
|
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
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "dblift"
|
|
7
|
-
version = "2.5.
|
|
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 = ["
|
|
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
|
|
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
|
|
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
|