snowflake-data-validation 1.45.2__tar.gz → 1.45.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/PKG-INFO +28 -2
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/README.md +26 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/pyproject.toml +3 -2
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/bigquery/query/query_generator_bigquery.py +1 -1
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/extractor/sql_queries_template_generator.py +35 -1
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/query/query_generator_oracle.py +27 -1
- snowflake_data_validation-1.45.4/src/snowflake/snowflake_data_validation/query/normalization_render_context.py +51 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/query_generator_base.py +8 -9
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_column_metrics_templates.yaml +46 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/query/query_generator_redshift.py +38 -22
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_column_metrics_templates.yaml +46 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/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.4}/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.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_columns_metadata.sql.j2 +3 -3
- snowflake_data_validation-1.45.4/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.4}/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.4}/src/snowflake/snowflake_data_validation/snowflake/query/query_generator_snowflake.py +49 -28
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/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.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_table_metadata_query.sql.j2 +5 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/query/query_generator_teradata.py +2 -1
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/constants.py +21 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/iceberg_dv_common.py +127 -8
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/iso_dv_common.py +20 -5
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/teradata_string_rtrim.py +42 -3
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/data_validator_base.py +71 -1
- snowflake_data_validation-1.45.4/src/snowflake/snowflake_data_validation/validation/lossy_number_mapping.py +59 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/Teradata/test_teradata_table_metadata_float_precision.py +2 -2
- snowflake_data_validation-1.45.4/tests/unit/Teradata/test_teradata_unicode_character_length.py +98 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/oracle/test_oracle_query_generator.py +47 -0
- snowflake_data_validation-1.45.4/tests/unit/query/test_normalization_render_context.py +56 -0
- snowflake_data_validation-1.45.4/tests/unit/snowflake/test_snowflake_get_iceberg_format_version.py +73 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_data_validator.py +81 -1
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_float_bit_canonical.py +19 -25
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_iceberg_dv_l3_normalization.py +103 -10
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_iso_dv_common.py +47 -1
- snowflake_data_validation-1.45.4/tests/unit/test_lossy_number_mapping.py +57 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_metrics_tolerance.py +23 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_postgresql_tz_normalization.py +2 -1
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_query_generator_numeric_scale.py +10 -6
- snowflake_data_validation-1.45.4/tests/unit/test_redshift_iceberg_timestamp_metrics.py +175 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_redshift_native_timestamptz_ltz.py +3 -1
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_sql_literal_jinja_filter.py +51 -1
- snowflake_data_validation-1.45.4/tests/unit/test_teradata_string_rtrim_policy.py +305 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/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.4}/.gitignore +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/LICENSE +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/docs/README.md +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/azure_synapse_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/connector/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_azure_synapse.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_factory_azure_synapse.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/metadata_extractor_azure_synapse.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/model/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/model/azure_synapse_credentials_connection.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/query/query_generator_azure_synapse.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/script_writer_azure_synapse.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/bigquery/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/bigquery/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/bigquery/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/comparison_orchestrator.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/configuration/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/configuration/configuration_loader.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/configuration/model/configuration_model.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/configuration/model/connection_types.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/configuration/model/connections/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/configuration/model/logging_configuration.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/configuration/model/table_configuration.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/configuration/model/validation_configuration.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/configuration/model/view_configuration.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/configuration/singleton.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/connector/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/connector/connector_base.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/connector/connector_factory_base.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/connector/connector_failure_tracker.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/db2_lob_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/extractor/metadata_extractor_db2.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/query/query_generator_db2.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/script_writer/script_writer_db2.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/executer/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/executer/async_generation_executor.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/executer/async_validation_executor.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/executer/base_validation_executor.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/executer/executor_factory.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/executer/extractor_types.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/executer/source_validation_executor.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/executer/sync_validation_executor.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/extractor/metadata_extractor_base.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/extractor/metadata_extractor_oracle.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/oracle_bfile.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/oracle_iso_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/oracle_lob_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/oracle_statement_functions.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/oracle_vector_extraction.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/oracle_xmltype.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/script_writer/script_writer_oracle.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/orchestration/html_report/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/orchestration/html_report/html_report_builder.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/orchestration/html_report/report_metadata.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/orchestration/parallel_execution_engine.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/orchestration/table_metadata_processor.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/orchestration/validation_progress_reporter.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/orchestration/view_preprocessor.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/connector/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_factory_postgresql.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_postgresql.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/metadata_extractor_postgresql.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_concatenated_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_concatenated_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_md5_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/model/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/model/postgresql_credentials_connection.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/postgresql_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/postgresql_tz_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/query/query_generator_postgresql.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/script_writer/script_writer_postgresql.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/DATA_VALIDATION_API_OVERVIEW.md +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/_internal.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/_teradata_internal.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/async_mode/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/async_mode/file_loader.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/async_mode/script_writer.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/cli/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/cli/commands.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/configuration/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/connectors/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/context/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/data_validation_api.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/enums/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/execution/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/execution/query_executor.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/generators/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/metadata/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/model/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/model/data_validation_exception.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/model/generated_query.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/model/metrics_result_shape.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/model/query_execution_result.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/model/query_generator_factory.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/model/result_set.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/model/validation_progress_callback.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/model/validation_result.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/query_generation/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/query_generation/metadata_queries.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/query_generation/row_validation_queries.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/query_generation/schema_metrics_queries.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/query_validation/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/query_validation/query_comparison.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/reshape/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/reshape/metrics_reshape.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/result_set_validation/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/result_set_validation/result_set_comparison.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/snapshot/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_generation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_validation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/utils/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/utils/helpers.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/validation/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/validation/cell_validation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/validation/metrics_validation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/validation/row_validation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/validation/schema_validation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/chunk_md5_tiered.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/decimal_text_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_modifiers.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/float_aggregate_reduction.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/float_bit_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/numeric_scale_resolution.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/query/query_generator_query.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/query_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/sql_type_families.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/time_precision_resolution.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/tsql_float_remainder.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/vector_element_kind.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/connector/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/connector/connector_factory_redshift.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/connector/connector_redshift.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/metadata_extractor_redshift.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_show_columns_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/model/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/model/redshift_credentials_connection.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/redshift_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/redshift_super_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/script_writer/script_writer_redshift.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/snowflake_to_result_set_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/result_set/query/query_generator_result_set.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/result_set/result_set_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/script_writer/script_writer_base.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_factory_snowflake.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_snowflake.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/metadata_extractor_snowflake.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/_wkt_despace.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_concatenated_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_md5_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_temporary_table_from_view_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/l3/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/l3/pushdown_diff_sql.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/l3/signature_external_table.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/l3/warm_start.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/model/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_credentials_connection.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_default_connection.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_named_connection.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/script_writer/script_writer_snowflake.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/snowflake_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/connector/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_factory_sqlite.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_sqlite.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/metadata_extractor_sqlite.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_compute_md5_sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_sqlite_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/model/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/model/sqlite_connection.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/query/query_generator_sqlite.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/script_writer/script_writer_sqlite.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/connector/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_factory_sql_server.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_sql_server.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/metadata_extractor_sqlserver.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_compute_md5_sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_temporary_table_internal_identifier_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_temporary_table_from_view_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/model/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/model/sqlserver_credentials_connection.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/query/query_generator_sqlserver.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/script_writer_sqlserver.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_string_length_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_tz_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_uniqueidentifier_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/table_partitioning_strategy.md +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/connector/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/connector/connector_factory_teradata.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/connector/connector_teradata.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/metadata_extractor_teradata.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_compute_md5_sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_concatenated.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_md5.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/model/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/model/teradata_credentials_connection.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/script_writer/script_writer_teradata.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/teradata_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/teradata_iso_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/arguments_manager_base.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/arguments_manager_factory.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/base_output_handler.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/catalog_column_size.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/column_grouping.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/column_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/configuration_file_editor.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/configuration_file_generator.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/configuration_file_synchronizer.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/connection_pool.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/connector_factory.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/console_output_handler.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/context.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/cpu_optimizer.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/dv_tracing.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/error_classifier.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/helper.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/helpers/helper_database.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/helpers/helper_dataframe.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/helpers/helper_io.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/helpers/helper_misc.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/helpers/helper_polars_cast.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/helpers/helper_query_result.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/helpers/helper_templates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/index_key_format.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/interval_common.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/lob_source_types.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/logging_config.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/logging_utils.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/measure_collation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/model/chunk.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/model/column_metadata.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/model/column_selection.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/model/custom_templates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/model/table_column_metadata.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/model/table_context.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/model/templates_loader_manager.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/period_common.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/progress_reporter.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/qvci_fallback.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/row_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/row_validation_lob_exclusion.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/run_context.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/semi_structured_json_canonicalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/shutdown_coordinator.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/snapshot_validation_statements.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/telemetry.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/templates/configuration_file_templates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/thread_safe_singleton.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/validation_utils.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/vector_common.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/vector_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/accepted_transformation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/cell_data_validator.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/column_pairing.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/comparison_codec.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/dataframe_validator_base.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/metrics_data_validator.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/metrics_tolerance.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/object_type_criterion.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/base.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/db2.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/redshift.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/registry.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/snowflake.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlite.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlserver.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/teradata.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/query_validator.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/result_set_validator.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/results_summary_report.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/row_data_validator.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/row_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/schema_data_validator.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/validation_database/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/validation_database/sqlite_validation_connection.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/validation_database/validation_database_connection_base.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/validation_database_manager.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/validation_execution_context.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/validation_report_status.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/.coveragerc +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/conftest.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/integration/.coveragerc +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/integration/Redshift/test_metadata_extractor_integration.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/integration/test_async_generation_integration.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/integration/test_async_validation_integration.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/integration/test_reference_integration.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/integration/test_source_validation_integration.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/integration/test_sync_validation_integration.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/Postgresql/test_postgresql_bit_count_distinct.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/Postgresql/test_postgresql_collation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/Postgresql/test_postgresql_enum_metadata.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/Postgresql/test_postgresql_json_cell_validation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/Postgresql/test_postgresql_jsonb_row_hash.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/Postgresql/test_postgresql_numeric_leading_zero.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/Postgresql/test_postgresql_spatial_templates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/model/test_redshift_credentials_connection.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/query/test_query_generator_redshift.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/script_writer/test_script_writer_redshift.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/test_connector_redshift.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/test_redshift_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/test_redshift_collation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/test_redshift_columns_metadata_template.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/test_redshift_hllsketch_templates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/test_redshift_spatial_templates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/test_redshift_split_schema_query.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/test_redshift_super_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/test_redshift_timetz_sentinel_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/test_redshift_varchar_count_distinct.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/Teradata/test_connector_teradata.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/Teradata/test_metadata_extractor_teradata.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/Teradata/test_period_varchar_l1.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/Teradata/test_query_generator_teradata.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/Teradata/test_teradata_collation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/Teradata/test_teradata_columns_metadata_precision_scale.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/Teradata/test_teradata_row_md5_select_template.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/Teradata/test_teradata_spatial_templates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/Teradata/test_teradata_view_generate_boundary.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/Teradata/test_teradata_view_l1_metadata_templates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/assets/custom_templates_loader/snowflake_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/assets/custom_templates_loader/snowflake_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/assets/custom_templates_loader/snowflake_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/assets/test_configuration_loader/test_load_configuration_model/conf.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/assets/test_configuration_loader/test_load_configuration_model_reading_file_exception/conf.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/assets/test_helpers/dummy_configuration_file.json +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/assets/test_helpers/dummy_connection_source_db.toml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/assets/test_helpers/dummy_datatypes_normalization_template.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/assets/test_helpers/dummy_datatypes_template.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/assets/test_helpers/dummy_metrics_template.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/assets/test_helpers/dummy_metrics_template_datatypes.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/assets/test_helpers/dummy_template.csv +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/assets/test_helpers/not_valid_format.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/assets/test_templates_loader_manager/snowflake_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/assets/test_templates_loader_manager/snowflake_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/azure_synapse/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/azure_synapse/test_azure_synapse_credentials_connection.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/azure_synapse/test_azure_synapse_l3_convert_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/azure_synapse/test_azure_synapse_metadata_extractor.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/azure_synapse/test_azure_synapse_metrics_templates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/azure_synapse/test_azure_synapse_query_generator.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/azure_synapse/test_azure_synapse_row_queries.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/azure_synapse/test_connector_azure_synapse.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/azure_synapse/test_connector_factory_azure_synapse.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/bigquery/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/bigquery/test_bigquery_l1_string_length.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/bigquery/test_bigquery_spatial_templates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/bigquery/test_query_generator_bigquery.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/bigquery/test_query_generator_factory_bigquery.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/conftest.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/db2/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/db2/test_db2_lob_dv_generation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/db2/test_db2_metadata_extractor.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/db2/test_db2_query_generator.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/db2/test_db2_registration.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/db2/test_db2_xml_long_dv_generation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/db2/test_db2_xml_long_metrics.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/oracle/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/oracle/test_metadata_extractor_oracle_vector.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/oracle/test_oracle_configured_index_columns.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/oracle/test_oracle_iso_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/oracle/test_oracle_lob_dv_generation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/oracle/test_oracle_lob_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/oracle/test_oracle_metadata_extractor.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/oracle/test_oracle_metrics_templates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/oracle/test_oracle_normalization_templates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/oracle/test_oracle_query_modifiers.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/oracle/test_oracle_quoted_identifiers.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/oracle/test_oracle_type_mappings.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/query/test_chunk_md5_tiered.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/query/test_time_fraction_rendering.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/snowflake/test_snowflake_get_case_sensitive_columns.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/snowflake/test_snowflake_spatial_metrics_templates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/sqlite/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/sqlite/test_connector_factory_sqlite.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/sqlite/test_connector_sqlite.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/sqlite/test_metadata_extractor_sqlite.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/sqlite/test_metadata_query_template_sqlite.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/sqlite/test_query_generator_sqlite.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/sqlite/test_script_writer_sqlite.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_connector_factory_sql_server.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_metadata_extractor_sqlserver_vector.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_datetimeoffset_full_ingest_utc.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_datetimeoffset_metrics_utc.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_datetimeoffset_physical_target.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_json.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_l1_catalog.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_l1_character_length.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_l3_convert_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_length_metrics_chars.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_row_count_overflow.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_row_queries.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_spatial_l1_metadata.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_spatial_metrics_templates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_string_length_pairing.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_uniqueidentifier_l3_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_xml_image_metrics.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_tsql_integer_stddev_exact.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_accepted_transformation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_arguments_manager_base.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_arguments_manager_factory.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_batched_metrics_queries.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_boolean_binary_canonical_templates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_case_sensitive_column_pairing.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_catalog_column_size.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_catalog_queries_take_actual_names.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_cell_data_validator.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_cell_data_validator_threading.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_cell_validation_query_generation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_charset_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_column_grouping.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_column_metadata.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_column_normalization_override.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_column_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_column_selection.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_column_selection_actual_names.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_comparison_codec.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_comparison_orchestrator.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_configuration_file_editor.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_configuration_file_generator.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_configuration_file_synchronizer.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_configuration_loader.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_configuration_model.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_connection_pool.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_connector_failure_tracker.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_connector_snowflake.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_cpu_optimizer.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_custom_templates_models.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_decimal_text_canonical.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_dv_tracing.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_error_classifier.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_escape_odbc_value.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_executor_factory.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_extraction_keeps_catalog_column_spelling.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_fetch_schema_metadata.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_float_aggregate_reduction.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_float_canonical_templates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_get_configuration_file.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_get_target_cols.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_helper_dataframe.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_helper_io.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_helper_polars_cast.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_helper_polars_cast_threading.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_helpers.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_html_report_builder.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_iceberg_v2_metrics_exclusion.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_index_key_format.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_internal_helpers.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_interval_common.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_l2_collation_metadata.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_l2_count_distinct_opt_in_config.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_logging_config.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_metric_identifier_rendering.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_metrics_reshape.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_metrics_result_shape.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_metrics_templates_casts.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_normalize_shape_aware.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_numeric_scale_resolution.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_object_type_criterion.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_parallel_execution_engine_fatal_errors.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_period_common.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_platform_bridge.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_postgresql_normalization_templates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_pushdown_diff_sql.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_query_cell_level_validation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_query_executor.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_query_metrics_level_validation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_query_to_dataframe.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_query_validator.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_qvci_fallback.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_qvci_fallback_na_skip.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_qvci_fallback_triggers.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_report_metadata.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_result_set_cell_level_validation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_result_set_column_metrics_validation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_result_set_snapshot_generation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_result_set_snapshot_validation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_result_set_to_dataframe.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_result_set_validator.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_row_count_bigint_overflow.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_row_data_validator.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_row_data_validator_empty_chunk.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_row_hash_column_delimiter.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_row_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_row_validation_lob_exclusion.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_row_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_schema_accepted_native_datatypes.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_schema_column_selection.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_schema_query_capability.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_shutdown_coordinator.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_signature_external_table.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_signature_row_md5_query.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_snapshot_validation_statements.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_snowflake_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_snowflake_binary_normalization_templates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_snowflake_redshift_super_size_guard.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_source_validation_executor.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_spatial_wkt_canonicalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_sql_catalog_template_guard.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_sqlite_validation_connection.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_sqlserver_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_sqlserver_multi_version_support.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_sync_executor_qvci_fallback.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_sync_schema_validation_real_callbacks.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_sync_validation_executor.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_table_column_metadata_model.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_table_configuration.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_table_context.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_table_metadata_processor.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_table_snapshot_generation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_table_snapshot_validation.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_target_platform_factory.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_telemetry.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_templates_loader_manager.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_teradata_iso_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_teradata_timetz_metric_domain.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_teradata_type_code_mapping.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_trace_bridge.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_tsql_float_l2_aggregates.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_validation_configuration.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_validation_database_connection.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_validation_execution_context.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_validation_progress_reporter.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_validation_report_status.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_validation_templates_dto.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_vector_bit_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_vector_common.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_vector_normalization.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_view_configuration.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/test_warm_start.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/utils/__init__.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/utils/test_constants.py +0 -0
- {snowflake_data_validation-1.45.2 → snowflake_data_validation-1.45.4}/tests/unit/utils/test_semi_structured_json_canonicalization.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: snowflake-data-validation
|
|
3
|
-
Version: 1.45.
|
|
3
|
+
Version: 1.45.4
|
|
4
4
|
Summary: Snowflake Data Validation
|
|
5
5
|
Project-URL: Bug Tracker, https://github.com/snowflake-eng/migrations-data-validation/issues
|
|
6
6
|
Project-URL: Source code, https://github.com/snowflake-eng/migrations-data-validation/
|
|
@@ -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,28 @@ For configuration options and examples, see the [official documentation](https:/
|
|
|
226
230
|
|
|
227
231
|
## Changelog
|
|
228
232
|
|
|
233
|
+
### v1.45.4
|
|
234
|
+
|
|
235
|
+
**Improvements**
|
|
236
|
+
|
|
237
|
+
- Improved Iceberg validation to read the table format version from the Snowflake catalog once before validation starts, so every validation level uses the actual format version.
|
|
238
|
+
|
|
239
|
+
**Bug fixes**
|
|
240
|
+
|
|
241
|
+
- Fixed Redshift Iceberg metrics validation comparing signed-year `DATE` and `TIMESTAMPTZ` values.
|
|
242
|
+
- Fixed Teradata `UNICODE` `CHAR`, `VARCHAR`, and `CLOB` column lengths being reported in bytes, which raised false truncation warnings.
|
|
243
|
+
|
|
244
|
+
### v1.45.3
|
|
245
|
+
|
|
246
|
+
**Bug fixes**
|
|
247
|
+
|
|
248
|
+
- Fixed schema validation reporting SQL Server `INT` columns mapped to `NUMBER(38,0)` as precision differences.
|
|
249
|
+
- Surfaced rounding of scale-less `NUMBER` values as a lossy mapping instead of a hidden match.
|
|
250
|
+
- Fixed schema validation reporting every column as missing when the schema name contains a backslash (for example `DOMAIN\user` schemas).
|
|
251
|
+
- Fixed Teradata `VARCHAR` distinct and empty-value metrics not matching when values have trailing spaces.
|
|
252
|
+
- Fixed Iceberg timestamp comparisons to use `FF6` or `FF9` fractional precision based on the catalog format version.
|
|
253
|
+
- Fixed metrics validation for signed-year `TIMESTAMP` values, including BC and post-9999 dates.
|
|
254
|
+
|
|
229
255
|
### v1.45.2
|
|
230
256
|
|
|
231
257
|
**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,28 @@ For configuration options and examples, see the [official documentation](https:/
|
|
|
135
139
|
|
|
136
140
|
## Changelog
|
|
137
141
|
|
|
142
|
+
### v1.45.4
|
|
143
|
+
|
|
144
|
+
**Improvements**
|
|
145
|
+
|
|
146
|
+
- Improved Iceberg validation to read the table format version from the Snowflake catalog once before validation starts, so every validation level uses the actual format version.
|
|
147
|
+
|
|
148
|
+
**Bug fixes**
|
|
149
|
+
|
|
150
|
+
- Fixed Redshift Iceberg metrics validation comparing signed-year `DATE` and `TIMESTAMPTZ` values.
|
|
151
|
+
- Fixed Teradata `UNICODE` `CHAR`, `VARCHAR`, and `CLOB` column lengths being reported in bytes, which raised false truncation warnings.
|
|
152
|
+
|
|
153
|
+
### v1.45.3
|
|
154
|
+
|
|
155
|
+
**Bug fixes**
|
|
156
|
+
|
|
157
|
+
- Fixed schema validation reporting SQL Server `INT` columns mapped to `NUMBER(38,0)` as precision differences.
|
|
158
|
+
- Surfaced rounding of scale-less `NUMBER` values as a lossy mapping instead of a hidden match.
|
|
159
|
+
- Fixed schema validation reporting every column as missing when the schema name contains a backslash (for example `DOMAIN\user` schemas).
|
|
160
|
+
- Fixed Teradata `VARCHAR` distinct and empty-value metrics not matching when values have trailing spaces.
|
|
161
|
+
- Fixed Iceberg timestamp comparisons to use `FF6` or `FF9` fractional precision based on the catalog format version.
|
|
162
|
+
- Fixed metrics validation for signed-year `TIMESTAMP` values, including BC and post-9999 dates.
|
|
163
|
+
|
|
138
164
|
### v1.45.2
|
|
139
165
|
|
|
140
166
|
**Bug fixes**
|
|
@@ -4,7 +4,8 @@ requires = ["hatchling"]
|
|
|
4
4
|
|
|
5
5
|
[tool.uv]
|
|
6
6
|
constraint-dependencies = [
|
|
7
|
-
"
|
|
7
|
+
"certifi>=2026.10.23,<2026.11",
|
|
8
|
+
"virtualenv>=21.14.9,<21.15",
|
|
8
9
|
]
|
|
9
10
|
|
|
10
11
|
[project]
|
|
@@ -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]
|
|
@@ -157,7 +157,7 @@ class QueryGeneratorBigQuery(QueryGeneratorBase):
|
|
|
157
157
|
normalized = normalized[:index]
|
|
158
158
|
return normalized.strip()
|
|
159
159
|
|
|
160
|
-
def _resolve_metrics_col_type(self, col, table_context: TableContext) -> str:
|
|
160
|
+
def _resolve_metrics_col_type(self, col: ColumnMetadata, table_context: TableContext) -> str:
|
|
161
161
|
"""Key the metrics YAML lookup off the parameterless base type."""
|
|
162
162
|
return self.normalize_bigquery_type(col.data_type)
|
|
163
163
|
|
|
@@ -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,
|
|
@@ -393,8 +394,7 @@ class QueryGeneratorBase(ABC):
|
|
|
393
394
|
override this. Combined generators leave the base raise in place.
|
|
394
395
|
"""
|
|
395
396
|
raise NotImplementedError(
|
|
396
|
-
f"{self.platform.value} uses a combined schema query; "
|
|
397
|
-
"call generate_schema_query instead of generate_schema_row_count_query"
|
|
397
|
+
f"{self.platform.value} uses a combined schema query; call generate_schema_query instead of generate_schema_row_count_query"
|
|
398
398
|
)
|
|
399
399
|
|
|
400
400
|
def generate_schema_details_query(self, table_context: TableContext) -> str:
|
|
@@ -404,8 +404,7 @@ class QueryGeneratorBase(ABC):
|
|
|
404
404
|
override this. Combined generators leave the base raise in place.
|
|
405
405
|
"""
|
|
406
406
|
raise NotImplementedError(
|
|
407
|
-
f"{self.platform.value} uses a combined schema query; "
|
|
408
|
-
"call generate_schema_query instead of generate_schema_details_query"
|
|
407
|
+
f"{self.platform.value} uses a combined schema query; call generate_schema_query instead of generate_schema_details_query"
|
|
409
408
|
)
|
|
410
409
|
|
|
411
410
|
def normalize_schema_details_result(
|
|
@@ -419,10 +418,7 @@ class QueryGeneratorBase(ABC):
|
|
|
419
418
|
as a combined schema query (without ``ROW_COUNT``; the fetch helper
|
|
420
419
|
attaches that). Combined generators leave the base raise in place.
|
|
421
420
|
"""
|
|
422
|
-
raise NotImplementedError(
|
|
423
|
-
f"{self.platform.value} uses a combined schema query; "
|
|
424
|
-
"normalize_schema_details_result is not used"
|
|
425
|
-
)
|
|
421
|
+
raise NotImplementedError(f"{self.platform.value} uses a combined schema query; normalize_schema_details_result is not used")
|
|
426
422
|
|
|
427
423
|
def generate_metrics_query(self, table_context: TableContext) -> GeneratedMetricsQuery:
|
|
428
424
|
"""Generate a single wide metrics SELECT for a table.
|
|
@@ -644,7 +640,7 @@ class QueryGeneratorBase(ABC):
|
|
|
644
640
|
return numeric_norm
|
|
645
641
|
return None
|
|
646
642
|
|
|
647
|
-
def _resolve_metrics_col_type(self, col, table_context: TableContext) -> str:
|
|
643
|
+
def _resolve_metrics_col_type(self, col: ColumnMetadata, table_context: TableContext) -> str:
|
|
648
644
|
"""Return the metrics YAML type key for a column (platforms may override)."""
|
|
649
645
|
from snowflake.snowflake_data_validation.utils.vector_common import is_vector_base_type
|
|
650
646
|
|
|
@@ -892,6 +888,7 @@ class QueryGeneratorBase(ABC):
|
|
|
892
888
|
# set the attribute keep the default instead of a truthy Mock.
|
|
893
889
|
include_count_distinct = getattr(table_context, "include_count_distinct", False) is True
|
|
894
890
|
apply_metric_column_modifier = table_context.apply_metric_column_modifier
|
|
891
|
+
iceberg_fraction_digits = IcebergProfile.from_table_context(table_context).fraction_digits
|
|
895
892
|
|
|
896
893
|
select_exprs: list[str] = []
|
|
897
894
|
cells: list[tuple[str, str]] = []
|
|
@@ -953,6 +950,8 @@ class QueryGeneratorBase(ABC):
|
|
|
953
950
|
if NUMERIC_FORMAT_MASK_PLACEHOLDER in normalization:
|
|
954
951
|
mask = self._build_numeric_format_mask(self._resolve_numeric_scale(col))
|
|
955
952
|
normalization = normalization.replace(NUMERIC_FORMAT_MASK_PLACEHOLDER, mask)
|
|
953
|
+
if ICEBERG_FRACTION_DIGITS_PLACEHOLDER in normalization:
|
|
954
|
+
normalization = normalization.replace(ICEBERG_FRACTION_DIGITS_PLACEHOLDER, str(iceberg_fraction_digits))
|
|
956
955
|
metric_expr = self._wrap_metric_with_normalization(normalization, metric_expr)
|
|
957
956
|
alias = f"c{measured_idx}_m{metric_idx}"
|
|
958
957
|
select_exprs.append(f"{metric_expr} AS {alias}")
|
|
@@ -619,6 +619,52 @@ 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
|
+
|
|
638
|
+
# Iceberg VARCHAR DATE (SNOW-4381535): MIN/MAX rendered as the UNLOAD footer's
|
|
639
|
+
# signed astronomical-year text. Kept in sync with DMO by test_redshift_consistency.py.
|
|
640
|
+
DATE_AS_TEXT:
|
|
641
|
+
min:
|
|
642
|
+
metric_query: MIN("{{ col_name }}")
|
|
643
|
+
metric_return_datatype: VARCHAR
|
|
644
|
+
metric_normalization: '(CASE WHEN (CASE WHEN EXTRACT(YEAR FROM {{ metric_query }})::INT < 0 THEN EXTRACT(YEAR FROM {{ metric_query }})::INT + 1 ELSE EXTRACT(YEAR FROM {{ metric_query }})::INT END) < 0 THEN ''-'' ELSE '''' END || (CASE WHEN ABS((CASE WHEN EXTRACT(YEAR FROM {{ metric_query }})::INT < 0 THEN EXTRACT(YEAR FROM {{ metric_query }})::INT + 1 ELSE EXTRACT(YEAR FROM {{ metric_query }})::INT END)) < 1000 THEN LPAD(ABS((CASE WHEN EXTRACT(YEAR FROM {{ metric_query }})::INT < 0 THEN EXTRACT(YEAR FROM {{ metric_query }})::INT + 1 ELSE EXTRACT(YEAR FROM {{ metric_query }})::INT END))::VARCHAR, 4, ''0'') ELSE ABS((CASE WHEN EXTRACT(YEAR FROM {{ metric_query }})::INT < 0 THEN EXTRACT(YEAR FROM {{ metric_query }})::INT + 1 ELSE EXTRACT(YEAR FROM {{ metric_query }})::INT END))::VARCHAR END)) || ''-'' || LPAD(EXTRACT(MONTH FROM {{ metric_query }})::VARCHAR, 2, ''0'') || ''-'' || LPAD(EXTRACT(DAY FROM {{ metric_query }})::VARCHAR, 2, ''0'')'
|
|
645
|
+
max:
|
|
646
|
+
metric_query: MAX("{{ col_name }}")
|
|
647
|
+
metric_return_datatype: VARCHAR
|
|
648
|
+
metric_normalization: '(CASE WHEN (CASE WHEN EXTRACT(YEAR FROM {{ metric_query }})::INT < 0 THEN EXTRACT(YEAR FROM {{ metric_query }})::INT + 1 ELSE EXTRACT(YEAR FROM {{ metric_query }})::INT END) < 0 THEN ''-'' ELSE '''' END || (CASE WHEN ABS((CASE WHEN EXTRACT(YEAR FROM {{ metric_query }})::INT < 0 THEN EXTRACT(YEAR FROM {{ metric_query }})::INT + 1 ELSE EXTRACT(YEAR FROM {{ metric_query }})::INT END)) < 1000 THEN LPAD(ABS((CASE WHEN EXTRACT(YEAR FROM {{ metric_query }})::INT < 0 THEN EXTRACT(YEAR FROM {{ metric_query }})::INT + 1 ELSE EXTRACT(YEAR FROM {{ metric_query }})::INT END))::VARCHAR, 4, ''0'') ELSE ABS((CASE WHEN EXTRACT(YEAR FROM {{ metric_query }})::INT < 0 THEN EXTRACT(YEAR FROM {{ metric_query }})::INT + 1 ELSE EXTRACT(YEAR FROM {{ metric_query }})::INT END))::VARCHAR END)) || ''-'' || LPAD(EXTRACT(MONTH FROM {{ metric_query }})::VARCHAR, 2, ''0'') || ''-'' || LPAD(EXTRACT(DAY FROM {{ metric_query }})::VARCHAR, 2, ''0'')'
|
|
649
|
+
count_null:
|
|
650
|
+
metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
|
|
651
|
+
metric_return_datatype: BIGINT
|
|
652
|
+
|
|
653
|
+
# Iceberg VARCHAR TIMESTAMPTZ (SNOW-4381535): MIN/MAX of the instant, rendered in
|
|
654
|
+
# UTC with the UNLOAD footer's signed year. Kept in sync with DMO by test_redshift_consistency.py.
|
|
655
|
+
TIMESTAMPTZ_AS_TEXT:
|
|
656
|
+
min:
|
|
657
|
+
metric_query: MIN("{{ col_name }}")
|
|
658
|
+
metric_return_datatype: VARCHAR
|
|
659
|
+
metric_normalization: '(CASE WHEN (CASE WHEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT < 0 THEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT + 1 ELSE EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT END) < 0 THEN ''-'' ELSE '''' END || (CASE WHEN ABS((CASE WHEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT < 0 THEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT + 1 ELSE EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT END)) < 1000 THEN LPAD(ABS((CASE WHEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT < 0 THEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT + 1 ELSE EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT END))::VARCHAR, 4, ''0'') ELSE ABS((CASE WHEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT < 0 THEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT + 1 ELSE EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT END))::VARCHAR END)) || TO_CHAR(({{ metric_query }} AT TIME ZONE ''UTC''), ''-MM-DD"T"HH24:MI:SS.US'') || ''000'' || ''+00:00'''
|
|
660
|
+
max:
|
|
661
|
+
metric_query: MAX("{{ col_name }}")
|
|
662
|
+
metric_return_datatype: VARCHAR
|
|
663
|
+
metric_normalization: '(CASE WHEN (CASE WHEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT < 0 THEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT + 1 ELSE EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT END) < 0 THEN ''-'' ELSE '''' END || (CASE WHEN ABS((CASE WHEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT < 0 THEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT + 1 ELSE EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT END)) < 1000 THEN LPAD(ABS((CASE WHEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT < 0 THEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT + 1 ELSE EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT END))::VARCHAR, 4, ''0'') ELSE ABS((CASE WHEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT < 0 THEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT + 1 ELSE EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT END))::VARCHAR END)) || TO_CHAR(({{ metric_query }} AT TIME ZONE ''UTC''), ''-MM-DD"T"HH24:MI:SS.US'') || ''000'' || ''+00:00'''
|
|
664
|
+
count_null:
|
|
665
|
+
metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
|
|
666
|
+
metric_return_datatype: BIGINT
|
|
667
|
+
|
|
622
668
|
TIMESTAMPTZ:
|
|
623
669
|
min:
|
|
624
670
|
metric_query: MIN("{{ col_name }}")
|
|
@@ -62,6 +62,9 @@ from snowflake.snowflake_data_validation.utils.constants import (
|
|
|
62
62
|
SchemaValidationFields,
|
|
63
63
|
)
|
|
64
64
|
from snowflake.snowflake_data_validation.utils.iceberg_dv_common import (
|
|
65
|
+
DATE_AS_TEXT_KEY,
|
|
66
|
+
TIMESTAMP_AS_TEXT_KEY,
|
|
67
|
+
TIMESTAMPTZ_AS_TEXT_KEY,
|
|
65
68
|
IcebergProfile,
|
|
66
69
|
resolve_iceberg_v2_compatible_source_normalization_key,
|
|
67
70
|
)
|
|
@@ -71,6 +74,7 @@ from snowflake.snowflake_data_validation.utils.interval_common import (
|
|
|
71
74
|
)
|
|
72
75
|
from snowflake.snowflake_data_validation.utils.iso_dv_common import (
|
|
73
76
|
get_paired_target_column_types,
|
|
77
|
+
is_snowflake_varchar_like_type,
|
|
74
78
|
)
|
|
75
79
|
from snowflake.snowflake_data_validation.utils.measure_collation import (
|
|
76
80
|
COUNT_DISTINCT_METRIC,
|
|
@@ -78,11 +82,21 @@ from snowflake.snowflake_data_validation.utils.measure_collation import (
|
|
|
78
82
|
base_type,
|
|
79
83
|
has_effective_collation,
|
|
80
84
|
)
|
|
85
|
+
from snowflake.snowflake_data_validation.utils.model.column_metadata import ColumnMetadata
|
|
81
86
|
from snowflake.snowflake_data_validation.utils.model.table_context import TableContext
|
|
82
87
|
|
|
83
88
|
|
|
84
89
|
LOGGER = logging.getLogger(__name__)
|
|
85
90
|
_REDSHIFT_NORMALIZED_COLLATION_TOKENS = ("COLLATE(", ", 'case_sensitive')")
|
|
91
|
+
# Source clocks the Iceberg UNLOAD stages as signed-year text, keyed to the
|
|
92
|
+
# metrics template that renders MIN / MAX the same way.
|
|
93
|
+
_SIGNED_YEAR_TEXT_METRICS_KEYS: dict[str, str] = {
|
|
94
|
+
CommonType.DATE: DATE_AS_TEXT_KEY,
|
|
95
|
+
CommonType.TIMESTAMP: TIMESTAMP_AS_TEXT_KEY,
|
|
96
|
+
CommonType.TIMESTAMP_WITHOUT_TIME_ZONE: TIMESTAMP_AS_TEXT_KEY,
|
|
97
|
+
CommonType.TIMESTAMPTZ: TIMESTAMPTZ_AS_TEXT_KEY,
|
|
98
|
+
CommonType.TIMESTAMP_WITH_TIME_ZONE: TIMESTAMPTZ_AS_TEXT_KEY,
|
|
99
|
+
}
|
|
86
100
|
|
|
87
101
|
# Redshift ``TO_CHAR`` formats numbers with 64-bit arithmetic. A numeric format
|
|
88
102
|
# mask with N total digit placeholders (integer nines + fractional zeros) admits
|
|
@@ -522,19 +536,12 @@ class QueryGeneratorRedshift(QueryGeneratorBase):
|
|
|
522
536
|
``schema.table`` only (same rule as :func:`quoted_non_empty_fqn`).
|
|
523
537
|
"""
|
|
524
538
|
if not table_context.schema_name or not table_context.internal_table_name:
|
|
525
|
-
raise ValueError(
|
|
526
|
-
"Redshift schema-details query requires schema and table names for "
|
|
527
|
-
f"{table_context.fully_qualified_name}"
|
|
528
|
-
)
|
|
539
|
+
raise ValueError(f"Redshift schema-details query requires schema and table names for {table_context.fully_qualified_name}")
|
|
529
540
|
platform = self.platform.value
|
|
530
|
-
template = self.jinja_env.get_template(
|
|
531
|
-
SHOW_COLUMNS_QUERY_TEMPLATE_NAME_FORMAT.format(platform=platform)
|
|
532
|
-
)
|
|
541
|
+
template = self.jinja_env.get_template(SHOW_COLUMNS_QUERY_TEMPLATE_NAME_FORMAT.format(platform=platform))
|
|
533
542
|
database_name = table_context.database_name or ""
|
|
534
543
|
return template.render(
|
|
535
|
-
object_database_sql=(
|
|
536
|
-
write_sql_name(database_name, platform) if database_name.strip() else ""
|
|
537
|
-
),
|
|
544
|
+
object_database_sql=(write_sql_name(database_name, platform) if database_name.strip() else ""),
|
|
538
545
|
object_schema_sql=write_sql_name(table_context.schema_name, platform),
|
|
539
546
|
object_name_sql=write_sql_name(table_context.internal_table_name, platform),
|
|
540
547
|
)
|
|
@@ -579,9 +586,7 @@ class QueryGeneratorRedshift(QueryGeneratorBase):
|
|
|
579
586
|
@staticmethod
|
|
580
587
|
def _lowered_data_types(data_types: pd.Series) -> pd.Series:
|
|
581
588
|
"""Lower-case data-type spellings for the fixup masks, with missing values as ``""``."""
|
|
582
|
-
return data_types.map(
|
|
583
|
-
lambda value: str(value).lower() if value is not None and not pd.isna(value) else ""
|
|
584
|
-
)
|
|
589
|
+
return data_types.map(lambda value: str(value).lower() if value is not None and not pd.isna(value) else "")
|
|
585
590
|
|
|
586
591
|
def _apply_length_overrides(self, frame: pd.DataFrame, lowered_data_types: pd.Series) -> None:
|
|
587
592
|
"""Null the length of spatial and binary types, and set the HLLSKETCH length."""
|
|
@@ -589,25 +594,19 @@ class QueryGeneratorRedshift(QueryGeneratorBase):
|
|
|
589
594
|
if length_column not in frame.columns:
|
|
590
595
|
return
|
|
591
596
|
frame.loc[lowered_data_types.isin(self._NULL_LENGTH_DATA_TYPES), length_column] = None
|
|
592
|
-
frame.loc[lowered_data_types == RedshiftType.HLLSKETCH.lower(), length_column] =
|
|
593
|
-
REDSHIFT_HLLSKETCH_CHARACTER_MAXIMUM_LENGTH
|
|
594
|
-
)
|
|
597
|
+
frame.loc[lowered_data_types == RedshiftType.HLLSKETCH.lower(), length_column] = REDSHIFT_HLLSKETCH_CHARACTER_MAXIMUM_LENGTH
|
|
595
598
|
|
|
596
599
|
def _apply_float_precision(self, frame: pd.DataFrame, lowered_data_types: pd.Series) -> None:
|
|
597
600
|
"""Give float types the precision L1 compares, which ``SHOW COLUMNS`` does not report."""
|
|
598
601
|
precision_column = SchemaValidationFields.NUMERIC_PRECISION.value
|
|
599
602
|
if precision_column not in frame.columns:
|
|
600
603
|
return
|
|
601
|
-
frame.loc[lowered_data_types.isin(self._FLOAT_PRECISION_DATA_TYPES), precision_column] =
|
|
602
|
-
REDSHIFT_FLOAT_NUMERIC_PRECISION
|
|
603
|
-
)
|
|
604
|
+
frame.loc[lowered_data_types.isin(self._FLOAT_PRECISION_DATA_TYPES), precision_column] = REDSHIFT_FLOAT_NUMERIC_PRECISION
|
|
604
605
|
|
|
605
606
|
@staticmethod
|
|
606
607
|
def _uppercased_data_types(data_types: pd.Series) -> pd.Series:
|
|
607
608
|
"""Upper-case data-type spellings, leaving missing values untouched."""
|
|
608
|
-
return data_types.map(
|
|
609
|
-
lambda value: str(value).upper() if value is not None and not pd.isna(value) else value
|
|
610
|
-
)
|
|
609
|
+
return data_types.map(lambda value: str(value).upper() if value is not None and not pd.isna(value) else value)
|
|
611
610
|
|
|
612
611
|
@staticmethod
|
|
613
612
|
def _stamp_object_type(frame: pd.DataFrame, table_context: TableContext) -> None:
|
|
@@ -752,6 +751,23 @@ class QueryGeneratorRedshift(QueryGeneratorBase):
|
|
|
752
751
|
raise ValueError(f"No normalization template found for data type {data_type} and no DEFAULT template available.")
|
|
753
752
|
return normalization_template
|
|
754
753
|
|
|
754
|
+
def _resolve_metrics_col_type(self, col: ColumnMetadata, table_context: TableContext) -> str:
|
|
755
|
+
"""Key an Iceberg VARCHAR DATE / TIMESTAMP / TIMESTAMPTZ to the signed-year metrics.
|
|
756
|
+
|
|
757
|
+
``TO_CHAR 'YYYY'`` drops the era, so MIN / MAX would not match the text
|
|
758
|
+
the UNLOAD staged (SNOW-4353618, SNOW-4381535). Native targets keep the
|
|
759
|
+
shared templates.
|
|
760
|
+
"""
|
|
761
|
+
col_type = super()._resolve_metrics_col_type(col, table_context)
|
|
762
|
+
if not IcebergProfile.from_table_context(table_context).is_active:
|
|
763
|
+
return col_type
|
|
764
|
+
signed_year_key = _SIGNED_YEAR_TEXT_METRICS_KEYS.get(col_type.upper())
|
|
765
|
+
if signed_year_key is None:
|
|
766
|
+
return col_type
|
|
767
|
+
if not is_snowflake_varchar_like_type(get_paired_target_column_types(table_context).get(col.name)):
|
|
768
|
+
return col_type
|
|
769
|
+
return signed_year_key
|
|
770
|
+
|
|
755
771
|
def _resolve_normalization_templates(
|
|
756
772
|
self,
|
|
757
773
|
table_context: TableContext,
|
|
@@ -249,6 +249,52 @@ 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
|
+
|
|
268
|
+
# Signed-year ISO DATE text (Redshift Iceberg, SNOW-4381535): TRY_TO_DATE alone is
|
|
269
|
+
# NULL for negative and 5+ digit years, so parse like the column comment's cast back.
|
|
270
|
+
VARCHAR_DATE_SIGNED:
|
|
271
|
+
min:
|
|
272
|
+
metric_query: 'MIN(IFF(TRY_TO_NUMBER(REGEXP_SUBSTR(TO_VARCHAR(TRY_TO_DATE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+-[0-9]{2}-[0-9]{2})'', 1, 1, ''e'', 1)), ''YYYY-MM-DD''), ''^(-?[0-9]+)-'', 1, 1, ''e'', 1), 38, 0) = TRY_TO_NUMBER(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+)-'', 1, 1, ''e'', 1), 38, 0), TRY_TO_DATE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+-[0-9]{2}-[0-9]{2})'', 1, 1, ''e'', 1)), NULL))'
|
|
273
|
+
metric_return_datatype: VARCHAR
|
|
274
|
+
metric_normalization: TO_CHAR({{ metric_query }}, 'YYYY-MM-DD')
|
|
275
|
+
max:
|
|
276
|
+
metric_query: 'MAX(IFF(TRY_TO_NUMBER(REGEXP_SUBSTR(TO_VARCHAR(TRY_TO_DATE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+-[0-9]{2}-[0-9]{2})'', 1, 1, ''e'', 1)), ''YYYY-MM-DD''), ''^(-?[0-9]+)-'', 1, 1, ''e'', 1), 38, 0) = TRY_TO_NUMBER(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+)-'', 1, 1, ''e'', 1), 38, 0), TRY_TO_DATE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+-[0-9]{2}-[0-9]{2})'', 1, 1, ''e'', 1)), NULL))'
|
|
277
|
+
metric_return_datatype: VARCHAR
|
|
278
|
+
metric_normalization: TO_CHAR({{ metric_query }}, 'YYYY-MM-DD')
|
|
279
|
+
count_null:
|
|
280
|
+
metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
|
|
281
|
+
metric_return_datatype: NUMBER
|
|
282
|
+
|
|
283
|
+
# Signed-year ISO TIMESTAMPTZ text (Redshift Iceberg, SNOW-4381535), staged in UTC.
|
|
284
|
+
# Parse like the column comment's cast back; TO_CHAR prints a zero offset as Z.
|
|
285
|
+
VARCHAR_TIMESTAMP_TZ_SIGNED:
|
|
286
|
+
min:
|
|
287
|
+
metric_query: 'MIN(DATEADD(nanosecond, DATEDIFF(nanosecond, ''00:00:00''::TIME, TRY_TO_TIME(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''T([0-9]{2}:[0-9]{2}:[0-9]{2}(\\.[0-9]+)?)'', 1, 1, ''e'', 1))), DATEADD(day, DATEDIFF(day, ''2000-01-01''::DATE, IFF(TRY_TO_NUMBER(REGEXP_SUBSTR(TO_VARCHAR(TRY_TO_DATE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+-[0-9]{2}-[0-9]{2})'', 1, 1, ''e'', 1)), ''YYYY-MM-DD''), ''^(-?[0-9]+)-'', 1, 1, ''e'', 1), 38, 0) = TRY_TO_NUMBER(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+)-'', 1, 1, ''e'', 1), 38, 0), TRY_TO_DATE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+-[0-9]{2}-[0-9]{2})'', 1, 1, ''e'', 1)), NULL)), TRY_TO_TIMESTAMP_TZ(''2000-01-01 00:00:00 '' || COALESCE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''([+-][0-9]{2}:[0-9]{2})$'', 1, 1, ''e'', 1), ''+00:00''), ''YYYY-MM-DD HH24:MI:SS TZH:TZM''))))'
|
|
288
|
+
metric_return_datatype: VARCHAR
|
|
289
|
+
metric_normalization: REGEXP_REPLACE(TO_CHAR({{ metric_query }}, 'YYYY-MM-DD"T"HH24:MI:SS.FF9TZH:TZM'), 'Z$', '+00:00')
|
|
290
|
+
max:
|
|
291
|
+
metric_query: 'MAX(DATEADD(nanosecond, DATEDIFF(nanosecond, ''00:00:00''::TIME, TRY_TO_TIME(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''T([0-9]{2}:[0-9]{2}:[0-9]{2}(\\.[0-9]+)?)'', 1, 1, ''e'', 1))), DATEADD(day, DATEDIFF(day, ''2000-01-01''::DATE, IFF(TRY_TO_NUMBER(REGEXP_SUBSTR(TO_VARCHAR(TRY_TO_DATE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+-[0-9]{2}-[0-9]{2})'', 1, 1, ''e'', 1)), ''YYYY-MM-DD''), ''^(-?[0-9]+)-'', 1, 1, ''e'', 1), 38, 0) = TRY_TO_NUMBER(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+)-'', 1, 1, ''e'', 1), 38, 0), TRY_TO_DATE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+-[0-9]{2}-[0-9]{2})'', 1, 1, ''e'', 1)), NULL)), TRY_TO_TIMESTAMP_TZ(''2000-01-01 00:00:00 '' || COALESCE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''([+-][0-9]{2}:[0-9]{2})$'', 1, 1, ''e'', 1), ''+00:00''), ''YYYY-MM-DD HH24:MI:SS TZH:TZM''))))'
|
|
292
|
+
metric_return_datatype: VARCHAR
|
|
293
|
+
metric_normalization: REGEXP_REPLACE(TO_CHAR({{ metric_query }}, 'YYYY-MM-DD"T"HH24:MI:SS.FF9TZH:TZM'), 'Z$', '+00:00')
|
|
294
|
+
count_null:
|
|
295
|
+
metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
|
|
296
|
+
metric_return_datatype: NUMBER
|
|
297
|
+
|
|
252
298
|
# Order by UTC time-of-day. A plain MIN of the parsed instant uses today's date
|
|
253
299
|
# and can cross midnight, so the formatted value would keep the wrong offset.
|
|
254
300
|
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 from iceberg_spec; a spec other than v2 stays 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
|