dblift 2.4.2__tar.gz → 2.5.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {dblift-2.4.2 → dblift-2.5.0}/PKG-INFO +7 -1
- {dblift-2.4.2 → dblift-2.5.0}/README.md +2 -0
- dblift-2.5.0/db/plugins/cockroachdb/__init__.py +12 -0
- dblift-2.5.0/db/plugins/cockroachdb/plugin.py +28 -0
- dblift-2.5.0/db/plugins/cockroachdb/provider.py +79 -0
- dblift-2.5.0/db/plugins/cockroachdb/quirks.py +18 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/postgresql/config.py +2 -0
- dblift-2.5.0/db/plugins/redshift/__init__.py +12 -0
- dblift-2.5.0/db/plugins/redshift/plugin.py +28 -0
- dblift-2.5.0/db/plugins/redshift/provider.py +91 -0
- dblift-2.5.0/db/plugins/redshift/quirks.py +18 -0
- {dblift-2.4.2 → dblift-2.5.0}/dblift.egg-info/PKG-INFO +7 -1
- {dblift-2.4.2 → dblift-2.5.0}/dblift.egg-info/SOURCES.txt +8 -0
- {dblift-2.4.2 → dblift-2.5.0}/dblift.egg-info/entry_points.txt +2 -0
- {dblift-2.4.2 → dblift-2.5.0}/dblift.egg-info/requires.txt +6 -0
- {dblift-2.4.2 → dblift-2.5.0}/pyproject.toml +16 -4
- {dblift-2.4.2 → dblift-2.5.0}/LICENSE +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/api/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/api/_cli_support.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/api/_client_factory.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/api/_client_operations.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/api/_engine_config.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/api/async_client.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/api/client.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/api/events.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/api/migrations.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/api/py.typed +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/cli/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/cli/_command_handlers.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/cli/_config_helpers.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/cli/_constants.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/cli/_output.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/cli/_parser_setup.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/cli/commands/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/cli/commands/config_command.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/cli/db_utils.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/cli/extensions.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/cli/handlers/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/cli/handlers/_shared.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/cli/handlers/baseline.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/cli/handlers/clean.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/cli/handlers/import_flyway.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/cli/handlers/info.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/cli/handlers/migrate.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/cli/handlers/repair.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/cli/handlers/undo.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/cli/handlers/validate.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/cli/main.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/config/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/config/_credential_masking.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/config/_subclasses/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/config/_subclasses/dummy_config.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/config/_url_builder_mixin.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/config/config_builder.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/config/database_config.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/config/dblift_config.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/config/errors.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/config/property_registry.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/config/secrets/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/config/secrets/_cache.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/config/secrets/_provider_base.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/config/secrets/_registry.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/config/secrets/_resolver.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/config/secrets/_secrets_config.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/constants.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/dialect_boundary.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/exceptions.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/introspection/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/introspection/_column_enricher.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/introspection/_partition_enricher.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/introspection/_schema_orchestrator.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/introspection/_utils.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/introspection/_vendor_property_applier.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/introspection/base_introspector.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/introspection/extractors/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/introspection/extractors/base_extractor.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/introspection/extractors/column_extractor.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/introspection/extractors/constraint_extractor.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/introspection/extractors/index_extractor.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/introspection/extractors/misc_extractor.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/introspection/extractors/procedure_extractor.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/introspection/extractors/sequence_extractor.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/introspection/extractors/table_extractor.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/introspection/extractors/trigger_extractor.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/introspection/extractors/view_extractor.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/introspection/introspector_factory.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/introspection/result.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/introspection/schema_introspector.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/introspection/vendor_queries_base.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/introspection/vendor_queries_factory.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/introspection/vendor_queries_protocols.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/introspection/version_detector.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/logger/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/logger/_base.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/logger/_factory.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/logger/_formatters.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/logger/_levels.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/logger/_multi.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/logger/_null.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/logger/console.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/logger/formatters/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/logger/formatters/_formatter_impl.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/logger/formatters/factory.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/logger/formatters/formatter.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/logger/formatters/htmlformatter.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/logger/formatters/jsonformatter.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/logger/log.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/logger/results.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/logger/templates/oldreport.html +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/logger/templates/report.html +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/_type_match.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/clean_summary.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/commands/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/commands/_script_events.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/commands/base_command.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/commands/baseline_command.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/commands/clean_command.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/commands/import_flyway_command.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/commands/info_command.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/commands/migrate_command.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/commands/repair_command.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/commands/undo_command.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/commands/validate_command.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/encoding.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/executor/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/executor/execution_engine.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/executor/migration_executor.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/executor/migration_helpers.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/executor/placeholder_manager.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/executor/transaction_policy.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/executors/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/executors/base_executor.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/executors/executor_factory.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/executors/python_executor.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/executors/sql_executor.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/formats/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/formats/format_detector.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/formats/migration_format.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/history/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/history/migration_history_manager.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/journals/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/journals/migration_journal.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/migration.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/placeholders/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/placeholders/placeholder_service.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/rules/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/rules/migration_rules.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/scripting/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/scripting/migration_script_manager.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/scripting/undo_script_generator/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/scripting/undo_script_generator/_ddl_reversers.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/scripting/undo_script_generator/_dml_reversers.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/scripting/undo_script_generator/_extractors.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/scripting/undo_script_generator/_generator.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/scripting/undo_script_generator/_helpers.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/scripting/undo_script_generator/_models.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/scripting/undo_script_generator/_reversers.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/sql/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/sql/execution_statement.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/sql/sql_analyzer.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/sql/sql_execution_service.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/sql/statement_splitter.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/state/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/state/migration_data_service.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/state/migration_display_state.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/state/migration_formatter.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/state/migration_state.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/state/migration_state_manager.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/state/migration_state_service.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/ui/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/ui/data_collector.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/ui/display_formatters.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/ui/migration_analyzer.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/ui/migration_ui.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/ui/table_renderer.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/migration/version_utils.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/normalization/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/normalization/dependency_resolver.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/normalization/identifier_normalizer.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/normalization/object_orderer.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/normalization/type_constants.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/normalization/type_mapper.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/normalization/type_mappings.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/normalization/type_normalizer.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/seams/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/seams/capabilities.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/seams/event_listeners.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/seams/feature_loading.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/seams/introspection.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/seams/license_info.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/seams/runtime_checks.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/seams/sql_generators.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/seams/tier_resolver.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_generator/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_generator/alter/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_generator/alter/alter_generator_factory.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_generator/alter/base_alter_generator.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_generator/alter_generator.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_generator/base_generator.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_generator/basic_table_ddl_generator.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_generator/dependency_analyzer.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_generator/diff_converters/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_generator/diff_converters/base_converter.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_generator/formatter.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_generator/generator_factory.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_generator/options.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_generator/script_organizer.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_generator/sql_generator.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_generator/sql_statement.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_generator/table_ddl_render.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_model/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_model/_base_parse_result.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_model/_base_sql_column.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_model/_base_sql_constraint.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_model/_base_sql_object.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_model/_base_sql_statement.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_model/base.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_model/constraint_validator.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_model/database_link.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_model/dialect.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_model/event.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_model/extension.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_model/foreign_data_wrapper.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_model/foreign_server.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_model/index.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_model/linked_server.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_model/module.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_model/package.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_model/partition.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_model/procedure.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_model/sequence.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_model/synonym.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_model/table.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_model/table_canonicalizer.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_model/table_options.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_model/trigger.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_model/user_defined_type.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_model/view.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_model/view_options.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_parser/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_parser/_partition_handler.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_parser/_sqlglot_builders.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_parser/base_statement_parser.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_parser/base_tokenizer.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_parser/common/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_parser/common/base_parser.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_parser/dialects/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_parser/dialects/base_config.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_parser/enhanced_regex_parser.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_parser/hybrid_parser.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_parser/parser_context.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_parser/parser_factory.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_parser/parser_interface.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_parser/sqlglot_parser.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_parser/tokens.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_parser/unified_regex_parser.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_validator/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_validator/_checksum_validator.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_validator/_flyway_compatibility.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_validator/_migration_filter.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_validator/_sql_syntax_validator.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_validator/_strict_mode_validator.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/sql_validator/migration_validator.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/state/sql_script_formatter.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/state/sql_statement.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/utils/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/utils/database_url_parser.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/utils/metadata_helpers.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/utils/row_access.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/utils/string_utils.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/core/utils/url_masking.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/base_provider.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/base_quirks.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/constants.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/dml_analysis.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/error.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/error_handler.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/exceptions.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/native_connection_manager.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/object_naming.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/alloydb/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/alloydb/plugin.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/alloydb/provider.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/alloydb/quirks.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/aurora_postgresql/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/aurora_postgresql/plugin.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/aurora_postgresql/provider.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/aurora_postgresql/quirks.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/base_history_manager.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/base_locking_manager.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/base_query_executor.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/base_schema_operations.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/base_snapshot_manager.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/base_undo_manager.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/citus/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/citus/plugin.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/citus/provider.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/citus/quirks.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/cosmosdb/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/cosmosdb/config.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/cosmosdb/cosmosdb/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/cosmosdb/cosmosdb/_sdk.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/cosmosdb/cosmosdb/connection_manager.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/cosmosdb/cosmosdb/history_manager.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/cosmosdb/cosmosdb/locking_manager.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/cosmosdb/cosmosdb/query_executor.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/cosmosdb/cosmosdb/schema_operations.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/cosmosdb/introspection/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/cosmosdb/parser/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/cosmosdb/parser/cosmosdb_regex_parser.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/cosmosdb/plugin.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/cosmosdb/provider.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/cosmosdb/quirks.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/cosmosdb/sdk_translator/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/cosmosdb/sdk_translator/_executor.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/cosmosdb/sdk_translator/_executors.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/cosmosdb/sdk_translator/_parsing.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/cosmosdb/sdk_translator/_script_generation.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/cosmosdb/sdk_translator/_translator.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/cosmosdb/sdk_translator/_translators.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/db2/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/db2/config.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/db2/db2/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/db2/db2/history_manager.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/db2/db2/locking_manager.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/db2/db2/schema_operations.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/db2/introspection/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/db2/parser/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/db2/parser/db2_regex_parser.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/db2/parser/parser_config.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/db2/plugin.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/db2/provider.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/db2/quirks.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/db2/sqlalchemy_url.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/duckdb/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/duckdb/config.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/duckdb/parser/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/duckdb/parser/duckdb_regex_parser.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/duckdb/parser/parser_config.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/duckdb/plugin.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/duckdb/provider.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/duckdb/quirks.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/duckdb/sqlalchemy_url.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/mariadb/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/mariadb/plugin.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/mariadb/provider.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/mariadb/quirks.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/mysql/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/mysql/config.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/mysql/introspection/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/mysql/mysql/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/mysql/mysql/history_manager.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/mysql/mysql/locking_manager.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/mysql/mysql/schema_operations.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/mysql/parser/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/mysql/parser/mysql_regex_parser.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/mysql/parser/mysql_statement_parser.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/mysql/parser/mysql_tokenizer.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/mysql/parser/parser_config.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/mysql/plugin.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/mysql/provider.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/mysql/quirks.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/mysql/sqlalchemy_url.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/neon/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/neon/plugin.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/neon/provider.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/neon/quirks.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/oracle/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/oracle/config.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/oracle/introspection/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/oracle/introspection/oracle_utils.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/oracle/oracle/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/oracle/oracle/dbms_output.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/oracle/oracle/history_manager.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/oracle/oracle/locking_manager.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/oracle/oracle/schema_operations.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/oracle/parser/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/oracle/parser/_comments.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/oracle/parser/_object_extractor.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/oracle/parser/_plsql_block.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/oracle/parser/_sqlplus.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/oracle/parser/_statement_splitter.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/oracle/parser/oracle_parser.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/oracle/parser/oracle_statement_parser.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/oracle/parser/oracle_tokenizer.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/oracle/parser/parser_config.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/oracle/parser/sqlplus_context.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/oracle/plugin.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/oracle/provider.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/oracle/quirks.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/oracle/sqlalchemy_url.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/postgresql/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/postgresql/_provider_query_executor.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/postgresql/introspection/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/postgresql/parser/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/postgresql/parser/parser_config.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/postgresql/parser/postgresql_regex_parser.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/postgresql/parser/postgresql_statement_parser.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/postgresql/parser/postgresql_tokenizer.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/postgresql/plugin.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/postgresql/postgresql/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/postgresql/postgresql/history_manager.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/postgresql/postgresql/locking_manager.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/postgresql/postgresql/schema_operations.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/postgresql/provider.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/postgresql/quirks.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/postgresql/sqlalchemy_url.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/sqlite/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/sqlite/config.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/sqlite/introspection/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/sqlite/parser/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/sqlite/parser/parser_config.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/sqlite/parser/sqlite_regex_parser.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/sqlite/plugin.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/sqlite/provider.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/sqlite/quirks.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/sqlite/sqlalchemy_url.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/sqlite/sqlite/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/sqlite/sqlite/connection_manager.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/sqlite/sqlite/history_manager.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/sqlite/sqlite/locking_manager.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/sqlite/sqlite/query_executor.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/sqlite/sqlite/schema_operations.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/sqlserver/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/sqlserver/config.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/sqlserver/introspection/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/sqlserver/parser/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/sqlserver/parser/parser_config.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/sqlserver/parser/sqlserver_regex_parser.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/sqlserver/parser/sqlserver_statement_parser.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/sqlserver/parser/sqlserver_tokenizer.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/sqlserver/parser/tsql_batch_separator.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/sqlserver/plugin.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/sqlserver/provider.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/sqlserver/quirks.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/sqlserver/sqlalchemy_url.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/sqlserver/sqlserver/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/sqlserver/sqlserver/history_manager.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/sqlserver/sqlserver/locking_manager.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/sqlserver/sqlserver/schema_operations.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/supabase/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/supabase/plugin.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/supabase/provider.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/supabase/quirks.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/timescaledb/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/timescaledb/plugin.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/timescaledb/provider.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/timescaledb/quirks.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/yugabytedb/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/yugabytedb/plugin.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/yugabytedb/provider.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/plugins/yugabytedb/quirks.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/provider_capabilities.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/provider_interfaces.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/provider_registry.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/sqlalchemy_provider.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/db/value_utils.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/dblift.egg-info/dependency_links.txt +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/dblift.egg-info/top_level.txt +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/integrations/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/integrations/django/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/integrations/django/_client.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/integrations/django/_engine.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/integrations/django/apps.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/integrations/django/checks.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/integrations/django/management/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/integrations/django/management/commands/__init__.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/integrations/django/management/commands/dblift_info.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/integrations/django/management/commands/dblift_migrate.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/integrations/django/management/commands/dblift_validate.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/integrations/fastapi.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/integrations/flask.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/integrations/opentelemetry.py +0 -0
- {dblift-2.4.2 → dblift-2.5.0}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dblift
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.5.0
|
|
4
4
|
Summary: A database migration tool that supports multiple databases with native Python drivers
|
|
5
5
|
Classifier: Development Status :: 5 - Production/Stable
|
|
6
6
|
Classifier: Intended Audience :: Developers
|
|
@@ -83,6 +83,10 @@ Provides-Extra: timescaledb
|
|
|
83
83
|
Requires-Dist: psycopg[binary]>=3.1; extra == "timescaledb"
|
|
84
84
|
Provides-Extra: citus
|
|
85
85
|
Requires-Dist: psycopg[binary]>=3.1; extra == "citus"
|
|
86
|
+
Provides-Extra: cockroachdb
|
|
87
|
+
Requires-Dist: psycopg[binary]>=3.1; extra == "cockroachdb"
|
|
88
|
+
Provides-Extra: redshift
|
|
89
|
+
Requires-Dist: psycopg[binary]>=3.1; extra == "redshift"
|
|
86
90
|
Provides-Extra: fastapi
|
|
87
91
|
Requires-Dist: fastapi>=0.100; extra == "fastapi"
|
|
88
92
|
Provides-Extra: flask
|
|
@@ -727,6 +731,8 @@ DBLift works with these databases:
|
|
|
727
731
|
| Database | Connection URL Example | Driver extra |
|
|
728
732
|
|----------|------------------------|--------------|
|
|
729
733
|
| PostgreSQL | `postgresql+psycopg://localhost:5432/mydb` | `dblift[postgresql]` |
|
|
734
|
+
| CockroachDB | `postgresql+psycopg://localhost:26257/mydb` | `dblift[cockroachdb]` |
|
|
735
|
+
| Redshift | `postgresql+psycopg://cluster.example.com:5439/dev` | `dblift[redshift]` |
|
|
730
736
|
| SQL Server | `mssql+pymssql://localhost:1433/mydb` | `dblift[sqlserver]` |
|
|
731
737
|
| Oracle | `oracle+oracledb://localhost:1521?sid=SID` | `dblift[oracle]` |
|
|
732
738
|
| MySQL | `mysql+pymysql://localhost:3306/mydb` | `dblift[mysql]` |
|
|
@@ -630,6 +630,8 @@ DBLift works with these databases:
|
|
|
630
630
|
| Database | Connection URL Example | Driver extra |
|
|
631
631
|
|----------|------------------------|--------------|
|
|
632
632
|
| PostgreSQL | `postgresql+psycopg://localhost:5432/mydb` | `dblift[postgresql]` |
|
|
633
|
+
| CockroachDB | `postgresql+psycopg://localhost:26257/mydb` | `dblift[cockroachdb]` |
|
|
634
|
+
| Redshift | `postgresql+psycopg://cluster.example.com:5439/dev` | `dblift[redshift]` |
|
|
633
635
|
| SQL Server | `mssql+pymssql://localhost:1433/mydb` | `dblift[sqlserver]` |
|
|
634
636
|
| Oracle | `oracle+oracledb://localhost:1521?sid=SID` | `dblift[oracle]` |
|
|
635
637
|
| MySQL | `mysql+pymysql://localhost:3306/mydb` | `dblift[mysql]` |
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"""CockroachDB database provider plugin (PostgreSQL-compatible)."""
|
|
2
|
+
|
|
3
|
+
__plugin_name__ = "cockroachdb"
|
|
4
|
+
__plugin_version__ = "1.0.0"
|
|
5
|
+
__plugin_description__ = "CockroachDB database provider"
|
|
6
|
+
__plugin_dialects__ = ["cockroachdb"]
|
|
7
|
+
__plugin_transport__ = "native"
|
|
8
|
+
__plugin_class__ = "CockroachdbProvider"
|
|
9
|
+
|
|
10
|
+
from .provider import CockroachdbProvider
|
|
11
|
+
|
|
12
|
+
__all__ = ["CockroachdbProvider"]
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"""Entry-point declaration for the CockroachDB plugin.
|
|
2
|
+
|
|
3
|
+
CockroachDB 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: cockroachdb``.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
from db.plugins.cockroachdb.provider import CockroachdbProvider
|
|
13
|
+
from db.plugins.cockroachdb.quirks import CockroachdbQuirks
|
|
14
|
+
from db.plugins.postgresql.sqlalchemy_url import build_sqlalchemy_url
|
|
15
|
+
from db.provider_registry import PluginInfo
|
|
16
|
+
|
|
17
|
+
PLUGIN: PluginInfo = PluginInfo(
|
|
18
|
+
name="cockroachdb",
|
|
19
|
+
version="1.0.0",
|
|
20
|
+
description="CockroachDB database provider",
|
|
21
|
+
dialects=["cockroachdb"],
|
|
22
|
+
provider_class=CockroachdbProvider,
|
|
23
|
+
transport="native",
|
|
24
|
+
quirks_class=CockroachdbQuirks,
|
|
25
|
+
config_dialect="postgresql",
|
|
26
|
+
sqlalchemy_url_builder=build_sqlalchemy_url,
|
|
27
|
+
native_driver_module="psycopg",
|
|
28
|
+
)
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"""CockroachDB native provider (PostgreSQL-compatible)."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import time
|
|
6
|
+
|
|
7
|
+
from db.plugins.postgresql.provider import PostgreSqlProvider
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def _is_lock_contention_error(error: Exception) -> bool:
|
|
11
|
+
message = str(error).lower()
|
|
12
|
+
markers = (
|
|
13
|
+
"duplicate key",
|
|
14
|
+
"unique constraint",
|
|
15
|
+
"violates unique",
|
|
16
|
+
)
|
|
17
|
+
return any(marker in message for marker in markers)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class CockroachdbProvider(PostgreSqlProvider):
|
|
21
|
+
"""CockroachDB provider with table-backed migration locking."""
|
|
22
|
+
|
|
23
|
+
canonical_dialect_key = "cockroachdb"
|
|
24
|
+
|
|
25
|
+
def acquire_migration_lock(
|
|
26
|
+
self,
|
|
27
|
+
schema: str,
|
|
28
|
+
wait_timeout_seconds: int = 60,
|
|
29
|
+
) -> bool:
|
|
30
|
+
"""Acquire a CockroachDB migration lock using a committed lock row."""
|
|
31
|
+
self.create_migration_lock_table_if_not_exists(schema)
|
|
32
|
+
lock_table = self.MIGRATION_LOCK_TABLE
|
|
33
|
+
qualified_table = self.get_schema_qualified_name(schema, lock_table)
|
|
34
|
+
|
|
35
|
+
deadline = time.monotonic() + max(0, int(wait_timeout_seconds))
|
|
36
|
+
while True:
|
|
37
|
+
try:
|
|
38
|
+
self.execute_statement(
|
|
39
|
+
f"""
|
|
40
|
+
INSERT INTO {qualified_table} (lock_name, locked_at)
|
|
41
|
+
VALUES (?, CURRENT_TIMESTAMP)
|
|
42
|
+
""",
|
|
43
|
+
params=["migration"],
|
|
44
|
+
)
|
|
45
|
+
return True
|
|
46
|
+
except Exception as exc:
|
|
47
|
+
self._rollback_failed_lock_attempt()
|
|
48
|
+
if not _is_lock_contention_error(exc):
|
|
49
|
+
raise
|
|
50
|
+
if time.monotonic() >= deadline:
|
|
51
|
+
return False
|
|
52
|
+
time.sleep(min(0.2, max(0, deadline - time.monotonic())))
|
|
53
|
+
|
|
54
|
+
def release_migration_lock(self, schema: str) -> bool:
|
|
55
|
+
"""Release the CockroachDB migration lock row."""
|
|
56
|
+
if not self.table_exists(schema, self.MIGRATION_LOCK_TABLE):
|
|
57
|
+
return True
|
|
58
|
+
lock_table = self.MIGRATION_LOCK_TABLE
|
|
59
|
+
qualified_table = self.get_schema_qualified_name(schema, lock_table)
|
|
60
|
+
affected = self.execute_statement(
|
|
61
|
+
f"""
|
|
62
|
+
DELETE FROM {qualified_table}
|
|
63
|
+
WHERE lock_name = ?
|
|
64
|
+
""",
|
|
65
|
+
params=["migration"],
|
|
66
|
+
)
|
|
67
|
+
return affected > 0
|
|
68
|
+
|
|
69
|
+
def _rollback_failed_lock_attempt(self) -> None:
|
|
70
|
+
connection = getattr(self, "_connection", None)
|
|
71
|
+
if connection is not None:
|
|
72
|
+
try:
|
|
73
|
+
connection.rollback()
|
|
74
|
+
except Exception as exc:
|
|
75
|
+
message = "Could not rollback failed CockroachDB lock attempt"
|
|
76
|
+
raise RuntimeError(message) from exc
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
__all__ = ["CockroachdbProvider"]
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"""CockroachDB :class:`DialectQuirks` - inherits PostgreSQL behavior."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from db.plugins.postgresql.quirks import PostgresqlQuirks
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class CockroachdbQuirks(PostgresqlQuirks):
|
|
9
|
+
"""CockroachDB 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 = "cockroachdb") -> None:
|
|
15
|
+
super().__init__(dialect_name=dialect_name)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
__all__ = ["CockroachdbQuirks"]
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"""Redshift database provider plugin (PostgreSQL-compatible)."""
|
|
2
|
+
|
|
3
|
+
__plugin_name__ = "redshift"
|
|
4
|
+
__plugin_version__ = "1.0.0"
|
|
5
|
+
__plugin_description__ = "Redshift database provider"
|
|
6
|
+
__plugin_dialects__ = ["redshift"]
|
|
7
|
+
__plugin_transport__ = "native"
|
|
8
|
+
__plugin_class__ = "RedshiftProvider"
|
|
9
|
+
|
|
10
|
+
from .provider import RedshiftProvider
|
|
11
|
+
|
|
12
|
+
__all__ = ["RedshiftProvider"]
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"""Entry-point declaration for the Redshift plugin.
|
|
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``.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
from db.plugins.postgresql.sqlalchemy_url import build_sqlalchemy_url
|
|
13
|
+
from db.plugins.redshift.provider import RedshiftProvider
|
|
14
|
+
from db.plugins.redshift.quirks import RedshiftQuirks
|
|
15
|
+
from db.provider_registry import PluginInfo
|
|
16
|
+
|
|
17
|
+
PLUGIN: PluginInfo = PluginInfo(
|
|
18
|
+
name="redshift",
|
|
19
|
+
version="1.0.0",
|
|
20
|
+
description="Redshift database provider",
|
|
21
|
+
dialects=["redshift"],
|
|
22
|
+
provider_class=RedshiftProvider,
|
|
23
|
+
transport="native",
|
|
24
|
+
quirks_class=RedshiftQuirks,
|
|
25
|
+
config_dialect="postgresql",
|
|
26
|
+
sqlalchemy_url_builder=build_sqlalchemy_url,
|
|
27
|
+
native_driver_module="psycopg",
|
|
28
|
+
)
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"""Redshift native provider (PostgreSQL-compatible)."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from db.plugins.postgresql.provider import PostgreSqlProvider
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def _is_statement_timeout_error(error: Exception) -> bool:
|
|
9
|
+
message = str(error).lower()
|
|
10
|
+
return "statement_timeout" in message or "statement timeout" in message
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class RedshiftProvider(PostgreSqlProvider):
|
|
14
|
+
"""Redshift provider with Redshift-specific history and locking SQL."""
|
|
15
|
+
|
|
16
|
+
canonical_dialect_key = "redshift"
|
|
17
|
+
|
|
18
|
+
def acquire_migration_lock(
|
|
19
|
+
self,
|
|
20
|
+
schema: str,
|
|
21
|
+
wait_timeout_seconds: int = 60,
|
|
22
|
+
) -> bool:
|
|
23
|
+
"""Acquire a Redshift table lock on a dedicated transaction."""
|
|
24
|
+
if getattr(self, "_migration_lock_transaction", None) is not None:
|
|
25
|
+
return True
|
|
26
|
+
|
|
27
|
+
self.create_migration_lock_table_if_not_exists(schema)
|
|
28
|
+
connection = self.engine.connect()
|
|
29
|
+
transaction = connection.begin()
|
|
30
|
+
try:
|
|
31
|
+
timeout_ms = max(1, int(wait_timeout_seconds) * 1000)
|
|
32
|
+
connection.exec_driver_sql(f"SET statement_timeout = {timeout_ms}")
|
|
33
|
+
table = self.MIGRATION_LOCK_TABLE
|
|
34
|
+
qualified_table = self.get_schema_qualified_name(schema, table)
|
|
35
|
+
connection.exec_driver_sql(f"LOCK {qualified_table}")
|
|
36
|
+
except Exception as exc:
|
|
37
|
+
try:
|
|
38
|
+
transaction.rollback()
|
|
39
|
+
finally:
|
|
40
|
+
connection.close()
|
|
41
|
+
if _is_statement_timeout_error(exc):
|
|
42
|
+
return False
|
|
43
|
+
raise
|
|
44
|
+
|
|
45
|
+
self._migration_lock_connection = connection
|
|
46
|
+
self._migration_lock_transaction = transaction
|
|
47
|
+
return True
|
|
48
|
+
|
|
49
|
+
def release_migration_lock(self, schema: str) -> bool:
|
|
50
|
+
"""Release the Redshift migration lock by ending its transaction."""
|
|
51
|
+
transaction = getattr(self, "_migration_lock_transaction", None)
|
|
52
|
+
connection = getattr(self, "_migration_lock_connection", None)
|
|
53
|
+
if transaction is None or connection is None:
|
|
54
|
+
return True
|
|
55
|
+
|
|
56
|
+
try:
|
|
57
|
+
transaction.commit()
|
|
58
|
+
return True
|
|
59
|
+
except Exception:
|
|
60
|
+
try:
|
|
61
|
+
transaction.rollback()
|
|
62
|
+
except Exception:
|
|
63
|
+
pass
|
|
64
|
+
return False
|
|
65
|
+
finally:
|
|
66
|
+
try:
|
|
67
|
+
connection.close()
|
|
68
|
+
finally:
|
|
69
|
+
self._migration_lock_connection = None
|
|
70
|
+
self._migration_lock_transaction = None
|
|
71
|
+
|
|
72
|
+
def create_history_table(self, schema: str, table_name: str) -> str:
|
|
73
|
+
"""Return SQL for the Redshift migration history table."""
|
|
74
|
+
qualified_table = self.get_schema_qualified_name(schema, table_name)
|
|
75
|
+
return f"""
|
|
76
|
+
CREATE TABLE IF NOT EXISTS {qualified_table} (
|
|
77
|
+
installed_rank INTEGER IDENTITY(1,1) PRIMARY KEY,
|
|
78
|
+
version VARCHAR(50),
|
|
79
|
+
description VARCHAR(200) NOT NULL,
|
|
80
|
+
type VARCHAR(20) NOT NULL,
|
|
81
|
+
script VARCHAR(1000) NOT NULL,
|
|
82
|
+
checksum VARCHAR(64),
|
|
83
|
+
installed_by VARCHAR(100) NOT NULL,
|
|
84
|
+
installed_on TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
85
|
+
execution_time INTEGER NOT NULL,
|
|
86
|
+
success BOOLEAN NOT NULL
|
|
87
|
+
)
|
|
88
|
+
"""
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
__all__ = ["RedshiftProvider"]
|
|
@@ -0,0 +1,18 @@
|
|
|
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"]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dblift
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.5.0
|
|
4
4
|
Summary: A database migration tool that supports multiple databases with native Python drivers
|
|
5
5
|
Classifier: Development Status :: 5 - Production/Stable
|
|
6
6
|
Classifier: Intended Audience :: Developers
|
|
@@ -83,6 +83,10 @@ Provides-Extra: timescaledb
|
|
|
83
83
|
Requires-Dist: psycopg[binary]>=3.1; extra == "timescaledb"
|
|
84
84
|
Provides-Extra: citus
|
|
85
85
|
Requires-Dist: psycopg[binary]>=3.1; extra == "citus"
|
|
86
|
+
Provides-Extra: cockroachdb
|
|
87
|
+
Requires-Dist: psycopg[binary]>=3.1; extra == "cockroachdb"
|
|
88
|
+
Provides-Extra: redshift
|
|
89
|
+
Requires-Dist: psycopg[binary]>=3.1; extra == "redshift"
|
|
86
90
|
Provides-Extra: fastapi
|
|
87
91
|
Requires-Dist: fastapi>=0.100; extra == "fastapi"
|
|
88
92
|
Provides-Extra: flask
|
|
@@ -727,6 +731,8 @@ DBLift works with these databases:
|
|
|
727
731
|
| Database | Connection URL Example | Driver extra |
|
|
728
732
|
|----------|------------------------|--------------|
|
|
729
733
|
| PostgreSQL | `postgresql+psycopg://localhost:5432/mydb` | `dblift[postgresql]` |
|
|
734
|
+
| CockroachDB | `postgresql+psycopg://localhost:26257/mydb` | `dblift[cockroachdb]` |
|
|
735
|
+
| Redshift | `postgresql+psycopg://cluster.example.com:5439/dev` | `dblift[redshift]` |
|
|
730
736
|
| SQL Server | `mssql+pymssql://localhost:1433/mydb` | `dblift[sqlserver]` |
|
|
731
737
|
| Oracle | `oracle+oracledb://localhost:1521?sid=SID` | `dblift[oracle]` |
|
|
732
738
|
| MySQL | `mysql+pymysql://localhost:3306/mydb` | `dblift[mysql]` |
|
|
@@ -291,6 +291,10 @@ db/plugins/citus/__init__.py
|
|
|
291
291
|
db/plugins/citus/plugin.py
|
|
292
292
|
db/plugins/citus/provider.py
|
|
293
293
|
db/plugins/citus/quirks.py
|
|
294
|
+
db/plugins/cockroachdb/__init__.py
|
|
295
|
+
db/plugins/cockroachdb/plugin.py
|
|
296
|
+
db/plugins/cockroachdb/provider.py
|
|
297
|
+
db/plugins/cockroachdb/quirks.py
|
|
294
298
|
db/plugins/cosmosdb/__init__.py
|
|
295
299
|
db/plugins/cosmosdb/config.py
|
|
296
300
|
db/plugins/cosmosdb/plugin.py
|
|
@@ -401,6 +405,10 @@ db/plugins/postgresql/postgresql/__init__.py
|
|
|
401
405
|
db/plugins/postgresql/postgresql/history_manager.py
|
|
402
406
|
db/plugins/postgresql/postgresql/locking_manager.py
|
|
403
407
|
db/plugins/postgresql/postgresql/schema_operations.py
|
|
408
|
+
db/plugins/redshift/__init__.py
|
|
409
|
+
db/plugins/redshift/plugin.py
|
|
410
|
+
db/plugins/redshift/provider.py
|
|
411
|
+
db/plugins/redshift/quirks.py
|
|
404
412
|
db/plugins/sqlite/__init__.py
|
|
405
413
|
db/plugins/sqlite/config.py
|
|
406
414
|
db/plugins/sqlite/plugin.py
|
|
@@ -5,6 +5,7 @@ dblift = cli.main:main
|
|
|
5
5
|
alloydb = db.plugins.alloydb.plugin:PLUGIN
|
|
6
6
|
aurora-postgresql = db.plugins.aurora_postgresql.plugin:PLUGIN
|
|
7
7
|
citus = db.plugins.citus.plugin:PLUGIN
|
|
8
|
+
cockroachdb = db.plugins.cockroachdb.plugin:PLUGIN
|
|
8
9
|
cosmosdb = db.plugins.cosmosdb.plugin:PLUGIN
|
|
9
10
|
db2 = db.plugins.db2.plugin:PLUGIN
|
|
10
11
|
duckdb = db.plugins.duckdb.plugin:PLUGIN
|
|
@@ -13,6 +14,7 @@ mysql = db.plugins.mysql.plugin:PLUGIN
|
|
|
13
14
|
neon = db.plugins.neon.plugin:PLUGIN
|
|
14
15
|
oracle = db.plugins.oracle.plugin:PLUGIN
|
|
15
16
|
postgresql = db.plugins.postgresql.plugin:PLUGIN
|
|
17
|
+
redshift = db.plugins.redshift.plugin:PLUGIN
|
|
16
18
|
sqlite = db.plugins.sqlite.plugin:PLUGIN
|
|
17
19
|
sqlserver = db.plugins.sqlserver.plugin:PLUGIN
|
|
18
20
|
supabase = db.plugins.supabase.plugin:PLUGIN
|
|
@@ -23,6 +23,9 @@ psycopg[binary]>=3.1
|
|
|
23
23
|
[citus]
|
|
24
24
|
psycopg[binary]>=3.1
|
|
25
25
|
|
|
26
|
+
[cockroachdb]
|
|
27
|
+
psycopg[binary]>=3.1
|
|
28
|
+
|
|
26
29
|
[db2]
|
|
27
30
|
ibm_db>=3.2
|
|
28
31
|
ibm_db_sa>=0.4
|
|
@@ -88,6 +91,9 @@ opentelemetry-api>=1.20
|
|
|
88
91
|
[postgresql]
|
|
89
92
|
psycopg[binary]>=3.1
|
|
90
93
|
|
|
94
|
+
[redshift]
|
|
95
|
+
psycopg[binary]>=3.1
|
|
96
|
+
|
|
91
97
|
[sqlserver]
|
|
92
98
|
pymssql>=2.3
|
|
93
99
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "dblift"
|
|
7
|
-
version = "2.
|
|
7
|
+
version = "2.5.0"
|
|
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"
|
|
@@ -61,6 +61,8 @@ alloydb = "db.plugins.alloydb.plugin:PLUGIN"
|
|
|
61
61
|
yugabytedb = "db.plugins.yugabytedb.plugin:PLUGIN"
|
|
62
62
|
timescaledb = "db.plugins.timescaledb.plugin:PLUGIN"
|
|
63
63
|
citus = "db.plugins.citus.plugin:PLUGIN"
|
|
64
|
+
cockroachdb = "db.plugins.cockroachdb.plugin:PLUGIN"
|
|
65
|
+
redshift = "db.plugins.redshift.plugin:PLUGIN"
|
|
64
66
|
|
|
65
67
|
# CLI command parser extensions (third-party packages can add subcommands
|
|
66
68
|
# by loading a function that receives the top-level ArgumentParser).
|
|
@@ -131,6 +133,8 @@ alloydb = ["psycopg[binary]>=3.1"]
|
|
|
131
133
|
yugabytedb = ["psycopg[binary]>=3.1"]
|
|
132
134
|
timescaledb = ["psycopg[binary]>=3.1"]
|
|
133
135
|
citus = ["psycopg[binary]>=3.1"]
|
|
136
|
+
cockroachdb = ["psycopg[binary]>=3.1"]
|
|
137
|
+
redshift = ["psycopg[binary]>=3.1"]
|
|
134
138
|
fastapi = ["fastapi>=0.100"]
|
|
135
139
|
flask = ["flask>=2.3"]
|
|
136
140
|
django = ["Django>=4.2"]
|
|
@@ -672,9 +676,9 @@ warn_unused_ignores = true
|
|
|
672
676
|
strict_equality = true
|
|
673
677
|
|
|
674
678
|
# strict db/plugins/<pg-compatible> — thin PostgreSQL-derived plugins (Neon,
|
|
675
|
-
# Supabase, Aurora PostgreSQL, AlloyDB, YugabyteDB, TimescaleDB, Citus
|
|
676
|
-
# subclasses the (strict) PostgreSQL provider/
|
|
677
|
-
# is safe.
|
|
679
|
+
# Supabase, Aurora PostgreSQL, AlloyDB, YugabyteDB, TimescaleDB, Citus,
|
|
680
|
+
# CockroachDB, Redshift). Each subclasses the (strict) PostgreSQL provider/
|
|
681
|
+
# quirks, so disallow_subclassing_any is safe.
|
|
678
682
|
[[tool.mypy.overrides]]
|
|
679
683
|
module = [
|
|
680
684
|
"db.plugins.neon",
|
|
@@ -705,6 +709,14 @@ module = [
|
|
|
705
709
|
"db.plugins.citus.plugin",
|
|
706
710
|
"db.plugins.citus.provider",
|
|
707
711
|
"db.plugins.citus.quirks",
|
|
712
|
+
"db.plugins.cockroachdb",
|
|
713
|
+
"db.plugins.cockroachdb.plugin",
|
|
714
|
+
"db.plugins.cockroachdb.provider",
|
|
715
|
+
"db.plugins.cockroachdb.quirks",
|
|
716
|
+
"db.plugins.redshift",
|
|
717
|
+
"db.plugins.redshift.plugin",
|
|
718
|
+
"db.plugins.redshift.provider",
|
|
719
|
+
"db.plugins.redshift.quirks",
|
|
708
720
|
]
|
|
709
721
|
disallow_any_generics = true
|
|
710
722
|
disallow_subclassing_any = true
|
|
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
|