snowflake-data-validation 1.45.2__tar.gz → 1.45.3__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.2 → snowflake_data_validation-1.45.3}/PKG-INFO +17 -2
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/README.md +15 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/pyproject.toml +2 -1
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/extractor/sql_queries_template_generator.py +35 -1
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/query/query_generator_oracle.py +27 -1
- snowflake_data_validation-1.45.3/src/snowflake/snowflake_data_validation/query/normalization_render_context.py +51 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/query_generator_base.py +6 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_column_metrics_templates.yaml +16 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/query/query_generator_redshift.py +18 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_column_metrics_templates.yaml +16 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_datatypes_normalization_templates.yaml +10 -8
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_case_sensitive_columns.sql.j2 +4 -4
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_columns_metadata.sql.j2 +3 -3
- snowflake_data_validation-1.45.3/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_iceberg_format_version.sql.j2 +2 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_table_metadata_query.sql.j2 +7 -7
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/query/query_generator_snowflake.py +40 -21
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_column_metrics_templates.yaml +4 -2
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/constants.py +22 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/iceberg_dv_common.py +37 -1
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/iso_dv_common.py +3 -1
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/model/table_context.py +3 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/teradata_string_rtrim.py +42 -3
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/data_validator_base.py +71 -1
- snowflake_data_validation-1.45.3/src/snowflake/snowflake_data_validation/validation/lossy_number_mapping.py +59 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/oracle/test_oracle_query_generator.py +47 -0
- snowflake_data_validation-1.45.3/tests/unit/query/test_normalization_render_context.py +57 -0
- snowflake_data_validation-1.45.3/tests/unit/snowflake/test_snowflake_get_iceberg_format_version.py +73 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_data_validator.py +81 -1
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_float_bit_canonical.py +19 -25
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_iceberg_dv_l3_normalization.py +73 -6
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_iso_dv_common.py +3 -1
- snowflake_data_validation-1.45.3/tests/unit/test_lossy_number_mapping.py +57 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_metrics_tolerance.py +23 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_postgresql_tz_normalization.py +2 -1
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_query_generator_numeric_scale.py +10 -6
- snowflake_data_validation-1.45.3/tests/unit/test_redshift_iceberg_timestamp_metrics.py +94 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_redshift_native_timestamptz_ltz.py +3 -1
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_sql_literal_jinja_filter.py +51 -1
- snowflake_data_validation-1.45.3/tests/unit/test_teradata_string_rtrim_policy.py +305 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_timestamp_golden_vectors.py +26 -10
- snowflake_data_validation-1.45.2/tests/unit/test_teradata_string_rtrim_policy.py +0 -170
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/.gitignore +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/LICENSE +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/docs/README.md +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/azure_synapse_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/connector/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_azure_synapse.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_factory_azure_synapse.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/metadata_extractor_azure_synapse.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/model/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/model/azure_synapse_credentials_connection.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/query/query_generator_azure_synapse.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/script_writer_azure_synapse.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/bigquery/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/bigquery/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/bigquery/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/bigquery/query/query_generator_bigquery.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/comparison_orchestrator.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/configuration/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/configuration/configuration_loader.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/configuration/model/configuration_model.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/configuration/model/connection_types.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/configuration/model/connections/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/configuration/model/logging_configuration.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/configuration/model/table_configuration.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/configuration/model/validation_configuration.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/configuration/model/view_configuration.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/configuration/singleton.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/connector/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/connector/connector_base.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/connector/connector_factory_base.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/connector/connector_failure_tracker.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/db2_lob_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/extractor/metadata_extractor_db2.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/query/query_generator_db2.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/script_writer/script_writer_db2.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/executer/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/executer/async_generation_executor.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/executer/async_validation_executor.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/executer/base_validation_executor.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/executer/executor_factory.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/executer/extractor_types.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/executer/source_validation_executor.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/executer/sync_validation_executor.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/extractor/metadata_extractor_base.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/extractor/metadata_extractor_oracle.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/oracle_bfile.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/oracle_iso_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/oracle_lob_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/oracle_statement_functions.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/oracle_vector_extraction.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/oracle_xmltype.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/script_writer/script_writer_oracle.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/orchestration/html_report/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/orchestration/html_report/html_report_builder.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/orchestration/html_report/report_metadata.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/orchestration/parallel_execution_engine.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/orchestration/table_metadata_processor.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/orchestration/validation_progress_reporter.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/orchestration/view_preprocessor.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/connector/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_factory_postgresql.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_postgresql.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/metadata_extractor_postgresql.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_concatenated_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_concatenated_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_md5_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/model/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/model/postgresql_credentials_connection.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/postgresql_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/postgresql_tz_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/query/query_generator_postgresql.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/script_writer/script_writer_postgresql.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/DATA_VALIDATION_API_OVERVIEW.md +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/_internal.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/_teradata_internal.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/async_mode/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/async_mode/file_loader.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/async_mode/script_writer.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/cli/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/cli/commands.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/configuration/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/connectors/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/context/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/data_validation_api.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/enums/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/execution/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/execution/query_executor.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/generators/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/metadata/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/model/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/model/data_validation_exception.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/model/generated_query.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/model/metrics_result_shape.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/model/query_execution_result.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/model/query_generator_factory.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/model/result_set.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/model/validation_progress_callback.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/model/validation_result.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/query_generation/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/query_generation/metadata_queries.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/query_generation/row_validation_queries.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/query_generation/schema_metrics_queries.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/query_validation/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/query_validation/query_comparison.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/reshape/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/reshape/metrics_reshape.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/result_set_validation/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/result_set_validation/result_set_comparison.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/snapshot/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_generation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_validation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/utils/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/utils/helpers.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/validation/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/validation/cell_validation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/validation/metrics_validation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/validation/row_validation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/validation/schema_validation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/chunk_md5_tiered.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/decimal_text_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_modifiers.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/float_aggregate_reduction.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/float_bit_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/numeric_scale_resolution.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/query/query_generator_query.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/query_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/sql_type_families.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/time_precision_resolution.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/tsql_float_remainder.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/vector_element_kind.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/connector/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/connector/connector_factory_redshift.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/connector/connector_redshift.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/metadata_extractor_redshift.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_show_columns_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/model/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/model/redshift_credentials_connection.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/redshift_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/redshift_super_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/script_writer/script_writer_redshift.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/snowflake_to_result_set_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/result_set/query/query_generator_result_set.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/result_set/result_set_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/script_writer/script_writer_base.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_factory_snowflake.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_snowflake.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/metadata_extractor_snowflake.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/_wkt_despace.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_concatenated_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_md5_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_temporary_table_from_view_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/l3/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/l3/pushdown_diff_sql.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/l3/signature_external_table.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/l3/warm_start.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/model/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_credentials_connection.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_default_connection.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_named_connection.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/script_writer/script_writer_snowflake.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/snowflake_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/connector/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_factory_sqlite.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_sqlite.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/metadata_extractor_sqlite.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_compute_md5_sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_sqlite_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/model/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/model/sqlite_connection.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/query/query_generator_sqlite.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/script_writer/script_writer_sqlite.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/connector/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_factory_sql_server.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_sql_server.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/metadata_extractor_sqlserver.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_compute_md5_sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_temporary_table_internal_identifier_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_temporary_table_from_view_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/model/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/model/sqlserver_credentials_connection.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/query/query_generator_sqlserver.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/script_writer_sqlserver.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_string_length_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_tz_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_uniqueidentifier_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/table_partitioning_strategy.md +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/connector/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/connector/connector_factory_teradata.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/connector/connector_teradata.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/metadata_extractor_teradata.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_compute_md5_sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_concatenated.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_md5.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/model/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/model/teradata_credentials_connection.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/query/query_generator_teradata.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/script_writer/script_writer_teradata.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/teradata_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/teradata_iso_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/arguments_manager_base.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/arguments_manager_factory.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/base_output_handler.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/catalog_column_size.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/column_grouping.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/column_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/configuration_file_editor.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/configuration_file_generator.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/configuration_file_synchronizer.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/connection_pool.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/connector_factory.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/console_output_handler.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/context.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/cpu_optimizer.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/dv_tracing.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/error_classifier.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/helper.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/helpers/helper_database.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/helpers/helper_dataframe.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/helpers/helper_io.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/helpers/helper_misc.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/helpers/helper_polars_cast.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/helpers/helper_query_result.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/helpers/helper_templates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/index_key_format.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/interval_common.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/lob_source_types.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/logging_config.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/logging_utils.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/measure_collation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/model/chunk.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/model/column_metadata.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/model/column_selection.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/model/custom_templates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/model/table_column_metadata.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/model/templates_loader_manager.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/period_common.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/progress_reporter.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/qvci_fallback.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/row_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/row_validation_lob_exclusion.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/run_context.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/semi_structured_json_canonicalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/shutdown_coordinator.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/snapshot_validation_statements.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/telemetry.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/templates/configuration_file_templates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/thread_safe_singleton.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/validation_utils.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/vector_common.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/vector_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/accepted_transformation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/cell_data_validator.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/column_pairing.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/comparison_codec.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/dataframe_validator_base.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/metrics_data_validator.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/metrics_tolerance.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/object_type_criterion.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/base.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/db2.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/redshift.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/registry.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/snowflake.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlite.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlserver.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/teradata.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/query_validator.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/result_set_validator.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/results_summary_report.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/row_data_validator.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/row_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/schema_data_validator.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/validation_database/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/validation_database/sqlite_validation_connection.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/validation_database/validation_database_connection_base.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/validation_database_manager.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/validation_execution_context.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/validation_report_status.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/.coveragerc +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/conftest.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/integration/.coveragerc +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/integration/Redshift/test_metadata_extractor_integration.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/integration/test_async_generation_integration.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/integration/test_async_validation_integration.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/integration/test_reference_integration.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/integration/test_source_validation_integration.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/integration/test_sync_validation_integration.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/Postgresql/test_postgresql_bit_count_distinct.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/Postgresql/test_postgresql_collation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/Postgresql/test_postgresql_enum_metadata.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/Postgresql/test_postgresql_json_cell_validation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/Postgresql/test_postgresql_jsonb_row_hash.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/Postgresql/test_postgresql_numeric_leading_zero.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/Postgresql/test_postgresql_spatial_templates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/model/test_redshift_credentials_connection.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/query/test_query_generator_redshift.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/script_writer/test_script_writer_redshift.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/test_connector_redshift.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/test_redshift_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/test_redshift_collation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/test_redshift_columns_metadata_template.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/test_redshift_hllsketch_templates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/test_redshift_spatial_templates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/test_redshift_split_schema_query.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/test_redshift_super_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/test_redshift_timetz_sentinel_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/test_redshift_varchar_count_distinct.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/Teradata/test_connector_teradata.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/Teradata/test_metadata_extractor_teradata.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/Teradata/test_period_varchar_l1.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/Teradata/test_query_generator_teradata.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/Teradata/test_teradata_collation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/Teradata/test_teradata_columns_metadata_precision_scale.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/Teradata/test_teradata_row_md5_select_template.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/Teradata/test_teradata_spatial_templates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/Teradata/test_teradata_table_metadata_float_precision.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/Teradata/test_teradata_view_generate_boundary.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/Teradata/test_teradata_view_l1_metadata_templates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/assets/custom_templates_loader/snowflake_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/assets/custom_templates_loader/snowflake_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/assets/custom_templates_loader/snowflake_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/assets/test_configuration_loader/test_load_configuration_model/conf.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/assets/test_configuration_loader/test_load_configuration_model_reading_file_exception/conf.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/assets/test_helpers/dummy_configuration_file.json +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/assets/test_helpers/dummy_connection_source_db.toml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/assets/test_helpers/dummy_datatypes_normalization_template.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/assets/test_helpers/dummy_datatypes_template.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/assets/test_helpers/dummy_metrics_template.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/assets/test_helpers/dummy_metrics_template_datatypes.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/assets/test_helpers/dummy_template.csv +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/assets/test_helpers/not_valid_format.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/assets/test_templates_loader_manager/snowflake_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/assets/test_templates_loader_manager/snowflake_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/azure_synapse/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/azure_synapse/test_azure_synapse_credentials_connection.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/azure_synapse/test_azure_synapse_l3_convert_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/azure_synapse/test_azure_synapse_metadata_extractor.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/azure_synapse/test_azure_synapse_metrics_templates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/azure_synapse/test_azure_synapse_query_generator.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/azure_synapse/test_azure_synapse_row_queries.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/azure_synapse/test_connector_azure_synapse.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/azure_synapse/test_connector_factory_azure_synapse.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/bigquery/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/bigquery/test_bigquery_l1_string_length.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/bigquery/test_bigquery_spatial_templates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/bigquery/test_query_generator_bigquery.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/bigquery/test_query_generator_factory_bigquery.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/conftest.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/db2/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/db2/test_db2_lob_dv_generation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/db2/test_db2_metadata_extractor.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/db2/test_db2_query_generator.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/db2/test_db2_registration.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/db2/test_db2_xml_long_dv_generation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/db2/test_db2_xml_long_metrics.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/oracle/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/oracle/test_metadata_extractor_oracle_vector.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/oracle/test_oracle_configured_index_columns.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/oracle/test_oracle_iso_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/oracle/test_oracle_lob_dv_generation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/oracle/test_oracle_lob_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/oracle/test_oracle_metadata_extractor.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/oracle/test_oracle_metrics_templates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/oracle/test_oracle_normalization_templates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/oracle/test_oracle_query_modifiers.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/oracle/test_oracle_quoted_identifiers.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/oracle/test_oracle_type_mappings.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/query/test_chunk_md5_tiered.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/query/test_time_fraction_rendering.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/snowflake/test_snowflake_get_case_sensitive_columns.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/snowflake/test_snowflake_spatial_metrics_templates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/sqlite/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/sqlite/test_connector_factory_sqlite.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/sqlite/test_connector_sqlite.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/sqlite/test_metadata_extractor_sqlite.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/sqlite/test_metadata_query_template_sqlite.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/sqlite/test_query_generator_sqlite.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/sqlite/test_script_writer_sqlite.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_connector_factory_sql_server.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_metadata_extractor_sqlserver_vector.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_datetimeoffset_full_ingest_utc.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_datetimeoffset_metrics_utc.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_datetimeoffset_physical_target.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_json.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_l1_catalog.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_l1_character_length.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_l3_convert_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_length_metrics_chars.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_row_count_overflow.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_row_queries.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_spatial_l1_metadata.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_spatial_metrics_templates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_string_length_pairing.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_uniqueidentifier_l3_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_xml_image_metrics.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_tsql_integer_stddev_exact.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_accepted_transformation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_arguments_manager_base.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_arguments_manager_factory.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_batched_metrics_queries.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_boolean_binary_canonical_templates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_case_sensitive_column_pairing.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_catalog_column_size.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_catalog_queries_take_actual_names.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_cell_data_validator.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_cell_data_validator_threading.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_cell_validation_query_generation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_charset_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_column_grouping.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_column_metadata.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_column_normalization_override.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_column_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_column_selection.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_column_selection_actual_names.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_comparison_codec.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_comparison_orchestrator.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_configuration_file_editor.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_configuration_file_generator.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_configuration_file_synchronizer.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_configuration_loader.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_configuration_model.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_connection_pool.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_connector_failure_tracker.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_connector_snowflake.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_cpu_optimizer.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_custom_templates_models.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_decimal_text_canonical.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_dv_tracing.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_error_classifier.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_escape_odbc_value.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_executor_factory.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_extraction_keeps_catalog_column_spelling.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_fetch_schema_metadata.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_float_aggregate_reduction.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_float_canonical_templates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_get_configuration_file.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_get_target_cols.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_helper_dataframe.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_helper_io.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_helper_polars_cast.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_helper_polars_cast_threading.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_helpers.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_html_report_builder.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_iceberg_v2_metrics_exclusion.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_index_key_format.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_internal_helpers.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_interval_common.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_l2_collation_metadata.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_l2_count_distinct_opt_in_config.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_logging_config.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_metric_identifier_rendering.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_metrics_reshape.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_metrics_result_shape.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_metrics_templates_casts.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_normalize_shape_aware.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_numeric_scale_resolution.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_object_type_criterion.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_parallel_execution_engine_fatal_errors.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_period_common.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_platform_bridge.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_postgresql_normalization_templates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_pushdown_diff_sql.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_query_cell_level_validation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_query_executor.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_query_metrics_level_validation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_query_to_dataframe.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_query_validator.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_qvci_fallback.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_qvci_fallback_na_skip.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_qvci_fallback_triggers.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_report_metadata.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_result_set_cell_level_validation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_result_set_column_metrics_validation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_result_set_snapshot_generation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_result_set_snapshot_validation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_result_set_to_dataframe.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_result_set_validator.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_row_count_bigint_overflow.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_row_data_validator.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_row_data_validator_empty_chunk.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_row_hash_column_delimiter.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_row_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_row_validation_lob_exclusion.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_row_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_schema_accepted_native_datatypes.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_schema_column_selection.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_schema_query_capability.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_shutdown_coordinator.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_signature_external_table.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_signature_row_md5_query.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_snapshot_validation_statements.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_snowflake_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_snowflake_binary_normalization_templates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_snowflake_redshift_super_size_guard.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_source_validation_executor.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_spatial_wkt_canonicalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_sql_catalog_template_guard.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_sqlite_validation_connection.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_sqlserver_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_sqlserver_multi_version_support.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_sync_executor_qvci_fallback.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_sync_schema_validation_real_callbacks.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_sync_validation_executor.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_table_column_metadata_model.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_table_configuration.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_table_context.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_table_metadata_processor.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_table_snapshot_generation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_table_snapshot_validation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_target_platform_factory.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_telemetry.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_templates_loader_manager.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_teradata_iso_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_teradata_timetz_metric_domain.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_teradata_type_code_mapping.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_trace_bridge.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_tsql_float_l2_aggregates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_validation_configuration.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_validation_database_connection.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_validation_execution_context.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_validation_progress_reporter.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_validation_report_status.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_validation_templates_dto.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_vector_bit_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_vector_common.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_vector_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_view_configuration.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/test_warm_start.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/utils/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/tests/unit/utils/test_constants.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.3}/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.3
|
|
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/
|
|
@@ -79,7 +79,7 @@ Requires-Dist: psycopg[binary]>=3.2.0; extra == 'postgresql'
|
|
|
79
79
|
Provides-Extra: redshift
|
|
80
80
|
Requires-Dist: redshift-connector>=2.1.14; extra == 'redshift'
|
|
81
81
|
Provides-Extra: scai
|
|
82
|
-
Requires-Dist: snowflake-code-unit-registry>=0.9.
|
|
82
|
+
Requires-Dist: snowflake-code-unit-registry>=0.9.5; extra == 'scai'
|
|
83
83
|
Provides-Extra: sqlite
|
|
84
84
|
Requires-Dist: sqlean-py>=3.45.0; extra == 'sqlite'
|
|
85
85
|
Provides-Extra: sqlserver
|
|
@@ -160,8 +160,12 @@ Some differences are reported as `WARNING` and do not fail L1:
|
|
|
160
160
|
|
|
161
161
|
A nullable source column on a `NOT NULL` Snowflake column still fails, since Snowflake can reject the source's NULLs.
|
|
162
162
|
|
|
163
|
+
An integer column mapped to a `NUMBER` with scale 0 is the exception to the precision warning: SQL Server `INT` (precision 10) in `NUMBER(38,0)` holds every value, so its `NUMERIC_PRECISION` row is `SUCCESS`.
|
|
164
|
+
|
|
163
165
|
A PostgreSQL user-defined `ENUM` column is validated as `ENUM` against a Snowflake `VARCHAR`. `information_schema` reports every enum as `USER-DEFINED`, so the metadata queries read `pg_type.typtype` to tell enums apart, and report the longest label as the column's length. L2 and L3 compare the label text.
|
|
164
166
|
|
|
167
|
+
Snowflake database, schema and table names may contain a backslash or an apostrophe, for example `NAFMAIN\TUSDB102`. Snowflake reads backslash escapes inside a string literal, so the Snowflake metadata queries (table metadata, column metadata, case-sensitive columns and object-type lookups) write each name through `escape_snowflake_sql_literal` / `quote_snowflake_sql_literal` in `shared/queries/sql_literals.py`, which double backslashes as well as single quotes. Use these helpers, not `escape_sql_literal`, for any name embedded in a Snowflake string literal.
|
|
168
|
+
|
|
165
169
|
### Metrics Validation
|
|
166
170
|
Compares statistical metrics for each column:
|
|
167
171
|
- Row count
|
|
@@ -226,6 +230,17 @@ For configuration options and examples, see the [official documentation](https:/
|
|
|
226
230
|
|
|
227
231
|
## Changelog
|
|
228
232
|
|
|
233
|
+
### v1.45.3
|
|
234
|
+
|
|
235
|
+
**Bug fixes**
|
|
236
|
+
|
|
237
|
+
- Fixed schema validation reporting SQL Server `INT` columns mapped to `NUMBER(38,0)` as precision differences.
|
|
238
|
+
- Surfaced rounding of scale-less `NUMBER` values as a lossy mapping instead of a hidden match.
|
|
239
|
+
- Fixed schema validation reporting every column as missing when the schema name contains a backslash (for example `DOMAIN\user` schemas).
|
|
240
|
+
- Fixed Teradata `VARCHAR` distinct and empty-value metrics not matching when values have trailing spaces.
|
|
241
|
+
- Fixed Iceberg timestamp comparisons to use `FF6` or `FF9` fractional precision based on the catalog format version.
|
|
242
|
+
- Fixed metrics validation for signed-year `TIMESTAMP` values, including BC and post-9999 dates.
|
|
243
|
+
|
|
229
244
|
### v1.45.2
|
|
230
245
|
|
|
231
246
|
**Bug fixes**
|
|
@@ -69,8 +69,12 @@ Some differences are reported as `WARNING` and do not fail L1:
|
|
|
69
69
|
|
|
70
70
|
A nullable source column on a `NOT NULL` Snowflake column still fails, since Snowflake can reject the source's NULLs.
|
|
71
71
|
|
|
72
|
+
An integer column mapped to a `NUMBER` with scale 0 is the exception to the precision warning: SQL Server `INT` (precision 10) in `NUMBER(38,0)` holds every value, so its `NUMERIC_PRECISION` row is `SUCCESS`.
|
|
73
|
+
|
|
72
74
|
A PostgreSQL user-defined `ENUM` column is validated as `ENUM` against a Snowflake `VARCHAR`. `information_schema` reports every enum as `USER-DEFINED`, so the metadata queries read `pg_type.typtype` to tell enums apart, and report the longest label as the column's length. L2 and L3 compare the label text.
|
|
73
75
|
|
|
76
|
+
Snowflake database, schema and table names may contain a backslash or an apostrophe, for example `NAFMAIN\TUSDB102`. Snowflake reads backslash escapes inside a string literal, so the Snowflake metadata queries (table metadata, column metadata, case-sensitive columns and object-type lookups) write each name through `escape_snowflake_sql_literal` / `quote_snowflake_sql_literal` in `shared/queries/sql_literals.py`, which double backslashes as well as single quotes. Use these helpers, not `escape_sql_literal`, for any name embedded in a Snowflake string literal.
|
|
77
|
+
|
|
74
78
|
### Metrics Validation
|
|
75
79
|
Compares statistical metrics for each column:
|
|
76
80
|
- Row count
|
|
@@ -135,6 +139,17 @@ For configuration options and examples, see the [official documentation](https:/
|
|
|
135
139
|
|
|
136
140
|
## Changelog
|
|
137
141
|
|
|
142
|
+
### v1.45.3
|
|
143
|
+
|
|
144
|
+
**Bug fixes**
|
|
145
|
+
|
|
146
|
+
- Fixed schema validation reporting SQL Server `INT` columns mapped to `NUMBER(38,0)` as precision differences.
|
|
147
|
+
- Surfaced rounding of scale-less `NUMBER` values as a lossy mapping instead of a hidden match.
|
|
148
|
+
- Fixed schema validation reporting every column as missing when the schema name contains a backslash (for example `DOMAIN\user` schemas).
|
|
149
|
+
- Fixed Teradata `VARCHAR` distinct and empty-value metrics not matching when values have trailing spaces.
|
|
150
|
+
- Fixed Iceberg timestamp comparisons to use `FF6` or `FF9` fractional precision based on the catalog format version.
|
|
151
|
+
- Fixed metrics validation for signed-year `TIMESTAMP` values, including BC and post-9999 dates.
|
|
152
|
+
|
|
138
153
|
### v1.45.2
|
|
139
154
|
|
|
140
155
|
**Bug fixes**
|
|
@@ -4,6 +4,7 @@ requires = ["hatchling"]
|
|
|
4
4
|
|
|
5
5
|
[tool.uv]
|
|
6
6
|
constraint-dependencies = [
|
|
7
|
+
"certifi>=2026.10.23,<2026.11",
|
|
7
8
|
"virtualenv>=21.7.13,<21.8",
|
|
8
9
|
]
|
|
9
10
|
|
|
@@ -105,7 +106,7 @@ db2 = [
|
|
|
105
106
|
# musllinux build, and SDV is published to public PyPI. Inside DMO/DEA the
|
|
106
107
|
# dependency is already declared, so SDV's logger tree is covered there.
|
|
107
108
|
scai = [
|
|
108
|
-
"snowflake-code-unit-registry>=0.9.
|
|
109
|
+
"snowflake-code-unit-registry>=0.9.5",
|
|
109
110
|
]
|
|
110
111
|
|
|
111
112
|
[project.urls]
|
|
@@ -26,7 +26,7 @@ import snowflake.snowflake_data_validation as sdv_pkg
|
|
|
26
26
|
|
|
27
27
|
from shared.identifiers.managers import identifier_manager
|
|
28
28
|
from shared.identifiers.sql_identifier import SqlIdentifier
|
|
29
|
-
from shared.queries.sql_literals import escape_sql_literal
|
|
29
|
+
from shared.queries.sql_literals import escape_snowflake_sql_literal, escape_sql_literal
|
|
30
30
|
from shared.query_modifiers.strict import check_query_modifiers_strict
|
|
31
31
|
from shared.query_modifiers.template_context import QueryModifiersTemplateContext
|
|
32
32
|
from snowflake.snowflake_data_validation.utils.constants import (
|
|
@@ -132,6 +132,7 @@ class SQLQueriesTemplateGenerator:
|
|
|
132
132
|
# Identifiers are written in Python (write_sql_name, column_sql_names)
|
|
133
133
|
# and handed to the templates already written; only literals are escaped here.
|
|
134
134
|
self.env.filters["escape_sql_literal"] = escape_sql_literal
|
|
135
|
+
self.env.filters["escape_snowflake_sql_literal"] = escape_snowflake_sql_literal
|
|
135
136
|
# Single source of truth for the NULL sentinel used by L3 row-MD5 and
|
|
136
137
|
# cell-validation normalization. Exposed to every template so the
|
|
137
138
|
# COALESCE fallback can keep a real SQL NULL distinct from "".
|
|
@@ -351,6 +352,39 @@ class SQLQueriesTemplateGenerator:
|
|
|
351
352
|
except Exception as e:
|
|
352
353
|
raise Exception(f"Error generating template: {e}") from e
|
|
353
354
|
|
|
355
|
+
def get_iceberg_format_version(self, database_name: str, schema_name: str, table_name: str, platform: str) -> str:
|
|
356
|
+
"""Generate the query that reads one target table's Iceberg format version.
|
|
357
|
+
|
|
358
|
+
Args:
|
|
359
|
+
database_name (str): Database that contains the table.
|
|
360
|
+
schema_name (str): Schema that contains the table.
|
|
361
|
+
table_name (str): Table whose ``ICEBERG_VERSION`` parameter is read.
|
|
362
|
+
platform (str): Platform identifier (``Platform.SNOWFLAKE.value``).
|
|
363
|
+
|
|
364
|
+
Returns:
|
|
365
|
+
str: The SQL query. The ``value`` column is ``ICEBERG_FORMAT_VERSION_V2``
|
|
366
|
+
or ``ICEBERG_FORMAT_VERSION_V3``.
|
|
367
|
+
|
|
368
|
+
Raises:
|
|
369
|
+
ValueError: If the template file is not found.
|
|
370
|
+
Exception: If an error occurs during template rendering.
|
|
371
|
+
|
|
372
|
+
"""
|
|
373
|
+
template_file = f"{platform}_get_iceberg_format_version.sql.j2"
|
|
374
|
+
try:
|
|
375
|
+
return self._render(
|
|
376
|
+
template_file,
|
|
377
|
+
database_sql=write_sql_name(database_name, platform),
|
|
378
|
+
schema_sql=write_sql_name(schema_name, platform),
|
|
379
|
+
table_sql=write_sql_name(table_name, platform),
|
|
380
|
+
)
|
|
381
|
+
except jinja2.exceptions.TemplateNotFound:
|
|
382
|
+
raise ValueError(
|
|
383
|
+
f"Template not found for platform: {platform}. Please create {template_file} in the {self.template_dir} directory."
|
|
384
|
+
) from None
|
|
385
|
+
except Exception as e:
|
|
386
|
+
raise Exception(f"Error generating template: {e}") from e
|
|
387
|
+
|
|
354
388
|
def generate_compute_md5_query(
|
|
355
389
|
self,
|
|
356
390
|
platform: str,
|
|
@@ -77,6 +77,7 @@ from snowflake.snowflake_data_validation.utils.constants import (
|
|
|
77
77
|
ROW_HASH_COLUMN_DELIMITER,
|
|
78
78
|
ROW_HASH_COLUMN_DELIMITER_KEY,
|
|
79
79
|
Platform,
|
|
80
|
+
renders_full_precision,
|
|
80
81
|
)
|
|
81
82
|
from snowflake.snowflake_data_validation.utils.iso_dv_common import (
|
|
82
83
|
get_paired_target_column_types,
|
|
@@ -156,6 +157,28 @@ def build_oracle_numeric_canonical_expr(col_ref: str, format_mask: str) -> str:
|
|
|
156
157
|
)
|
|
157
158
|
|
|
158
159
|
|
|
160
|
+
def build_oracle_full_precision_numeric_expr(col_ref: str, format_mask: str) -> str:
|
|
161
|
+
"""Render a value that fits the mask's scale through the mask, any other at its stored precision.
|
|
162
|
+
|
|
163
|
+
For a bare NUMBER the target scale was never checked against the data. A value
|
|
164
|
+
the target could hold renders exactly like :func:`build_oracle_numeric_canonical_expr`,
|
|
165
|
+
the text Snowflake prints. A value with more fractional digits renders with
|
|
166
|
+
``TM9`` (shortest exact text, scientific only past 64 characters, which no
|
|
167
|
+
NUMBER(38, s) value reaches), so the target's rounding shows as a cell diff.
|
|
168
|
+
"""
|
|
169
|
+
scale = _oracle_scale_from_fm_mask(format_mask)
|
|
170
|
+
full_text = f"TRIM(REGEXP_REPLACE(TRIM(REGEXP_REPLACE(TRIM(TO_CHAR({col_ref}, 'TM9')), '^-\\.', '-0.')), '^\\.', '0.'))"
|
|
171
|
+
return (
|
|
172
|
+
f"CASE WHEN {col_ref} IS NULL THEN NULL "
|
|
173
|
+
f"WHEN {col_ref} = ROUND({col_ref}, {scale}) THEN {build_oracle_numeric_canonical_expr(col_ref, format_mask)} "
|
|
174
|
+
f"ELSE {full_text} END"
|
|
175
|
+
)
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
def _renders_full_precision(column: object) -> bool:
|
|
179
|
+
return renders_full_precision(getattr(column, "properties", None))
|
|
180
|
+
|
|
181
|
+
|
|
159
182
|
class QueryGeneratorOracle(QueryGeneratorBase):
|
|
160
183
|
"""Oracle-specific implementation of the query generator.
|
|
161
184
|
|
|
@@ -250,7 +273,10 @@ class QueryGeneratorOracle(QueryGeneratorBase):
|
|
|
250
273
|
"""Wrap numeric ``TO_CHAR`` output to restore the FM-suppressed leading zero."""
|
|
251
274
|
if NUMERIC_FORMAT_MASK_PLACEHOLDER in template and "TO_CHAR" in template and self._is_numeric_normalization_type(column.data_type):
|
|
252
275
|
mask = self._build_numeric_format_mask(self._resolve_numeric_scale(column))
|
|
253
|
-
|
|
276
|
+
col_ref = self._write_sql_identifier(column.name)
|
|
277
|
+
if _renders_full_precision(column):
|
|
278
|
+
return build_oracle_full_precision_numeric_expr(col_ref, mask)
|
|
279
|
+
return build_oracle_numeric_canonical_expr(col_ref, mask)
|
|
254
280
|
return super().render_normalization_template(template, column)
|
|
255
281
|
|
|
256
282
|
def build_float_bit_shim(self, column, col_ref: str) -> str:
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass, replace
|
|
4
|
+
from typing import TYPE_CHECKING
|
|
5
|
+
|
|
6
|
+
from snowflake.snowflake_data_validation.utils.constants import Platform
|
|
7
|
+
from snowflake.snowflake_data_validation.utils.iceberg_dv_common import IcebergProfile
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
if TYPE_CHECKING:
|
|
11
|
+
from snowflake.snowflake_data_validation.utils.model.table_context import TableContext
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@dataclass(frozen=True)
|
|
15
|
+
class NormalizationRenderContext:
|
|
16
|
+
"""Per-render inputs a normalization template needs beyond the column itself.
|
|
17
|
+
|
|
18
|
+
Resolve the per-table inputs once with ``from_table_context``, then specialize
|
|
19
|
+
per column with ``for_column``. A new render input becomes a field here instead
|
|
20
|
+
of another parameter on ``render_normalization_template``.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
paired_source_platform: Platform | None = None
|
|
24
|
+
paired_source_type: str | None = None
|
|
25
|
+
iceberg_fraction_digits: int = IcebergProfile().fraction_digits
|
|
26
|
+
has_custom_normalization: bool = False
|
|
27
|
+
|
|
28
|
+
@classmethod
|
|
29
|
+
def from_table_context(cls, table_context: TableContext) -> NormalizationRenderContext:
|
|
30
|
+
"""Resolve the per-table inputs; ``for_column`` adds the per-column paired type."""
|
|
31
|
+
return cls(
|
|
32
|
+
paired_source_platform=table_context.paired_source_platform,
|
|
33
|
+
iceberg_fraction_digits=IcebergProfile.from_table_context(table_context).fraction_digits,
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
def for_column(
|
|
37
|
+
self,
|
|
38
|
+
paired_source_type: str | None,
|
|
39
|
+
*,
|
|
40
|
+
has_custom_normalization: bool = False,
|
|
41
|
+
) -> NormalizationRenderContext:
|
|
42
|
+
"""Return a copy specialized for one column; the base context is left unchanged.
|
|
43
|
+
|
|
44
|
+
Sets the column's paired source type and whether its template is a user
|
|
45
|
+
override. ``has_custom_normalization`` resets to False unless passed.
|
|
46
|
+
"""
|
|
47
|
+
return replace(
|
|
48
|
+
self,
|
|
49
|
+
paired_source_type=paired_source_type,
|
|
50
|
+
has_custom_normalization=has_custom_normalization,
|
|
51
|
+
)
|
|
@@ -58,6 +58,7 @@ from snowflake.snowflake_data_validation.utils.constants import (
|
|
|
58
58
|
DEFAULT_MAX_COLUMNS_PER_METRICS_BATCH,
|
|
59
59
|
EXPLICIT_METRIC_NORMALIZATION_COLUMN_KEY,
|
|
60
60
|
FLOAT_BIT_SHIM_PLACEHOLDER,
|
|
61
|
+
ICEBERG_FRACTION_DIGITS_PLACEHOLDER,
|
|
61
62
|
MEASURE_COLLATION_PREFIX_PLACEHOLDER,
|
|
62
63
|
MEASURE_COLLATION_SUFFIX_PLACEHOLDER,
|
|
63
64
|
METRIC_COLUMN_KEY,
|
|
@@ -892,6 +893,7 @@ class QueryGeneratorBase(ABC):
|
|
|
892
893
|
# set the attribute keep the default instead of a truthy Mock.
|
|
893
894
|
include_count_distinct = getattr(table_context, "include_count_distinct", False) is True
|
|
894
895
|
apply_metric_column_modifier = table_context.apply_metric_column_modifier
|
|
896
|
+
iceberg_fraction_digits = IcebergProfile.from_table_context(table_context).fraction_digits
|
|
895
897
|
|
|
896
898
|
select_exprs: list[str] = []
|
|
897
899
|
cells: list[tuple[str, str]] = []
|
|
@@ -953,6 +955,10 @@ class QueryGeneratorBase(ABC):
|
|
|
953
955
|
if NUMERIC_FORMAT_MASK_PLACEHOLDER in normalization:
|
|
954
956
|
mask = self._build_numeric_format_mask(self._resolve_numeric_scale(col))
|
|
955
957
|
normalization = normalization.replace(NUMERIC_FORMAT_MASK_PLACEHOLDER, mask)
|
|
958
|
+
if ICEBERG_FRACTION_DIGITS_PLACEHOLDER in normalization:
|
|
959
|
+
normalization = normalization.replace(
|
|
960
|
+
ICEBERG_FRACTION_DIGITS_PLACEHOLDER, str(iceberg_fraction_digits)
|
|
961
|
+
)
|
|
956
962
|
metric_expr = self._wrap_metric_with_normalization(normalization, metric_expr)
|
|
957
963
|
alias = f"c{measured_idx}_m{metric_idx}"
|
|
958
964
|
select_exprs.append(f"{metric_expr} AS {alias}")
|
|
@@ -619,6 +619,22 @@ TIMESTAMP WITHOUT TIME ZONE:
|
|
|
619
619
|
metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
|
|
620
620
|
metric_return_datatype: BIGINT
|
|
621
621
|
|
|
622
|
+
# Iceberg VARCHAR target (SNOW-4353618): MIN/MAX of the instant, rendered as the
|
|
623
|
+
# signed astronomical-year text the UNLOAD footer writes (``TO_CHAR 'YYYY'``
|
|
624
|
+
# drops the era). Kept in sync with DMO by test_redshift_consistency.py.
|
|
625
|
+
TIMESTAMP_AS_TEXT:
|
|
626
|
+
min:
|
|
627
|
+
metric_query: MIN("{{ col_name }}")
|
|
628
|
+
metric_return_datatype: VARCHAR
|
|
629
|
+
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)) || TO_CHAR({{ metric_query }}, ''-MM-DD"T"HH24:MI:SS.US'') || ''000'''
|
|
630
|
+
max:
|
|
631
|
+
metric_query: MAX("{{ col_name }}")
|
|
632
|
+
metric_return_datatype: VARCHAR
|
|
633
|
+
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)) || TO_CHAR({{ metric_query }}, ''-MM-DD"T"HH24:MI:SS.US'') || ''000'''
|
|
634
|
+
count_null:
|
|
635
|
+
metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
|
|
636
|
+
metric_return_datatype: BIGINT
|
|
637
|
+
|
|
622
638
|
TIMESTAMPTZ:
|
|
623
639
|
min:
|
|
624
640
|
metric_query: MIN("{{ col_name }}")
|
|
@@ -62,6 +62,7 @@ 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
|
+
TIMESTAMP_AS_TEXT_KEY,
|
|
65
66
|
IcebergProfile,
|
|
66
67
|
resolve_iceberg_v2_compatible_source_normalization_key,
|
|
67
68
|
)
|
|
@@ -71,6 +72,7 @@ from snowflake.snowflake_data_validation.utils.interval_common import (
|
|
|
71
72
|
)
|
|
72
73
|
from snowflake.snowflake_data_validation.utils.iso_dv_common import (
|
|
73
74
|
get_paired_target_column_types,
|
|
75
|
+
is_snowflake_varchar_like_type,
|
|
74
76
|
)
|
|
75
77
|
from snowflake.snowflake_data_validation.utils.measure_collation import (
|
|
76
78
|
COUNT_DISTINCT_METRIC,
|
|
@@ -83,6 +85,7 @@ from snowflake.snowflake_data_validation.utils.model.table_context import TableC
|
|
|
83
85
|
|
|
84
86
|
LOGGER = logging.getLogger(__name__)
|
|
85
87
|
_REDSHIFT_NORMALIZED_COLLATION_TOKENS = ("COLLATE(", ", 'case_sensitive')")
|
|
88
|
+
_TIMESTAMP_BASE_TYPES = frozenset({CommonType.TIMESTAMP, CommonType.TIMESTAMP_WITHOUT_TIME_ZONE})
|
|
86
89
|
|
|
87
90
|
# Redshift ``TO_CHAR`` formats numbers with 64-bit arithmetic. A numeric format
|
|
88
91
|
# mask with N total digit placeholders (integer nines + fractional zeros) admits
|
|
@@ -752,6 +755,21 @@ class QueryGeneratorRedshift(QueryGeneratorBase):
|
|
|
752
755
|
raise ValueError(f"No normalization template found for data type {data_type} and no DEFAULT template available.")
|
|
753
756
|
return normalization_template
|
|
754
757
|
|
|
758
|
+
def _resolve_metrics_col_type(self, col, table_context: TableContext) -> str:
|
|
759
|
+
"""Key an Iceberg VARCHAR TIMESTAMP to the signed-year metrics (SNOW-4353618).
|
|
760
|
+
|
|
761
|
+
``TO_CHAR 'YYYY'`` drops the era, so MIN / MAX would not match the text
|
|
762
|
+
the UNLOAD staged. Native targets keep the shared TIMESTAMP template.
|
|
763
|
+
"""
|
|
764
|
+
col_type = super()._resolve_metrics_col_type(col, table_context)
|
|
765
|
+
if not IcebergProfile.from_table_context(table_context).is_active:
|
|
766
|
+
return col_type
|
|
767
|
+
if col_type.upper() not in _TIMESTAMP_BASE_TYPES:
|
|
768
|
+
return col_type
|
|
769
|
+
if not is_snowflake_varchar_like_type(get_paired_target_column_types(table_context).get(col.name)):
|
|
770
|
+
return col_type
|
|
771
|
+
return TIMESTAMP_AS_TEXT_KEY
|
|
772
|
+
|
|
755
773
|
def _resolve_normalization_templates(
|
|
756
774
|
self,
|
|
757
775
|
table_context: TableContext,
|
|
@@ -249,6 +249,22 @@ VARCHAR_TIMESTAMP:
|
|
|
249
249
|
metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
|
|
250
250
|
metric_return_datatype: NUMBER
|
|
251
251
|
|
|
252
|
+
# Signed-year ISO text (Redshift Iceberg, SNOW-4353618): TRY_TO_TIMESTAMP_NTZ
|
|
253
|
+
# returns NULL for negative and 5+ digit years, so parse from parts like the
|
|
254
|
+
# Iceberg column comment's cast back (DMO iceberg_column_comment.py).
|
|
255
|
+
VARCHAR_TIMESTAMP_SIGNED:
|
|
256
|
+
min:
|
|
257
|
+
metric_query: 'MIN(TIMESTAMP_NTZ_FROM_PARTS(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_TIME(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''T([0-9]{2}:[0-9]{2}:[0-9]{2}(\\.[0-9]+)?)'', 1, 1, ''e'', 1))))'
|
|
258
|
+
metric_return_datatype: VARCHAR
|
|
259
|
+
metric_normalization: TO_CHAR({{ metric_query }}, 'YYYY-MM-DD"T"HH24:MI:SS.FF9')
|
|
260
|
+
max:
|
|
261
|
+
metric_query: 'MAX(TIMESTAMP_NTZ_FROM_PARTS(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_TIME(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''T([0-9]{2}:[0-9]{2}:[0-9]{2}(\\.[0-9]+)?)'', 1, 1, ''e'', 1))))'
|
|
262
|
+
metric_return_datatype: VARCHAR
|
|
263
|
+
metric_normalization: TO_CHAR({{ metric_query }}, 'YYYY-MM-DD"T"HH24:MI:SS.FF9')
|
|
264
|
+
count_null:
|
|
265
|
+
metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
|
|
266
|
+
metric_return_datatype: NUMBER
|
|
267
|
+
|
|
252
268
|
# Order by UTC time-of-day. A plain MIN of the parsed instant uses today's date
|
|
253
269
|
# and can cross midnight, so the formatted value would keep the wrong offset.
|
|
254
270
|
VARCHAR_TIME_TZ:
|
|
@@ -11,20 +11,22 @@ NUMBER: TO_CHAR("{{ col_name }}", '{{ numeric_format_mask }}')
|
|
|
11
11
|
# truncates the same way on every engine; a CAST to TIME(p) would round.
|
|
12
12
|
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
|
+
# format version (v2 micro FF6 / v3 nano FF9), substituted at render from
|
|
16
|
+
# resolve_iceberg_fraction_digits; non-Iceberg paths default to FF9.
|
|
17
|
+
TIMESTAMP_LTZ: TO_CHAR("{{ col_name }}", 'YYYY-MM-DD"T"HH24:MI:SS.FF{{ fraction_digits }}')
|
|
15
18
|
# Paired Oracle TIMESTAMP WITH LOCAL TIME ZONE: compare the retained instant in UTC.
|
|
16
|
-
TIMESTAMP_LTZ_UTC: TO_CHAR(CONVERT_TIMEZONE('UTC', "{{ col_name }}"), 'YYYY-MM-DD"T"HH24:MI:SS.
|
|
17
|
-
TIMESTAMP_NTZ: TO_CHAR("{{ col_name }}", 'YYYY-MM-DD"T"HH24:MI:SS.
|
|
18
|
-
TIMESTAMP_TZ: REGEXP_REPLACE(TO_CHAR("{{ col_name }}", 'YYYY-MM-DD"T"HH24:MI:SS.
|
|
19
|
+
TIMESTAMP_LTZ_UTC: TO_CHAR(CONVERT_TIMEZONE('UTC', "{{ col_name }}"), 'YYYY-MM-DD"T"HH24:MI:SS.FF{{ fraction_digits }}')
|
|
20
|
+
TIMESTAMP_NTZ: TO_CHAR("{{ col_name }}", 'YYYY-MM-DD"T"HH24:MI:SS.FF{{ fraction_digits }}')
|
|
21
|
+
TIMESTAMP_TZ: REGEXP_REPLACE(TO_CHAR("{{ col_name }}", 'YYYY-MM-DD"T"HH24:MI:SS.FF{{ fraction_digits }}TZH:TZM'), 'Z$', '+00:00')
|
|
19
22
|
# Paired PostgreSQL timestamptz: compare UTC instants (Oracle/Teradata use TIMESTAMP_TZ).
|
|
20
|
-
TIMESTAMP_TZ_UTC: TO_CHAR(CONVERT_TIMEZONE('UTC', "{{ col_name }}"), 'YYYY-MM-DD"T"HH24:MI:SS.
|
|
21
|
-
VARCHAR_ISO_TZ: REGEXP_REPLACE(TO_CHAR(TRY_TO_TIMESTAMP_TZ(TRIM("{{ col_name }}")), 'YYYY-MM-DD"T"HH24:MI:SS.
|
|
23
|
+
TIMESTAMP_TZ_UTC: TO_CHAR(CONVERT_TIMEZONE('UTC', "{{ col_name }}"), 'YYYY-MM-DD"T"HH24:MI:SS.FF{{ fraction_digits }}') || '+00:00'
|
|
24
|
+
VARCHAR_ISO_TZ: REGEXP_REPLACE(TO_CHAR(TRY_TO_TIMESTAMP_TZ(TRIM("{{ col_name }}")), 'YYYY-MM-DD"T"HH24:MI:SS.FF{{ fraction_digits }}TZH:TZM'), 'Z$', '+00:00')
|
|
22
25
|
# Canonical UTC-instant form for every Snowflake TIMESTAMP_LTZ mirror of a
|
|
23
26
|
# UTC-instant TIMESTAMPTZ source (Redshift / PostgreSQL), reached from either
|
|
24
27
|
# the native path (iceberg_spec and storage_mode both None, target
|
|
25
28
|
# TIMESTAMP_LTZ / TIMESTAMP_LTZ(6) / TIMESTAMP_LTZ(9)) or the Iceberg v2
|
|
26
|
-
# compatible overlay (TIMESTAMP_LTZ(6)).
|
|
27
|
-
# FF9-padded +00:00 string.
|
|
29
|
+
# compatible overlay (TIMESTAMP_LTZ(6)). Always FF9-padded +00:00 on both sides.
|
|
28
30
|
TIMESTAMP_LTZ_UTC_FF9_OFFSET: TO_CHAR(CONVERT_TIMEZONE('UTC', "{{ col_name }}"), 'YYYY-MM-DD"T"HH24:MI:SS.FF9') || '+00:00'
|
|
29
31
|
# Complex values flattened to VARCHAR under Iceberg compatible DDL retain the
|
|
30
32
|
# exact Redshift JSON_SERIALIZE text staged by UNLOAD. Compare that migration
|
|
@@ -6,11 +6,11 @@ SELECT
|
|
|
6
6
|
(
|
|
7
7
|
SELECT MAX(T.IS_ICEBERG)
|
|
8
8
|
FROM {{ database_sql }}.INFORMATION_SCHEMA.TABLES T
|
|
9
|
-
WHERE T.TABLE_NAME = '{{ table_name |
|
|
10
|
-
AND T.TABLE_SCHEMA = '{{ schema_name |
|
|
9
|
+
WHERE T.TABLE_NAME = '{{ table_name | escape_snowflake_sql_literal }}'
|
|
10
|
+
AND T.TABLE_SCHEMA = '{{ schema_name | escape_snowflake_sql_literal }}'
|
|
11
11
|
) AS IS_ICEBERG
|
|
12
12
|
FROM
|
|
13
13
|
{{ database_sql }}.INFORMATION_SCHEMA.COLUMNS
|
|
14
14
|
WHERE
|
|
15
|
-
TABLE_NAME = '{{ table_name |
|
|
16
|
-
AND TABLE_SCHEMA = '{{ schema_name |
|
|
15
|
+
TABLE_NAME = '{{ table_name | escape_snowflake_sql_literal }}'
|
|
16
|
+
AND TABLE_SCHEMA = '{{ schema_name | escape_snowflake_sql_literal }}';
|
|
@@ -12,6 +12,6 @@ SELECT
|
|
|
12
12
|
NUMERIC_SCALE AS SCALE,
|
|
13
13
|
0 AS CALCULATED_COLUMN_SIZE_IN_BYTES
|
|
14
14
|
FROM {{ database_sql }}.INFORMATION_SCHEMA.COLUMNS
|
|
15
|
-
WHERE TABLE_CATALOG = '{{ database_name |
|
|
16
|
-
AND TABLE_SCHEMA = '{{ schema_name |
|
|
17
|
-
AND TABLE_NAME = '{{ table_name |
|
|
15
|
+
WHERE TABLE_CATALOG = '{{ database_name | escape_snowflake_sql_literal }}'
|
|
16
|
+
AND TABLE_SCHEMA = '{{ schema_name | escape_snowflake_sql_literal }}'
|
|
17
|
+
AND TABLE_NAME = '{{ table_name | escape_snowflake_sql_literal }}';
|
|
@@ -24,16 +24,16 @@ SELECT
|
|
|
24
24
|
ELSE 'UNKNOWN'
|
|
25
25
|
END
|
|
26
26
|
FROM {{ object_database_ref }}.INFORMATION_SCHEMA.TABLES
|
|
27
|
-
WHERE TABLE_NAME = '{{ object_name }}'
|
|
28
|
-
AND TABLE_SCHEMA = '{{ object_schema }}'
|
|
29
|
-
AND TABLE_CATALOG = '{{ object_database }}'
|
|
27
|
+
WHERE TABLE_NAME = '{{ object_name | escape_snowflake_sql_literal }}'
|
|
28
|
+
AND TABLE_SCHEMA = '{{ object_schema | escape_snowflake_sql_literal }}'
|
|
29
|
+
AND TABLE_CATALOG = '{{ object_database | escape_snowflake_sql_literal }}'
|
|
30
30
|
) AS OBJECT_TYPE,
|
|
31
31
|
rc.ROW_COUNT
|
|
32
32
|
FROM {{ object_database_ref }}.INFORMATION_SCHEMA.COLUMNS C
|
|
33
33
|
CROSS JOIN rc_cte rc
|
|
34
|
-
WHERE C.TABLE_NAME = '{{ object_name }}'
|
|
35
|
-
AND C.TABLE_SCHEMA = '{{ object_schema }}'
|
|
36
|
-
AND C.TABLE_CATALOG = '{{ object_database }}'
|
|
34
|
+
WHERE C.TABLE_NAME = '{{ object_name | escape_snowflake_sql_literal }}'
|
|
35
|
+
AND C.TABLE_SCHEMA = '{{ object_schema | escape_snowflake_sql_literal }}'
|
|
36
|
+
AND C.TABLE_CATALOG = '{{ object_database | escape_snowflake_sql_literal }}'
|
|
37
37
|
{% if columns %}
|
|
38
38
|
{% if use_as_exclude_list %}
|
|
39
39
|
AND C.COLUMN_NAME NOT IN (
|
|
@@ -41,7 +41,7 @@ AND C.TABLE_CATALOG = '{{ object_database }}'
|
|
|
41
41
|
AND C.COLUMN_NAME IN (
|
|
42
42
|
{% endif %}
|
|
43
43
|
{% for column in columns %}
|
|
44
|
-
'{{ column }}'{% if not loop.last %}, {% endif %}
|
|
44
|
+
'{{ column | escape_snowflake_sql_literal }}'{% if not loop.last %}, {% endif %}
|
|
45
45
|
{% endfor %}
|
|
46
46
|
)
|
|
47
47
|
{% endif %}
|
|
@@ -53,6 +53,9 @@ from snowflake.snowflake_data_validation.query.float_aggregate_reduction import
|
|
|
53
53
|
from snowflake.snowflake_data_validation.query.float_bit_normalization import (
|
|
54
54
|
build_binary64_canonical_expr,
|
|
55
55
|
)
|
|
56
|
+
from snowflake.snowflake_data_validation.query.normalization_render_context import (
|
|
57
|
+
NormalizationRenderContext,
|
|
58
|
+
)
|
|
56
59
|
from snowflake.snowflake_data_validation.query.query_generator_base import (
|
|
57
60
|
QueryGeneratorBase,
|
|
58
61
|
resolve_table_context_modifiers,
|
|
@@ -80,6 +83,7 @@ from snowflake.snowflake_data_validation.utils.constants import (
|
|
|
80
83
|
COL_NAME_NO_QUOTES_PLACEHOLDER,
|
|
81
84
|
COL_NAME_QUOTES_PLACEHOLDER,
|
|
82
85
|
EXPLICIT_METRIC_NORMALIZATION_COLUMN_KEY,
|
|
86
|
+
ICEBERG_FRACTION_DIGITS_PLACEHOLDER,
|
|
83
87
|
METRIC_QUERY_PLACEHOLDER,
|
|
84
88
|
NORMALIZATION_COLUMN_KEY,
|
|
85
89
|
NUMERIC_FORMAT_MASK_PLACEHOLDER,
|
|
@@ -100,6 +104,7 @@ from snowflake.snowflake_data_validation.utils.measure_collation import (
|
|
|
100
104
|
SNOWFLAKE_NORMALIZED_COLLATION_TOKENS,
|
|
101
105
|
TARGET_CHARACTER_TYPES,
|
|
102
106
|
)
|
|
107
|
+
from snowflake.snowflake_data_validation.utils.model.column_metadata import ColumnMetadata
|
|
103
108
|
from snowflake.snowflake_data_validation.utils.model.table_context import TableContext
|
|
104
109
|
from snowflake.snowflake_data_validation.utils.model.templates_loader_manager import TemplatesLoaderManager
|
|
105
110
|
from snowflake.snowflake_data_validation.utils.period_common import (
|
|
@@ -108,6 +113,7 @@ from snowflake.snowflake_data_validation.utils.period_common import (
|
|
|
108
113
|
from snowflake.snowflake_data_validation.utils.teradata_string_rtrim import (
|
|
109
114
|
is_blank_padded_char_type,
|
|
110
115
|
should_rtrim_snowflake_for_padded_source,
|
|
116
|
+
snowflake_rtrims_teradata_variable_string_comparison,
|
|
111
117
|
wrap_rtrim,
|
|
112
118
|
)
|
|
113
119
|
from snowflake.snowflake_data_validation.utils.vector_common import SnowflakeVectorElement
|
|
@@ -299,23 +305,21 @@ class QueryGeneratorSnowflake(QueryGeneratorBase):
|
|
|
299
305
|
self,
|
|
300
306
|
template: str,
|
|
301
307
|
column,
|
|
302
|
-
|
|
303
|
-
paired_source_platform: Platform | None = None,
|
|
304
|
-
paired_source_type: str | None = None,
|
|
305
|
-
has_custom_normalization: bool = False,
|
|
308
|
+
context: NormalizationRenderContext | None = None,
|
|
306
309
|
) -> str:
|
|
307
310
|
"""Render *template* for *column*; a FLOAT column hashes its binary64 tuple.
|
|
308
311
|
|
|
309
|
-
``has_custom_normalization`` marks *template* as the user's (a column's
|
|
312
|
+
``context.has_custom_normalization`` marks *template* as the user's (a column's
|
|
310
313
|
``targetExpression``, or a workflow or custom templates YAML override of its
|
|
311
314
|
type): it is rendered as written, FLOAT included, as the source side renders
|
|
312
315
|
its own.
|
|
313
316
|
"""
|
|
317
|
+
context = context or NormalizationRenderContext()
|
|
314
318
|
target_base, _, _ = self._parse_type_precision_scale(getattr(column, "data_type", "") or "")
|
|
315
|
-
if target_base in SNOWFLAKE_FLOAT_TYPE_NAMES and not has_custom_normalization:
|
|
319
|
+
if target_base in SNOWFLAKE_FLOAT_TYPE_NAMES and not context.has_custom_normalization:
|
|
316
320
|
return build_snowflake_float_bit_canonical_expr(write_identifier_for_sql(column.name))
|
|
317
321
|
if (
|
|
318
|
-
paired_source_platform == Platform.TERADATA
|
|
322
|
+
context.paired_source_platform == Platform.TERADATA
|
|
319
323
|
and NUMERIC_FORMAT_MASK_PLACEHOLDER in template
|
|
320
324
|
and "TO_CHAR" in template
|
|
321
325
|
and self._is_numeric_normalization_type(column.data_type)
|
|
@@ -324,9 +328,10 @@ class QueryGeneratorSnowflake(QueryGeneratorBase):
|
|
|
324
328
|
col_ref = write_identifier_for_sql(column.name)
|
|
325
329
|
return build_snowflake_fm_numeric_canonical_expr(col_ref, mask)
|
|
326
330
|
rendered = super().render_normalization_template(template, column)
|
|
331
|
+
rendered = rendered.replace(ICEBERG_FRACTION_DIGITS_PLACEHOLDER, str(context.iceberg_fraction_digits))
|
|
327
332
|
if should_rtrim_snowflake_for_padded_source(
|
|
328
333
|
getattr(column, "data_type", "") or "",
|
|
329
|
-
paired_source_type,
|
|
334
|
+
context.paired_source_type,
|
|
330
335
|
template,
|
|
331
336
|
):
|
|
332
337
|
return wrap_rtrim(rendered)
|
|
@@ -421,6 +426,7 @@ class QueryGeneratorSnowflake(QueryGeneratorBase):
|
|
|
421
426
|
) -> dict[str, str]:
|
|
422
427
|
datatypes_normalization_templates = table_context.templates_loader_manager.datatypes_normalization_templates
|
|
423
428
|
paired_source_types = get_paired_source_column_types(table_context)
|
|
429
|
+
base_context = NormalizationRenderContext.from_table_context(table_context)
|
|
424
430
|
renderer_templates: dict[str, str] = {}
|
|
425
431
|
renderer_columns = self._row_md5_normalization_columns(table_context)
|
|
426
432
|
for column in renderer_columns:
|
|
@@ -449,13 +455,14 @@ class QueryGeneratorSnowflake(QueryGeneratorBase):
|
|
|
449
455
|
rendered = self.render_normalization_template(
|
|
450
456
|
normalization_template,
|
|
451
457
|
column,
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
458
|
+
base_context.for_column(
|
|
459
|
+
paired_source_types.get(column.name),
|
|
460
|
+
has_custom_normalization=has_custom_column_normalization(
|
|
461
|
+
column.name,
|
|
462
|
+
column.data_type,
|
|
463
|
+
column_normalization_map,
|
|
464
|
+
table_context.templates_loader_manager,
|
|
465
|
+
),
|
|
459
466
|
),
|
|
460
467
|
)
|
|
461
468
|
renderer_templates[column.name] = rendered
|
|
@@ -554,9 +561,13 @@ class QueryGeneratorSnowflake(QueryGeneratorBase):
|
|
|
554
561
|
Fixed-width CHAR pads to its declared width and the migrated Snowflake
|
|
555
562
|
VARCHAR/TEXT often keeps or drops that padding depending on the load
|
|
556
563
|
path. Lengths and distinct counts only agree once both sides drop
|
|
557
|
-
trailing ASCII spaces.
|
|
558
|
-
|
|
559
|
-
|
|
564
|
+
trailing ASCII spaces. Teradata VARCHAR and LONG VARCHAR are not padded,
|
|
565
|
+
but their comparison ignores trailing spaces, so ``count_distinct`` and
|
|
566
|
+
``count_empty`` RTRIM on Snowflake. A column override or a custom metrics
|
|
567
|
+
YAML is left as written. Length metrics stay as stored.
|
|
568
|
+
SQL Server text columns RTRIM their length and empty metrics too, to
|
|
569
|
+
match ``LEN`` (SNOW-4283493). Other VARCHAR pairings compare strings
|
|
570
|
+
as stored.
|
|
560
571
|
|
|
561
572
|
Teradata float avg/sum/stddev use the signed significand instead of
|
|
562
573
|
``% 2097143``, which does not match Teradata ``MOD`` on extreme values.
|
|
@@ -594,7 +605,7 @@ class QueryGeneratorSnowflake(QueryGeneratorBase):
|
|
|
594
605
|
return metric_template
|
|
595
606
|
return reduced
|
|
596
607
|
|
|
597
|
-
def _is_user_metric(self, col, metric_name: str, table_context: TableContext) -> bool:
|
|
608
|
+
def _is_user_metric(self, col: ColumnMetadata, metric_name: str, table_context: TableContext) -> bool:
|
|
598
609
|
"""Return whether a column override, a workflow override or a custom YAML defines this metric."""
|
|
599
610
|
override = table_context.metric_overrides_for_column(col.name).get(metric_name)
|
|
600
611
|
if override is not None and override.metric_query:
|
|
@@ -602,9 +613,9 @@ class QueryGeneratorSnowflake(QueryGeneratorBase):
|
|
|
602
613
|
col_type = self._resolve_metrics_col_type(col, table_context).upper()
|
|
603
614
|
return (col_type, metric_name.lower()) in table_context.templates_loader_manager.overridden_metrics
|
|
604
615
|
|
|
605
|
-
@staticmethod
|
|
606
616
|
def _rtrims_paired_string_metric(
|
|
607
|
-
|
|
617
|
+
self,
|
|
618
|
+
col: ColumnMetadata,
|
|
608
619
|
metric_name: str,
|
|
609
620
|
paired_source_type: str | None,
|
|
610
621
|
metric_template: str,
|
|
@@ -618,6 +629,14 @@ class QueryGeneratorSnowflake(QueryGeneratorBase):
|
|
|
618
629
|
metric_name,
|
|
619
630
|
):
|
|
620
631
|
return True
|
|
632
|
+
if snowflake_rtrims_teradata_variable_string_comparison(
|
|
633
|
+
table_context.paired_source_platform,
|
|
634
|
+
paired_source_type,
|
|
635
|
+
col.data_type,
|
|
636
|
+
metric_name,
|
|
637
|
+
metric_template,
|
|
638
|
+
) and not self._is_user_metric(col, metric_name, table_context):
|
|
639
|
+
return True
|
|
621
640
|
if not is_blank_padded_char_type(paired_source_type or ""):
|
|
622
641
|
return False
|
|
623
642
|
return should_rtrim_snowflake_for_padded_source(col.data_type, paired_source_type, metric_template)
|