snowflake-data-validation 1.40.0__tar.gz → 1.41.0__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.40.0 → snowflake_data_validation-1.41.0}/.gitignore +3 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/PKG-INFO +26 -1
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/README.md +25 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_cell_validation_data_select.sql.j2 +1 -1
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_md5_select.sql.j2 +8 -8
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/query/query_generator_azure_synapse.py +45 -7
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_cell_validation_data_select.sql.j2 +1 -1
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_column_metrics_templates.yaml +1 -1
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_get_columns_metadata.sql.j2 +1 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_md5_select.sql.j2 +1 -1
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_table_metadata_query.sql.j2 +5 -3
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/bigquery/query/query_generator_bigquery.py +52 -4
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_get_columns_metadata.sql.j2 +3 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_table_metadata_query.sql.j2 +3 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/query/query_generator_db2.py +15 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/executer/executor_factory.py +22 -1
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/extractor/sql_queries_template_generator.py +9 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/extractor/metadata_extractor_oracle.py +2 -2
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_cell_validation_data_select.sql.j2 +1 -1
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_column_metrics_templates.yaml +5 -5
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_datatypes_normalization_templates.yaml +2 -1
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_get_columns_metadata.sql.j2 +3 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_md5_select.sql.j2 +1 -1
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_table_metadata_query.sql.j2 +3 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/oracle_iso_normalization.py +15 -3
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/query/query_generator_oracle.py +89 -2
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/query/float_bit_normalization.py +33 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/query/numeric_scale_resolution.py +10 -58
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/query/query_generator_base.py +19 -61
- snowflake_data_validation-1.41.0/src/snowflake/snowflake_data_validation/query/sql_type_families.py +92 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_datatypes_normalization_templates.yaml +1 -1
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/l3/pushdown_diff_sql.py +2 -1
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_table_metadata_query.sql.j2 +4 -1
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_cell_validation_data_select.sql.j2 +1 -1
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_compute_md5_sql.j2 +11 -11
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_md5_select.sql.j2 +8 -8
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/query/charset_normalization.py +10 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/query/query_generator_sqlserver.py +44 -8
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_datatypes_normalization_templates.yaml +1 -1
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/iso_dv_common.py +11 -2
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/measure_collation.py +15 -4
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/data_validator_base.py +45 -5
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Teradata/test_query_generator_teradata.py +4 -1
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/azure_synapse/test_azure_synapse_row_queries.py +130 -2
- snowflake_data_validation-1.41.0/tests/unit/bigquery/test_bigquery_l1_string_length.py +37 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/bigquery/test_query_generator_bigquery.py +142 -2
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/db2/test_db2_query_generator.py +129 -1
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/oracle/test_oracle_iso_normalization.py +17 -3
- snowflake_data_validation-1.41.0/tests/unit/oracle/test_oracle_metadata_extractor.py +238 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/oracle/test_oracle_query_generator.py +181 -4
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/sqlite/test_metadata_query_template_sqlite.py +8 -6
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/sqlserver/test_sqlserver_row_queries.py +213 -2
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_charset_normalization.py +12 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_data_validator.py +68 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_executor_factory.py +18 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_float_bit_canonical.py +14 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_iso_dv_common.py +20 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_l2_collation_metadata.py +23 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_pushdown_diff_sql.py +12 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_query_generator_numeric_scale.py +35 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_sql_literal_jinja_filter.py +26 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_sqlserver_multi_version_support.py +4 -1
- snowflake_data_validation-1.40.0/tests/unit/oracle/test_oracle_metadata_extractor.py +0 -110
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/LICENSE +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/docs/README.md +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/pyproject.toml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/azure_synapse_arguments_manager.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_azure_synapse.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_factory_azure_synapse.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/metadata_extractor_azure_synapse.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/model/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/model/azure_synapse_credentials_connection.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/query/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/script_writer_azure_synapse.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/bigquery/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/bigquery/query/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/comparison_orchestrator.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/configuration/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/configuration/configuration_loader.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/configuration/model/configuration_model.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/configuration/model/connection_types.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/configuration/model/connections/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/configuration/model/logging_configuration.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/configuration/model/table_configuration.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/configuration/model/validation_configuration.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/configuration/model/view_configuration.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/configuration/singleton.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/connector/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/connector/connector_base.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/connector/connector_factory_base.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/connector/connector_failure_tracker.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/extractor/metadata_extractor_db2.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/query/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/script_writer/script_writer_db2.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/executer/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/executer/async_generation_executor.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/executer/async_validation_executor.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/executer/base_validation_executor.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/executer/extractor_types.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/executer/source_validation_executor.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/executer/sync_validation_executor.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/extractor/metadata_extractor_base.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/oracle_bfile.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/oracle_lob_normalization.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/oracle_vector_extraction.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/query/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/script_writer/script_writer_oracle.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/html_report_builder.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/report_metadata.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/orchestration/parallel_execution_engine.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/orchestration/table_metadata_processor.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/orchestration/validation_progress_reporter.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/orchestration/view_preprocessor.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/connector/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_factory_postgresql.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_postgresql.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/metadata_extractor_postgresql.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_concatenated_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_concatenated_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_md5_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/model/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/model/postgresql_credentials_connection.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/postgresql_arguments_manager.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/postgresql_tz_normalization.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/query/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/query/query_generator_postgresql.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/script_writer/script_writer_postgresql.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/DATA_VALIDATION_API_OVERVIEW.md +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/_internal.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/_teradata_internal.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/async_mode/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/async_mode/file_loader.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/async_mode/script_writer.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/cli/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/cli/commands.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/configuration/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/connectors/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/context/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/data_validation_api.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/enums/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/execution/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/execution/query_executor.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/generators/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/metadata/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/model/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/model/data_validation_exception.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/model/generated_query.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/model/metrics_result_shape.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/model/query_execution_result.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/model/query_generator_factory.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/model/result_set.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/model/validation_progress_callback.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/model/validation_result.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/query_generation/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/query_generation/metadata_queries.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/query_generation/row_validation_queries.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/query_generation/schema_metrics_queries.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/query_validation/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/query_validation/query_comparison.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/reshape/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/reshape/metrics_reshape.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/result_set_validation/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/result_set_validation/result_set_comparison.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/snapshot/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_generation.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_validation.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/utils/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/utils/helpers.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/validation/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/validation/cell_validation.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/validation/metrics_validation.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/validation/row_validation.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/validation/schema_validation.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/query/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/query/chunk_md5_tiered.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_modifiers.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/query/query/query_generator_query.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/query/query_arguments_manager.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/query/vector_element_kind.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/connector/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/connector/connector_factory_redshift.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/connector/connector_redshift.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/metadata_extractor_redshift.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/model/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/model/redshift_credentials_connection.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/query/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/query/query_generator_redshift.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/redshift_arguments_manager.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/redshift_super_normalization.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/script_writer/script_writer_redshift.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/snowflake_to_result_set_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/result_set/query/query_generator_result_set.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/result_set/result_set_arguments_manager.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/script_writer/script_writer_base.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_factory_snowflake.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_snowflake.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/metadata_extractor_snowflake.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_concatenated_template.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_md5_template.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_case_sensitive_columns.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_temporary_table_from_view_template.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/l3/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/l3/signature_external_table.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/l3/warm_start.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/model/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_credentials_connection.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_default_connection.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_named_connection.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/query/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/query/query_generator_snowflake.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/script_writer/script_writer_snowflake.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/snowflake_arguments_manager.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/connector/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_factory_sqlite.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_sqlite.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/metadata_extractor_sqlite.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_compute_md5_sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_sqlite_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/model/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/model/sqlite_connection.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/query/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/query/query_generator_sqlite.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/script_writer/script_writer_sqlite.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_factory_sql_server.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_sql_server.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/metadata_extractor_sqlserver.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_temporary_table_internal_identifier_template.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_temporary_table_from_view_template.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/model/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/model/sqlserver_credentials_connection.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/query/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/script_writer_sqlserver.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_arguments_manager.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/table_partitioning_strategy.md +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/connector/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/connector/connector_factory_teradata.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/connector/connector_teradata.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/metadata_extractor_teradata.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_compute_md5_sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_concatenated.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_md5.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/model/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/model/teradata_credentials_connection.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/query/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/query/query_generator_teradata.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/script_writer/script_writer_teradata.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/teradata_arguments_manager.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/teradata_iso_normalization.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/arguments_manager_base.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/arguments_manager_factory.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/base_output_handler.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/catalog_column_size.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/column_grouping.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/column_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_editor.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_generator.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_synchronizer.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/connection_pool.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/connector_factory.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/console_output_handler.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/constants.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/context.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/cpu_optimizer.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/helper.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_database.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_dataframe.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_io.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_misc.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_polars_cast.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_query_result.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_templates.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/iceberg_dv_common.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/index_key_format.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/interval_common.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/logging_config.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/logging_utils.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/model/chunk.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/model/column_metadata.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/model/custom_templates.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/model/table_column_metadata.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/model/table_context.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/model/templates_loader_manager.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/progress_reporter.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/qvci_fallback.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/row_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/run_context.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/semi_structured_json_canonicalization.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/shutdown_coordinator.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/snapshot_validation_statements.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/telemetry.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/templates/configuration_file_templates.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/teradata_string_rtrim.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/thread_safe_singleton.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/validation_utils.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/vector_common.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/vector_normalization.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/accepted_transformation.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/cell_data_validator.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/comparison_codec.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/dataframe_validator_base.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/metrics_data_validator.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/metrics_tolerance.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/base.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/db2.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/redshift.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/registry.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/snowflake.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlite.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlserver.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/teradata.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/query_validator.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/result_set_validator.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/results_summary_report.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/row_data_validator.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/row_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/schema_data_validator.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/validation_database/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/validation_database/sqlite_validation_connection.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/validation_database/validation_database_connection_base.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/validation_database_manager.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/validation_execution_context.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/validation_report_status.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/.coveragerc +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/conftest.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/integration/.coveragerc +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/integration/Redshift/test_metadata_extractor_integration.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/integration/test_async_generation_integration.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/integration/test_async_validation_integration.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/integration/test_reference_integration.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/integration/test_source_validation_integration.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/integration/test_sync_validation_integration.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Postgresql/test_postgresql_collation.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Postgresql/test_postgresql_numeric_leading_zero.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Postgresql/test_postgresql_spatial_templates.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Redshift/model/test_redshift_credentials_connection.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Redshift/query/test_query_generator_redshift.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Redshift/script_writer/test_script_writer_redshift.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Redshift/test_connector_redshift.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Redshift/test_redshift_arguments_manager.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Redshift/test_redshift_collation.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Redshift/test_redshift_hllsketch_templates.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Redshift/test_redshift_spatial_templates.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Redshift/test_redshift_super_normalization.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Redshift/test_redshift_varchar_count_distinct.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Teradata/test_connector_teradata.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Teradata/test_metadata_extractor_teradata.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Teradata/test_teradata_collation.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Teradata/test_teradata_row_md5_select_template.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Teradata/test_teradata_spatial_templates.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Teradata/test_teradata_view_generate_boundary.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Teradata/test_teradata_view_l1_metadata_templates.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/assets/custom_templates_loader/snowflake_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/assets/custom_templates_loader/snowflake_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/assets/custom_templates_loader/snowflake_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/assets/test_configuration_loader/test_load_configuration_model/conf.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/assets/test_configuration_loader/test_load_configuration_model_reading_file_exception/conf.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/assets/test_helpers/dummy_configuration_file.json +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/assets/test_helpers/dummy_connection_source_db.toml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/assets/test_helpers/dummy_datatypes_normalization_template.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/assets/test_helpers/dummy_datatypes_template.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/assets/test_helpers/dummy_metrics_template.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/assets/test_helpers/dummy_metrics_template_datatypes.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/assets/test_helpers/dummy_template.csv +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/assets/test_helpers/not_valid_format.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/assets/test_templates_loader_manager/snowflake_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/assets/test_templates_loader_manager/snowflake_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/azure_synapse/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/azure_synapse/test_azure_synapse_credentials_connection.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/azure_synapse/test_azure_synapse_metadata_extractor.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/azure_synapse/test_azure_synapse_metrics_templates.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/azure_synapse/test_azure_synapse_query_generator.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/azure_synapse/test_connector_azure_synapse.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/azure_synapse/test_connector_factory_azure_synapse.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/bigquery/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/bigquery/test_bigquery_spatial_templates.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/bigquery/test_query_generator_factory_bigquery.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/db2/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/db2/test_db2_metadata_extractor.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/db2/test_db2_registration.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/oracle/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/oracle/test_metadata_extractor_oracle_vector.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/oracle/test_oracle_lob_dv_generation.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/oracle/test_oracle_lob_normalization.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/oracle/test_oracle_metrics_templates.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/oracle/test_oracle_normalization_templates.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/oracle/test_oracle_query_modifiers.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/oracle/test_oracle_type_mappings.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/query/test_chunk_md5_tiered.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/snowflake/test_snowflake_spatial_metrics_templates.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/sqlite/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/sqlite/test_connector_factory_sqlite.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/sqlite/test_connector_sqlite.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/sqlite/test_metadata_extractor_sqlite.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/sqlite/test_query_generator_sqlite.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/sqlite/test_script_writer_sqlite.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/sqlserver/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/sqlserver/test_connector_factory_sql_server.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/sqlserver/test_metadata_extractor_sqlserver_vector.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/sqlserver/test_sqlserver_l1_catalog.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/sqlserver/test_sqlserver_row_count_overflow.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/sqlserver/test_sqlserver_spatial_l1_metadata.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/sqlserver/test_sqlserver_spatial_metrics_templates.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_accepted_transformation.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_arguments_manager_base.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_arguments_manager_factory.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_batched_metrics_queries.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_boolean_binary_canonical_templates.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_catalog_column_size.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_cell_data_validator.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_cell_validation_query_generation.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_column_grouping.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_column_metadata.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_column_normalization_override.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_column_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_comparison_codec.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_comparison_orchestrator.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_configuration_file_editor.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_configuration_file_generator.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_configuration_file_synchronizer.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_configuration_loader.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_configuration_model.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_connection_pool.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_connector_failure_tracker.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_connector_snowflake.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_cpu_optimizer.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_custom_templates_models.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_escape_odbc_value.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_float_canonical_templates.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_get_configuration_file.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_get_target_cols.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_helper_dataframe.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_helper_polars_cast.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_helpers.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_html_report_builder.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_iceberg_dv_l3_normalization.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_index_key_format.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_internal_helpers.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_interval_common.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_logging_config.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_metric_identifier_rendering.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_metrics_reshape.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_metrics_result_shape.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_metrics_templates_casts.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_metrics_tolerance.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_normalize_shape_aware.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_numeric_scale_resolution.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_platform_bridge.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_postgresql_normalization_templates.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_postgresql_tz_normalization.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_query_cell_level_validation.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_query_metrics_level_validation.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_query_to_dataframe.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_query_validator.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_qvci_fallback.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_qvci_fallback_na_skip.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_qvci_fallback_triggers.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_report_metadata.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_result_set_cell_level_validation.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_result_set_column_metrics_validation.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_result_set_snapshot_generation.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_result_set_snapshot_validation.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_result_set_to_dataframe.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_result_set_validator.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_row_count_bigint_overflow.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_row_data_validator.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_row_hash_column_delimiter.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_row_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_row_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_schema_column_selection.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_shutdown_coordinator.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_signature_external_table.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_signature_row_md5_query.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_snapshot_validation_statements.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_snowflake_arguments_manager.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_snowflake_binary_normalization_templates.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_snowflake_redshift_super_size_guard.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_source_validation_executor.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_spatial_wkt_canonicalization.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_sql_catalog_template_guard.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_sqlite_validation_connection.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_sqlserver_arguments_manager.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_sync_executor_qvci_fallback.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_sync_validation_executor.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_table_column_metadata_model.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_table_configuration.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_table_context.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_table_metadata_processor.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_table_snapshot_generation.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_table_snapshot_validation.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_target_platform_factory.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_telemetry.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_templates_loader_manager.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_teradata_iso_normalization.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_teradata_string_rtrim_policy.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_teradata_timetz_metric_domain.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_timestamp_golden_vectors.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_validation_configuration.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_validation_database_connection.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_validation_execution_context.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_validation_progress_reporter.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_validation_report_status.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_validation_templates_dto.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_vector_bit_normalization.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_vector_common.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_vector_normalization.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_view_configuration.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_warm_start.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/utils/__init__.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/utils/test_constants.py +0 -0
- {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/utils/test_semi_structured_json_canonicalization.py +0 -0
|
@@ -233,6 +233,9 @@ requirements-dev.lock
|
|
|
233
233
|
# E2E test session config (contains credentials)
|
|
234
234
|
e2e-tests/config.yaml
|
|
235
235
|
|
|
236
|
+
# E2E Logs
|
|
237
|
+
e2e-tests/e2e-logs/
|
|
238
|
+
|
|
236
239
|
# 1Password integration test config (contains account/user identifiers)
|
|
237
240
|
shared/tests/secret_managers/integration/connections.toml
|
|
238
241
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: snowflake-data-validation
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.41.0
|
|
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/
|
|
@@ -188,6 +188,31 @@ For configuration options and examples, see the [official documentation](https:/
|
|
|
188
188
|
|
|
189
189
|
## Changelog
|
|
190
190
|
|
|
191
|
+
### v1.41.0
|
|
192
|
+
|
|
193
|
+
**Improvements**
|
|
194
|
+
|
|
195
|
+
- Normalized SQL Server and Synapse text comparisons to use binary collation ordering.
|
|
196
|
+
- Normalized Oracle text comparisons with `COLLATE BINARY` and `ORA-00904` fallback.
|
|
197
|
+
- Added DB2 collation metadata capture for L1 reporting.
|
|
198
|
+
- Normalized BigQuery text comparisons with deterministic binary semantics.
|
|
199
|
+
- Removed legacy dual-cursor row-hash compare path from hybrid L3.
|
|
200
|
+
- Improved `FLOAT` and encoded text display in L3 cell validation results.
|
|
201
|
+
|
|
202
|
+
**Bug fixes**
|
|
203
|
+
|
|
204
|
+
- Fixed Oracle `TIMESTAMP WITH LOCAL TIME ZONE` extraction failing with `ORA-01821`.
|
|
205
|
+
- Fixed rows with `NULL` validation key being reported as `NOT_FOUND` on both sides.
|
|
206
|
+
- Fixed digit-only hybrid cell keys not being quoted for character columns.
|
|
207
|
+
- Fixed Teradata `PERIOD(DATE)` comparison using session-sensitive cast instead of deterministic `TO_CHAR`.
|
|
208
|
+
|
|
209
|
+
### v1.40.1
|
|
210
|
+
|
|
211
|
+
**Bug fixes**
|
|
212
|
+
|
|
213
|
+
- Fixed L1 metadata reporting for unbounded string types on SQLite and BigQuery to use correct source capacity values.
|
|
214
|
+
- Fixed L1 character-length capacity comparison to report source-larger-than-target as a warning instead of a failure.
|
|
215
|
+
|
|
191
216
|
### v1.40.0
|
|
192
217
|
|
|
193
218
|
**New features**
|
|
@@ -99,6 +99,31 @@ For configuration options and examples, see the [official documentation](https:/
|
|
|
99
99
|
|
|
100
100
|
## Changelog
|
|
101
101
|
|
|
102
|
+
### v1.41.0
|
|
103
|
+
|
|
104
|
+
**Improvements**
|
|
105
|
+
|
|
106
|
+
- Normalized SQL Server and Synapse text comparisons to use binary collation ordering.
|
|
107
|
+
- Normalized Oracle text comparisons with `COLLATE BINARY` and `ORA-00904` fallback.
|
|
108
|
+
- Added DB2 collation metadata capture for L1 reporting.
|
|
109
|
+
- Normalized BigQuery text comparisons with deterministic binary semantics.
|
|
110
|
+
- Removed legacy dual-cursor row-hash compare path from hybrid L3.
|
|
111
|
+
- Improved `FLOAT` and encoded text display in L3 cell validation results.
|
|
112
|
+
|
|
113
|
+
**Bug fixes**
|
|
114
|
+
|
|
115
|
+
- Fixed Oracle `TIMESTAMP WITH LOCAL TIME ZONE` extraction failing with `ORA-01821`.
|
|
116
|
+
- Fixed rows with `NULL` validation key being reported as `NOT_FOUND` on both sides.
|
|
117
|
+
- Fixed digit-only hybrid cell keys not being quoted for character columns.
|
|
118
|
+
- Fixed Teradata `PERIOD(DATE)` comparison using session-sensitive cast instead of deterministic `TO_CHAR`.
|
|
119
|
+
|
|
120
|
+
### v1.40.1
|
|
121
|
+
|
|
122
|
+
**Bug fixes**
|
|
123
|
+
|
|
124
|
+
- Fixed L1 metadata reporting for unbounded string types on SQLite and BigQuery to use correct source capacity values.
|
|
125
|
+
- Fixed L1 character-length capacity comparison to report source-larger-than-target as a warning instead of a failure.
|
|
126
|
+
|
|
102
127
|
### v1.40.0
|
|
103
128
|
|
|
104
129
|
**New features**
|
|
@@ -10,5 +10,5 @@
|
|
|
10
10
|
{{ qm.render_from_clause(query_modifiers, fully_qualified_name, 't') }}
|
|
11
11
|
{% if has_where_clause %} WHERE {{ where_clause }} {% endif %}
|
|
12
12
|
{% if order_by_columns %}
|
|
13
|
-
ORDER BY {% for c in order_by_columns %}
|
|
13
|
+
ORDER BY {% for c in order_by_columns %} {{ order_by_collation_expressions.get(c, '"' ~ c ~ '"') }}{% if not loop.last %}, {% endif %}{% endfor %}
|
|
14
14
|
{% endif %}
|
|
@@ -1,32 +1,32 @@
|
|
|
1
1
|
{% import 'query_modifiers.sql.j2' as qm with context %}
|
|
2
2
|
{{ qm.locking_prefix(query_modifiers) }}SELECT
|
|
3
3
|
{% for index_column in index_column_collection %}
|
|
4
|
-
|
|
4
|
+
{{ (index_column.name ~ '_IDX') | tsql_quote_identifier }} AS {{ index_column.name | tsql_quote_identifier }},
|
|
5
5
|
{% endfor %}
|
|
6
6
|
UPPER(CONVERT(VARCHAR(32), HASHBYTES('MD5',
|
|
7
7
|
{% if use_column_groups %}
|
|
8
8
|
{% for group in column_groups %}
|
|
9
9
|
{% if not loop.first %} + {% endif %}
|
|
10
10
|
UPPER(CONVERT(VARCHAR(32), HASHBYTES('MD5', CAST(CONCAT(
|
|
11
|
-
{% for col in group %}
|
|
11
|
+
{% for col in group %}{{ col.name | tsql_quote_identifier }}{{ row_hash_collation_suffix }}{% if not loop.last %}, '{{ row_hash_column_delimiter }}'{{ row_hash_collation_suffix }}, {% endif %}{% endfor %}
|
|
12
12
|
) AS VARCHAR(MAX))), 2))
|
|
13
13
|
{% endfor %}
|
|
14
14
|
{% elif column_collection|length > 1 %}
|
|
15
|
-
CAST(CONCAT({{
|
|
15
|
+
CAST(CONCAT({% for column in column_collection %}{{ column.name | tsql_quote_identifier }}{{ row_hash_collation_suffix }}{% if not loop.last %}, '{{ row_hash_column_delimiter }}'{{ row_hash_collation_suffix }}, {% endif %}{% endfor %}) AS VARCHAR(MAX))
|
|
16
16
|
{% else %}
|
|
17
|
-
CAST({{
|
|
17
|
+
CAST({{ column_collection[0].name | tsql_quote_identifier }} AS VARCHAR(MAX))
|
|
18
18
|
{% endif %}
|
|
19
19
|
), 2)) AS ROW_MD5
|
|
20
20
|
FROM
|
|
21
21
|
(SELECT{{ qm.render_select_modifier(query_modifiers, 'src') }}
|
|
22
22
|
{% for index_column in index_column_collection %}
|
|
23
|
-
{{ datatypes_normalization_renderer_templates[index_column.name] }} AS
|
|
23
|
+
{{ datatypes_normalization_renderer_templates[index_column.name] }} AS {{ (index_column.name ~ '_IDX') | tsql_quote_identifier }},
|
|
24
24
|
{% endfor %}
|
|
25
25
|
{% for column in column_collection %}
|
|
26
26
|
{% if column.nullable %}
|
|
27
|
-
coalesce({{ datatypes_normalization_renderer_templates[column.name] }}, '{{ null_hashing_sentinel }}') AS
|
|
27
|
+
coalesce({{ datatypes_normalization_renderer_templates[column.name] }}, '{{ null_hashing_sentinel }}') AS {{ column.name | tsql_quote_identifier }}{% if not loop.last %},{% endif %}
|
|
28
28
|
{% else %}
|
|
29
|
-
{{ datatypes_normalization_renderer_templates[column.name] }} AS
|
|
29
|
+
{{ datatypes_normalization_renderer_templates[column.name] }} AS {{ column.name | tsql_quote_identifier }}{% if not loop.last %},{% endif %}
|
|
30
30
|
{% endif %}
|
|
31
31
|
{% endfor %}
|
|
32
32
|
{{ qm.render_from_clause(query_modifiers, fully_qualified_name, 'src') }}
|
|
@@ -34,5 +34,5 @@ FROM
|
|
|
34
34
|
) AS RW
|
|
35
35
|
{% if order_by_columns %}
|
|
36
36
|
{# T-SQL does not support the NULLS FIRST keyword; under ASC it already sorts NULLs first, matching NULL_KEY (sentinel sorts first) in the streaming merge-join. #}
|
|
37
|
-
ORDER BY {% for c in order_by_columns %}
|
|
37
|
+
ORDER BY {% for c in order_by_columns %}{{ order_by_collation_expressions.get(c, (c ~ '_IDX') | tsql_quote_identifier) }}{% if not loop.last %}, {% endif %}{% endfor %}
|
|
38
38
|
{% endif %}
|
|
@@ -42,11 +42,14 @@ from snowflake.snowflake_data_validation.query.query_generator_base import (
|
|
|
42
42
|
QueryGeneratorBase,
|
|
43
43
|
resolve_table_context_modifiers,
|
|
44
44
|
)
|
|
45
|
+
from snowflake.snowflake_data_validation.sqlserver.query.charset_normalization import (
|
|
46
|
+
SqlServerCharacterSetResolver,
|
|
47
|
+
)
|
|
45
48
|
from snowflake.snowflake_data_validation.utils.constants import (
|
|
46
49
|
Platform,
|
|
47
50
|
)
|
|
48
51
|
from snowflake.snowflake_data_validation.utils.measure_collation import (
|
|
49
|
-
|
|
52
|
+
TSQL_NORMALIZED_COLLATION_SUFFIX,
|
|
50
53
|
tsql_measure_collation_tokens,
|
|
51
54
|
)
|
|
52
55
|
from snowflake.snowflake_data_validation.utils.model.table_context import TableContext
|
|
@@ -77,17 +80,30 @@ class QueryGeneratorAzureSynapse(QueryGeneratorBase):
|
|
|
77
80
|
|
|
78
81
|
def __init__(self) -> None:
|
|
79
82
|
"""Initialize the Azure Synapse query generator."""
|
|
80
|
-
super().__init__(
|
|
83
|
+
super().__init__(
|
|
84
|
+
platform=Platform.AZURE_SYNAPSE,
|
|
85
|
+
character_set_resolver=SqlServerCharacterSetResolver(),
|
|
86
|
+
)
|
|
81
87
|
|
|
82
88
|
def _measure_collation_tokens(self, column, metric_name: str) -> tuple[str, str]:
|
|
83
89
|
return tsql_measure_collation_tokens(
|
|
90
|
+
Platform.AZURE_SYNAPSE,
|
|
84
91
|
column,
|
|
85
92
|
metric_name,
|
|
86
|
-
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
def _comparison_collation_tokens(self, column) -> tuple[str, str]:
|
|
96
|
+
return tsql_measure_collation_tokens(
|
|
97
|
+
Platform.AZURE_SYNAPSE,
|
|
98
|
+
column,
|
|
99
|
+
"count_distinct",
|
|
87
100
|
)
|
|
88
101
|
|
|
89
102
|
def _float_column_reference(self, column) -> str:
|
|
90
|
-
return f'"{column
|
|
103
|
+
return f'"{self._normalization_column_name(column)}"'
|
|
104
|
+
|
|
105
|
+
def _normalization_column_name(self, column) -> str:
|
|
106
|
+
return str(column.name).replace('"', '""')
|
|
91
107
|
|
|
92
108
|
def build_float_bit_shim(self, column, col_ref: str) -> str:
|
|
93
109
|
value_expr = float_bit_input_expr(
|
|
@@ -115,7 +131,8 @@ class QueryGeneratorAzureSynapse(QueryGeneratorBase):
|
|
|
115
131
|
|
|
116
132
|
datatypes_normalization_templates = table_context.templates_loader_manager.datatypes_normalization_templates
|
|
117
133
|
rendered: dict[str, str] = {}
|
|
118
|
-
|
|
134
|
+
renderer_columns = self._row_md5_normalization_columns(table_context)
|
|
135
|
+
for column in renderer_columns:
|
|
119
136
|
lookup_key = (column.data_type or "").strip().upper()
|
|
120
137
|
normalization_template = self._lookup_normalization_template(
|
|
121
138
|
datatypes_normalization_templates,
|
|
@@ -135,12 +152,27 @@ class QueryGeneratorAzureSynapse(QueryGeneratorBase):
|
|
|
135
152
|
column_normalization_map,
|
|
136
153
|
)
|
|
137
154
|
rendered[column.name] = self._render_normalization_template(normalization_template, column)
|
|
138
|
-
|
|
155
|
+
rendered = apply_text_codec_to_renderer_templates(
|
|
139
156
|
self.platform,
|
|
140
157
|
rendered,
|
|
141
158
|
column_codec_map,
|
|
142
|
-
|
|
159
|
+
renderer_columns,
|
|
143
160
|
)
|
|
161
|
+
return {
|
|
162
|
+
column.name: (
|
|
163
|
+
rendered[column.name]
|
|
164
|
+
if self._codec_skips_comparison_collation(column_codec_map, column)
|
|
165
|
+
else self.wrap_compare_expr(
|
|
166
|
+
self.character_set_resolver.wrap_for_comparison(
|
|
167
|
+
rendered[column.name],
|
|
168
|
+
column,
|
|
169
|
+
is_case_sensitive=table_context.is_case_sensitive,
|
|
170
|
+
),
|
|
171
|
+
column,
|
|
172
|
+
)
|
|
173
|
+
)
|
|
174
|
+
for column in renderer_columns
|
|
175
|
+
}
|
|
144
176
|
|
|
145
177
|
def generate_row_md5_select_query(
|
|
146
178
|
self,
|
|
@@ -197,6 +229,11 @@ class QueryGeneratorAzureSynapse(QueryGeneratorBase):
|
|
|
197
229
|
where_clause=table_context.where_clause,
|
|
198
230
|
column_groups=table_context.column_groups,
|
|
199
231
|
order_by_columns=order_by_columns,
|
|
232
|
+
order_by_collation_expressions=self._order_by_collation_expressions(
|
|
233
|
+
table_context.index_column_collection,
|
|
234
|
+
alias_suffix="_IDX",
|
|
235
|
+
),
|
|
236
|
+
row_hash_collation_suffix=TSQL_NORMALIZED_COLLATION_SUFFIX,
|
|
200
237
|
query_modifiers=resolve_table_context_modifiers(table_context),
|
|
201
238
|
)
|
|
202
239
|
|
|
@@ -227,6 +264,7 @@ class QueryGeneratorAzureSynapse(QueryGeneratorBase):
|
|
|
227
264
|
has_where_clause=table_context.has_where_clause,
|
|
228
265
|
where_clause=table_context.where_clause,
|
|
229
266
|
order_by_columns=order_by_columns,
|
|
267
|
+
order_by_collation_expressions=self._order_by_collation_expressions(table_context.columns_to_validate),
|
|
230
268
|
query_modifiers=resolve_table_context_modifiers(table_context),
|
|
231
269
|
)
|
|
232
270
|
|
|
@@ -11,6 +11,6 @@ FROM (
|
|
|
11
11
|
SELECT{{ qm.render_select_modifier(query_modifiers, 't') }} * {{ qm.render_from_clause(query_modifiers, fully_qualified_name, 't') }}
|
|
12
12
|
{% if has_where_clause %} WHERE {{ where_clause }} {% endif %}
|
|
13
13
|
{% if order_by_columns %}
|
|
14
|
-
ORDER BY {% for c in order_by_columns %}
|
|
14
|
+
ORDER BY {% for c in order_by_columns %} {{ order_by_collation_expressions.get(c, '`' ~ c ~ '`') }}{% if not loop.last %}, {% endif %}{% endfor %}
|
|
15
15
|
{% endif %}
|
|
16
16
|
) __ordered
|
|
@@ -279,7 +279,7 @@ STRING:
|
|
|
279
279
|
metric_query: COUNTIF(`{{ col_name }}` = '')
|
|
280
280
|
metric_return_datatype: INT64
|
|
281
281
|
count_distinct:
|
|
282
|
-
metric_query: COUNT(DISTINCT `{{ col_name }}`)
|
|
282
|
+
metric_query: COUNT(DISTINCT {{ measure_collation_prefix }}`{{ col_name }}`{{ measure_collation_suffix }})
|
|
283
283
|
metric_return_datatype: INT64
|
|
284
284
|
count_null:
|
|
285
285
|
metric_query: COUNTIF(`{{ col_name }}` IS NULL)
|
|
@@ -39,6 +39,7 @@ SELECT
|
|
|
39
39
|
THEN 0
|
|
40
40
|
ELSE NULL
|
|
41
41
|
END AS scale,
|
|
42
|
+
c.collation_name AS collation_name,
|
|
42
43
|
-1 AS calculated_column_size_in_bytes
|
|
43
44
|
FROM `{{ database_name }}`.`{{ schema_name }}`.INFORMATION_SCHEMA.COLUMNS c
|
|
44
45
|
WHERE c.table_name = '{{ table_name | escape_sql_literal }}';
|
|
@@ -35,5 +35,5 @@ FROM
|
|
|
35
35
|
{% if has_where_clause %} WHERE {{ where_clause }} {% endif %}
|
|
36
36
|
) AS RW
|
|
37
37
|
{% if order_by_columns %}
|
|
38
|
-
ORDER BY {% for c in order_by_columns %}
|
|
38
|
+
ORDER BY {% for c in order_by_columns %}{{ order_by_collation_expressions.get(c, '`' ~ c ~ '_IDX`') }} NULLS FIRST{% if not loop.last %}, {% endif %}{% endfor %}
|
|
39
39
|
{% endif %}
|
|
@@ -9,11 +9,12 @@ WITH rc_cte AS (
|
|
|
9
9
|
-- Strip parameters (NUMERIC(10,2), STRING(100), ARRAY<INT64>...) to the base
|
|
10
10
|
-- type so the L1 mapping keys off it; precision/scale below use raw c.data_type.
|
|
11
11
|
TRIM(UPPER(REGEXP_EXTRACT(c.data_type, r'^[^(<]+'))) AS DATA_TYPE,
|
|
12
|
-
-- STRING length lives in the type string
|
|
13
|
-
--
|
|
12
|
+
-- STRING length lives in the type string. Bare STRING has no parameter;
|
|
13
|
+
-- BigQuery's per-value cap is 10 MiB (10485760 bytes), not Snowflake's
|
|
14
|
+
-- VARCHAR max. BYTES -> BINARY, which reports no length, so emit NULL.
|
|
14
15
|
CASE
|
|
15
16
|
WHEN STARTS_WITH(UPPER(c.data_type), 'STRING')
|
|
16
|
-
THEN COALESCE(CAST(REGEXP_EXTRACT(c.data_type, r'\((\d+)\)') AS INT64),
|
|
17
|
+
THEN COALESCE(CAST(REGEXP_EXTRACT(c.data_type, r'\((\d+)\)') AS INT64), 10485760)
|
|
17
18
|
ELSE NULL
|
|
18
19
|
END AS CHARACTER_MAXIMUM_LENGTH,
|
|
19
20
|
-- INFORMATION_SCHEMA omits precision/scale; parse them from the type string.
|
|
@@ -43,6 +44,7 @@ WITH rc_cte AS (
|
|
|
43
44
|
ELSE NULL
|
|
44
45
|
END AS NUMERIC_SCALE,
|
|
45
46
|
c.is_nullable AS IS_NULLABLE,
|
|
47
|
+
c.collation_name AS COLLATION_NAME,
|
|
46
48
|
rc.ROW_COUNT
|
|
47
49
|
FROM `{{ object_database }}`.`{{ object_schema }}`.INFORMATION_SCHEMA.COLUMNS c
|
|
48
50
|
CROSS JOIN rc_cte rc
|
|
@@ -76,6 +76,33 @@ class QueryGeneratorBigQuery(QueryGeneratorBase):
|
|
|
76
76
|
"""Initialize the BigQuery query generator."""
|
|
77
77
|
super().__init__(platform=Platform.BIGQUERY)
|
|
78
78
|
|
|
79
|
+
def _measure_collation_tokens(self, column, metric_name: str) -> tuple[str, str]:
|
|
80
|
+
"""Force binary DISTINCT semantics only for metadata-gated STRING columns."""
|
|
81
|
+
if metric_name == "count_distinct" and self._base_data_type(column) == "STRING" and self._has_source_collation_metadata(column):
|
|
82
|
+
return "COLLATE(", ", '')"
|
|
83
|
+
return "", ""
|
|
84
|
+
|
|
85
|
+
def _comparison_collation_tokens(self, column) -> tuple[str, str]:
|
|
86
|
+
"""Force binary compare/sort/hash semantics for metadata-gated STRING columns."""
|
|
87
|
+
if self._base_data_type(column) == "STRING" and self._has_source_collation_metadata(column):
|
|
88
|
+
return "COLLATE(", ", '')"
|
|
89
|
+
return "", ""
|
|
90
|
+
|
|
91
|
+
def _order_by_collation_expressions(
|
|
92
|
+
self,
|
|
93
|
+
columns,
|
|
94
|
+
*,
|
|
95
|
+
alias_suffix: str = "",
|
|
96
|
+
) -> dict[str, str]:
|
|
97
|
+
"""Return BigQuery-backticked ORDER BY expressions that need binary collation."""
|
|
98
|
+
expressions: dict[str, str] = {}
|
|
99
|
+
for column in columns:
|
|
100
|
+
quoted = f"`{column.name}{alias_suffix}`"
|
|
101
|
+
wrapped = self.wrap_compare_expr(quoted, column)
|
|
102
|
+
if wrapped != quoted:
|
|
103
|
+
expressions[column.name] = wrapped
|
|
104
|
+
return expressions
|
|
105
|
+
|
|
79
106
|
@staticmethod
|
|
80
107
|
def normalize_bigquery_type(raw_type: str | None) -> str | None:
|
|
81
108
|
"""Reduce a BigQuery declared type to its parameterless base type.
|
|
@@ -189,8 +216,9 @@ class QueryGeneratorBigQuery(QueryGeneratorBase):
|
|
|
189
216
|
column_normalization_map: dict[str, str] | None = None,
|
|
190
217
|
) -> dict[str, str]:
|
|
191
218
|
datatypes_normalization_templates = table_context.templates_loader_manager.datatypes_normalization_templates
|
|
219
|
+
renderer_columns = self._row_md5_normalization_columns(table_context)
|
|
192
220
|
renderer_templates: dict[str, str] = {}
|
|
193
|
-
for column in
|
|
221
|
+
for column in renderer_columns:
|
|
194
222
|
normalization_template = self._resolve_datatype_normalization_template(
|
|
195
223
|
column,
|
|
196
224
|
datatypes_normalization_templates,
|
|
@@ -202,9 +230,22 @@ class QueryGeneratorBigQuery(QueryGeneratorBase):
|
|
|
202
230
|
)
|
|
203
231
|
# Resolve ``{{ col_name }}`` and, for numeric types, the scale-aware
|
|
204
232
|
# ``{{ numeric_format_mask }}`` (BigQuery emits a printf ``%.Nf``).
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
233
|
+
renderer_templates[column.name] = self._render_normalization_template(
|
|
234
|
+
normalization_template,
|
|
235
|
+
column,
|
|
236
|
+
)
|
|
237
|
+
renderer_templates = apply_text_codec_to_renderer_templates(
|
|
238
|
+
self.platform,
|
|
239
|
+
renderer_templates,
|
|
240
|
+
column_codec_map,
|
|
241
|
+
renderer_columns,
|
|
242
|
+
)
|
|
243
|
+
# L3 MD5 / cell fingerprints must be UTF-8 code points. COLLATE() on
|
|
244
|
+
# those expressions is a compare/sort annotation; CONCAT/MD5 treat a
|
|
245
|
+
# collated STRING as collation keys and false-diff Snowflake utf8.
|
|
246
|
+
# Index-only columns are hashed in row-MD5 even when they are not in
|
|
247
|
+
# columns_to_validate; keep their renderer entries.
|
|
248
|
+
return {column.name: renderer_templates[column.name] for column in renderer_columns}
|
|
208
249
|
|
|
209
250
|
def _build_row_md5_select(
|
|
210
251
|
self,
|
|
@@ -236,6 +277,10 @@ class QueryGeneratorBigQuery(QueryGeneratorBase):
|
|
|
236
277
|
where_clause=table_context.where_clause,
|
|
237
278
|
column_groups=table_context.column_groups,
|
|
238
279
|
order_by_columns=order_by_columns,
|
|
280
|
+
order_by_collation_expressions=self._order_by_collation_expressions(
|
|
281
|
+
table_context.index_column_collection,
|
|
282
|
+
alias_suffix="_IDX",
|
|
283
|
+
),
|
|
239
284
|
query_modifiers=resolve_table_context_modifiers(table_context),
|
|
240
285
|
)
|
|
241
286
|
|
|
@@ -261,6 +306,9 @@ class QueryGeneratorBigQuery(QueryGeneratorBase):
|
|
|
261
306
|
has_where_clause=table_context.has_where_clause,
|
|
262
307
|
where_clause=table_context.where_clause,
|
|
263
308
|
order_by_columns=order_by_columns,
|
|
309
|
+
order_by_collation_expressions=self._order_by_collation_expressions(
|
|
310
|
+
[column for column in table_context.columns_to_validate if order_by_columns and column.name in order_by_columns]
|
|
311
|
+
),
|
|
264
312
|
query_modifiers=resolve_table_context_modifiers(table_context),
|
|
265
313
|
)
|
|
266
314
|
|
|
@@ -14,6 +14,9 @@ SELECT
|
|
|
14
14
|
C.LENGTH AS character_length,
|
|
15
15
|
C.LENGTH AS precision,
|
|
16
16
|
C.SCALE AS scale,
|
|
17
|
+
-- Per-column collation of a string column; NULL for every non-string column
|
|
18
|
+
-- and for string columns defined without one.
|
|
19
|
+
C.COLLATIONNAME AS collation_name,
|
|
17
20
|
CASE
|
|
18
21
|
WHEN UPPER(C.TYPENAME) IN ('CHARACTER', 'CHAR', 'VARCHAR',
|
|
19
22
|
'NCHAR', 'NVARCHAR')
|
|
@@ -37,6 +37,9 @@ SELECT
|
|
|
37
37
|
WHEN UPPER(C.TYPENAME) IN ('SMALLINT', 'INTEGER', 'INT', 'BIGINT') THEN 0
|
|
38
38
|
ELSE NULL
|
|
39
39
|
END AS NUMERIC_SCALE,
|
|
40
|
+
-- Per-column collation of a string column; NULL for every non-string column
|
|
41
|
+
-- and for string columns defined without one.
|
|
42
|
+
C.COLLATIONNAME AS COLLATION_NAME,
|
|
40
43
|
CASE C.NULLS
|
|
41
44
|
WHEN 'Y' THEN 'YES'
|
|
42
45
|
ELSE 'NO'
|
|
@@ -83,6 +83,21 @@ class QueryGeneratorDb2(QueryGeneratorOracle):
|
|
|
83
83
|
self.jinja_env.globals[NULL_HASHING_SENTINEL_KEY] = NULL_HASHING_SENTINEL
|
|
84
84
|
self.jinja_env.globals[ROW_HASH_COLUMN_DELIMITER_KEY] = ROW_HASH_COLUMN_DELIMITER
|
|
85
85
|
|
|
86
|
+
def _measure_collation_tokens(self, column, metric_name: str) -> tuple[str, str]:
|
|
87
|
+
"""
|
|
88
|
+
Keep DB2 LUW measures unwrapped: no fixed, name-free binary equivalent exists.
|
|
89
|
+
|
|
90
|
+
L1 does capture ``SYSCAT.COLUMNS.COLLATIONNAME``, but DB2 offers no way to
|
|
91
|
+
spend it here: ``COLLATE USING IDENTITY`` is DDL (CREATE/ALTER TABLE), not
|
|
92
|
+
an expression modifier, and ``COLLATION_KEY_BIT`` takes a named collation --
|
|
93
|
+
which would put the source collation name into generated SQL.
|
|
94
|
+
"""
|
|
95
|
+
return "", ""
|
|
96
|
+
|
|
97
|
+
def _comparison_collation_tokens(self, column) -> tuple[str, str]:
|
|
98
|
+
"""Keep DB2 LUW compare/sort/hash expressions unwrapped (see :meth:`_measure_collation_tokens`)."""
|
|
99
|
+
return "", ""
|
|
100
|
+
|
|
86
101
|
@staticmethod
|
|
87
102
|
def _build_fm_to_char_mask(scale: int, *, integer_nines: int = _DB2_INTEGER_NINES) -> str:
|
|
88
103
|
"""Return a DB2-valid ``9…90[.0…0]`` mask (Oracle ``FM`` is rejected by DB2).
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
# See the License for the specific language governing permissions and
|
|
14
14
|
# limitations under the License.
|
|
15
15
|
|
|
16
|
+
from collections.abc import Callable
|
|
16
17
|
from dataclasses import dataclass
|
|
17
18
|
|
|
18
19
|
from snowflake.snowflake_data_validation.azure_synapse.extractor.metadata_extractor_azure_synapse import (
|
|
@@ -139,6 +140,18 @@ from snowflake.snowflake_data_validation.validation.validation_database_manager
|
|
|
139
140
|
)
|
|
140
141
|
|
|
141
142
|
|
|
143
|
+
def _create_oracle_query_generator(connector: ConnectorBase) -> QueryGeneratorOracle:
|
|
144
|
+
"""Create an Oracle query generator with server-derived capabilities."""
|
|
145
|
+
connection = connector.connection
|
|
146
|
+
version = getattr(connection, "version", None) if connection is not None else None
|
|
147
|
+
if not isinstance(version, str) and connection is not None:
|
|
148
|
+
getinfo = getattr(connection, "getinfo", None)
|
|
149
|
+
if callable(getinfo):
|
|
150
|
+
odbc_version = getinfo(18) # SQL_DBMS_VER
|
|
151
|
+
version = odbc_version if isinstance(odbc_version, str) else None
|
|
152
|
+
return QueryGeneratorOracle(oracle_version=version)
|
|
153
|
+
|
|
154
|
+
|
|
142
155
|
@dataclass
|
|
143
156
|
class PlatformConfig:
|
|
144
157
|
"""Configuration for platform-specific components."""
|
|
@@ -146,6 +159,13 @@ class PlatformConfig:
|
|
|
146
159
|
query_generator: type[QueryGeneratorBase]
|
|
147
160
|
metadata_extractor: type[MetadataExtractorBase]
|
|
148
161
|
script_writer: type[ScriptWriterBase]
|
|
162
|
+
query_generator_factory: Callable[[ConnectorBase], QueryGeneratorBase] | None = None
|
|
163
|
+
|
|
164
|
+
def create_query_generator(self, connector: ConnectorBase) -> QueryGeneratorBase:
|
|
165
|
+
"""Create the platform query generator through its optional extension hook."""
|
|
166
|
+
if self.query_generator_factory is not None:
|
|
167
|
+
return self.query_generator_factory(connector)
|
|
168
|
+
return self.query_generator()
|
|
149
169
|
|
|
150
170
|
|
|
151
171
|
class ExecutorFactory:
|
|
@@ -193,6 +213,7 @@ class ExecutorFactory:
|
|
|
193
213
|
query_generator=QueryGeneratorOracle,
|
|
194
214
|
metadata_extractor=MetadataExtractorOracle,
|
|
195
215
|
script_writer=ScriptWriterOracle,
|
|
216
|
+
query_generator_factory=_create_oracle_query_generator,
|
|
196
217
|
),
|
|
197
218
|
Platform.POSTGRESQL: PlatformConfig(
|
|
198
219
|
query_generator=QueryGeneratorPostgresql,
|
|
@@ -295,7 +316,7 @@ class ExecutorFactory:
|
|
|
295
316
|
raise ValueError(f"Unsupported platform: {platform}")
|
|
296
317
|
|
|
297
318
|
config = self._platform_configs[platform]
|
|
298
|
-
query_generator = config.
|
|
319
|
+
query_generator = config.create_query_generator(connector)
|
|
299
320
|
|
|
300
321
|
# Propagate SQL Server version capabilities to the query generator
|
|
301
322
|
if platform == Platform.SQLSERVER and isinstance(connector, ConnectorSqlServer):
|
|
@@ -44,6 +44,12 @@ from snowflake.snowflake_data_validation.utils.qvci_fallback import (
|
|
|
44
44
|
)
|
|
45
45
|
|
|
46
46
|
|
|
47
|
+
def tsql_quote_identifier(identifier: object) -> str:
|
|
48
|
+
"""Quote a T-SQL identifier, escaping embedded double quotes."""
|
|
49
|
+
escaped_identifier = str(identifier).replace('"', '""')
|
|
50
|
+
return f'"{escaped_identifier}"'
|
|
51
|
+
|
|
52
|
+
|
|
47
53
|
class SQLQueriesTemplateGenerator:
|
|
48
54
|
"""
|
|
49
55
|
SQL queries template generator using Jinja2 templates.
|
|
@@ -76,6 +82,7 @@ class SQLQueriesTemplateGenerator:
|
|
|
76
82
|
)
|
|
77
83
|
)
|
|
78
84
|
self.env.filters["escape_sql_literal"] = escape_sql_literal
|
|
85
|
+
self.env.filters["tsql_quote_identifier"] = tsql_quote_identifier
|
|
79
86
|
# Single source of truth for the NULL sentinel used by L3 row-MD5 and
|
|
80
87
|
# cell-validation normalization. Exposed to every template so the
|
|
81
88
|
# COALESCE fallback can keep a real SQL NULL distinct from "".
|
|
@@ -652,6 +659,7 @@ class SQLQueriesTemplateGenerator:
|
|
|
652
659
|
order_by_collation_expressions: dict[str, str] | None = None,
|
|
653
660
|
query_modifiers: QueryModifiersTemplateContext | None = None,
|
|
654
661
|
hash_md5_function: str | None = None,
|
|
662
|
+
row_hash_collation_suffix: str = "",
|
|
655
663
|
) -> str:
|
|
656
664
|
"""Render an inline SELECT that returns (index_cols, ROW_MD5) directly.
|
|
657
665
|
|
|
@@ -672,6 +680,7 @@ class SQLQueriesTemplateGenerator:
|
|
|
672
680
|
use_column_groups=column_groups is not None,
|
|
673
681
|
order_by_columns=order_by_columns or [],
|
|
674
682
|
order_by_collation_expressions=order_by_collation_expressions or {},
|
|
683
|
+
row_hash_collation_suffix=row_hash_collation_suffix,
|
|
675
684
|
)
|
|
676
685
|
if column_groups is not None:
|
|
677
686
|
render_kwargs["column_groups"] = column_groups
|
|
@@ -273,8 +273,8 @@ class MetadataExtractorOracle(MetadataExtractorBase):
|
|
|
273
273
|
def compute_md5(self, table_context: TableContext, other_table_name: str) -> None:
|
|
274
274
|
"""Not used in the Oracle CDV pipeline.
|
|
275
275
|
|
|
276
|
-
Oracle L3 row
|
|
277
|
-
SELECT, no temp table)
|
|
276
|
+
Oracle L3 row hashing uses ``generate_row_md5_select_query`` (inline
|
|
277
|
+
SELECT, no temp table) on the signature-extract path. The
|
|
278
278
|
chunked CTAS pipeline (``compute_md5`` → temp table →
|
|
279
279
|
``extract_md5_rows_chunk``) is not executed for Oracle.
|
|
280
280
|
|
|
@@ -10,5 +10,5 @@
|
|
|
10
10
|
{{ qm.render_from_clause(query_modifiers, fully_qualified_name, 't') }}
|
|
11
11
|
{% if has_where_clause %} WHERE {{ where_clause }} {% endif %}
|
|
12
12
|
{% if order_by_columns %}
|
|
13
|
-
ORDER BY {% for c in order_by_columns %}
|
|
13
|
+
ORDER BY {% for c in order_by_columns %} {{ order_by_collation_expressions.get(c, '"' ~ c ~ '"') }}{% if not loop.last %}, {% endif %}{% endfor %}
|
|
14
14
|
{% endif %}
|
|
@@ -315,7 +315,7 @@ CHAR:
|
|
|
315
315
|
metric_query: AVG(LENGTH(RTRIM("{{ col_name }}")))
|
|
316
316
|
metric_return_datatype: FLOAT
|
|
317
317
|
count_distinct:
|
|
318
|
-
metric_query: COUNT(DISTINCT RTRIM("{{ col_name }}"))
|
|
318
|
+
metric_query: COUNT(DISTINCT {{ measure_collation_prefix }}RTRIM("{{ col_name }}"){{ measure_collation_suffix }})
|
|
319
319
|
metric_return_datatype: INTEGER
|
|
320
320
|
count_null:
|
|
321
321
|
metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
|
|
@@ -336,7 +336,7 @@ NCHAR:
|
|
|
336
336
|
metric_query: AVG(LENGTH(RTRIM("{{ col_name }}")))
|
|
337
337
|
metric_return_datatype: FLOAT
|
|
338
338
|
count_distinct:
|
|
339
|
-
metric_query: COUNT(DISTINCT RTRIM("{{ col_name }}"))
|
|
339
|
+
metric_query: COUNT(DISTINCT {{ measure_collation_prefix }}RTRIM("{{ col_name }}"){{ measure_collation_suffix }})
|
|
340
340
|
metric_return_datatype: INTEGER
|
|
341
341
|
count_null:
|
|
342
342
|
metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
|
|
@@ -356,7 +356,7 @@ VARCHAR2:
|
|
|
356
356
|
metric_query: AVG(LENGTH("{{ col_name }}"))
|
|
357
357
|
metric_return_datatype: FLOAT
|
|
358
358
|
count_distinct:
|
|
359
|
-
metric_query: COUNT(DISTINCT "{{ col_name }}")
|
|
359
|
+
metric_query: COUNT(DISTINCT {{ measure_collation_prefix }}"{{ col_name }}"{{ measure_collation_suffix }})
|
|
360
360
|
metric_return_datatype: INTEGER
|
|
361
361
|
count_null:
|
|
362
362
|
metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
|
|
@@ -379,7 +379,7 @@ NVARCHAR2:
|
|
|
379
379
|
metric_query: AVG(LENGTH("{{ col_name }}"))
|
|
380
380
|
metric_return_datatype: FLOAT
|
|
381
381
|
count_distinct:
|
|
382
|
-
metric_query: COUNT(DISTINCT "{{ col_name }}")
|
|
382
|
+
metric_query: COUNT(DISTINCT {{ measure_collation_prefix }}"{{ col_name }}"{{ measure_collation_suffix }})
|
|
383
383
|
metric_return_datatype: INTEGER
|
|
384
384
|
count_null:
|
|
385
385
|
metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
|
|
@@ -400,7 +400,7 @@ VARCHAR:
|
|
|
400
400
|
metric_query: AVG(LENGTH("{{ col_name }}"))
|
|
401
401
|
metric_return_datatype: FLOAT
|
|
402
402
|
count_distinct:
|
|
403
|
-
metric_query: COUNT(DISTINCT "{{ col_name }}")
|
|
403
|
+
metric_query: COUNT(DISTINCT {{ measure_collation_prefix }}"{{ col_name }}"{{ measure_collation_suffix }})
|
|
404
404
|
metric_return_datatype: INTEGER
|
|
405
405
|
count_null:
|
|
406
406
|
metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
|
|
@@ -77,7 +77,8 @@ SDO_GEOMETRY: CASE WHEN {{ col_name }} IS NULL THEN NULL ELSE TRIM(REGEXP_REPLAC
|
|
|
77
77
|
# Format masks aligned with Snowflake TIMESTAMP_NTZ / TIMESTAMP_TZ normalization:
|
|
78
78
|
# DATE / TIMESTAMP → ISO 8601 with 9-digit fractional seconds (FF9)
|
|
79
79
|
# TIMESTAMP WITH TIME ZONE → ISO with per-row offset (TZH:TZM)
|
|
80
|
-
# TIMESTAMP WITH LOCAL TIME ZONE → session wall
|
|
80
|
+
# TIMESTAMP WITH LOCAL TIME ZONE → generic session wall clock; Oracle/Snowflake
|
|
81
|
+
# paired DV overrides this template with UTC-instant normalization.
|
|
81
82
|
DATE: TO_CHAR(CAST({{ col_name }} AS TIMESTAMP), 'YYYY-MM-DD"T"HH24:MI:SS.FF9')
|
|
82
83
|
TIMESTAMP: TO_CHAR({{ col_name }}, 'YYYY-MM-DD"T"HH24:MI:SS.FF9')
|
|
83
84
|
TIMESTAMP WITH TIME ZONE: REGEXP_REPLACE(TO_CHAR({{ col_name }}, 'YYYY-MM-DD"T"HH24:MI:SS.FF9TZH:TZM'), 'Z$', '+00:00')
|
|
@@ -27,6 +27,9 @@ SELECT
|
|
|
27
27
|
C.CHAR_LENGTH AS character_length,
|
|
28
28
|
C.DATA_PRECISION AS precision,
|
|
29
29
|
C.DATA_SCALE AS scale,
|
|
30
|
+
{% if supports_oracle_collation %}
|
|
31
|
+
C.COLLATION AS collation_name,
|
|
32
|
+
{% endif %}
|
|
30
33
|
CASE
|
|
31
34
|
WHEN C.DATA_TYPE IN ('CHAR', 'NCHAR', 'VARCHAR2', 'NVARCHAR2')
|
|
32
35
|
THEN C.CHAR_LENGTH
|
|
@@ -37,5 +37,5 @@ FROM
|
|
|
37
37
|
{% if has_where_clause %} WHERE {{ where_clause }} {% endif %}
|
|
38
38
|
) RW
|
|
39
39
|
{% if order_by_columns %}
|
|
40
|
-
ORDER BY {% for c in order_by_columns %}
|
|
40
|
+
ORDER BY {% for c in order_by_columns %}{{ order_by_collation_expressions.get(c, '"' ~ c ~ '_IDX"') }} NULLS FIRST{% if not loop.last %}, {% endif %}{% endfor %}
|
|
41
41
|
{% endif %}
|