snowflake-data-validation 1.45.3__tar.gz → 1.45.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.45.3 → snowflake_data_validation-1.45.4}/PKG-INFO +12 -1
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/README.md +11 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/pyproject.toml +1 -1
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/bigquery/query/query_generator_bigquery.py +1 -1
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/query_generator_base.py +5 -12
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_column_metrics_templates.yaml +30 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/query/query_generator_redshift.py +26 -28
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_column_metrics_templates.yaml +30 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_datatypes_normalization_templates.yaml +1 -1
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/query/query_generator_snowflake.py +9 -7
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_table_metadata_query.sql.j2 +5 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/query/query_generator_teradata.py +2 -1
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/constants.py +1 -2
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/iceberg_dv_common.py +100 -17
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/iso_dv_common.py +17 -4
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/model/table_context.py +0 -3
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Teradata/test_teradata_table_metadata_float_precision.py +2 -2
- snowflake_data_validation-1.45.4/tests/unit/Teradata/test_teradata_unicode_character_length.py +98 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/query/test_normalization_render_context.py +0 -1
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_iceberg_dv_l3_normalization.py +48 -22
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_iso_dv_common.py +44 -0
- snowflake_data_validation-1.45.4/tests/unit/test_redshift_iceberg_timestamp_metrics.py +175 -0
- snowflake_data_validation-1.45.3/tests/unit/test_redshift_iceberg_timestamp_metrics.py +0 -94
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/.gitignore +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/LICENSE +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/docs/README.md +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/azure_synapse_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/connector/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_azure_synapse.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_factory_azure_synapse.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/metadata_extractor_azure_synapse.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/model/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/model/azure_synapse_credentials_connection.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/query/query_generator_azure_synapse.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/script_writer_azure_synapse.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/bigquery/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/bigquery/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/bigquery/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/comparison_orchestrator.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/configuration/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/configuration/configuration_loader.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/configuration/model/configuration_model.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/configuration/model/connection_types.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/configuration/model/connections/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/configuration/model/logging_configuration.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/configuration/model/table_configuration.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/configuration/model/validation_configuration.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/configuration/model/view_configuration.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/configuration/singleton.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/connector/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/connector/connector_base.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/connector/connector_factory_base.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/connector/connector_failure_tracker.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/db2_lob_normalization.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/extractor/metadata_extractor_db2.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/query/query_generator_db2.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/script_writer/script_writer_db2.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/executer/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/executer/async_generation_executor.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/executer/async_validation_executor.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/executer/base_validation_executor.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/executer/executor_factory.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/executer/extractor_types.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/executer/source_validation_executor.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/executer/sync_validation_executor.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/extractor/metadata_extractor_base.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/extractor/sql_queries_template_generator.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/extractor/metadata_extractor_oracle.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/oracle_bfile.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/oracle_iso_normalization.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/oracle_lob_normalization.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/oracle_statement_functions.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/oracle_vector_extraction.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/oracle_xmltype.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/query/query_generator_oracle.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/script_writer/script_writer_oracle.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/orchestration/html_report/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/orchestration/html_report/html_report_builder.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/orchestration/html_report/report_metadata.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/orchestration/parallel_execution_engine.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/orchestration/table_metadata_processor.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/orchestration/validation_progress_reporter.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/orchestration/view_preprocessor.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/connector/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_factory_postgresql.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_postgresql.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/metadata_extractor_postgresql.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_concatenated_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_concatenated_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_md5_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/model/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/model/postgresql_credentials_connection.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/postgresql_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/postgresql_tz_normalization.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/query/query_generator_postgresql.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/script_writer/script_writer_postgresql.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/DATA_VALIDATION_API_OVERVIEW.md +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/_internal.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/_teradata_internal.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/async_mode/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/async_mode/file_loader.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/async_mode/script_writer.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/cli/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/cli/commands.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/configuration/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/connectors/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/context/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/data_validation_api.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/enums/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/execution/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/execution/query_executor.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/generators/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/metadata/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/model/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/model/data_validation_exception.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/model/generated_query.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/model/metrics_result_shape.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/model/query_execution_result.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/model/query_generator_factory.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/model/result_set.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/model/validation_progress_callback.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/model/validation_result.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/query_generation/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/query_generation/metadata_queries.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/query_generation/row_validation_queries.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/query_generation/schema_metrics_queries.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/query_validation/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/query_validation/query_comparison.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/reshape/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/reshape/metrics_reshape.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/result_set_validation/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/result_set_validation/result_set_comparison.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/snapshot/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_generation.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_validation.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/utils/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/utils/helpers.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/validation/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/validation/cell_validation.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/validation/metrics_validation.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/validation/row_validation.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/validation/schema_validation.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/chunk_md5_tiered.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/decimal_text_normalization.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_modifiers.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/float_aggregate_reduction.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/float_bit_normalization.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/normalization_render_context.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/numeric_scale_resolution.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/query/query_generator_query.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/query_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/sql_type_families.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/time_precision_resolution.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/tsql_float_remainder.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/vector_element_kind.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/connector/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/connector/connector_factory_redshift.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/connector/connector_redshift.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/metadata_extractor_redshift.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_show_columns_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/model/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/model/redshift_credentials_connection.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/redshift_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/redshift_super_normalization.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/script_writer/script_writer_redshift.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/snowflake_to_result_set_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/result_set/query/query_generator_result_set.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/result_set/result_set_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/script_writer/script_writer_base.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_factory_snowflake.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_snowflake.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/metadata_extractor_snowflake.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/_wkt_despace.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_concatenated_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_md5_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_case_sensitive_columns.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_iceberg_format_version.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_temporary_table_from_view_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/l3/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/l3/pushdown_diff_sql.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/l3/signature_external_table.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/l3/warm_start.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/model/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_credentials_connection.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_default_connection.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_named_connection.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/script_writer/script_writer_snowflake.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/snowflake_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/connector/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_factory_sqlite.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_sqlite.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/metadata_extractor_sqlite.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_compute_md5_sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_sqlite_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/model/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/model/sqlite_connection.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/query/query_generator_sqlite.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/script_writer/script_writer_sqlite.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/connector/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_factory_sql_server.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_sql_server.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/metadata_extractor_sqlserver.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_compute_md5_sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_temporary_table_internal_identifier_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_temporary_table_from_view_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/model/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/model/sqlserver_credentials_connection.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/query/query_generator_sqlserver.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/script_writer_sqlserver.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_string_length_normalization.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_tz_normalization.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_uniqueidentifier_normalization.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/table_partitioning_strategy.md +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/connector/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/connector/connector_factory_teradata.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/connector/connector_teradata.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/metadata_extractor_teradata.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_compute_md5_sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_concatenated.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_md5.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/model/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/model/teradata_credentials_connection.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/script_writer/script_writer_teradata.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/teradata_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/teradata_iso_normalization.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/arguments_manager_base.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/arguments_manager_factory.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/base_output_handler.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/catalog_column_size.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/column_grouping.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/column_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/configuration_file_editor.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/configuration_file_generator.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/configuration_file_synchronizer.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/connection_pool.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/connector_factory.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/console_output_handler.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/context.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/cpu_optimizer.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/dv_tracing.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/error_classifier.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/helper.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/helpers/helper_database.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/helpers/helper_dataframe.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/helpers/helper_io.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/helpers/helper_misc.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/helpers/helper_polars_cast.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/helpers/helper_query_result.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/helpers/helper_templates.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/index_key_format.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/interval_common.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/lob_source_types.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/logging_config.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/logging_utils.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/measure_collation.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/model/chunk.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/model/column_metadata.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/model/column_selection.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/model/custom_templates.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/model/table_column_metadata.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/model/templates_loader_manager.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/period_common.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/progress_reporter.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/qvci_fallback.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/row_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/row_validation_lob_exclusion.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/run_context.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/semi_structured_json_canonicalization.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/shutdown_coordinator.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/snapshot_validation_statements.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/telemetry.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/templates/configuration_file_templates.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/teradata_string_rtrim.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/thread_safe_singleton.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/validation_utils.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/vector_common.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/vector_normalization.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/accepted_transformation.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/cell_data_validator.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/column_pairing.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/comparison_codec.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/data_validator_base.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/dataframe_validator_base.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/lossy_number_mapping.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/metrics_data_validator.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/metrics_tolerance.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/object_type_criterion.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/base.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/db2.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/redshift.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/registry.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/snowflake.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlite.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlserver.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/teradata.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/query_validator.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/result_set_validator.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/results_summary_report.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/row_data_validator.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/row_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/schema_data_validator.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/validation_database/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/validation_database/sqlite_validation_connection.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/validation_database/validation_database_connection_base.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/validation_database_manager.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/validation_execution_context.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/validation_report_status.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/.coveragerc +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/conftest.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/integration/.coveragerc +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/integration/Redshift/test_metadata_extractor_integration.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/integration/test_async_generation_integration.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/integration/test_async_validation_integration.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/integration/test_reference_integration.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/integration/test_source_validation_integration.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/integration/test_sync_validation_integration.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Postgresql/test_postgresql_bit_count_distinct.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Postgresql/test_postgresql_collation.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Postgresql/test_postgresql_enum_metadata.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Postgresql/test_postgresql_json_cell_validation.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Postgresql/test_postgresql_jsonb_row_hash.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Postgresql/test_postgresql_numeric_leading_zero.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Postgresql/test_postgresql_spatial_templates.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/model/test_redshift_credentials_connection.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/query/test_query_generator_redshift.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/script_writer/test_script_writer_redshift.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/test_connector_redshift.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/test_redshift_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/test_redshift_collation.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/test_redshift_columns_metadata_template.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/test_redshift_hllsketch_templates.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/test_redshift_spatial_templates.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/test_redshift_split_schema_query.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/test_redshift_super_normalization.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/test_redshift_timetz_sentinel_normalization.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/test_redshift_varchar_count_distinct.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Teradata/test_connector_teradata.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Teradata/test_metadata_extractor_teradata.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Teradata/test_period_varchar_l1.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Teradata/test_query_generator_teradata.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Teradata/test_teradata_collation.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Teradata/test_teradata_columns_metadata_precision_scale.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Teradata/test_teradata_row_md5_select_template.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Teradata/test_teradata_spatial_templates.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Teradata/test_teradata_view_generate_boundary.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Teradata/test_teradata_view_l1_metadata_templates.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/assets/custom_templates_loader/snowflake_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/assets/custom_templates_loader/snowflake_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/assets/custom_templates_loader/snowflake_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/assets/test_configuration_loader/test_load_configuration_model/conf.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/assets/test_configuration_loader/test_load_configuration_model_reading_file_exception/conf.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/assets/test_helpers/dummy_configuration_file.json +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/assets/test_helpers/dummy_connection_source_db.toml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/assets/test_helpers/dummy_datatypes_normalization_template.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/assets/test_helpers/dummy_datatypes_template.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/assets/test_helpers/dummy_metrics_template.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/assets/test_helpers/dummy_metrics_template_datatypes.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/assets/test_helpers/dummy_template.csv +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/assets/test_helpers/not_valid_format.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/assets/test_templates_loader_manager/snowflake_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/assets/test_templates_loader_manager/snowflake_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/azure_synapse/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/azure_synapse/test_azure_synapse_credentials_connection.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/azure_synapse/test_azure_synapse_l3_convert_normalization.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/azure_synapse/test_azure_synapse_metadata_extractor.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/azure_synapse/test_azure_synapse_metrics_templates.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/azure_synapse/test_azure_synapse_query_generator.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/azure_synapse/test_azure_synapse_row_queries.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/azure_synapse/test_connector_azure_synapse.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/azure_synapse/test_connector_factory_azure_synapse.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/bigquery/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/bigquery/test_bigquery_l1_string_length.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/bigquery/test_bigquery_spatial_templates.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/bigquery/test_query_generator_bigquery.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/bigquery/test_query_generator_factory_bigquery.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/conftest.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/db2/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/db2/test_db2_lob_dv_generation.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/db2/test_db2_metadata_extractor.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/db2/test_db2_query_generator.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/db2/test_db2_registration.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/db2/test_db2_xml_long_dv_generation.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/db2/test_db2_xml_long_metrics.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/oracle/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/oracle/test_metadata_extractor_oracle_vector.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/oracle/test_oracle_configured_index_columns.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/oracle/test_oracle_iso_normalization.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/oracle/test_oracle_lob_dv_generation.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/oracle/test_oracle_lob_normalization.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/oracle/test_oracle_metadata_extractor.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/oracle/test_oracle_metrics_templates.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/oracle/test_oracle_normalization_templates.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/oracle/test_oracle_query_generator.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/oracle/test_oracle_query_modifiers.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/oracle/test_oracle_quoted_identifiers.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/oracle/test_oracle_type_mappings.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/query/test_chunk_md5_tiered.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/query/test_time_fraction_rendering.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/snowflake/test_snowflake_get_case_sensitive_columns.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/snowflake/test_snowflake_get_iceberg_format_version.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/snowflake/test_snowflake_spatial_metrics_templates.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlite/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlite/test_connector_factory_sqlite.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlite/test_connector_sqlite.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlite/test_metadata_extractor_sqlite.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlite/test_metadata_query_template_sqlite.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlite/test_query_generator_sqlite.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlite/test_script_writer_sqlite.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_connector_factory_sql_server.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_metadata_extractor_sqlserver_vector.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_datetimeoffset_full_ingest_utc.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_datetimeoffset_metrics_utc.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_datetimeoffset_physical_target.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_json.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_l1_catalog.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_l1_character_length.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_l3_convert_normalization.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_length_metrics_chars.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_row_count_overflow.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_row_queries.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_spatial_l1_metadata.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_spatial_metrics_templates.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_string_length_pairing.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_uniqueidentifier_l3_normalization.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_xml_image_metrics.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_tsql_integer_stddev_exact.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_accepted_transformation.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_arguments_manager_base.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_arguments_manager_factory.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_batched_metrics_queries.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_boolean_binary_canonical_templates.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_case_sensitive_column_pairing.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_catalog_column_size.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_catalog_queries_take_actual_names.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_cell_data_validator.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_cell_data_validator_threading.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_cell_validation_query_generation.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_charset_normalization.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_column_grouping.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_column_metadata.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_column_normalization_override.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_column_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_column_selection.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_column_selection_actual_names.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_comparison_codec.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_comparison_orchestrator.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_configuration_file_editor.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_configuration_file_generator.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_configuration_file_synchronizer.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_configuration_loader.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_configuration_model.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_connection_pool.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_connector_failure_tracker.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_connector_snowflake.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_cpu_optimizer.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_custom_templates_models.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_data_validator.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_decimal_text_canonical.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_dv_tracing.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_error_classifier.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_escape_odbc_value.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_executor_factory.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_extraction_keeps_catalog_column_spelling.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_fetch_schema_metadata.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_float_aggregate_reduction.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_float_bit_canonical.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_float_canonical_templates.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_get_configuration_file.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_get_target_cols.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_helper_dataframe.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_helper_io.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_helper_polars_cast.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_helper_polars_cast_threading.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_helpers.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_html_report_builder.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_iceberg_v2_metrics_exclusion.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_index_key_format.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_internal_helpers.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_interval_common.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_l2_collation_metadata.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_l2_count_distinct_opt_in_config.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_logging_config.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_lossy_number_mapping.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_metric_identifier_rendering.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_metrics_reshape.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_metrics_result_shape.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_metrics_templates_casts.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_metrics_tolerance.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_normalize_shape_aware.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_numeric_scale_resolution.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_object_type_criterion.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_parallel_execution_engine_fatal_errors.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_period_common.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_platform_bridge.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_postgresql_normalization_templates.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_postgresql_tz_normalization.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_pushdown_diff_sql.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_query_cell_level_validation.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_query_executor.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_query_generator_numeric_scale.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_query_metrics_level_validation.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_query_to_dataframe.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_query_validator.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_qvci_fallback.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_qvci_fallback_na_skip.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_qvci_fallback_triggers.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_redshift_native_timestamptz_ltz.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_report_metadata.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_result_set_cell_level_validation.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_result_set_column_metrics_validation.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_result_set_snapshot_generation.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_result_set_snapshot_validation.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_result_set_to_dataframe.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_result_set_validator.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_row_count_bigint_overflow.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_row_data_validator.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_row_data_validator_empty_chunk.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_row_hash_column_delimiter.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_row_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_row_validation_lob_exclusion.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_row_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_schema_accepted_native_datatypes.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_schema_column_selection.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_schema_query_capability.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_shutdown_coordinator.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_signature_external_table.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_signature_row_md5_query.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_snapshot_validation_statements.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_snowflake_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_snowflake_binary_normalization_templates.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_snowflake_redshift_super_size_guard.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_source_validation_executor.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_spatial_wkt_canonicalization.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_sql_catalog_template_guard.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_sql_literal_jinja_filter.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_sqlite_validation_connection.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_sqlserver_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_sqlserver_multi_version_support.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_sync_executor_qvci_fallback.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_sync_schema_validation_real_callbacks.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_sync_validation_executor.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_table_column_metadata_model.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_table_configuration.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_table_context.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_table_metadata_processor.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_table_snapshot_generation.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_table_snapshot_validation.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_target_platform_factory.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_telemetry.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_templates_loader_manager.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_teradata_iso_normalization.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_teradata_string_rtrim_policy.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_teradata_timetz_metric_domain.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_teradata_type_code_mapping.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_timestamp_golden_vectors.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_trace_bridge.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_tsql_float_l2_aggregates.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_validation_configuration.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_validation_database_connection.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_validation_execution_context.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_validation_progress_reporter.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_validation_report_status.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_validation_templates_dto.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_vector_bit_normalization.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_vector_common.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_vector_normalization.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_view_configuration.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_warm_start.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/utils/__init__.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/utils/test_constants.py +0 -0
- {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/utils/test_semi_structured_json_canonicalization.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: snowflake-data-validation
|
|
3
|
-
Version: 1.45.
|
|
3
|
+
Version: 1.45.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/
|
|
@@ -230,6 +230,17 @@ For configuration options and examples, see the [official documentation](https:/
|
|
|
230
230
|
|
|
231
231
|
## Changelog
|
|
232
232
|
|
|
233
|
+
### v1.45.4
|
|
234
|
+
|
|
235
|
+
**Improvements**
|
|
236
|
+
|
|
237
|
+
- Improved Iceberg validation to read the table format version from the Snowflake catalog once before validation starts, so every validation level uses the actual format version.
|
|
238
|
+
|
|
239
|
+
**Bug fixes**
|
|
240
|
+
|
|
241
|
+
- Fixed Redshift Iceberg metrics validation comparing signed-year `DATE` and `TIMESTAMPTZ` values.
|
|
242
|
+
- Fixed Teradata `UNICODE` `CHAR`, `VARCHAR`, and `CLOB` column lengths being reported in bytes, which raised false truncation warnings.
|
|
243
|
+
|
|
233
244
|
### v1.45.3
|
|
234
245
|
|
|
235
246
|
**Bug fixes**
|
|
@@ -139,6 +139,17 @@ For configuration options and examples, see the [official documentation](https:/
|
|
|
139
139
|
|
|
140
140
|
## Changelog
|
|
141
141
|
|
|
142
|
+
### v1.45.4
|
|
143
|
+
|
|
144
|
+
**Improvements**
|
|
145
|
+
|
|
146
|
+
- Improved Iceberg validation to read the table format version from the Snowflake catalog once before validation starts, so every validation level uses the actual format version.
|
|
147
|
+
|
|
148
|
+
**Bug fixes**
|
|
149
|
+
|
|
150
|
+
- Fixed Redshift Iceberg metrics validation comparing signed-year `DATE` and `TIMESTAMPTZ` values.
|
|
151
|
+
- Fixed Teradata `UNICODE` `CHAR`, `VARCHAR`, and `CLOB` column lengths being reported in bytes, which raised false truncation warnings.
|
|
152
|
+
|
|
142
153
|
### v1.45.3
|
|
143
154
|
|
|
144
155
|
**Bug fixes**
|
|
@@ -157,7 +157,7 @@ class QueryGeneratorBigQuery(QueryGeneratorBase):
|
|
|
157
157
|
normalized = normalized[:index]
|
|
158
158
|
return normalized.strip()
|
|
159
159
|
|
|
160
|
-
def _resolve_metrics_col_type(self, col, table_context: TableContext) -> str:
|
|
160
|
+
def _resolve_metrics_col_type(self, col: ColumnMetadata, table_context: TableContext) -> str:
|
|
161
161
|
"""Key the metrics YAML lookup off the parameterless base type."""
|
|
162
162
|
return self.normalize_bigquery_type(col.data_type)
|
|
163
163
|
|
|
@@ -394,8 +394,7 @@ class QueryGeneratorBase(ABC):
|
|
|
394
394
|
override this. Combined generators leave the base raise in place.
|
|
395
395
|
"""
|
|
396
396
|
raise NotImplementedError(
|
|
397
|
-
f"{self.platform.value} uses a combined schema query; "
|
|
398
|
-
"call generate_schema_query instead of generate_schema_row_count_query"
|
|
397
|
+
f"{self.platform.value} uses a combined schema query; call generate_schema_query instead of generate_schema_row_count_query"
|
|
399
398
|
)
|
|
400
399
|
|
|
401
400
|
def generate_schema_details_query(self, table_context: TableContext) -> str:
|
|
@@ -405,8 +404,7 @@ class QueryGeneratorBase(ABC):
|
|
|
405
404
|
override this. Combined generators leave the base raise in place.
|
|
406
405
|
"""
|
|
407
406
|
raise NotImplementedError(
|
|
408
|
-
f"{self.platform.value} uses a combined schema query; "
|
|
409
|
-
"call generate_schema_query instead of generate_schema_details_query"
|
|
407
|
+
f"{self.platform.value} uses a combined schema query; call generate_schema_query instead of generate_schema_details_query"
|
|
410
408
|
)
|
|
411
409
|
|
|
412
410
|
def normalize_schema_details_result(
|
|
@@ -420,10 +418,7 @@ class QueryGeneratorBase(ABC):
|
|
|
420
418
|
as a combined schema query (without ``ROW_COUNT``; the fetch helper
|
|
421
419
|
attaches that). Combined generators leave the base raise in place.
|
|
422
420
|
"""
|
|
423
|
-
raise NotImplementedError(
|
|
424
|
-
f"{self.platform.value} uses a combined schema query; "
|
|
425
|
-
"normalize_schema_details_result is not used"
|
|
426
|
-
)
|
|
421
|
+
raise NotImplementedError(f"{self.platform.value} uses a combined schema query; normalize_schema_details_result is not used")
|
|
427
422
|
|
|
428
423
|
def generate_metrics_query(self, table_context: TableContext) -> GeneratedMetricsQuery:
|
|
429
424
|
"""Generate a single wide metrics SELECT for a table.
|
|
@@ -645,7 +640,7 @@ class QueryGeneratorBase(ABC):
|
|
|
645
640
|
return numeric_norm
|
|
646
641
|
return None
|
|
647
642
|
|
|
648
|
-
def _resolve_metrics_col_type(self, col, table_context: TableContext) -> str:
|
|
643
|
+
def _resolve_metrics_col_type(self, col: ColumnMetadata, table_context: TableContext) -> str:
|
|
649
644
|
"""Return the metrics YAML type key for a column (platforms may override)."""
|
|
650
645
|
from snowflake.snowflake_data_validation.utils.vector_common import is_vector_base_type
|
|
651
646
|
|
|
@@ -956,9 +951,7 @@ class QueryGeneratorBase(ABC):
|
|
|
956
951
|
mask = self._build_numeric_format_mask(self._resolve_numeric_scale(col))
|
|
957
952
|
normalization = normalization.replace(NUMERIC_FORMAT_MASK_PLACEHOLDER, mask)
|
|
958
953
|
if ICEBERG_FRACTION_DIGITS_PLACEHOLDER in normalization:
|
|
959
|
-
normalization = normalization.replace(
|
|
960
|
-
ICEBERG_FRACTION_DIGITS_PLACEHOLDER, str(iceberg_fraction_digits)
|
|
961
|
-
)
|
|
954
|
+
normalization = normalization.replace(ICEBERG_FRACTION_DIGITS_PLACEHOLDER, str(iceberg_fraction_digits))
|
|
962
955
|
metric_expr = self._wrap_metric_with_normalization(normalization, metric_expr)
|
|
963
956
|
alias = f"c{measured_idx}_m{metric_idx}"
|
|
964
957
|
select_exprs.append(f"{metric_expr} AS {alias}")
|
|
@@ -635,6 +635,36 @@ TIMESTAMP_AS_TEXT:
|
|
|
635
635
|
metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
|
|
636
636
|
metric_return_datatype: BIGINT
|
|
637
637
|
|
|
638
|
+
# Iceberg VARCHAR DATE (SNOW-4381535): MIN/MAX rendered as the UNLOAD footer's
|
|
639
|
+
# signed astronomical-year text. Kept in sync with DMO by test_redshift_consistency.py.
|
|
640
|
+
DATE_AS_TEXT:
|
|
641
|
+
min:
|
|
642
|
+
metric_query: MIN("{{ col_name }}")
|
|
643
|
+
metric_return_datatype: VARCHAR
|
|
644
|
+
metric_normalization: '(CASE WHEN (CASE WHEN EXTRACT(YEAR FROM {{ metric_query }})::INT < 0 THEN EXTRACT(YEAR FROM {{ metric_query }})::INT + 1 ELSE EXTRACT(YEAR FROM {{ metric_query }})::INT END) < 0 THEN ''-'' ELSE '''' END || (CASE WHEN ABS((CASE WHEN EXTRACT(YEAR FROM {{ metric_query }})::INT < 0 THEN EXTRACT(YEAR FROM {{ metric_query }})::INT + 1 ELSE EXTRACT(YEAR FROM {{ metric_query }})::INT END)) < 1000 THEN LPAD(ABS((CASE WHEN EXTRACT(YEAR FROM {{ metric_query }})::INT < 0 THEN EXTRACT(YEAR FROM {{ metric_query }})::INT + 1 ELSE EXTRACT(YEAR FROM {{ metric_query }})::INT END))::VARCHAR, 4, ''0'') ELSE ABS((CASE WHEN EXTRACT(YEAR FROM {{ metric_query }})::INT < 0 THEN EXTRACT(YEAR FROM {{ metric_query }})::INT + 1 ELSE EXTRACT(YEAR FROM {{ metric_query }})::INT END))::VARCHAR END)) || ''-'' || LPAD(EXTRACT(MONTH FROM {{ metric_query }})::VARCHAR, 2, ''0'') || ''-'' || LPAD(EXTRACT(DAY FROM {{ metric_query }})::VARCHAR, 2, ''0'')'
|
|
645
|
+
max:
|
|
646
|
+
metric_query: MAX("{{ col_name }}")
|
|
647
|
+
metric_return_datatype: VARCHAR
|
|
648
|
+
metric_normalization: '(CASE WHEN (CASE WHEN EXTRACT(YEAR FROM {{ metric_query }})::INT < 0 THEN EXTRACT(YEAR FROM {{ metric_query }})::INT + 1 ELSE EXTRACT(YEAR FROM {{ metric_query }})::INT END) < 0 THEN ''-'' ELSE '''' END || (CASE WHEN ABS((CASE WHEN EXTRACT(YEAR FROM {{ metric_query }})::INT < 0 THEN EXTRACT(YEAR FROM {{ metric_query }})::INT + 1 ELSE EXTRACT(YEAR FROM {{ metric_query }})::INT END)) < 1000 THEN LPAD(ABS((CASE WHEN EXTRACT(YEAR FROM {{ metric_query }})::INT < 0 THEN EXTRACT(YEAR FROM {{ metric_query }})::INT + 1 ELSE EXTRACT(YEAR FROM {{ metric_query }})::INT END))::VARCHAR, 4, ''0'') ELSE ABS((CASE WHEN EXTRACT(YEAR FROM {{ metric_query }})::INT < 0 THEN EXTRACT(YEAR FROM {{ metric_query }})::INT + 1 ELSE EXTRACT(YEAR FROM {{ metric_query }})::INT END))::VARCHAR END)) || ''-'' || LPAD(EXTRACT(MONTH FROM {{ metric_query }})::VARCHAR, 2, ''0'') || ''-'' || LPAD(EXTRACT(DAY FROM {{ metric_query }})::VARCHAR, 2, ''0'')'
|
|
649
|
+
count_null:
|
|
650
|
+
metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
|
|
651
|
+
metric_return_datatype: BIGINT
|
|
652
|
+
|
|
653
|
+
# Iceberg VARCHAR TIMESTAMPTZ (SNOW-4381535): MIN/MAX of the instant, rendered in
|
|
654
|
+
# UTC with the UNLOAD footer's signed year. Kept in sync with DMO by test_redshift_consistency.py.
|
|
655
|
+
TIMESTAMPTZ_AS_TEXT:
|
|
656
|
+
min:
|
|
657
|
+
metric_query: MIN("{{ col_name }}")
|
|
658
|
+
metric_return_datatype: VARCHAR
|
|
659
|
+
metric_normalization: '(CASE WHEN (CASE WHEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT < 0 THEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT + 1 ELSE EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT END) < 0 THEN ''-'' ELSE '''' END || (CASE WHEN ABS((CASE WHEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT < 0 THEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT + 1 ELSE EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT END)) < 1000 THEN LPAD(ABS((CASE WHEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT < 0 THEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT + 1 ELSE EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT END))::VARCHAR, 4, ''0'') ELSE ABS((CASE WHEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT < 0 THEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT + 1 ELSE EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT END))::VARCHAR END)) || TO_CHAR(({{ metric_query }} AT TIME ZONE ''UTC''), ''-MM-DD"T"HH24:MI:SS.US'') || ''000'' || ''+00:00'''
|
|
660
|
+
max:
|
|
661
|
+
metric_query: MAX("{{ col_name }}")
|
|
662
|
+
metric_return_datatype: VARCHAR
|
|
663
|
+
metric_normalization: '(CASE WHEN (CASE WHEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT < 0 THEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT + 1 ELSE EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT END) < 0 THEN ''-'' ELSE '''' END || (CASE WHEN ABS((CASE WHEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT < 0 THEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT + 1 ELSE EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT END)) < 1000 THEN LPAD(ABS((CASE WHEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT < 0 THEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT + 1 ELSE EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT END))::VARCHAR, 4, ''0'') ELSE ABS((CASE WHEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT < 0 THEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT + 1 ELSE EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT END))::VARCHAR END)) || TO_CHAR(({{ metric_query }} AT TIME ZONE ''UTC''), ''-MM-DD"T"HH24:MI:SS.US'') || ''000'' || ''+00:00'''
|
|
664
|
+
count_null:
|
|
665
|
+
metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
|
|
666
|
+
metric_return_datatype: BIGINT
|
|
667
|
+
|
|
638
668
|
TIMESTAMPTZ:
|
|
639
669
|
min:
|
|
640
670
|
metric_query: MIN("{{ col_name }}")
|
|
@@ -62,7 +62,9 @@ from snowflake.snowflake_data_validation.utils.constants import (
|
|
|
62
62
|
SchemaValidationFields,
|
|
63
63
|
)
|
|
64
64
|
from snowflake.snowflake_data_validation.utils.iceberg_dv_common import (
|
|
65
|
+
DATE_AS_TEXT_KEY,
|
|
65
66
|
TIMESTAMP_AS_TEXT_KEY,
|
|
67
|
+
TIMESTAMPTZ_AS_TEXT_KEY,
|
|
66
68
|
IcebergProfile,
|
|
67
69
|
resolve_iceberg_v2_compatible_source_normalization_key,
|
|
68
70
|
)
|
|
@@ -80,12 +82,21 @@ from snowflake.snowflake_data_validation.utils.measure_collation import (
|
|
|
80
82
|
base_type,
|
|
81
83
|
has_effective_collation,
|
|
82
84
|
)
|
|
85
|
+
from snowflake.snowflake_data_validation.utils.model.column_metadata import ColumnMetadata
|
|
83
86
|
from snowflake.snowflake_data_validation.utils.model.table_context import TableContext
|
|
84
87
|
|
|
85
88
|
|
|
86
89
|
LOGGER = logging.getLogger(__name__)
|
|
87
90
|
_REDSHIFT_NORMALIZED_COLLATION_TOKENS = ("COLLATE(", ", 'case_sensitive')")
|
|
88
|
-
|
|
91
|
+
# Source clocks the Iceberg UNLOAD stages as signed-year text, keyed to the
|
|
92
|
+
# metrics template that renders MIN / MAX the same way.
|
|
93
|
+
_SIGNED_YEAR_TEXT_METRICS_KEYS: dict[str, str] = {
|
|
94
|
+
CommonType.DATE: DATE_AS_TEXT_KEY,
|
|
95
|
+
CommonType.TIMESTAMP: TIMESTAMP_AS_TEXT_KEY,
|
|
96
|
+
CommonType.TIMESTAMP_WITHOUT_TIME_ZONE: TIMESTAMP_AS_TEXT_KEY,
|
|
97
|
+
CommonType.TIMESTAMPTZ: TIMESTAMPTZ_AS_TEXT_KEY,
|
|
98
|
+
CommonType.TIMESTAMP_WITH_TIME_ZONE: TIMESTAMPTZ_AS_TEXT_KEY,
|
|
99
|
+
}
|
|
89
100
|
|
|
90
101
|
# Redshift ``TO_CHAR`` formats numbers with 64-bit arithmetic. A numeric format
|
|
91
102
|
# mask with N total digit placeholders (integer nines + fractional zeros) admits
|
|
@@ -525,19 +536,12 @@ class QueryGeneratorRedshift(QueryGeneratorBase):
|
|
|
525
536
|
``schema.table`` only (same rule as :func:`quoted_non_empty_fqn`).
|
|
526
537
|
"""
|
|
527
538
|
if not table_context.schema_name or not table_context.internal_table_name:
|
|
528
|
-
raise ValueError(
|
|
529
|
-
"Redshift schema-details query requires schema and table names for "
|
|
530
|
-
f"{table_context.fully_qualified_name}"
|
|
531
|
-
)
|
|
539
|
+
raise ValueError(f"Redshift schema-details query requires schema and table names for {table_context.fully_qualified_name}")
|
|
532
540
|
platform = self.platform.value
|
|
533
|
-
template = self.jinja_env.get_template(
|
|
534
|
-
SHOW_COLUMNS_QUERY_TEMPLATE_NAME_FORMAT.format(platform=platform)
|
|
535
|
-
)
|
|
541
|
+
template = self.jinja_env.get_template(SHOW_COLUMNS_QUERY_TEMPLATE_NAME_FORMAT.format(platform=platform))
|
|
536
542
|
database_name = table_context.database_name or ""
|
|
537
543
|
return template.render(
|
|
538
|
-
object_database_sql=(
|
|
539
|
-
write_sql_name(database_name, platform) if database_name.strip() else ""
|
|
540
|
-
),
|
|
544
|
+
object_database_sql=(write_sql_name(database_name, platform) if database_name.strip() else ""),
|
|
541
545
|
object_schema_sql=write_sql_name(table_context.schema_name, platform),
|
|
542
546
|
object_name_sql=write_sql_name(table_context.internal_table_name, platform),
|
|
543
547
|
)
|
|
@@ -582,9 +586,7 @@ class QueryGeneratorRedshift(QueryGeneratorBase):
|
|
|
582
586
|
@staticmethod
|
|
583
587
|
def _lowered_data_types(data_types: pd.Series) -> pd.Series:
|
|
584
588
|
"""Lower-case data-type spellings for the fixup masks, with missing values as ``""``."""
|
|
585
|
-
return data_types.map(
|
|
586
|
-
lambda value: str(value).lower() if value is not None and not pd.isna(value) else ""
|
|
587
|
-
)
|
|
589
|
+
return data_types.map(lambda value: str(value).lower() if value is not None and not pd.isna(value) else "")
|
|
588
590
|
|
|
589
591
|
def _apply_length_overrides(self, frame: pd.DataFrame, lowered_data_types: pd.Series) -> None:
|
|
590
592
|
"""Null the length of spatial and binary types, and set the HLLSKETCH length."""
|
|
@@ -592,25 +594,19 @@ class QueryGeneratorRedshift(QueryGeneratorBase):
|
|
|
592
594
|
if length_column not in frame.columns:
|
|
593
595
|
return
|
|
594
596
|
frame.loc[lowered_data_types.isin(self._NULL_LENGTH_DATA_TYPES), length_column] = None
|
|
595
|
-
frame.loc[lowered_data_types == RedshiftType.HLLSKETCH.lower(), length_column] =
|
|
596
|
-
REDSHIFT_HLLSKETCH_CHARACTER_MAXIMUM_LENGTH
|
|
597
|
-
)
|
|
597
|
+
frame.loc[lowered_data_types == RedshiftType.HLLSKETCH.lower(), length_column] = REDSHIFT_HLLSKETCH_CHARACTER_MAXIMUM_LENGTH
|
|
598
598
|
|
|
599
599
|
def _apply_float_precision(self, frame: pd.DataFrame, lowered_data_types: pd.Series) -> None:
|
|
600
600
|
"""Give float types the precision L1 compares, which ``SHOW COLUMNS`` does not report."""
|
|
601
601
|
precision_column = SchemaValidationFields.NUMERIC_PRECISION.value
|
|
602
602
|
if precision_column not in frame.columns:
|
|
603
603
|
return
|
|
604
|
-
frame.loc[lowered_data_types.isin(self._FLOAT_PRECISION_DATA_TYPES), precision_column] =
|
|
605
|
-
REDSHIFT_FLOAT_NUMERIC_PRECISION
|
|
606
|
-
)
|
|
604
|
+
frame.loc[lowered_data_types.isin(self._FLOAT_PRECISION_DATA_TYPES), precision_column] = REDSHIFT_FLOAT_NUMERIC_PRECISION
|
|
607
605
|
|
|
608
606
|
@staticmethod
|
|
609
607
|
def _uppercased_data_types(data_types: pd.Series) -> pd.Series:
|
|
610
608
|
"""Upper-case data-type spellings, leaving missing values untouched."""
|
|
611
|
-
return data_types.map(
|
|
612
|
-
lambda value: str(value).upper() if value is not None and not pd.isna(value) else value
|
|
613
|
-
)
|
|
609
|
+
return data_types.map(lambda value: str(value).upper() if value is not None and not pd.isna(value) else value)
|
|
614
610
|
|
|
615
611
|
@staticmethod
|
|
616
612
|
def _stamp_object_type(frame: pd.DataFrame, table_context: TableContext) -> None:
|
|
@@ -755,20 +751,22 @@ class QueryGeneratorRedshift(QueryGeneratorBase):
|
|
|
755
751
|
raise ValueError(f"No normalization template found for data type {data_type} and no DEFAULT template available.")
|
|
756
752
|
return normalization_template
|
|
757
753
|
|
|
758
|
-
def _resolve_metrics_col_type(self, col, table_context: TableContext) -> str:
|
|
759
|
-
"""Key an Iceberg VARCHAR TIMESTAMP to the signed-year metrics
|
|
754
|
+
def _resolve_metrics_col_type(self, col: ColumnMetadata, table_context: TableContext) -> str:
|
|
755
|
+
"""Key an Iceberg VARCHAR DATE / TIMESTAMP / TIMESTAMPTZ to the signed-year metrics.
|
|
760
756
|
|
|
761
757
|
``TO_CHAR 'YYYY'`` drops the era, so MIN / MAX would not match the text
|
|
762
|
-
the UNLOAD staged. Native targets keep the
|
|
758
|
+
the UNLOAD staged (SNOW-4353618, SNOW-4381535). Native targets keep the
|
|
759
|
+
shared templates.
|
|
763
760
|
"""
|
|
764
761
|
col_type = super()._resolve_metrics_col_type(col, table_context)
|
|
765
762
|
if not IcebergProfile.from_table_context(table_context).is_active:
|
|
766
763
|
return col_type
|
|
767
|
-
|
|
764
|
+
signed_year_key = _SIGNED_YEAR_TEXT_METRICS_KEYS.get(col_type.upper())
|
|
765
|
+
if signed_year_key is None:
|
|
768
766
|
return col_type
|
|
769
767
|
if not is_snowflake_varchar_like_type(get_paired_target_column_types(table_context).get(col.name)):
|
|
770
768
|
return col_type
|
|
771
|
-
return
|
|
769
|
+
return signed_year_key
|
|
772
770
|
|
|
773
771
|
def _resolve_normalization_templates(
|
|
774
772
|
self,
|
|
@@ -265,6 +265,36 @@ VARCHAR_TIMESTAMP_SIGNED:
|
|
|
265
265
|
metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
|
|
266
266
|
metric_return_datatype: NUMBER
|
|
267
267
|
|
|
268
|
+
# Signed-year ISO DATE text (Redshift Iceberg, SNOW-4381535): TRY_TO_DATE alone is
|
|
269
|
+
# NULL for negative and 5+ digit years, so parse like the column comment's cast back.
|
|
270
|
+
VARCHAR_DATE_SIGNED:
|
|
271
|
+
min:
|
|
272
|
+
metric_query: 'MIN(IFF(TRY_TO_NUMBER(REGEXP_SUBSTR(TO_VARCHAR(TRY_TO_DATE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+-[0-9]{2}-[0-9]{2})'', 1, 1, ''e'', 1)), ''YYYY-MM-DD''), ''^(-?[0-9]+)-'', 1, 1, ''e'', 1), 38, 0) = TRY_TO_NUMBER(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+)-'', 1, 1, ''e'', 1), 38, 0), TRY_TO_DATE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+-[0-9]{2}-[0-9]{2})'', 1, 1, ''e'', 1)), NULL))'
|
|
273
|
+
metric_return_datatype: VARCHAR
|
|
274
|
+
metric_normalization: TO_CHAR({{ metric_query }}, 'YYYY-MM-DD')
|
|
275
|
+
max:
|
|
276
|
+
metric_query: 'MAX(IFF(TRY_TO_NUMBER(REGEXP_SUBSTR(TO_VARCHAR(TRY_TO_DATE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+-[0-9]{2}-[0-9]{2})'', 1, 1, ''e'', 1)), ''YYYY-MM-DD''), ''^(-?[0-9]+)-'', 1, 1, ''e'', 1), 38, 0) = TRY_TO_NUMBER(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+)-'', 1, 1, ''e'', 1), 38, 0), TRY_TO_DATE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+-[0-9]{2}-[0-9]{2})'', 1, 1, ''e'', 1)), NULL))'
|
|
277
|
+
metric_return_datatype: VARCHAR
|
|
278
|
+
metric_normalization: TO_CHAR({{ metric_query }}, 'YYYY-MM-DD')
|
|
279
|
+
count_null:
|
|
280
|
+
metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
|
|
281
|
+
metric_return_datatype: NUMBER
|
|
282
|
+
|
|
283
|
+
# Signed-year ISO TIMESTAMPTZ text (Redshift Iceberg, SNOW-4381535), staged in UTC.
|
|
284
|
+
# Parse like the column comment's cast back; TO_CHAR prints a zero offset as Z.
|
|
285
|
+
VARCHAR_TIMESTAMP_TZ_SIGNED:
|
|
286
|
+
min:
|
|
287
|
+
metric_query: 'MIN(DATEADD(nanosecond, DATEDIFF(nanosecond, ''00:00:00''::TIME, TRY_TO_TIME(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''T([0-9]{2}:[0-9]{2}:[0-9]{2}(\\.[0-9]+)?)'', 1, 1, ''e'', 1))), DATEADD(day, DATEDIFF(day, ''2000-01-01''::DATE, IFF(TRY_TO_NUMBER(REGEXP_SUBSTR(TO_VARCHAR(TRY_TO_DATE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+-[0-9]{2}-[0-9]{2})'', 1, 1, ''e'', 1)), ''YYYY-MM-DD''), ''^(-?[0-9]+)-'', 1, 1, ''e'', 1), 38, 0) = TRY_TO_NUMBER(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+)-'', 1, 1, ''e'', 1), 38, 0), TRY_TO_DATE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+-[0-9]{2}-[0-9]{2})'', 1, 1, ''e'', 1)), NULL)), TRY_TO_TIMESTAMP_TZ(''2000-01-01 00:00:00 '' || COALESCE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''([+-][0-9]{2}:[0-9]{2})$'', 1, 1, ''e'', 1), ''+00:00''), ''YYYY-MM-DD HH24:MI:SS TZH:TZM''))))'
|
|
288
|
+
metric_return_datatype: VARCHAR
|
|
289
|
+
metric_normalization: REGEXP_REPLACE(TO_CHAR({{ metric_query }}, 'YYYY-MM-DD"T"HH24:MI:SS.FF9TZH:TZM'), 'Z$', '+00:00')
|
|
290
|
+
max:
|
|
291
|
+
metric_query: 'MAX(DATEADD(nanosecond, DATEDIFF(nanosecond, ''00:00:00''::TIME, TRY_TO_TIME(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''T([0-9]{2}:[0-9]{2}:[0-9]{2}(\\.[0-9]+)?)'', 1, 1, ''e'', 1))), DATEADD(day, DATEDIFF(day, ''2000-01-01''::DATE, IFF(TRY_TO_NUMBER(REGEXP_SUBSTR(TO_VARCHAR(TRY_TO_DATE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+-[0-9]{2}-[0-9]{2})'', 1, 1, ''e'', 1)), ''YYYY-MM-DD''), ''^(-?[0-9]+)-'', 1, 1, ''e'', 1), 38, 0) = TRY_TO_NUMBER(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+)-'', 1, 1, ''e'', 1), 38, 0), TRY_TO_DATE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+-[0-9]{2}-[0-9]{2})'', 1, 1, ''e'', 1)), NULL)), TRY_TO_TIMESTAMP_TZ(''2000-01-01 00:00:00 '' || COALESCE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''([+-][0-9]{2}:[0-9]{2})$'', 1, 1, ''e'', 1), ''+00:00''), ''YYYY-MM-DD HH24:MI:SS TZH:TZM''))))'
|
|
292
|
+
metric_return_datatype: VARCHAR
|
|
293
|
+
metric_normalization: REGEXP_REPLACE(TO_CHAR({{ metric_query }}, 'YYYY-MM-DD"T"HH24:MI:SS.FF9TZH:TZM'), 'Z$', '+00:00')
|
|
294
|
+
count_null:
|
|
295
|
+
metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
|
|
296
|
+
metric_return_datatype: NUMBER
|
|
297
|
+
|
|
268
298
|
# Order by UTC time-of-day. A plain MIN of the parsed instant uses today's date
|
|
269
299
|
# and can cross midnight, so the formatted value would keep the wrong offset.
|
|
270
300
|
VARCHAR_TIME_TZ:
|
|
@@ -13,7 +13,7 @@ TIME: LEFT(TO_CHAR("{{ col_name }}", 'HH24:MI:SS.FF9'), {{ time_text_length }})
|
|
|
13
13
|
TIME WITH TIME ZONE: LEFT(TO_CHAR("{{ col_name }}", 'HH24:MI:SS.FF9'), {{ time_text_length }})
|
|
14
14
|
# Typed Snowflake timestamps. The fractional-second digits are the Iceberg Parquet
|
|
15
15
|
# format version (v2 micro FF6 / v3 nano FF9), substituted at render from
|
|
16
|
-
# resolve_iceberg_fraction_digits;
|
|
16
|
+
# resolve_iceberg_fraction_digits from iceberg_spec; a spec other than v2 stays FF9.
|
|
17
17
|
TIMESTAMP_LTZ: TO_CHAR("{{ col_name }}", 'YYYY-MM-DD"T"HH24:MI:SS.FF{{ fraction_digits }}')
|
|
18
18
|
# Paired Oracle TIMESTAMP WITH LOCAL TIME ZONE: compare the retained instant in UTC.
|
|
19
19
|
TIMESTAMP_LTZ_UTC: TO_CHAR(CONVERT_TIMEZONE('UTC', "{{ col_name }}"), 'YYYY-MM-DD"T"HH24:MI:SS.FF{{ fraction_digits }}')
|
|
@@ -521,7 +521,7 @@ class QueryGeneratorSnowflake(QueryGeneratorBase):
|
|
|
521
521
|
write_identifier=self._write_sql_identifier,
|
|
522
522
|
)
|
|
523
523
|
|
|
524
|
-
def _resolve_metrics_col_type(self, col, table_context: TableContext) -> str:
|
|
524
|
+
def _resolve_metrics_col_type(self, col: ColumnMetadata, table_context: TableContext) -> str:
|
|
525
525
|
paired = get_paired_source_column_types(table_context)
|
|
526
526
|
paired_source = paired.get(col.name)
|
|
527
527
|
target_base = normalize_snowflake_base_type(col.data_type)
|
|
@@ -532,12 +532,8 @@ class QueryGeneratorSnowflake(QueryGeneratorBase):
|
|
|
532
532
|
CommonType.STRING,
|
|
533
533
|
}:
|
|
534
534
|
return CommonType.CHAR
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
paired_source,
|
|
538
|
-
)
|
|
539
|
-
if iso_tz_type:
|
|
540
|
-
return iso_tz_type
|
|
535
|
+
# The platform's own clock text wins over the generic ISO TZ parser:
|
|
536
|
+
# Redshift TIMESTAMPTZ text carries a signed year TRY_TO_TIMESTAMP_TZ rejects.
|
|
541
537
|
temporal_text_type = resolve_snowflake_varchar_temporal_metrics_type(
|
|
542
538
|
col.data_type,
|
|
543
539
|
paired_source,
|
|
@@ -545,6 +541,12 @@ class QueryGeneratorSnowflake(QueryGeneratorBase):
|
|
|
545
541
|
)
|
|
546
542
|
if temporal_text_type:
|
|
547
543
|
return temporal_text_type
|
|
544
|
+
iso_tz_type = resolve_snowflake_iso_tz_varchar_metrics_type(
|
|
545
|
+
col.data_type,
|
|
546
|
+
paired_source,
|
|
547
|
+
)
|
|
548
|
+
if iso_tz_type:
|
|
549
|
+
return iso_tz_type
|
|
548
550
|
if target_base in {CommonType.TEXT, CommonType.STRING}:
|
|
549
551
|
return CommonType.VARCHAR
|
|
550
552
|
return target_base or col.data_type
|
|
@@ -60,6 +60,11 @@ WITH rc_cte AS (
|
|
|
60
60
|
-- MONTH). Returning ColumnLength here would fail L1 against the N/A
|
|
61
61
|
-- target. The DAY/HOUR/MINUTE/SECOND/YEAR/MONTH codes therefore fall
|
|
62
62
|
-- through to NULL below.
|
|
63
|
+
-- ColumnLength is a byte width. UNICODE (CharType 2) stores two bytes
|
|
64
|
+
-- per character, so CHAR, VARCHAR and CLOB report ColumnLength / 2.
|
|
65
|
+
-- LATIN is one byte per character and already matches. PERIOD widths
|
|
66
|
+
-- are the text form, not a character-set width, and stay as ColumnLength.
|
|
67
|
+
WHEN TRIM(C.ColumnType) IN ('CF', 'CV', 'CO') AND C.CharType = 2 THEN C.ColumnLength / 2
|
|
63
68
|
WHEN TRIM(C.ColumnType) IN ('CF', 'CV', 'CO', 'PD', 'PM', 'PS', 'PT', 'PZ') THEN C.ColumnLength
|
|
64
69
|
ELSE NULL
|
|
65
70
|
END AS CHARACTER_MAXIMUM_LENGTH,
|
|
@@ -50,6 +50,7 @@ from snowflake.snowflake_data_validation.utils.iso_dv_common import get_paired_t
|
|
|
50
50
|
from snowflake.snowflake_data_validation.utils.measure_collation import (
|
|
51
51
|
SOURCE_CHARACTER_TYPES,
|
|
52
52
|
)
|
|
53
|
+
from snowflake.snowflake_data_validation.utils.model.column_metadata import ColumnMetadata
|
|
53
54
|
from snowflake.snowflake_data_validation.utils.model.table_context import TableContext
|
|
54
55
|
from snowflake.snowflake_data_validation.utils.teradata_string_rtrim import (
|
|
55
56
|
teradata_rtrim_string_type,
|
|
@@ -380,7 +381,7 @@ class QueryGeneratorTeradata(QueryGeneratorBase):
|
|
|
380
381
|
return normalization
|
|
381
382
|
return None
|
|
382
383
|
|
|
383
|
-
def _resolve_metrics_col_type(self, col, table_context: TableContext) -> str:
|
|
384
|
+
def _resolve_metrics_col_type(self, col: ColumnMetadata, table_context: TableContext) -> str:
|
|
384
385
|
paired = get_paired_target_column_types(table_context)
|
|
385
386
|
if is_teradata_timetz_timestamp_tz_pair(col.data_type, paired.get(col.name)):
|
|
386
387
|
return CommonType.TIMESTAMP_WITH_TIME_ZONE
|
|
@@ -265,8 +265,7 @@ SNAPSHOT_METADATA_PARQUET_SCHEMAS_KEY = "parquetSchemas"
|
|
|
265
265
|
ICEBERG_SPEC_KEY = "iceberg_spec"
|
|
266
266
|
STORAGE_MODE_KEY = "storage_mode"
|
|
267
267
|
LOAD_MODE_KEY = "load_mode"
|
|
268
|
-
|
|
269
|
-
# Iceberg table format versions a Snowflake catalog reports (its ICEBERG_VERSION parameter)
|
|
268
|
+
# Catalog format versions ``iceberg_spec`` names. v2 renders FF6; v3 renders FF9.
|
|
270
269
|
ICEBERG_FORMAT_VERSION_V2 = 2
|
|
271
270
|
ICEBERG_FORMAT_VERSION_V3 = 3
|
|
272
271
|
|
|
@@ -7,9 +7,10 @@ Iceberg L3 normalization key overlays.
|
|
|
7
7
|
Source/target SQL bridge overlays for Snowflake Iceberg tables under
|
|
8
8
|
``storageMode=compatible`` (v2/v3) and ``storageMode=native`` (v3 only):
|
|
9
9
|
|
|
10
|
-
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
- Typed Snowflake timestamps take their fraction from ``iceberg_spec``.
|
|
11
|
+
Validation fills that spec from the target table's ``ICEBERG_VERSION``
|
|
12
|
+
(``SHOW PARAMETERS``): ``v2`` renders microseconds (FF6), ``v3`` and any
|
|
13
|
+
other spec render nanoseconds (FF9).
|
|
13
14
|
- Redshift ``TIMESTAMP`` / ``TIMESTAMPTZ`` land as ``VARCHAR`` on both specs and
|
|
14
15
|
compare as the stored UNLOAD text.
|
|
15
16
|
- Redshift flattened values → the same text emitted by migration UNLOAD.
|
|
@@ -27,6 +28,7 @@ above apply where native also stores ``VARCHAR``.
|
|
|
27
28
|
|
|
28
29
|
from __future__ import annotations
|
|
29
30
|
|
|
31
|
+
from collections.abc import Mapping, Sequence
|
|
30
32
|
from dataclasses import dataclass
|
|
31
33
|
from typing import Protocol
|
|
32
34
|
|
|
@@ -34,10 +36,10 @@ from shared.datatypes.common import CommonType
|
|
|
34
36
|
from shared.datatypes.redshift import RedshiftType
|
|
35
37
|
from shared.datatypes.snowflake import SnowflakeType
|
|
36
38
|
from shared.datatypes.teradata import TeradataType
|
|
37
|
-
from shared.enums.iceberg import IcebergLoadMode
|
|
39
|
+
from shared.enums.iceberg import IcebergLoadMode, IcebergSpec
|
|
38
40
|
from snowflake.snowflake_data_validation.utils.constants import (
|
|
39
|
-
ICEBERG_FORMAT_VERSION_KEY,
|
|
40
41
|
ICEBERG_FORMAT_VERSION_V2,
|
|
42
|
+
ICEBERG_FORMAT_VERSION_V3,
|
|
41
43
|
ICEBERG_SPEC_KEY,
|
|
42
44
|
LOAD_MODE_KEY,
|
|
43
45
|
STORAGE_MODE_KEY,
|
|
@@ -227,9 +229,90 @@ def _as_str(value: object) -> str | None:
|
|
|
227
229
|
return value if isinstance(value, str) else None
|
|
228
230
|
|
|
229
231
|
|
|
230
|
-
def
|
|
231
|
-
|
|
232
|
-
|
|
232
|
+
def _row_value(row: Mapping[object, object], column: str) -> object:
|
|
233
|
+
"""Read one ``SHOW`` result cell by column name, case-insensitively."""
|
|
234
|
+
target = column.casefold()
|
|
235
|
+
return next((item for key, item in row.items() if str(key).casefold() == target), None)
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
def _catalog_version(value: object) -> int | None:
|
|
239
|
+
"""Return 2 or 3 from a SHOW PARAMETERS ``value`` cell, or None."""
|
|
240
|
+
if isinstance(value, bool):
|
|
241
|
+
return None
|
|
242
|
+
if isinstance(value, int) and value in (ICEBERG_FORMAT_VERSION_V2, ICEBERG_FORMAT_VERSION_V3):
|
|
243
|
+
return value
|
|
244
|
+
if isinstance(value, str):
|
|
245
|
+
token = value.strip()
|
|
246
|
+
if token in {str(ICEBERG_FORMAT_VERSION_V2), str(ICEBERG_FORMAT_VERSION_V3)}:
|
|
247
|
+
return int(token)
|
|
248
|
+
return None
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
def iceberg_spec_from_show_rows(rows: object) -> IcebergSpec | None:
|
|
252
|
+
"""Map a ``SHOW PARAMETERS`` ``ICEBERG_VERSION`` result onto ``iceberg_spec``.
|
|
253
|
+
|
|
254
|
+
The ``value`` column name is matched case-insensitively. ``2`` is ``v2``
|
|
255
|
+
and ``3`` is ``v3``. An empty result or any other value stays unset.
|
|
256
|
+
"""
|
|
257
|
+
if isinstance(rows, (str, bytes)) or not isinstance(rows, Sequence) or not rows:
|
|
258
|
+
return None
|
|
259
|
+
row = rows[0]
|
|
260
|
+
if not isinstance(row, Mapping):
|
|
261
|
+
return None
|
|
262
|
+
version = _catalog_version(_row_value(row, "value"))
|
|
263
|
+
if version == ICEBERG_FORMAT_VERSION_V2:
|
|
264
|
+
return IcebergSpec.V2
|
|
265
|
+
if version == ICEBERG_FORMAT_VERSION_V3:
|
|
266
|
+
return IcebergSpec.V3
|
|
267
|
+
return None
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
def iceberg_flag_from_show_tables_rows(rows: object, table_name: str | None = None) -> bool | None:
|
|
271
|
+
"""Read ``SHOW TABLES`` ``is_iceberg`` as True/False, or None when missing.
|
|
272
|
+
|
|
273
|
+
When ``table_name`` is provided, the matching ``name`` row is selected so
|
|
274
|
+
wildcard matches from ``LIKE`` cannot bleed into another table.
|
|
275
|
+
"""
|
|
276
|
+
if isinstance(rows, (str, bytes)) or not isinstance(rows, Sequence) or not rows:
|
|
277
|
+
return None
|
|
278
|
+
if table_name is not None:
|
|
279
|
+
expected = table_name.casefold()
|
|
280
|
+
for row in rows:
|
|
281
|
+
if isinstance(row, Mapping):
|
|
282
|
+
row_name = _row_value(row, "name")
|
|
283
|
+
if isinstance(row_name, str) and row_name.casefold() == expected:
|
|
284
|
+
return _iceberg_flag_from_show_tables_row(row)
|
|
285
|
+
# A named table that LIKE did not return exactly stays unknown rather
|
|
286
|
+
# than inheriting a wildcard sibling's flag.
|
|
287
|
+
return None
|
|
288
|
+
first = rows[0]
|
|
289
|
+
if not isinstance(first, Mapping):
|
|
290
|
+
return None
|
|
291
|
+
return _iceberg_flag_from_show_tables_row(first)
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
_ICEBERG_FLAG_BY_TOKEN = {
|
|
295
|
+
"y": True, "yes": True, "true": True, "1": True,
|
|
296
|
+
"n": False, "no": False, "false": False, "0": False,
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
|
|
300
|
+
def _iceberg_flag_from_show_tables_row(row: Mapping[object, object]) -> bool | None:
|
|
301
|
+
"""Map a ``SHOW TABLES`` ``is_iceberg`` cell (``Y``/``N``, bool, or ``0``/``1``) to a flag."""
|
|
302
|
+
value = _row_value(row, "is_iceberg")
|
|
303
|
+
if value is None:
|
|
304
|
+
return None
|
|
305
|
+
return _ICEBERG_FLAG_BY_TOKEN.get(str(value).strip().casefold())
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
def format_version_from_spec(iceberg_spec: object) -> int | None:
|
|
309
|
+
"""Map ``iceberg_spec`` to the catalog format version it names."""
|
|
310
|
+
spec = IcebergSpec.parse(iceberg_spec)
|
|
311
|
+
if spec is IcebergSpec.V2:
|
|
312
|
+
return ICEBERG_FORMAT_VERSION_V2
|
|
313
|
+
if spec is IcebergSpec.V3:
|
|
314
|
+
return ICEBERG_FORMAT_VERSION_V3
|
|
315
|
+
return None
|
|
233
316
|
|
|
234
317
|
|
|
235
318
|
_MICROSECOND_FRACTION_DIGITS = 6
|
|
@@ -239,10 +322,8 @@ _NANOSECOND_FRACTION_DIGITS = 9
|
|
|
239
322
|
def resolve_iceberg_fraction_digits(is_iceberg: bool, iceberg_format_version: int | None = None) -> int:
|
|
240
323
|
"""Return the fractional-second digits a Snowflake timestamp renders under Iceberg.
|
|
241
324
|
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
non-Iceberg target, or an Iceberg target whose format version the catalog
|
|
245
|
-
did not report, renders the default nanosecond templates.
|
|
325
|
+
Spec v2 truncates to microseconds (FF6). v3, a missing spec, and a
|
|
326
|
+
non-Iceberg target render the default nanosecond templates.
|
|
246
327
|
"""
|
|
247
328
|
if is_iceberg and iceberg_format_version == ICEBERG_FORMAT_VERSION_V2:
|
|
248
329
|
return _MICROSECOND_FRACTION_DIGITS
|
|
@@ -264,17 +345,19 @@ class IcebergProfile:
|
|
|
264
345
|
|
|
265
346
|
@classmethod
|
|
266
347
|
def from_table_context(cls, table_context: IcebergTableContext) -> IcebergProfile:
|
|
267
|
-
"""Read the Iceberg flag and load mode from a table context's
|
|
348
|
+
"""Read the Iceberg flag and load mode from a table context's spec.
|
|
268
349
|
|
|
269
|
-
|
|
350
|
+
``iceberg_spec`` is the catalog spec (``v2`` or ``v3``). A value that is
|
|
351
|
+
not a string (an unset attribute, a test double) reads as unset.
|
|
270
352
|
"""
|
|
353
|
+
spec = _as_str(getattr(table_context, ICEBERG_SPEC_KEY, None))
|
|
271
354
|
return cls(
|
|
272
355
|
is_iceberg=is_iceberg_dv_profile(
|
|
273
|
-
|
|
356
|
+
spec,
|
|
274
357
|
_as_str(getattr(table_context, STORAGE_MODE_KEY, None)),
|
|
275
358
|
),
|
|
276
359
|
load_mode=_as_str(getattr(table_context, LOAD_MODE_KEY, None)),
|
|
277
|
-
iceberg_format_version=
|
|
360
|
+
iceberg_format_version=format_version_from_spec(spec),
|
|
278
361
|
)
|
|
279
362
|
|
|
280
363
|
@property
|
|
@@ -288,7 +371,7 @@ class IcebergProfile:
|
|
|
288
371
|
|
|
289
372
|
@property
|
|
290
373
|
def fraction_digits(self) -> int:
|
|
291
|
-
"""Fractional-second digits a Snowflake timestamp renders: FF6
|
|
374
|
+
"""Fractional-second digits a Snowflake timestamp renders: FF6 when the spec is v2, else FF9."""
|
|
292
375
|
return resolve_iceberg_fraction_digits(self.is_iceberg, self.iceberg_format_version)
|
|
293
376
|
|
|
294
377
|
|