snowflake-data-validation 1.3.3__tar.gz → 1.3.4__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.
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/PKG-INFO +2 -2
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/README.md +1 -1
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/__version__.py +1 -1
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/public/__init__.py +6 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/public/_internal.py +2 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/public/data_validation_api.py +178 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/public/model/query_execution_result.py +2 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/redshift/redshift_cli.py +1 -1
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_sql_server.py +16 -4
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_cli.py +1 -1
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/teradata/teradata_cli.py +1 -1
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/validation/validation_report_buffer.py +2 -0
- snowflake_data_validation-1.3.4/tests/unit/test_escape_odbc_value.py +94 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/.gitignore +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/LICENSE +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/pyproject.toml +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/__main__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/common_cli/cli_partitioning.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/common_cli/cli_sync_validation.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/comparison_orchestrator.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/configuration/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/configuration/configuration_loader.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/configuration/model/configuration_model.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/configuration/model/connection_types.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/configuration/model/connections/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/configuration/model/logging_configuration.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/configuration/model/table_configuration.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/configuration/model/validation_configuration.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/configuration/model/view_configuration.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/configuration/singleton.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/connector/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/connector/connector_base.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/connector/connector_factory_base.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/connector/connector_failure_tracker.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/executer/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/executer/async_generation_executor.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/executer/async_validation_executor.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/executer/base_validation_executor.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/executer/executor_factory.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/executer/extractor_types.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/executer/source_validation_executor.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/executer/sync_validation_executor.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/extractor/metadata_extractor_base.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/extractor/sql_queries_template_generator.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/main_cli.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/orchestration/console_progress_reporter.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/orchestration/html_report/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/orchestration/html_report/html_report_builder.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/orchestration/html_report/report_metadata.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/orchestration/parallel_execution_engine.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/orchestration/table_metadata_processor.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/orchestration/validation_progress_reporter.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/orchestration/view_preprocessor.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/public/DATA_VALIDATION_API_OVERVIEW.md +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/public/configuration/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/public/connectors/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/public/context/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/public/enums/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/public/generators/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/public/metadata/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/public/model/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/public/model/data_validation_exception.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/public/model/generated_query.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/public/model/query_generator_factory.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/public/model/validation_result.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/query/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/query/query_generator_base.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/redshift/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/redshift/connector/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/redshift/connector/connector_factory_redshift.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/redshift/connector/connector_redshift.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/redshift/extractor/metadata_extractor_redshift.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/redshift/extractor/redshift_cte_generator.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunks_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_columns_cte_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_extract_chunks_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_insert_chunk_row_md5_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/redshift/model/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/redshift/model/redshift_credentials_connection.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/redshift/query/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/redshift/query/query_generator_redshift.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/redshift/redshift_arguments_manager.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/redshift/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/redshift/script_writer/script_writer_redshift.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/script_writer/script_writer_base.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/snowflake/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_factory_snowflake.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_snowflake.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/metadata_extractor_snowflake.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/snowflake_cte_generator.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_concatenated_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_md5_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunks_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_columns_cte_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_extract_chunks_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_case_sensitive_columns.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_insert_chunk_row_md5_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_temporary_table_from_view_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/snowflake/model/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_credentials_connection.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_default_connection.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_named_connection.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/snowflake/query/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/snowflake/query/query_generator_snowflake.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/snowflake/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/snowflake/script_writer/script_writer_snowflake.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/snowflake/snowflake_arguments_manager.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/snowflake/snowflake_cli.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/sqlserver/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/sqlserver/connector/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_factory_sql_server.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/metadata_extractor_sqlserver.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/sqlserver_cte_generator.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_chunks_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_columns_cte_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_compute_md5_sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_extract_chunks_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_temporary_table_internal_identifier_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_temporary_table_from_view_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/sqlserver/model/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/sqlserver/model/sqlserver_credentials_connection.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/sqlserver/query/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/sqlserver/query/query_generator_sqlserver.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/script_writer_sqlserver.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_arguments_manager.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/table_partitioning_strategy.md +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/teradata/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/teradata/connector/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/teradata/connector/connector_factory_teradata.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/teradata/connector/connector_teradata.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/teradata/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/teradata/extractor/metadata_extractor_teradata.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_chunks_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_columns_cte_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_compute_md5_sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_concatenated.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_md5.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_extract_chunks_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/teradata/extractor/teradata_cte_generator.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/teradata/model/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/teradata/model/teradata_credentials_connection.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/teradata/query/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/teradata/query/query_generator_teradata.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/teradata/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/teradata/script_writer/script_writer_teradata.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/teradata/teradata_arguments_manager.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/utils/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/utils/arguments_manager_base.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/utils/arguments_manager_factory.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/utils/base_output_handler.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/utils/column_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/utils/configuration_file_editor.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/utils/configuration_file_generator.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/utils/configuration_file_synchronizer.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/utils/connection_pool.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/utils/connector_factory.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/utils/console_output_handler.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/utils/constants.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/utils/context.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/utils/cpu_optimizer.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/utils/helper.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/utils/helpers/helper_database.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/utils/helpers/helper_dataframe.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/utils/helpers/helper_io.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/utils/helpers/helper_misc.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/utils/helpers/helper_query_result.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/utils/helpers/helper_templates.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/utils/logging_config.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/utils/logging_utils.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/utils/model/chunk.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/utils/model/column_metadata.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/utils/model/table_column_metadata.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/utils/model/table_context.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/utils/model/templates_loader_manager.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/utils/progress_reporter.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/utils/row_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/utils/run_context.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/utils/telemetry.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/utils/templates/configuration_file_templates.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/utils/thread_safe_singleton.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/utils/validation_utils.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/validation/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/validation/cell_data_validator.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/validation/data_validator_base.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/validation/metrics_data_validator.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/validation/results_summary_report.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/validation/row_data_validator.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/validation/row_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/validation/schema_data_validator.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/validation/validation_database/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/validation/validation_database/sqlite_validation_connection.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/validation/validation_database/validation_database_connection_base.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/validation/validation_database_manager.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/src/snowflake/snowflake_data_validation/validation/validation_execution_context.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/.coveragerc +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/integration/.coveragerc +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/integration/Redshift/test_metadata_extractor_integration.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/integration/test_async_generation_integration.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/integration/test_async_validation_integration.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/integration/test_reference_integration.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/integration/test_source_validation_integration.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/integration/test_sync_validation_integration.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/Redshift/cli/test_redshift_cli_general.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/Redshift/cli/test_redshift_cli_generate_validation_scripts.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/Redshift/cli/test_redshift_cli_get_configuration_files.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/Redshift/cli/test_redshift_cli_run_async_validation.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/Redshift/cli/test_redshift_cli_run_validation.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/Redshift/cli/test_redshift_cli_run_validation_ipc.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/Redshift/model/test_redshift_credentials_connection.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/Redshift/query/test_query_generator_redshift.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/Redshift/script_writer/test_script_writer_redshift.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/Redshift/test_connector_redshift.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/Redshift/test_redshift_arguments_manager.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/Redshift/test_redshift_cte_generator.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/Redshift/test_redshift_metrics_templates.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/Teradata/test_connector_teradata.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/Teradata/test_metadata_extractor_teradata.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/Teradata/test_query_generator_teradata.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/Teradata/test_teradata_cli.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/Teradata/test_teradata_metrics_validation.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/assets/custom_templates_loader/snowflake_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/assets/custom_templates_loader/snowflake_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/assets/custom_templates_loader/snowflake_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/assets/test_configuration_loader/test_load_configuration_model/conf.yaml +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/assets/test_configuration_loader/test_load_configuration_model_reading_file_exception/conf.yaml +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/assets/test_helpers/dummy_configuration_file.json +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/assets/test_helpers/dummy_connection_source_db.toml +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/assets/test_helpers/dummy_datatypes_normalization_template.yaml +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/assets/test_helpers/dummy_datatypes_template.yaml +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/assets/test_helpers/dummy_metrics_template.yaml +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/assets/test_helpers/dummy_metrics_template_datatypes.yaml +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/assets/test_helpers/dummy_template.csv +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/assets/test_helpers/not_valid_format.yaml +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/assets/test_templates_loader_manager/snowflake_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/assets/test_templates_loader_manager/snowflake_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_arguments_manager_base.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_arguments_manager_factory.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_cell_data_validator.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_column_metadata.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_column_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_comparison_orchestrator.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_configuration_file_editor.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_configuration_file_synchronizer.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_configuration_loader.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_configuration_model.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_connection_pool.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_connector_failure_tracker.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_connector_snowflake.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_console_progress_reporter.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_cpu_optimizer.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_data_validator.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_executor_factory.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_helper_dataframe.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_helpers.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_html_report_builder.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_logging_config.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_metrics_templates.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_report_metadata.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_row_data_validator.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_row_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_row_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_snowflake_arguments_manager.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_snowflake_cli.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_source_validation_executor.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_sqlite_validation_connection.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_sqlserver_arguments_manager.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_sqlserver_cli.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_sqlserver_multi_version_support.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_table_column_metadata_model.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_table_configuration.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_table_context.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_table_metadata_processor.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_telemetry.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_templates_loader_manager.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_validation_configuration.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_validation_database_connection.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_validation_execution_context.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_validation_progress_reporter.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/test_view_configuration.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/utils/__init__.py +0 -0
- {snowflake_data_validation-1.3.3 → snowflake_data_validation-1.3.4}/tests/unit/utils/test_constants.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: snowflake-data-validation
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.4
|
|
4
4
|
Summary: Snowflake Data Validation
|
|
5
5
|
Project-URL: Bug Tracker, https://github.com/snowflake-eng/migrations-data-validation/issues
|
|
6
6
|
Project-URL: Source code, https://github.com/snowflake-eng/migrations-data-validation/
|
|
@@ -186,7 +186,7 @@ This project is licensed under the Snowflake Conversion Software Terms. See the
|
|
|
186
186
|
## 🆘 Support
|
|
187
187
|
|
|
188
188
|
- **Documentation**: [Full documentation](https://docs.snowflake.com/en/migrations/snowconvert-docs/data-validation-cli/CLI_QUICK_REFERENCE)
|
|
189
|
-
- **Issues**: [GitHub Issues](https://github.com/
|
|
189
|
+
- **Issues**: [GitHub Issues](https://github.com/snowflake-eng/migrations-data-validation/issues)
|
|
190
190
|
|
|
191
191
|
---
|
|
192
192
|
|
|
@@ -110,7 +110,7 @@ This project is licensed under the Snowflake Conversion Software Terms. See the
|
|
|
110
110
|
## 🆘 Support
|
|
111
111
|
|
|
112
112
|
- **Documentation**: [Full documentation](https://docs.snowflake.com/en/migrations/snowconvert-docs/data-validation-cli/CLI_QUICK_REFERENCE)
|
|
113
|
-
- **Issues**: [GitHub Issues](https://github.com/
|
|
113
|
+
- **Issues**: [GitHub Issues](https://github.com/snowflake-eng/migrations-data-validation/issues)
|
|
114
114
|
|
|
115
115
|
---
|
|
116
116
|
|
|
@@ -42,6 +42,9 @@ from snowflake.snowflake_data_validation.public.data_validation_api import (
|
|
|
42
42
|
build_validation_file_path,
|
|
43
43
|
compare_md5_chunks,
|
|
44
44
|
compare_md5_rows_chunk,
|
|
45
|
+
create_source_table_context_from_configuration,
|
|
46
|
+
create_table_context,
|
|
47
|
+
create_target_table_context_from_configuration,
|
|
45
48
|
execute_query,
|
|
46
49
|
execute_query_from_table_configuration,
|
|
47
50
|
execute_statement,
|
|
@@ -155,6 +158,9 @@ __all__ = [
|
|
|
155
158
|
"build_validation_file_path",
|
|
156
159
|
"compare_md5_chunks",
|
|
157
160
|
"compare_md5_rows_chunk",
|
|
161
|
+
"create_source_table_context_from_configuration",
|
|
162
|
+
"create_table_context",
|
|
163
|
+
"create_target_table_context_from_configuration",
|
|
158
164
|
"execute_query",
|
|
159
165
|
"execute_query_from_table_configuration",
|
|
160
166
|
"execute_statement",
|
|
@@ -13,7 +13,10 @@
|
|
|
13
13
|
# See the License for the specific language governing permissions and
|
|
14
14
|
# limitations under the License.
|
|
15
15
|
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
|
|
16
18
|
from collections.abc import Callable
|
|
19
|
+
from pathlib import Path
|
|
17
20
|
|
|
18
21
|
import pandas as pd
|
|
19
22
|
|
|
@@ -54,15 +57,23 @@ from snowflake.snowflake_data_validation.utils.constants import (
|
|
|
54
57
|
ROW_COUNT_KEY,
|
|
55
58
|
SCHEMA_NAME_KEY,
|
|
56
59
|
TABLE_NAME_KEY,
|
|
60
|
+
ObjectType,
|
|
61
|
+
Origin,
|
|
57
62
|
Platform,
|
|
58
63
|
)
|
|
59
64
|
from snowflake.snowflake_data_validation.utils.helpers.helper_database import (
|
|
60
65
|
HelperDatabase,
|
|
61
66
|
)
|
|
67
|
+
from snowflake.snowflake_data_validation.utils.model.column_metadata import (
|
|
68
|
+
ColumnMetadata,
|
|
69
|
+
)
|
|
62
70
|
from snowflake.snowflake_data_validation.utils.model.table_column_metadata import (
|
|
63
71
|
TableColumnMetadata,
|
|
64
72
|
)
|
|
65
73
|
from snowflake.snowflake_data_validation.utils.model.table_context import TableContext
|
|
74
|
+
from snowflake.snowflake_data_validation.utils.model.templates_loader_manager import (
|
|
75
|
+
TemplatesLoaderManager,
|
|
76
|
+
)
|
|
66
77
|
from snowflake.snowflake_data_validation.validation.cell_data_validator import (
|
|
67
78
|
CellDataValidator,
|
|
68
79
|
)
|
|
@@ -1288,3 +1299,170 @@ def build_validation_file_path(
|
|
|
1288
1299
|
filename = f"{table_context.fully_qualified_name}.csv"
|
|
1289
1300
|
|
|
1290
1301
|
return os.path.join(base_directory, validation_type, filename)
|
|
1302
|
+
|
|
1303
|
+
|
|
1304
|
+
def create_table_context(
|
|
1305
|
+
columns: list[ColumnMetadata],
|
|
1306
|
+
database_name: str,
|
|
1307
|
+
fully_qualified_name: str,
|
|
1308
|
+
id: int,
|
|
1309
|
+
internal_fully_qualified_name: str,
|
|
1310
|
+
internal_table_name: str,
|
|
1311
|
+
object_type: ObjectType,
|
|
1312
|
+
origin: Origin,
|
|
1313
|
+
platform: Platform,
|
|
1314
|
+
queries_templates_directory_path: str,
|
|
1315
|
+
row_count: int,
|
|
1316
|
+
run_id: str,
|
|
1317
|
+
run_start_time: str,
|
|
1318
|
+
schema_name: str,
|
|
1319
|
+
table_name: str,
|
|
1320
|
+
templates_directory_path: str,
|
|
1321
|
+
apply_metric_column_modifier: bool = True,
|
|
1322
|
+
chunk_number: int = 1,
|
|
1323
|
+
column_mappings: dict[str, str] = None,
|
|
1324
|
+
column_selection_list: list[str] = None,
|
|
1325
|
+
exclude_metrics: bool = False,
|
|
1326
|
+
index_column_collection: list[str] = None,
|
|
1327
|
+
is_case_sensitive: bool = False,
|
|
1328
|
+
is_exclusion_mode: bool = False,
|
|
1329
|
+
max_failed_rows_number: int = 100,
|
|
1330
|
+
where_clause: str = "",
|
|
1331
|
+
) -> TableContext:
|
|
1332
|
+
"""Create a TableContext with the provided parameters."""
|
|
1333
|
+
has_where_clause = where_clause != ""
|
|
1334
|
+
is_temporary_table = object_type != ObjectType.TABLE
|
|
1335
|
+
sql_generator = SQLQueriesTemplateGenerator(
|
|
1336
|
+
jinja_templates_folder_path=Path(queries_templates_directory_path)
|
|
1337
|
+
)
|
|
1338
|
+
templates_loader_manager = TemplatesLoaderManager(
|
|
1339
|
+
templates_directory_path=Path(templates_directory_path),
|
|
1340
|
+
platform=platform,
|
|
1341
|
+
)
|
|
1342
|
+
if column_mappings is None:
|
|
1343
|
+
column_mappings = {}
|
|
1344
|
+
|
|
1345
|
+
if column_selection_list is None:
|
|
1346
|
+
column_selection_list = []
|
|
1347
|
+
|
|
1348
|
+
if index_column_collection is None:
|
|
1349
|
+
index_column_collection = []
|
|
1350
|
+
|
|
1351
|
+
table_context = TableContext(
|
|
1352
|
+
apply_metric_column_modifier=apply_metric_column_modifier,
|
|
1353
|
+
chunk_number=chunk_number,
|
|
1354
|
+
column_mappings=column_mappings,
|
|
1355
|
+
column_selection_list=column_selection_list,
|
|
1356
|
+
columns=columns,
|
|
1357
|
+
database_name=database_name,
|
|
1358
|
+
exclude_metrics=exclude_metrics,
|
|
1359
|
+
fully_qualified_name=fully_qualified_name,
|
|
1360
|
+
has_where_clause=has_where_clause,
|
|
1361
|
+
id=id,
|
|
1362
|
+
internal_fully_qualified_name=internal_fully_qualified_name,
|
|
1363
|
+
internal_table_name=internal_table_name,
|
|
1364
|
+
is_case_sensitive=is_case_sensitive,
|
|
1365
|
+
is_exclusion_mode=is_exclusion_mode,
|
|
1366
|
+
is_temporary_table=is_temporary_table,
|
|
1367
|
+
max_failed_rows_number=max_failed_rows_number,
|
|
1368
|
+
object_type=object_type,
|
|
1369
|
+
origin=origin,
|
|
1370
|
+
platform=platform,
|
|
1371
|
+
row_count=row_count,
|
|
1372
|
+
run_id=run_id,
|
|
1373
|
+
run_start_time=run_start_time,
|
|
1374
|
+
schema_name=schema_name,
|
|
1375
|
+
sql_generator=sql_generator,
|
|
1376
|
+
table_name=table_name,
|
|
1377
|
+
templates_loader_manager=templates_loader_manager,
|
|
1378
|
+
user_index_column_collection=index_column_collection,
|
|
1379
|
+
where_clause=where_clause,
|
|
1380
|
+
)
|
|
1381
|
+
|
|
1382
|
+
return table_context
|
|
1383
|
+
|
|
1384
|
+
|
|
1385
|
+
def create_source_table_context_from_configuration(
|
|
1386
|
+
table_configuration: TableConfiguration,
|
|
1387
|
+
columns: list[ColumnMetadata],
|
|
1388
|
+
platform: Platform,
|
|
1389
|
+
row_count: int,
|
|
1390
|
+
queries_templates_directory_path: str,
|
|
1391
|
+
templates_directory_path: str,
|
|
1392
|
+
run_id: str,
|
|
1393
|
+
run_start_time: str,
|
|
1394
|
+
) -> TableContext:
|
|
1395
|
+
"""Create a source TableContext from a given TableConfiguration."""
|
|
1396
|
+
source_table_context = create_table_context(
|
|
1397
|
+
apply_metric_column_modifier=table_configuration.apply_metric_column_modifier,
|
|
1398
|
+
chunk_number=table_configuration.chunk_number,
|
|
1399
|
+
column_mappings=table_configuration.column_mappings,
|
|
1400
|
+
column_selection_list=table_configuration.column_selection_list,
|
|
1401
|
+
columns=columns,
|
|
1402
|
+
database_name=table_configuration.source_database,
|
|
1403
|
+
exclude_metrics=table_configuration.exclude_metrics,
|
|
1404
|
+
fully_qualified_name=table_configuration.fully_qualified_name,
|
|
1405
|
+
id=table_configuration.id,
|
|
1406
|
+
index_column_collection=table_configuration.index_column_list,
|
|
1407
|
+
internal_fully_qualified_name=table_configuration.internal_fully_qualified_name,
|
|
1408
|
+
internal_table_name=table_configuration.internal_source_table,
|
|
1409
|
+
is_case_sensitive=table_configuration.is_case_sensitive,
|
|
1410
|
+
is_exclusion_mode=table_configuration.use_column_selection_as_exclude_list,
|
|
1411
|
+
max_failed_rows_number=table_configuration.max_failed_rows_number,
|
|
1412
|
+
object_type=table_configuration.object_type,
|
|
1413
|
+
origin=Origin.SOURCE,
|
|
1414
|
+
platform=platform,
|
|
1415
|
+
queries_templates_directory_path=queries_templates_directory_path,
|
|
1416
|
+
row_count=row_count,
|
|
1417
|
+
run_id=run_id,
|
|
1418
|
+
run_start_time=run_start_time,
|
|
1419
|
+
schema_name=table_configuration.source_schema,
|
|
1420
|
+
table_name=table_configuration.source_table,
|
|
1421
|
+
templates_directory_path=templates_directory_path,
|
|
1422
|
+
where_clause=table_configuration.where_clause,
|
|
1423
|
+
)
|
|
1424
|
+
|
|
1425
|
+
return source_table_context
|
|
1426
|
+
|
|
1427
|
+
|
|
1428
|
+
def create_target_table_context_from_configuration(
|
|
1429
|
+
table_configuration: TableConfiguration,
|
|
1430
|
+
columns: list[ColumnMetadata],
|
|
1431
|
+
platform: Platform,
|
|
1432
|
+
row_count: int,
|
|
1433
|
+
queries_templates_directory_path: str,
|
|
1434
|
+
templates_directory_path: str,
|
|
1435
|
+
run_id: str,
|
|
1436
|
+
run_start_time: str,
|
|
1437
|
+
) -> TableContext:
|
|
1438
|
+
"""Create a target TableContext from a given TableConfiguration."""
|
|
1439
|
+
target_table_context = create_table_context(
|
|
1440
|
+
apply_metric_column_modifier=table_configuration.apply_metric_column_modifier,
|
|
1441
|
+
chunk_number=table_configuration.chunk_number,
|
|
1442
|
+
column_mappings=table_configuration.column_mappings,
|
|
1443
|
+
column_selection_list=table_configuration.column_selection_list,
|
|
1444
|
+
columns=columns,
|
|
1445
|
+
database_name=table_configuration.target_database,
|
|
1446
|
+
exclude_metrics=table_configuration.exclude_metrics,
|
|
1447
|
+
fully_qualified_name=table_configuration.target_fully_qualified_name,
|
|
1448
|
+
id=table_configuration.id,
|
|
1449
|
+
index_column_collection=table_configuration.target_index_column_list,
|
|
1450
|
+
internal_fully_qualified_name=table_configuration.internal_target_fully_qualified_name,
|
|
1451
|
+
internal_table_name=table_configuration.internal_target_name,
|
|
1452
|
+
is_case_sensitive=table_configuration.is_case_sensitive,
|
|
1453
|
+
is_exclusion_mode=table_configuration.use_column_selection_as_exclude_list,
|
|
1454
|
+
max_failed_rows_number=table_configuration.max_failed_rows_number,
|
|
1455
|
+
object_type=table_configuration.object_type,
|
|
1456
|
+
origin=Origin.TARGET,
|
|
1457
|
+
platform=platform,
|
|
1458
|
+
queries_templates_directory_path=queries_templates_directory_path,
|
|
1459
|
+
row_count=row_count,
|
|
1460
|
+
run_id=run_id,
|
|
1461
|
+
run_start_time=run_start_time,
|
|
1462
|
+
schema_name=table_configuration.target_schema,
|
|
1463
|
+
table_name=table_configuration.target_name,
|
|
1464
|
+
templates_directory_path=templates_directory_path,
|
|
1465
|
+
where_clause=table_configuration.target_where_clause,
|
|
1466
|
+
)
|
|
1467
|
+
|
|
1468
|
+
return target_table_context
|
|
@@ -428,7 +428,7 @@ def redshift_run_validation_ipc(
|
|
|
428
428
|
mode=NAME_CONNECTION_MODE,
|
|
429
429
|
name=snow_connection_name,
|
|
430
430
|
)
|
|
431
|
-
elif snow_account and snow_password:
|
|
431
|
+
elif snow_account and (snow_password or snow_private_key_file):
|
|
432
432
|
snow_credential_object = build_snowflake_credentials(
|
|
433
433
|
account=snow_account,
|
|
434
434
|
username=snow_username,
|
|
@@ -74,6 +74,15 @@ def import_azure_identity():
|
|
|
74
74
|
NAMED_INSTANCE_PATTERN_DETAILED = r"^[a-zA-Z0-9.-]+\\[a-zA-Z0-9_]+$"
|
|
75
75
|
DEFAULT_SQL_SERVER_PORT = 1433
|
|
76
76
|
|
|
77
|
+
def _escape_odbc_value(value: str) -> str:
|
|
78
|
+
"""Escape a value for safe inclusion in an ODBC connection string.
|
|
79
|
+
|
|
80
|
+
ODBC uses `;` as a key-value separator and `{`/`}` as quoting
|
|
81
|
+
characters. Wrapping in braces and doubling `}` is always safe,
|
|
82
|
+
even when the value has no special characters.
|
|
83
|
+
"""
|
|
84
|
+
return "{" + value.replace("}", "}}") + "}"
|
|
85
|
+
|
|
77
86
|
# Azure SQL Database scope for token authentication
|
|
78
87
|
AZURE_SQL_SCOPE = "https://database.windows.net/.default"
|
|
79
88
|
|
|
@@ -575,14 +584,17 @@ class ConnectorSqlServer(BaseConnector):
|
|
|
575
584
|
|
|
576
585
|
else:
|
|
577
586
|
# SQL Server Authentication (username/password)
|
|
587
|
+
safe_user = _escape_odbc_value(user) if user else user
|
|
588
|
+
safe_password = _escape_odbc_value(password) if password else password
|
|
589
|
+
|
|
578
590
|
if is_named_instance and not is_custom_port:
|
|
579
591
|
self.string_connection = SQLSERVER_CONNECTION_STRING_NAMED.format(
|
|
580
592
|
driver=driver,
|
|
581
593
|
server=host,
|
|
582
594
|
port=port,
|
|
583
595
|
database=database,
|
|
584
|
-
user=
|
|
585
|
-
password=
|
|
596
|
+
user=safe_user,
|
|
597
|
+
password=safe_password,
|
|
586
598
|
trust_server_certificate=trust_server_certificate,
|
|
587
599
|
encrypt=encrypt,
|
|
588
600
|
)
|
|
@@ -592,8 +604,8 @@ class ConnectorSqlServer(BaseConnector):
|
|
|
592
604
|
server=host,
|
|
593
605
|
port=port,
|
|
594
606
|
database=database,
|
|
595
|
-
user=
|
|
596
|
-
password=
|
|
607
|
+
user=safe_user,
|
|
608
|
+
password=safe_password,
|
|
597
609
|
trust_server_certificate=trust_server_certificate,
|
|
598
610
|
encrypt=encrypt,
|
|
599
611
|
)
|
|
@@ -534,7 +534,7 @@ def sqlserver_run_validation_ipc(
|
|
|
534
534
|
mode=NAME_CONNECTION_MODE,
|
|
535
535
|
name=snow_connection_name,
|
|
536
536
|
)
|
|
537
|
-
elif snow_account and snow_password:
|
|
537
|
+
elif snow_account and (snow_password or snow_private_key_file):
|
|
538
538
|
# Build Snowflake credentials
|
|
539
539
|
snow_credential_object = build_snowflake_credentials(
|
|
540
540
|
account=snow_account,
|
|
@@ -709,7 +709,7 @@ def teradata_run_validation_ipc(
|
|
|
709
709
|
mode=NAME_CONNECTION_MODE,
|
|
710
710
|
name=snow_connection_name,
|
|
711
711
|
)
|
|
712
|
-
elif snow_account and snow_password:
|
|
712
|
+
elif snow_account and (snow_password or snow_private_key_file):
|
|
713
713
|
# Build Snowflake credentials target
|
|
714
714
|
snow_credential_object = build_snowflake_credentials(
|
|
715
715
|
account=snow_account,
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Copyright 2026 Snowflake Inc.
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
"""Unit tests for _escape_odbc_value in ConnectorSqlServer."""
|
|
17
|
+
|
|
18
|
+
import pytest
|
|
19
|
+
|
|
20
|
+
from snowflake.snowflake_data_validation.sqlserver.connector.connector_sql_server import (
|
|
21
|
+
SQLSERVER_CONNECTION_STRING,
|
|
22
|
+
_escape_odbc_value,
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class TestEscapeOdbcValue:
|
|
27
|
+
"""Tests for _escape_odbc_value ODBC connection string escaping."""
|
|
28
|
+
|
|
29
|
+
def test_plain_password(self):
|
|
30
|
+
assert _escape_odbc_value("SimplePass1!") == "{SimplePass1!}"
|
|
31
|
+
|
|
32
|
+
def test_semicolon(self):
|
|
33
|
+
assert _escape_odbc_value("Semi;Colon123@") == "{Semi;Colon123@}"
|
|
34
|
+
|
|
35
|
+
def test_opening_brace_at_start(self):
|
|
36
|
+
assert _escape_odbc_value("{StartBrace1!") == "{{StartBrace1!}"
|
|
37
|
+
|
|
38
|
+
def test_closing_brace_doubled(self):
|
|
39
|
+
assert _escape_odbc_value("Pass}word1!") == "{Pass}}word1!}"
|
|
40
|
+
|
|
41
|
+
def test_both_braces(self):
|
|
42
|
+
assert _escape_odbc_value("a{b}c") == "{a{b}}c}"
|
|
43
|
+
|
|
44
|
+
def test_semicolon_and_braces(self):
|
|
45
|
+
assert _escape_odbc_value("Semi;{Colon}123@") == "{Semi;{Colon}}123@}"
|
|
46
|
+
|
|
47
|
+
def test_multiple_semicolons(self):
|
|
48
|
+
assert _escape_odbc_value("a;b;c;d") == "{a;b;c;d}"
|
|
49
|
+
|
|
50
|
+
def test_multiple_closing_braces(self):
|
|
51
|
+
assert _escape_odbc_value("a}}b") == "{a}}}}b}"
|
|
52
|
+
|
|
53
|
+
def test_empty_string(self):
|
|
54
|
+
assert _escape_odbc_value("") == "{}"
|
|
55
|
+
|
|
56
|
+
@pytest.mark.parametrize(
|
|
57
|
+
"char",
|
|
58
|
+
["=", " ", "\\", "'", '"', "%", "&", "@", "#", "]", "["],
|
|
59
|
+
)
|
|
60
|
+
def test_non_special_chars_safe(self, char):
|
|
61
|
+
pwd = f"Pass{char}word1!"
|
|
62
|
+
result = _escape_odbc_value(pwd)
|
|
63
|
+
assert result == "{" + pwd + "}"
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class TestEscapedPasswordInConnectionString:
|
|
67
|
+
"""Verify escaped passwords produce valid ODBC connection strings."""
|
|
68
|
+
|
|
69
|
+
PARAMS = dict(
|
|
70
|
+
driver="ODBC Driver 18 for SQL Server",
|
|
71
|
+
server="127.0.0.1",
|
|
72
|
+
port=1433,
|
|
73
|
+
database="testdb",
|
|
74
|
+
user="sa",
|
|
75
|
+
trust_server_certificate="yes",
|
|
76
|
+
encrypt="yes",
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
def test_semicolon_not_split(self):
|
|
80
|
+
safe = _escape_odbc_value("Semi;Colon123@")
|
|
81
|
+
conn_str = SQLSERVER_CONNECTION_STRING.format(password=safe, **self.PARAMS)
|
|
82
|
+
assert "PWD={Semi;Colon123@};" in conn_str
|
|
83
|
+
assert "Encrypt=yes" in conn_str
|
|
84
|
+
|
|
85
|
+
def test_brace_at_start_not_misinterpreted(self):
|
|
86
|
+
safe = _escape_odbc_value("{StartBrace1!")
|
|
87
|
+
conn_str = SQLSERVER_CONNECTION_STRING.format(password=safe, **self.PARAMS)
|
|
88
|
+
assert "PWD={{StartBrace1!};" in conn_str
|
|
89
|
+
|
|
90
|
+
def test_plain_password_in_connection_string(self):
|
|
91
|
+
safe = _escape_odbc_value("NormalPass1!")
|
|
92
|
+
conn_str = SQLSERVER_CONNECTION_STRING.format(password=safe, **self.PARAMS)
|
|
93
|
+
assert "PWD={NormalPass1!};" in conn_str
|
|
94
|
+
assert "UID=sa;" in conn_str
|
|
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
|