snowflake-data-validation 1.45.1__tar.gz → 1.45.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/PKG-INFO +26 -3
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/README.md +24 -1
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/pyproject.toml +2 -1
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/bigquery/query/query_generator_bigquery.py +55 -18
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/extractor/sql_queries_template_generator.py +35 -1
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/query/query_generator_oracle.py +27 -1
- snowflake_data_validation-1.45.3/src/snowflake/snowflake_data_validation/query/normalization_render_context.py +51 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/query_generator_base.py +6 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_column_metrics_templates.yaml +16 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/query/query_generator_redshift.py +18 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_snowflake.py +38 -33
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_column_metrics_templates.yaml +16 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_datatypes_normalization_templates.yaml +10 -8
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_case_sensitive_columns.sql.j2 +4 -4
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_columns_metadata.sql.j2 +3 -3
- snowflake_data_validation-1.45.3/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_iceberg_format_version.sql.j2 +2 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_table_metadata_query.sql.j2 +7 -7
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/query/query_generator_snowflake.py +40 -21
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_column_metrics_templates.yaml +4 -2
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_table_metadata_query.sql.j2 +3 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/teradata_iso_normalization.py +1 -2
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/constants.py +22 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/iceberg_dv_common.py +37 -1
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/iso_dv_common.py +3 -1
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/model/table_context.py +3 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/qvci_fallback.py +3 -2
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/teradata_string_rtrim.py +42 -3
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/data_validator_base.py +115 -1
- snowflake_data_validation-1.45.3/src/snowflake/snowflake_data_validation/validation/lossy_number_mapping.py +59 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Teradata/test_query_generator_teradata.py +33 -0
- snowflake_data_validation-1.45.3/tests/unit/Teradata/test_teradata_table_metadata_float_precision.py +89 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/bigquery/test_query_generator_bigquery.py +84 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/oracle/test_oracle_query_generator.py +47 -0
- snowflake_data_validation-1.45.3/tests/unit/query/test_normalization_render_context.py +57 -0
- snowflake_data_validation-1.45.3/tests/unit/snowflake/test_snowflake_get_iceberg_format_version.py +73 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_connector_snowflake.py +50 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_data_validator.py +229 -1
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_float_bit_canonical.py +19 -25
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_iceberg_dv_l3_normalization.py +73 -6
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_iso_dv_common.py +3 -1
- snowflake_data_validation-1.45.3/tests/unit/test_lossy_number_mapping.py +57 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_metrics_tolerance.py +23 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_postgresql_tz_normalization.py +2 -1
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_query_generator_numeric_scale.py +10 -6
- snowflake_data_validation-1.45.3/tests/unit/test_redshift_iceberg_timestamp_metrics.py +94 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_redshift_native_timestamptz_ltz.py +3 -1
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_sql_literal_jinja_filter.py +51 -1
- snowflake_data_validation-1.45.3/tests/unit/test_teradata_string_rtrim_policy.py +305 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_timestamp_golden_vectors.py +26 -10
- snowflake_data_validation-1.45.1/tests/unit/test_teradata_string_rtrim_policy.py +0 -170
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/.gitignore +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/LICENSE +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/docs/README.md +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/azure_synapse_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/connector/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_azure_synapse.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_factory_azure_synapse.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/metadata_extractor_azure_synapse.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/model/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/model/azure_synapse_credentials_connection.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/query/query_generator_azure_synapse.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/script_writer_azure_synapse.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/bigquery/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/bigquery/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/bigquery/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/comparison_orchestrator.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/configuration/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/configuration/configuration_loader.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/configuration/model/configuration_model.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/configuration/model/connection_types.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/configuration/model/connections/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/configuration/model/logging_configuration.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/configuration/model/table_configuration.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/configuration/model/validation_configuration.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/configuration/model/view_configuration.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/configuration/singleton.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/connector/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/connector/connector_base.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/connector/connector_factory_base.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/connector/connector_failure_tracker.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/db2_lob_normalization.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/extractor/metadata_extractor_db2.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/query/query_generator_db2.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/script_writer/script_writer_db2.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/executer/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/executer/async_generation_executor.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/executer/async_validation_executor.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/executer/base_validation_executor.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/executer/executor_factory.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/executer/extractor_types.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/executer/source_validation_executor.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/executer/sync_validation_executor.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/extractor/metadata_extractor_base.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/extractor/metadata_extractor_oracle.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/oracle_bfile.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/oracle_iso_normalization.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/oracle_lob_normalization.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/oracle_statement_functions.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/oracle_vector_extraction.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/oracle_xmltype.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/script_writer/script_writer_oracle.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/orchestration/html_report/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/orchestration/html_report/html_report_builder.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/orchestration/html_report/report_metadata.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/orchestration/parallel_execution_engine.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/orchestration/table_metadata_processor.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/orchestration/validation_progress_reporter.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/orchestration/view_preprocessor.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/connector/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_factory_postgresql.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_postgresql.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/metadata_extractor_postgresql.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_concatenated_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_concatenated_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_md5_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/model/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/model/postgresql_credentials_connection.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/postgresql_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/postgresql_tz_normalization.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/query/query_generator_postgresql.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/script_writer/script_writer_postgresql.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/DATA_VALIDATION_API_OVERVIEW.md +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/_internal.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/_teradata_internal.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/async_mode/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/async_mode/file_loader.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/async_mode/script_writer.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/cli/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/cli/commands.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/configuration/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/connectors/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/context/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/data_validation_api.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/enums/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/execution/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/execution/query_executor.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/generators/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/metadata/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/model/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/model/data_validation_exception.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/model/generated_query.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/model/metrics_result_shape.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/model/query_execution_result.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/model/query_generator_factory.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/model/result_set.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/model/validation_progress_callback.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/model/validation_result.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/query_generation/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/query_generation/metadata_queries.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/query_generation/row_validation_queries.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/query_generation/schema_metrics_queries.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/query_validation/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/query_validation/query_comparison.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/reshape/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/reshape/metrics_reshape.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/result_set_validation/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/result_set_validation/result_set_comparison.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/snapshot/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_generation.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_validation.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/utils/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/utils/helpers.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/validation/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/validation/cell_validation.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/validation/metrics_validation.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/validation/row_validation.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/validation/schema_validation.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/chunk_md5_tiered.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/decimal_text_normalization.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_modifiers.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/float_aggregate_reduction.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/float_bit_normalization.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/numeric_scale_resolution.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/query/query_generator_query.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/query_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/sql_type_families.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/time_precision_resolution.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/tsql_float_remainder.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/vector_element_kind.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/connector/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/connector/connector_factory_redshift.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/connector/connector_redshift.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/metadata_extractor_redshift.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_show_columns_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/model/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/model/redshift_credentials_connection.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/redshift_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/redshift_super_normalization.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/script_writer/script_writer_redshift.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/snowflake_to_result_set_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/result_set/query/query_generator_result_set.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/result_set/result_set_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/script_writer/script_writer_base.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_factory_snowflake.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/metadata_extractor_snowflake.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/_wkt_despace.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_concatenated_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_md5_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_temporary_table_from_view_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/l3/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/l3/pushdown_diff_sql.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/l3/signature_external_table.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/l3/warm_start.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/model/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_credentials_connection.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_default_connection.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_named_connection.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/script_writer/script_writer_snowflake.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/snowflake_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/connector/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_factory_sqlite.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_sqlite.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/metadata_extractor_sqlite.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_compute_md5_sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_sqlite_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/model/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/model/sqlite_connection.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/query/query_generator_sqlite.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/script_writer/script_writer_sqlite.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/connector/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_factory_sql_server.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_sql_server.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/metadata_extractor_sqlserver.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_compute_md5_sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_temporary_table_internal_identifier_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_temporary_table_from_view_template.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/model/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/model/sqlserver_credentials_connection.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/query/query_generator_sqlserver.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/script_writer_sqlserver.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_string_length_normalization.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_tz_normalization.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_uniqueidentifier_normalization.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/table_partitioning_strategy.md +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/connector/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/connector/connector_factory_teradata.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/connector/connector_teradata.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/metadata_extractor_teradata.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_compute_md5_sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_concatenated.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_md5.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/model/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/model/teradata_credentials_connection.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/query/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/query/query_generator_teradata.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/script_writer/script_writer_teradata.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/teradata_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/arguments_manager_base.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/arguments_manager_factory.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/base_output_handler.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/catalog_column_size.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/column_grouping.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/column_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/configuration_file_editor.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/configuration_file_generator.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/configuration_file_synchronizer.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/connection_pool.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/connector_factory.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/console_output_handler.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/context.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/cpu_optimizer.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/dv_tracing.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/error_classifier.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/helper.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/helpers/helper_database.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/helpers/helper_dataframe.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/helpers/helper_io.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/helpers/helper_misc.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/helpers/helper_polars_cast.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/helpers/helper_query_result.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/helpers/helper_templates.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/index_key_format.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/interval_common.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/lob_source_types.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/logging_config.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/logging_utils.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/measure_collation.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/model/chunk.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/model/column_metadata.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/model/column_selection.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/model/custom_templates.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/model/table_column_metadata.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/model/templates_loader_manager.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/period_common.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/progress_reporter.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/row_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/row_validation_lob_exclusion.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/run_context.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/semi_structured_json_canonicalization.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/shutdown_coordinator.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/snapshot_validation_statements.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/telemetry.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/templates/configuration_file_templates.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/thread_safe_singleton.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/validation_utils.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/vector_common.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/vector_normalization.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/accepted_transformation.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/cell_data_validator.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/column_pairing.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/comparison_codec.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/dataframe_validator_base.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/metrics_data_validator.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/metrics_tolerance.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/object_type_criterion.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/base.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/db2.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/redshift.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/registry.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/snowflake.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlite.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlserver.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/teradata.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/query_validator.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/result_set_validator.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/results_summary_report.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/row_data_validator.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/row_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/schema_data_validator.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/validation_database/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/validation_database/sqlite_validation_connection.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/validation_database/validation_database_connection_base.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/validation_database_manager.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/validation_execution_context.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/validation_report_status.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/.coveragerc +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/conftest.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/integration/.coveragerc +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/integration/Redshift/test_metadata_extractor_integration.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/integration/test_async_generation_integration.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/integration/test_async_validation_integration.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/integration/test_reference_integration.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/integration/test_source_validation_integration.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/integration/test_sync_validation_integration.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Postgresql/test_postgresql_bit_count_distinct.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Postgresql/test_postgresql_collation.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Postgresql/test_postgresql_enum_metadata.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Postgresql/test_postgresql_json_cell_validation.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Postgresql/test_postgresql_jsonb_row_hash.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Postgresql/test_postgresql_numeric_leading_zero.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Postgresql/test_postgresql_spatial_templates.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/model/test_redshift_credentials_connection.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/query/test_query_generator_redshift.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/script_writer/test_script_writer_redshift.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/test_connector_redshift.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/test_redshift_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/test_redshift_collation.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/test_redshift_columns_metadata_template.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/test_redshift_hllsketch_templates.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/test_redshift_spatial_templates.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/test_redshift_split_schema_query.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/test_redshift_super_normalization.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/test_redshift_timetz_sentinel_normalization.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/test_redshift_varchar_count_distinct.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Teradata/test_connector_teradata.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Teradata/test_metadata_extractor_teradata.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Teradata/test_period_varchar_l1.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Teradata/test_teradata_collation.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Teradata/test_teradata_columns_metadata_precision_scale.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Teradata/test_teradata_row_md5_select_template.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Teradata/test_teradata_spatial_templates.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Teradata/test_teradata_view_generate_boundary.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Teradata/test_teradata_view_l1_metadata_templates.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/assets/custom_templates_loader/snowflake_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/assets/custom_templates_loader/snowflake_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/assets/custom_templates_loader/snowflake_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/assets/test_configuration_loader/test_load_configuration_model/conf.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/assets/test_configuration_loader/test_load_configuration_model_reading_file_exception/conf.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/assets/test_helpers/dummy_configuration_file.json +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/assets/test_helpers/dummy_connection_source_db.toml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/assets/test_helpers/dummy_datatypes_normalization_template.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/assets/test_helpers/dummy_datatypes_template.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/assets/test_helpers/dummy_metrics_template.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/assets/test_helpers/dummy_metrics_template_datatypes.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/assets/test_helpers/dummy_template.csv +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/assets/test_helpers/not_valid_format.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/assets/test_templates_loader_manager/snowflake_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/assets/test_templates_loader_manager/snowflake_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/azure_synapse/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/azure_synapse/test_azure_synapse_credentials_connection.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/azure_synapse/test_azure_synapse_l3_convert_normalization.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/azure_synapse/test_azure_synapse_metadata_extractor.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/azure_synapse/test_azure_synapse_metrics_templates.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/azure_synapse/test_azure_synapse_query_generator.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/azure_synapse/test_azure_synapse_row_queries.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/azure_synapse/test_connector_azure_synapse.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/azure_synapse/test_connector_factory_azure_synapse.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/bigquery/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/bigquery/test_bigquery_l1_string_length.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/bigquery/test_bigquery_spatial_templates.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/bigquery/test_query_generator_factory_bigquery.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/conftest.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/db2/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/db2/test_db2_lob_dv_generation.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/db2/test_db2_metadata_extractor.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/db2/test_db2_query_generator.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/db2/test_db2_registration.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/db2/test_db2_xml_long_dv_generation.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/db2/test_db2_xml_long_metrics.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/oracle/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/oracle/test_metadata_extractor_oracle_vector.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/oracle/test_oracle_configured_index_columns.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/oracle/test_oracle_iso_normalization.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/oracle/test_oracle_lob_dv_generation.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/oracle/test_oracle_lob_normalization.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/oracle/test_oracle_metadata_extractor.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/oracle/test_oracle_metrics_templates.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/oracle/test_oracle_normalization_templates.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/oracle/test_oracle_query_modifiers.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/oracle/test_oracle_quoted_identifiers.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/oracle/test_oracle_type_mappings.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/query/test_chunk_md5_tiered.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/query/test_time_fraction_rendering.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/snowflake/test_snowflake_get_case_sensitive_columns.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/snowflake/test_snowflake_spatial_metrics_templates.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlite/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlite/test_connector_factory_sqlite.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlite/test_connector_sqlite.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlite/test_metadata_extractor_sqlite.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlite/test_metadata_query_template_sqlite.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlite/test_query_generator_sqlite.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlite/test_script_writer_sqlite.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_connector_factory_sql_server.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_metadata_extractor_sqlserver_vector.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_datetimeoffset_full_ingest_utc.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_datetimeoffset_metrics_utc.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_datetimeoffset_physical_target.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_json.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_l1_catalog.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_l1_character_length.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_l3_convert_normalization.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_length_metrics_chars.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_row_count_overflow.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_row_queries.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_spatial_l1_metadata.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_spatial_metrics_templates.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_string_length_pairing.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_uniqueidentifier_l3_normalization.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_xml_image_metrics.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_tsql_integer_stddev_exact.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_accepted_transformation.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_arguments_manager_base.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_arguments_manager_factory.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_batched_metrics_queries.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_boolean_binary_canonical_templates.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_case_sensitive_column_pairing.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_catalog_column_size.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_catalog_queries_take_actual_names.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_cell_data_validator.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_cell_data_validator_threading.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_cell_validation_query_generation.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_charset_normalization.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_column_grouping.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_column_metadata.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_column_normalization_override.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_column_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_column_selection.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_column_selection_actual_names.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_comparison_codec.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_comparison_orchestrator.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_configuration_file_editor.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_configuration_file_generator.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_configuration_file_synchronizer.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_configuration_loader.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_configuration_model.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_connection_pool.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_connector_failure_tracker.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_cpu_optimizer.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_custom_templates_models.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_decimal_text_canonical.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_dv_tracing.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_error_classifier.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_escape_odbc_value.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_executor_factory.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_extraction_keeps_catalog_column_spelling.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_fetch_schema_metadata.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_float_aggregate_reduction.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_float_canonical_templates.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_get_configuration_file.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_get_target_cols.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_helper_dataframe.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_helper_io.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_helper_polars_cast.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_helper_polars_cast_threading.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_helpers.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_html_report_builder.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_iceberg_v2_metrics_exclusion.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_index_key_format.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_internal_helpers.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_interval_common.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_l2_collation_metadata.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_l2_count_distinct_opt_in_config.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_logging_config.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_metric_identifier_rendering.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_metrics_reshape.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_metrics_result_shape.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_metrics_templates_casts.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_normalize_shape_aware.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_numeric_scale_resolution.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_object_type_criterion.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_parallel_execution_engine_fatal_errors.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_period_common.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_platform_bridge.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_postgresql_normalization_templates.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_pushdown_diff_sql.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_query_cell_level_validation.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_query_executor.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_query_metrics_level_validation.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_query_to_dataframe.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_query_validator.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_qvci_fallback.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_qvci_fallback_na_skip.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_qvci_fallback_triggers.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_report_metadata.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_result_set_cell_level_validation.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_result_set_column_metrics_validation.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_result_set_snapshot_generation.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_result_set_snapshot_validation.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_result_set_to_dataframe.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_result_set_validator.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_row_count_bigint_overflow.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_row_data_validator.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_row_data_validator_empty_chunk.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_row_hash_column_delimiter.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_row_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_row_validation_lob_exclusion.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_row_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_schema_accepted_native_datatypes.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_schema_column_selection.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_schema_query_capability.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_shutdown_coordinator.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_signature_external_table.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_signature_row_md5_query.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_snapshot_validation_statements.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_snowflake_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_snowflake_binary_normalization_templates.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_snowflake_redshift_super_size_guard.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_source_validation_executor.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_spatial_wkt_canonicalization.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_sql_catalog_template_guard.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_sqlite_validation_connection.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_sqlserver_arguments_manager.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_sqlserver_multi_version_support.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_sync_executor_qvci_fallback.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_sync_schema_validation_real_callbacks.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_sync_validation_executor.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_table_column_metadata_model.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_table_configuration.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_table_context.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_table_metadata_processor.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_table_snapshot_generation.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_table_snapshot_validation.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_target_platform_factory.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_telemetry.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_templates_loader_manager.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_teradata_iso_normalization.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_teradata_timetz_metric_domain.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_teradata_type_code_mapping.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_trace_bridge.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_tsql_float_l2_aggregates.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_validation_configuration.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_validation_database_connection.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_validation_execution_context.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_validation_progress_reporter.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_validation_report_status.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_validation_templates_dto.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_vector_bit_normalization.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_vector_common.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_vector_normalization.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_view_configuration.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_warm_start.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/utils/__init__.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/utils/test_constants.py +0 -0
- {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/utils/test_semi_structured_json_canonicalization.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: snowflake-data-validation
|
|
3
|
-
Version: 1.45.
|
|
3
|
+
Version: 1.45.3
|
|
4
4
|
Summary: Snowflake Data Validation
|
|
5
5
|
Project-URL: Bug Tracker, https://github.com/snowflake-eng/migrations-data-validation/issues
|
|
6
6
|
Project-URL: Source code, https://github.com/snowflake-eng/migrations-data-validation/
|
|
@@ -79,7 +79,7 @@ Requires-Dist: psycopg[binary]>=3.2.0; extra == 'postgresql'
|
|
|
79
79
|
Provides-Extra: redshift
|
|
80
80
|
Requires-Dist: redshift-connector>=2.1.14; extra == 'redshift'
|
|
81
81
|
Provides-Extra: scai
|
|
82
|
-
Requires-Dist: snowflake-code-unit-registry>=0.9.
|
|
82
|
+
Requires-Dist: snowflake-code-unit-registry>=0.9.5; extra == 'scai'
|
|
83
83
|
Provides-Extra: sqlite
|
|
84
84
|
Requires-Dist: sqlean-py>=3.45.0; extra == 'sqlite'
|
|
85
85
|
Provides-Extra: sqlserver
|
|
@@ -156,12 +156,16 @@ Compares table structure between source and target:
|
|
|
156
156
|
|
|
157
157
|
Some differences are reported as `WARNING` and do not fail L1:
|
|
158
158
|
- Snowflake still holds every source value: a different column order, a Snowflake precision or scale that can hold the source's, and a `NOT NULL` source column whose Snowflake column is nullable (a Snowflake virtual column is always nullable).
|
|
159
|
-
- Snowflake may truncate or reject source values, so review it: a source character length longer than Snowflake's.
|
|
159
|
+
- Snowflake may truncate or reject source values, so review it: a source character length longer than Snowflake's, and a source number with no declared precision or scale (Oracle's bare `NUMBER`) on a Snowflake `NUMBER(p,s)`, such as `NUMBER(38,18)`. The warning names the precision and scale Snowflake fixes.
|
|
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,25 @@ For configuration options and examples, see the [official documentation](https:/
|
|
|
226
230
|
|
|
227
231
|
## Changelog
|
|
228
232
|
|
|
233
|
+
### v1.45.3
|
|
234
|
+
|
|
235
|
+
**Bug fixes**
|
|
236
|
+
|
|
237
|
+
- Fixed schema validation reporting SQL Server `INT` columns mapped to `NUMBER(38,0)` as precision differences.
|
|
238
|
+
- Surfaced rounding of scale-less `NUMBER` values as a lossy mapping instead of a hidden match.
|
|
239
|
+
- Fixed schema validation reporting every column as missing when the schema name contains a backslash (for example `DOMAIN\user` schemas).
|
|
240
|
+
- Fixed Teradata `VARCHAR` distinct and empty-value metrics not matching when values have trailing spaces.
|
|
241
|
+
- Fixed Iceberg timestamp comparisons to use `FF6` or `FF9` fractional precision based on the catalog format version.
|
|
242
|
+
- Fixed metrics validation for signed-year `TIMESTAMP` values, including BC and post-9999 dates.
|
|
243
|
+
|
|
244
|
+
### v1.45.2
|
|
245
|
+
|
|
246
|
+
**Bug fixes**
|
|
247
|
+
|
|
248
|
+
- Fixed hybrid row validation reporting false mismatches for SQL Server `DATETIMEOFFSET` columns landed as `VARCHAR` in Iceberg v3 compatible tables.
|
|
249
|
+
- Fixed schema validation failing an Oracle unconstrained `NUMBER` against a Snowflake `NUMBER(38,18)`; it now reports a warning.
|
|
250
|
+
- Fixed Snowflake target connections not resolving from `connections.toml`.
|
|
251
|
+
|
|
229
252
|
### v1.45.1
|
|
230
253
|
|
|
231
254
|
**Improvements**
|
|
@@ -65,12 +65,16 @@ Compares table structure between source and target:
|
|
|
65
65
|
|
|
66
66
|
Some differences are reported as `WARNING` and do not fail L1:
|
|
67
67
|
- Snowflake still holds every source value: a different column order, a Snowflake precision or scale that can hold the source's, and a `NOT NULL` source column whose Snowflake column is nullable (a Snowflake virtual column is always nullable).
|
|
68
|
-
- Snowflake may truncate or reject source values, so review it: a source character length longer than Snowflake's.
|
|
68
|
+
- Snowflake may truncate or reject source values, so review it: a source character length longer than Snowflake's, and a source number with no declared precision or scale (Oracle's bare `NUMBER`) on a Snowflake `NUMBER(p,s)`, such as `NUMBER(38,18)`. The warning names the precision and scale Snowflake fixes.
|
|
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,25 @@ For configuration options and examples, see the [official documentation](https:/
|
|
|
135
139
|
|
|
136
140
|
## Changelog
|
|
137
141
|
|
|
142
|
+
### v1.45.3
|
|
143
|
+
|
|
144
|
+
**Bug fixes**
|
|
145
|
+
|
|
146
|
+
- Fixed schema validation reporting SQL Server `INT` columns mapped to `NUMBER(38,0)` as precision differences.
|
|
147
|
+
- Surfaced rounding of scale-less `NUMBER` values as a lossy mapping instead of a hidden match.
|
|
148
|
+
- Fixed schema validation reporting every column as missing when the schema name contains a backslash (for example `DOMAIN\user` schemas).
|
|
149
|
+
- Fixed Teradata `VARCHAR` distinct and empty-value metrics not matching when values have trailing spaces.
|
|
150
|
+
- Fixed Iceberg timestamp comparisons to use `FF6` or `FF9` fractional precision based on the catalog format version.
|
|
151
|
+
- Fixed metrics validation for signed-year `TIMESTAMP` values, including BC and post-9999 dates.
|
|
152
|
+
|
|
153
|
+
### v1.45.2
|
|
154
|
+
|
|
155
|
+
**Bug fixes**
|
|
156
|
+
|
|
157
|
+
- Fixed hybrid row validation reporting false mismatches for SQL Server `DATETIMEOFFSET` columns landed as `VARCHAR` in Iceberg v3 compatible tables.
|
|
158
|
+
- Fixed schema validation failing an Oracle unconstrained `NUMBER` against a Snowflake `NUMBER(38,18)`; it now reports a warning.
|
|
159
|
+
- Fixed Snowflake target connections not resolving from `connections.toml`.
|
|
160
|
+
|
|
138
161
|
### v1.45.1
|
|
139
162
|
|
|
140
163
|
**Improvements**
|
|
@@ -4,6 +4,7 @@ requires = ["hatchling"]
|
|
|
4
4
|
|
|
5
5
|
[tool.uv]
|
|
6
6
|
constraint-dependencies = [
|
|
7
|
+
"certifi>=2026.10.23,<2026.11",
|
|
7
8
|
"virtualenv>=21.7.13,<21.8",
|
|
8
9
|
]
|
|
9
10
|
|
|
@@ -105,7 +106,7 @@ db2 = [
|
|
|
105
106
|
# musllinux build, and SDV is published to public PyPI. Inside DMO/DEA the
|
|
106
107
|
# dependency is already declared, so SDV's logger tree is covered there.
|
|
107
108
|
scai = [
|
|
108
|
-
"snowflake-code-unit-registry>=0.9.
|
|
109
|
+
"snowflake-code-unit-registry>=0.9.5",
|
|
109
110
|
]
|
|
110
111
|
|
|
111
112
|
[project.urls]
|
|
@@ -17,7 +17,9 @@ from __future__ import annotations
|
|
|
17
17
|
|
|
18
18
|
import logging
|
|
19
19
|
|
|
20
|
-
from
|
|
20
|
+
from typing import TYPE_CHECKING
|
|
21
|
+
|
|
22
|
+
from shared.datatypes.bigquery import BigQueryType, field_wise_json_text, serializes_exactly_through_to_json
|
|
21
23
|
from shared.datatypes.common import CommonType
|
|
22
24
|
from shared.datatypes.snowflake import SnowflakeType
|
|
23
25
|
from snowflake.snowflake_data_validation.query.decimal_text_normalization import (
|
|
@@ -51,6 +53,10 @@ from snowflake.snowflake_data_validation.validation.comparison_codec import (
|
|
|
51
53
|
)
|
|
52
54
|
|
|
53
55
|
|
|
56
|
+
if TYPE_CHECKING: # pragma: no cover - used only for type hints.
|
|
57
|
+
from snowflake.snowflake_data_validation.utils.model.column_metadata import ColumnMetadata
|
|
58
|
+
|
|
59
|
+
|
|
54
60
|
LOGGER = logging.getLogger(__name__)
|
|
55
61
|
|
|
56
62
|
_WIDE_NUMERIC_BASE_TYPES = frozenset({BigQueryType.BIGNUMERIC, BigQueryType.BIGDECIMAL})
|
|
@@ -264,32 +270,63 @@ class QueryGeneratorBigQuery(QueryGeneratorBase):
|
|
|
264
270
|
raise ValueError(f"No normalization template found for data type {column.data_type} and no DEFAULT template available.")
|
|
265
271
|
return normalization_template
|
|
266
272
|
|
|
273
|
+
def _field_wise_normalization(self, column: ColumnMetadata) -> str | None:
|
|
274
|
+
"""Return the L3 text of an ARRAY / STRUCT mixing INT64 and decimals, else None.
|
|
275
|
+
|
|
276
|
+
Data migration writes such a column's JSON text field by field, so this hashes that
|
|
277
|
+
text, keys ordered by PARSE_JSON as for other nests. The text spells every declared
|
|
278
|
+
field name, and a name may hold a template placeholder, so it is written with the
|
|
279
|
+
column already in place and never rendered as a template.
|
|
280
|
+
"""
|
|
281
|
+
column_ref = f"`{self._normalization_column_name(column)}`"
|
|
282
|
+
field_wise = field_wise_json_text(column.data_type, column_ref)
|
|
283
|
+
if field_wise is None:
|
|
284
|
+
return None
|
|
285
|
+
return f"NULLIF(TO_JSON_STRING(PARSE_JSON({field_wise})), 'null')"
|
|
286
|
+
|
|
287
|
+
def _column_normalization(
|
|
288
|
+
self,
|
|
289
|
+
column: ColumnMetadata,
|
|
290
|
+
table_context: TableContext,
|
|
291
|
+
column_normalization_map: dict[str, str] | None,
|
|
292
|
+
) -> str:
|
|
293
|
+
"""Return the column's rendered L3 normalization.
|
|
294
|
+
|
|
295
|
+
A user's normalization, a per-column rule or an override of the column's base type
|
|
296
|
+
(``STRUCT``, ``ARRAY``), wins over the built-in field-wise text.
|
|
297
|
+
"""
|
|
298
|
+
field_wise = self._field_wise_normalization(column)
|
|
299
|
+
if field_wise is not None and not has_custom_column_normalization(
|
|
300
|
+
column.name,
|
|
301
|
+
self.normalize_bigquery_type(column.data_type),
|
|
302
|
+
column_normalization_map,
|
|
303
|
+
table_context.templates_loader_manager,
|
|
304
|
+
):
|
|
305
|
+
return field_wise
|
|
306
|
+
normalization_template = self._resolve_datatype_normalization_template(
|
|
307
|
+
column,
|
|
308
|
+
table_context.templates_loader_manager.datatypes_normalization_templates,
|
|
309
|
+
table_context,
|
|
310
|
+
)
|
|
311
|
+
normalization_template = resolve_column_normalization_template(
|
|
312
|
+
column.name,
|
|
313
|
+
normalization_template,
|
|
314
|
+
column_normalization_map,
|
|
315
|
+
)
|
|
316
|
+
# Resolve ``{{ col_name }}`` and, for numeric types, the scale-aware
|
|
317
|
+
# ``{{ numeric_format_mask }}`` (BigQuery emits a printf ``%.Nf``).
|
|
318
|
+
return self._render_normalization_template(normalization_template, column)
|
|
319
|
+
|
|
267
320
|
def _build_datatypes_normalization_renderer_templates(
|
|
268
321
|
self,
|
|
269
322
|
table_context: TableContext,
|
|
270
323
|
column_codec_map: dict[str, ComparisonCodec] | None = None,
|
|
271
324
|
column_normalization_map: dict[str, str] | None = None,
|
|
272
325
|
) -> dict[str, str]:
|
|
273
|
-
datatypes_normalization_templates = table_context.templates_loader_manager.datatypes_normalization_templates
|
|
274
326
|
renderer_columns = self._row_md5_normalization_columns(table_context)
|
|
275
327
|
renderer_templates: dict[str, str] = {}
|
|
276
328
|
for column in renderer_columns:
|
|
277
|
-
|
|
278
|
-
column,
|
|
279
|
-
datatypes_normalization_templates,
|
|
280
|
-
table_context,
|
|
281
|
-
)
|
|
282
|
-
normalization_template = resolve_column_normalization_template(
|
|
283
|
-
column.name,
|
|
284
|
-
normalization_template,
|
|
285
|
-
column_normalization_map,
|
|
286
|
-
)
|
|
287
|
-
# Resolve ``{{ col_name }}`` and, for numeric types, the scale-aware
|
|
288
|
-
# ``{{ numeric_format_mask }}`` (BigQuery emits a printf ``%.Nf``).
|
|
289
|
-
renderer_templates[column.name] = self._render_normalization_template(
|
|
290
|
-
normalization_template,
|
|
291
|
-
column,
|
|
292
|
-
)
|
|
329
|
+
renderer_templates[column.name] = self._column_normalization(column, table_context, column_normalization_map)
|
|
293
330
|
renderer_templates = apply_text_codec_to_renderer_templates(
|
|
294
331
|
self.platform,
|
|
295
332
|
renderer_templates,
|
|
@@ -26,7 +26,7 @@ import snowflake.snowflake_data_validation as sdv_pkg
|
|
|
26
26
|
|
|
27
27
|
from shared.identifiers.managers import identifier_manager
|
|
28
28
|
from shared.identifiers.sql_identifier import SqlIdentifier
|
|
29
|
-
from shared.queries.sql_literals import escape_sql_literal
|
|
29
|
+
from shared.queries.sql_literals import escape_snowflake_sql_literal, escape_sql_literal
|
|
30
30
|
from shared.query_modifiers.strict import check_query_modifiers_strict
|
|
31
31
|
from shared.query_modifiers.template_context import QueryModifiersTemplateContext
|
|
32
32
|
from snowflake.snowflake_data_validation.utils.constants import (
|
|
@@ -132,6 +132,7 @@ class SQLQueriesTemplateGenerator:
|
|
|
132
132
|
# Identifiers are written in Python (write_sql_name, column_sql_names)
|
|
133
133
|
# and handed to the templates already written; only literals are escaped here.
|
|
134
134
|
self.env.filters["escape_sql_literal"] = escape_sql_literal
|
|
135
|
+
self.env.filters["escape_snowflake_sql_literal"] = escape_snowflake_sql_literal
|
|
135
136
|
# Single source of truth for the NULL sentinel used by L3 row-MD5 and
|
|
136
137
|
# cell-validation normalization. Exposed to every template so the
|
|
137
138
|
# COALESCE fallback can keep a real SQL NULL distinct from "".
|
|
@@ -351,6 +352,39 @@ class SQLQueriesTemplateGenerator:
|
|
|
351
352
|
except Exception as e:
|
|
352
353
|
raise Exception(f"Error generating template: {e}") from e
|
|
353
354
|
|
|
355
|
+
def get_iceberg_format_version(self, database_name: str, schema_name: str, table_name: str, platform: str) -> str:
|
|
356
|
+
"""Generate the query that reads one target table's Iceberg format version.
|
|
357
|
+
|
|
358
|
+
Args:
|
|
359
|
+
database_name (str): Database that contains the table.
|
|
360
|
+
schema_name (str): Schema that contains the table.
|
|
361
|
+
table_name (str): Table whose ``ICEBERG_VERSION`` parameter is read.
|
|
362
|
+
platform (str): Platform identifier (``Platform.SNOWFLAKE.value``).
|
|
363
|
+
|
|
364
|
+
Returns:
|
|
365
|
+
str: The SQL query. The ``value`` column is ``ICEBERG_FORMAT_VERSION_V2``
|
|
366
|
+
or ``ICEBERG_FORMAT_VERSION_V3``.
|
|
367
|
+
|
|
368
|
+
Raises:
|
|
369
|
+
ValueError: If the template file is not found.
|
|
370
|
+
Exception: If an error occurs during template rendering.
|
|
371
|
+
|
|
372
|
+
"""
|
|
373
|
+
template_file = f"{platform}_get_iceberg_format_version.sql.j2"
|
|
374
|
+
try:
|
|
375
|
+
return self._render(
|
|
376
|
+
template_file,
|
|
377
|
+
database_sql=write_sql_name(database_name, platform),
|
|
378
|
+
schema_sql=write_sql_name(schema_name, platform),
|
|
379
|
+
table_sql=write_sql_name(table_name, platform),
|
|
380
|
+
)
|
|
381
|
+
except jinja2.exceptions.TemplateNotFound:
|
|
382
|
+
raise ValueError(
|
|
383
|
+
f"Template not found for platform: {platform}. Please create {template_file} in the {self.template_dir} directory."
|
|
384
|
+
) from None
|
|
385
|
+
except Exception as e:
|
|
386
|
+
raise Exception(f"Error generating template: {e}") from e
|
|
387
|
+
|
|
354
388
|
def generate_compute_md5_query(
|
|
355
389
|
self,
|
|
356
390
|
platform: str,
|
|
@@ -77,6 +77,7 @@ from snowflake.snowflake_data_validation.utils.constants import (
|
|
|
77
77
|
ROW_HASH_COLUMN_DELIMITER,
|
|
78
78
|
ROW_HASH_COLUMN_DELIMITER_KEY,
|
|
79
79
|
Platform,
|
|
80
|
+
renders_full_precision,
|
|
80
81
|
)
|
|
81
82
|
from snowflake.snowflake_data_validation.utils.iso_dv_common import (
|
|
82
83
|
get_paired_target_column_types,
|
|
@@ -156,6 +157,28 @@ def build_oracle_numeric_canonical_expr(col_ref: str, format_mask: str) -> str:
|
|
|
156
157
|
)
|
|
157
158
|
|
|
158
159
|
|
|
160
|
+
def build_oracle_full_precision_numeric_expr(col_ref: str, format_mask: str) -> str:
|
|
161
|
+
"""Render a value that fits the mask's scale through the mask, any other at its stored precision.
|
|
162
|
+
|
|
163
|
+
For a bare NUMBER the target scale was never checked against the data. A value
|
|
164
|
+
the target could hold renders exactly like :func:`build_oracle_numeric_canonical_expr`,
|
|
165
|
+
the text Snowflake prints. A value with more fractional digits renders with
|
|
166
|
+
``TM9`` (shortest exact text, scientific only past 64 characters, which no
|
|
167
|
+
NUMBER(38, s) value reaches), so the target's rounding shows as a cell diff.
|
|
168
|
+
"""
|
|
169
|
+
scale = _oracle_scale_from_fm_mask(format_mask)
|
|
170
|
+
full_text = f"TRIM(REGEXP_REPLACE(TRIM(REGEXP_REPLACE(TRIM(TO_CHAR({col_ref}, 'TM9')), '^-\\.', '-0.')), '^\\.', '0.'))"
|
|
171
|
+
return (
|
|
172
|
+
f"CASE WHEN {col_ref} IS NULL THEN NULL "
|
|
173
|
+
f"WHEN {col_ref} = ROUND({col_ref}, {scale}) THEN {build_oracle_numeric_canonical_expr(col_ref, format_mask)} "
|
|
174
|
+
f"ELSE {full_text} END"
|
|
175
|
+
)
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
def _renders_full_precision(column: object) -> bool:
|
|
179
|
+
return renders_full_precision(getattr(column, "properties", None))
|
|
180
|
+
|
|
181
|
+
|
|
159
182
|
class QueryGeneratorOracle(QueryGeneratorBase):
|
|
160
183
|
"""Oracle-specific implementation of the query generator.
|
|
161
184
|
|
|
@@ -250,7 +273,10 @@ class QueryGeneratorOracle(QueryGeneratorBase):
|
|
|
250
273
|
"""Wrap numeric ``TO_CHAR`` output to restore the FM-suppressed leading zero."""
|
|
251
274
|
if NUMERIC_FORMAT_MASK_PLACEHOLDER in template and "TO_CHAR" in template and self._is_numeric_normalization_type(column.data_type):
|
|
252
275
|
mask = self._build_numeric_format_mask(self._resolve_numeric_scale(column))
|
|
253
|
-
|
|
276
|
+
col_ref = self._write_sql_identifier(column.name)
|
|
277
|
+
if _renders_full_precision(column):
|
|
278
|
+
return build_oracle_full_precision_numeric_expr(col_ref, mask)
|
|
279
|
+
return build_oracle_numeric_canonical_expr(col_ref, mask)
|
|
254
280
|
return super().render_normalization_template(template, column)
|
|
255
281
|
|
|
256
282
|
def build_float_bit_shim(self, column, col_ref: str) -> str:
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass, replace
|
|
4
|
+
from typing import TYPE_CHECKING
|
|
5
|
+
|
|
6
|
+
from snowflake.snowflake_data_validation.utils.constants import Platform
|
|
7
|
+
from snowflake.snowflake_data_validation.utils.iceberg_dv_common import IcebergProfile
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
if TYPE_CHECKING:
|
|
11
|
+
from snowflake.snowflake_data_validation.utils.model.table_context import TableContext
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@dataclass(frozen=True)
|
|
15
|
+
class NormalizationRenderContext:
|
|
16
|
+
"""Per-render inputs a normalization template needs beyond the column itself.
|
|
17
|
+
|
|
18
|
+
Resolve the per-table inputs once with ``from_table_context``, then specialize
|
|
19
|
+
per column with ``for_column``. A new render input becomes a field here instead
|
|
20
|
+
of another parameter on ``render_normalization_template``.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
paired_source_platform: Platform | None = None
|
|
24
|
+
paired_source_type: str | None = None
|
|
25
|
+
iceberg_fraction_digits: int = IcebergProfile().fraction_digits
|
|
26
|
+
has_custom_normalization: bool = False
|
|
27
|
+
|
|
28
|
+
@classmethod
|
|
29
|
+
def from_table_context(cls, table_context: TableContext) -> NormalizationRenderContext:
|
|
30
|
+
"""Resolve the per-table inputs; ``for_column`` adds the per-column paired type."""
|
|
31
|
+
return cls(
|
|
32
|
+
paired_source_platform=table_context.paired_source_platform,
|
|
33
|
+
iceberg_fraction_digits=IcebergProfile.from_table_context(table_context).fraction_digits,
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
def for_column(
|
|
37
|
+
self,
|
|
38
|
+
paired_source_type: str | None,
|
|
39
|
+
*,
|
|
40
|
+
has_custom_normalization: bool = False,
|
|
41
|
+
) -> NormalizationRenderContext:
|
|
42
|
+
"""Return a copy specialized for one column; the base context is left unchanged.
|
|
43
|
+
|
|
44
|
+
Sets the column's paired source type and whether its template is a user
|
|
45
|
+
override. ``has_custom_normalization`` resets to False unless passed.
|
|
46
|
+
"""
|
|
47
|
+
return replace(
|
|
48
|
+
self,
|
|
49
|
+
paired_source_type=paired_source_type,
|
|
50
|
+
has_custom_normalization=has_custom_normalization,
|
|
51
|
+
)
|
|
@@ -58,6 +58,7 @@ from snowflake.snowflake_data_validation.utils.constants import (
|
|
|
58
58
|
DEFAULT_MAX_COLUMNS_PER_METRICS_BATCH,
|
|
59
59
|
EXPLICIT_METRIC_NORMALIZATION_COLUMN_KEY,
|
|
60
60
|
FLOAT_BIT_SHIM_PLACEHOLDER,
|
|
61
|
+
ICEBERG_FRACTION_DIGITS_PLACEHOLDER,
|
|
61
62
|
MEASURE_COLLATION_PREFIX_PLACEHOLDER,
|
|
62
63
|
MEASURE_COLLATION_SUFFIX_PLACEHOLDER,
|
|
63
64
|
METRIC_COLUMN_KEY,
|
|
@@ -892,6 +893,7 @@ class QueryGeneratorBase(ABC):
|
|
|
892
893
|
# set the attribute keep the default instead of a truthy Mock.
|
|
893
894
|
include_count_distinct = getattr(table_context, "include_count_distinct", False) is True
|
|
894
895
|
apply_metric_column_modifier = table_context.apply_metric_column_modifier
|
|
896
|
+
iceberg_fraction_digits = IcebergProfile.from_table_context(table_context).fraction_digits
|
|
895
897
|
|
|
896
898
|
select_exprs: list[str] = []
|
|
897
899
|
cells: list[tuple[str, str]] = []
|
|
@@ -953,6 +955,10 @@ class QueryGeneratorBase(ABC):
|
|
|
953
955
|
if NUMERIC_FORMAT_MASK_PLACEHOLDER in normalization:
|
|
954
956
|
mask = self._build_numeric_format_mask(self._resolve_numeric_scale(col))
|
|
955
957
|
normalization = normalization.replace(NUMERIC_FORMAT_MASK_PLACEHOLDER, mask)
|
|
958
|
+
if ICEBERG_FRACTION_DIGITS_PLACEHOLDER in normalization:
|
|
959
|
+
normalization = normalization.replace(
|
|
960
|
+
ICEBERG_FRACTION_DIGITS_PLACEHOLDER, str(iceberg_fraction_digits)
|
|
961
|
+
)
|
|
956
962
|
metric_expr = self._wrap_metric_with_normalization(normalization, metric_expr)
|
|
957
963
|
alias = f"c{measured_idx}_m{metric_idx}"
|
|
958
964
|
select_exprs.append(f"{metric_expr} AS {alias}")
|
|
@@ -619,6 +619,22 @@ TIMESTAMP WITHOUT TIME ZONE:
|
|
|
619
619
|
metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
|
|
620
620
|
metric_return_datatype: BIGINT
|
|
621
621
|
|
|
622
|
+
# Iceberg VARCHAR target (SNOW-4353618): MIN/MAX of the instant, rendered as the
|
|
623
|
+
# signed astronomical-year text the UNLOAD footer writes (``TO_CHAR 'YYYY'``
|
|
624
|
+
# drops the era). Kept in sync with DMO by test_redshift_consistency.py.
|
|
625
|
+
TIMESTAMP_AS_TEXT:
|
|
626
|
+
min:
|
|
627
|
+
metric_query: MIN("{{ col_name }}")
|
|
628
|
+
metric_return_datatype: VARCHAR
|
|
629
|
+
metric_normalization: '(CASE WHEN (CASE WHEN EXTRACT(YEAR FROM {{ metric_query }})::INT < 0 THEN EXTRACT(YEAR FROM {{ metric_query }})::INT + 1 ELSE EXTRACT(YEAR FROM {{ metric_query }})::INT END) < 0 THEN ''-'' ELSE '''' END || (CASE WHEN ABS((CASE WHEN EXTRACT(YEAR FROM {{ metric_query }})::INT < 0 THEN EXTRACT(YEAR FROM {{ metric_query }})::INT + 1 ELSE EXTRACT(YEAR FROM {{ metric_query }})::INT END)) < 1000 THEN LPAD(ABS((CASE WHEN EXTRACT(YEAR FROM {{ metric_query }})::INT < 0 THEN EXTRACT(YEAR FROM {{ metric_query }})::INT + 1 ELSE EXTRACT(YEAR FROM {{ metric_query }})::INT END))::VARCHAR, 4, ''0'') ELSE ABS((CASE WHEN EXTRACT(YEAR FROM {{ metric_query }})::INT < 0 THEN EXTRACT(YEAR FROM {{ metric_query }})::INT + 1 ELSE EXTRACT(YEAR FROM {{ metric_query }})::INT END))::VARCHAR END)) || TO_CHAR({{ metric_query }}, ''-MM-DD"T"HH24:MI:SS.US'') || ''000'''
|
|
630
|
+
max:
|
|
631
|
+
metric_query: MAX("{{ col_name }}")
|
|
632
|
+
metric_return_datatype: VARCHAR
|
|
633
|
+
metric_normalization: '(CASE WHEN (CASE WHEN EXTRACT(YEAR FROM {{ metric_query }})::INT < 0 THEN EXTRACT(YEAR FROM {{ metric_query }})::INT + 1 ELSE EXTRACT(YEAR FROM {{ metric_query }})::INT END) < 0 THEN ''-'' ELSE '''' END || (CASE WHEN ABS((CASE WHEN EXTRACT(YEAR FROM {{ metric_query }})::INT < 0 THEN EXTRACT(YEAR FROM {{ metric_query }})::INT + 1 ELSE EXTRACT(YEAR FROM {{ metric_query }})::INT END)) < 1000 THEN LPAD(ABS((CASE WHEN EXTRACT(YEAR FROM {{ metric_query }})::INT < 0 THEN EXTRACT(YEAR FROM {{ metric_query }})::INT + 1 ELSE EXTRACT(YEAR FROM {{ metric_query }})::INT END))::VARCHAR, 4, ''0'') ELSE ABS((CASE WHEN EXTRACT(YEAR FROM {{ metric_query }})::INT < 0 THEN EXTRACT(YEAR FROM {{ metric_query }})::INT + 1 ELSE EXTRACT(YEAR FROM {{ metric_query }})::INT END))::VARCHAR END)) || TO_CHAR({{ metric_query }}, ''-MM-DD"T"HH24:MI:SS.US'') || ''000'''
|
|
634
|
+
count_null:
|
|
635
|
+
metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
|
|
636
|
+
metric_return_datatype: BIGINT
|
|
637
|
+
|
|
622
638
|
TIMESTAMPTZ:
|
|
623
639
|
min:
|
|
624
640
|
metric_query: MIN("{{ col_name }}")
|
|
@@ -62,6 +62,7 @@ from snowflake.snowflake_data_validation.utils.constants import (
|
|
|
62
62
|
SchemaValidationFields,
|
|
63
63
|
)
|
|
64
64
|
from snowflake.snowflake_data_validation.utils.iceberg_dv_common import (
|
|
65
|
+
TIMESTAMP_AS_TEXT_KEY,
|
|
65
66
|
IcebergProfile,
|
|
66
67
|
resolve_iceberg_v2_compatible_source_normalization_key,
|
|
67
68
|
)
|
|
@@ -71,6 +72,7 @@ from snowflake.snowflake_data_validation.utils.interval_common import (
|
|
|
71
72
|
)
|
|
72
73
|
from snowflake.snowflake_data_validation.utils.iso_dv_common import (
|
|
73
74
|
get_paired_target_column_types,
|
|
75
|
+
is_snowflake_varchar_like_type,
|
|
74
76
|
)
|
|
75
77
|
from snowflake.snowflake_data_validation.utils.measure_collation import (
|
|
76
78
|
COUNT_DISTINCT_METRIC,
|
|
@@ -83,6 +85,7 @@ from snowflake.snowflake_data_validation.utils.model.table_context import TableC
|
|
|
83
85
|
|
|
84
86
|
LOGGER = logging.getLogger(__name__)
|
|
85
87
|
_REDSHIFT_NORMALIZED_COLLATION_TOKENS = ("COLLATE(", ", 'case_sensitive')")
|
|
88
|
+
_TIMESTAMP_BASE_TYPES = frozenset({CommonType.TIMESTAMP, CommonType.TIMESTAMP_WITHOUT_TIME_ZONE})
|
|
86
89
|
|
|
87
90
|
# Redshift ``TO_CHAR`` formats numbers with 64-bit arithmetic. A numeric format
|
|
88
91
|
# mask with N total digit placeholders (integer nines + fractional zeros) admits
|
|
@@ -752,6 +755,21 @@ class QueryGeneratorRedshift(QueryGeneratorBase):
|
|
|
752
755
|
raise ValueError(f"No normalization template found for data type {data_type} and no DEFAULT template available.")
|
|
753
756
|
return normalization_template
|
|
754
757
|
|
|
758
|
+
def _resolve_metrics_col_type(self, col, table_context: TableContext) -> str:
|
|
759
|
+
"""Key an Iceberg VARCHAR TIMESTAMP to the signed-year metrics (SNOW-4353618).
|
|
760
|
+
|
|
761
|
+
``TO_CHAR 'YYYY'`` drops the era, so MIN / MAX would not match the text
|
|
762
|
+
the UNLOAD staged. Native targets keep the shared TIMESTAMP template.
|
|
763
|
+
"""
|
|
764
|
+
col_type = super()._resolve_metrics_col_type(col, table_context)
|
|
765
|
+
if not IcebergProfile.from_table_context(table_context).is_active:
|
|
766
|
+
return col_type
|
|
767
|
+
if col_type.upper() not in _TIMESTAMP_BASE_TYPES:
|
|
768
|
+
return col_type
|
|
769
|
+
if not is_snowflake_varchar_like_type(get_paired_target_column_types(table_context).get(col.name)):
|
|
770
|
+
return col_type
|
|
771
|
+
return TIMESTAMP_AS_TEXT_KEY
|
|
772
|
+
|
|
755
773
|
def _resolve_normalization_templates(
|
|
756
774
|
self,
|
|
757
775
|
table_context: TableContext,
|
|
@@ -181,7 +181,13 @@ class ConnectorSnowflake(BaseConnector):
|
|
|
181
181
|
raise ConnectionError(f"Failed to establish Snowflake connection: {e}") from e
|
|
182
182
|
|
|
183
183
|
def _load_named_connection(self, connection_name: str) -> dict:
|
|
184
|
-
"""Load connection parameters from
|
|
184
|
+
"""Load connection parameters from connections.toml or config.toml.
|
|
185
|
+
|
|
186
|
+
Directories are searched in order (``~/.snowflake``, then the working
|
|
187
|
+
directory). Within one directory a ``connections.toml``, when it exists,
|
|
188
|
+
replaces ``config.toml``'s connections -- the rule
|
|
189
|
+
``snowflake.connector`` and the Snow CLI apply -- so this opens the same
|
|
190
|
+
definition of a name as ``snow sql`` and the test-runner's resolver.
|
|
185
191
|
|
|
186
192
|
Args:
|
|
187
193
|
connection_name: Name of the connection in the config file
|
|
@@ -193,40 +199,39 @@ class ConnectorSnowflake(BaseConnector):
|
|
|
193
199
|
typer.BadParameter: If connection not found or file doesn't exist
|
|
194
200
|
|
|
195
201
|
"""
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
LOGGER.warning("Failed to load config from %s: %s", config_path, e)
|
|
202
|
+
config_dirs = [Path.home() / ".snowflake", Path.cwd()]
|
|
203
|
+
searched: list[Path] = []
|
|
204
|
+
|
|
205
|
+
for config_dir in config_dirs:
|
|
206
|
+
connections_path = config_dir / "connections.toml"
|
|
207
|
+
config_path = connections_path if connections_path.exists() else config_dir / "config.toml"
|
|
208
|
+
searched.append(config_path)
|
|
209
|
+
if not config_path.exists():
|
|
210
|
+
continue
|
|
211
|
+
try:
|
|
212
|
+
config = toml.load(config_path)
|
|
213
|
+
# Check for nested structure (config.toml format): connections.name
|
|
214
|
+
if "connections" in config and connection_name in config["connections"]:
|
|
215
|
+
LOGGER.debug(
|
|
216
|
+
"Loaded connection '%s' from %s (nested)",
|
|
217
|
+
connection_name,
|
|
218
|
+
config_path,
|
|
219
|
+
)
|
|
220
|
+
return config["connections"][connection_name]
|
|
221
|
+
# Check for flat structure (connections.toml format): name
|
|
222
|
+
elif connection_name in config:
|
|
223
|
+
LOGGER.debug(
|
|
224
|
+
"Loaded connection '%s' from %s (flat)",
|
|
225
|
+
connection_name,
|
|
226
|
+
config_path,
|
|
227
|
+
)
|
|
228
|
+
return config[connection_name]
|
|
229
|
+
except Exception as e:
|
|
230
|
+
LOGGER.warning("Failed to load config from %s: %s", config_path, e)
|
|
226
231
|
|
|
227
232
|
raise typer.BadParameter(
|
|
228
|
-
f"Connection '{connection_name}' not found in
|
|
229
|
-
f"Searched locations: {', '.join(str(p) for p in
|
|
233
|
+
f"Connection '{connection_name}' not found in connections.toml or config.toml. "
|
|
234
|
+
f"Searched locations: {', '.join(str(p) for p in searched)}"
|
|
230
235
|
)
|
|
231
236
|
|
|
232
237
|
def _get_default_connection_params(self) -> dict:
|
|
@@ -249,6 +249,22 @@ VARCHAR_TIMESTAMP:
|
|
|
249
249
|
metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
|
|
250
250
|
metric_return_datatype: NUMBER
|
|
251
251
|
|
|
252
|
+
# Signed-year ISO text (Redshift Iceberg, SNOW-4353618): TRY_TO_TIMESTAMP_NTZ
|
|
253
|
+
# returns NULL for negative and 5+ digit years, so parse from parts like the
|
|
254
|
+
# Iceberg column comment's cast back (DMO iceberg_column_comment.py).
|
|
255
|
+
VARCHAR_TIMESTAMP_SIGNED:
|
|
256
|
+
min:
|
|
257
|
+
metric_query: 'MIN(TIMESTAMP_NTZ_FROM_PARTS(IFF(TRY_TO_NUMBER(REGEXP_SUBSTR(TO_VARCHAR(TRY_TO_DATE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+-[0-9]{2}-[0-9]{2})'', 1, 1, ''e'', 1)), ''YYYY-MM-DD''), ''^(-?[0-9]+)-'', 1, 1, ''e'', 1), 38, 0) = TRY_TO_NUMBER(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+)-'', 1, 1, ''e'', 1), 38, 0), TRY_TO_DATE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+-[0-9]{2}-[0-9]{2})'', 1, 1, ''e'', 1)), NULL), TRY_TO_TIME(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''T([0-9]{2}:[0-9]{2}:[0-9]{2}(\\.[0-9]+)?)'', 1, 1, ''e'', 1))))'
|
|
258
|
+
metric_return_datatype: VARCHAR
|
|
259
|
+
metric_normalization: TO_CHAR({{ metric_query }}, 'YYYY-MM-DD"T"HH24:MI:SS.FF9')
|
|
260
|
+
max:
|
|
261
|
+
metric_query: 'MAX(TIMESTAMP_NTZ_FROM_PARTS(IFF(TRY_TO_NUMBER(REGEXP_SUBSTR(TO_VARCHAR(TRY_TO_DATE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+-[0-9]{2}-[0-9]{2})'', 1, 1, ''e'', 1)), ''YYYY-MM-DD''), ''^(-?[0-9]+)-'', 1, 1, ''e'', 1), 38, 0) = TRY_TO_NUMBER(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+)-'', 1, 1, ''e'', 1), 38, 0), TRY_TO_DATE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+-[0-9]{2}-[0-9]{2})'', 1, 1, ''e'', 1)), NULL), TRY_TO_TIME(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''T([0-9]{2}:[0-9]{2}:[0-9]{2}(\\.[0-9]+)?)'', 1, 1, ''e'', 1))))'
|
|
262
|
+
metric_return_datatype: VARCHAR
|
|
263
|
+
metric_normalization: TO_CHAR({{ metric_query }}, 'YYYY-MM-DD"T"HH24:MI:SS.FF9')
|
|
264
|
+
count_null:
|
|
265
|
+
metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
|
|
266
|
+
metric_return_datatype: NUMBER
|
|
267
|
+
|
|
252
268
|
# Order by UTC time-of-day. A plain MIN of the parsed instant uses today's date
|
|
253
269
|
# and can cross midnight, so the formatted value would keep the wrong offset.
|
|
254
270
|
VARCHAR_TIME_TZ:
|
|
@@ -11,20 +11,22 @@ NUMBER: TO_CHAR("{{ col_name }}", '{{ numeric_format_mask }}')
|
|
|
11
11
|
# truncates the same way on every engine; a CAST to TIME(p) would round.
|
|
12
12
|
TIME: LEFT(TO_CHAR("{{ col_name }}", 'HH24:MI:SS.FF9'), {{ time_text_length }})
|
|
13
13
|
TIME WITH TIME ZONE: LEFT(TO_CHAR("{{ col_name }}", 'HH24:MI:SS.FF9'), {{ time_text_length }})
|
|
14
|
-
|
|
14
|
+
# Typed Snowflake timestamps. The fractional-second digits are the Iceberg Parquet
|
|
15
|
+
# format version (v2 micro FF6 / v3 nano FF9), substituted at render from
|
|
16
|
+
# resolve_iceberg_fraction_digits; non-Iceberg paths default to FF9.
|
|
17
|
+
TIMESTAMP_LTZ: TO_CHAR("{{ col_name }}", 'YYYY-MM-DD"T"HH24:MI:SS.FF{{ fraction_digits }}')
|
|
15
18
|
# Paired Oracle TIMESTAMP WITH LOCAL TIME ZONE: compare the retained instant in UTC.
|
|
16
|
-
TIMESTAMP_LTZ_UTC: TO_CHAR(CONVERT_TIMEZONE('UTC', "{{ col_name }}"), 'YYYY-MM-DD"T"HH24:MI:SS.
|
|
17
|
-
TIMESTAMP_NTZ: TO_CHAR("{{ col_name }}", 'YYYY-MM-DD"T"HH24:MI:SS.
|
|
18
|
-
TIMESTAMP_TZ: REGEXP_REPLACE(TO_CHAR("{{ col_name }}", 'YYYY-MM-DD"T"HH24:MI:SS.
|
|
19
|
+
TIMESTAMP_LTZ_UTC: TO_CHAR(CONVERT_TIMEZONE('UTC', "{{ col_name }}"), 'YYYY-MM-DD"T"HH24:MI:SS.FF{{ fraction_digits }}')
|
|
20
|
+
TIMESTAMP_NTZ: TO_CHAR("{{ col_name }}", 'YYYY-MM-DD"T"HH24:MI:SS.FF{{ fraction_digits }}')
|
|
21
|
+
TIMESTAMP_TZ: REGEXP_REPLACE(TO_CHAR("{{ col_name }}", 'YYYY-MM-DD"T"HH24:MI:SS.FF{{ fraction_digits }}TZH:TZM'), 'Z$', '+00:00')
|
|
19
22
|
# Paired PostgreSQL timestamptz: compare UTC instants (Oracle/Teradata use TIMESTAMP_TZ).
|
|
20
|
-
TIMESTAMP_TZ_UTC: TO_CHAR(CONVERT_TIMEZONE('UTC', "{{ col_name }}"), 'YYYY-MM-DD"T"HH24:MI:SS.
|
|
21
|
-
VARCHAR_ISO_TZ: REGEXP_REPLACE(TO_CHAR(TRY_TO_TIMESTAMP_TZ(TRIM("{{ col_name }}")), 'YYYY-MM-DD"T"HH24:MI:SS.
|
|
23
|
+
TIMESTAMP_TZ_UTC: TO_CHAR(CONVERT_TIMEZONE('UTC', "{{ col_name }}"), 'YYYY-MM-DD"T"HH24:MI:SS.FF{{ fraction_digits }}') || '+00:00'
|
|
24
|
+
VARCHAR_ISO_TZ: REGEXP_REPLACE(TO_CHAR(TRY_TO_TIMESTAMP_TZ(TRIM("{{ col_name }}")), 'YYYY-MM-DD"T"HH24:MI:SS.FF{{ fraction_digits }}TZH:TZM'), 'Z$', '+00:00')
|
|
22
25
|
# Canonical UTC-instant form for every Snowflake TIMESTAMP_LTZ mirror of a
|
|
23
26
|
# UTC-instant TIMESTAMPTZ source (Redshift / PostgreSQL), reached from either
|
|
24
27
|
# the native path (iceberg_spec and storage_mode both None, target
|
|
25
28
|
# TIMESTAMP_LTZ / TIMESTAMP_LTZ(6) / TIMESTAMP_LTZ(9)) or the Iceberg v2
|
|
26
|
-
# compatible overlay (TIMESTAMP_LTZ(6)).
|
|
27
|
-
# FF9-padded +00:00 string.
|
|
29
|
+
# compatible overlay (TIMESTAMP_LTZ(6)). Always FF9-padded +00:00 on both sides.
|
|
28
30
|
TIMESTAMP_LTZ_UTC_FF9_OFFSET: TO_CHAR(CONVERT_TIMEZONE('UTC', "{{ col_name }}"), 'YYYY-MM-DD"T"HH24:MI:SS.FF9') || '+00:00'
|
|
29
31
|
# Complex values flattened to VARCHAR under Iceberg compatible DDL retain the
|
|
30
32
|
# exact Redshift JSON_SERIALIZE text staged by UNLOAD. Compare that migration
|