snowflake-data-validation 1.23.1__tar.gz → 1.24.2__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.23.1 → snowflake_data_validation-1.24.2}/PKG-INFO +39 -1
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/README.md +38 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_datatypes_normalization_templates.yaml +13 -13
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/query/query_generator_azure_synapse.py +10 -2
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/configuration/model/table_configuration.py +18 -25
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/extractor/sql_queries_template_generator.py +3 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_datatypes_normalization_templates.yaml +8 -8
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/oracle/query/query_generator_oracle.py +28 -2
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/orchestration/view_preprocessor.py +2 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_datatypes_normalization_templates.yaml +8 -8
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/query/query_generator_postgresql.py +38 -5
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/query_generation/metadata_queries.py +5 -3
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/query/__init__.py +9 -1
- snowflake_data_validation-1.24.2/src/snowflake/snowflake_data_validation/query/charset_normalization.py +159 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_datatypes_normalization_templates.yaml +2 -2
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/query/query_generator_base.py +172 -8
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_datatypes_normalization_templates.yaml +8 -7
- snowflake_data_validation-1.24.2/src/snowflake/snowflake_data_validation/redshift/query/charset_normalization.py +48 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/query/query_generator_redshift.py +104 -22
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_datatypes_normalization_templates.yaml +3 -3
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/script_writer/script_writer_base.py +5 -9
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_datatypes_normalization_templates.yaml +4 -4
- snowflake_data_validation-1.24.2/src/snowflake/snowflake_data_validation/snowflake/query/charset_normalization.py +23 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/query/query_generator_snowflake.py +4 -1
- snowflake_data_validation-1.24.2/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_get_columns_metadata.sql.j2 +47 -0
- snowflake_data_validation-1.24.2/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_table_metadata_query.sql.j2 +56 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/query/query_generator_sqlite.py +7 -1
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_column_metrics_templates.yaml +69 -7
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_datatypes_normalization_templates.yaml +17 -14
- snowflake_data_validation-1.24.2/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_temporary_table_from_view_template.sql.j2 +4 -0
- snowflake_data_validation-1.24.2/src/snowflake/snowflake_data_validation/sqlserver/query/charset_normalization.py +56 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/query/query_generator_sqlserver.py +28 -2
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_datatypes_normalization_templates.yaml +8 -6
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_get_columns_metadata.sql.j2 +1 -1
- snowflake_data_validation-1.24.2/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_md5_select.sql.j2 +60 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_table_metadata_query.sql.j2 +1 -1
- snowflake_data_validation-1.24.2/src/snowflake/snowflake_data_validation/teradata/query/charset_normalization.py +193 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/query/query_generator_teradata.py +28 -2
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/column_partitioning_strategy.py +7 -19
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/constants.py +14 -6
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/model/table_column_metadata.py +3 -2
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/comparison_codec.py +38 -17
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/Redshift/query/test_query_generator_redshift.py +87 -1
- snowflake_data_validation-1.24.2/tests/unit/Teradata/test_teradata_row_md5_select_template.py +136 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/azure_synapse/test_azure_synapse_row_queries.py +2 -3
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/oracle/test_oracle_normalization_templates.py +5 -5
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/oracle/test_oracle_query_generator.py +1 -1
- snowflake_data_validation-1.24.2/tests/unit/sqlite/test_metadata_query_template_sqlite.py +242 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/sqlserver/test_sqlserver_row_queries.py +26 -7
- snowflake_data_validation-1.24.2/tests/unit/test_boolean_binary_canonical_templates.py +91 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_cell_validation_query_generation.py +17 -0
- snowflake_data_validation-1.24.2/tests/unit/test_charset_normalization.py +264 -0
- snowflake_data_validation-1.24.2/tests/unit/test_float_canonical_templates.py +60 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_postgresql_normalization_templates.py +2 -2
- snowflake_data_validation-1.24.2/tests/unit/test_query_generator_numeric_scale.py +115 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_snowflake_binary_normalization_templates.py +5 -5
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_sql_catalog_template_guard.py +8 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_sqlserver_multi_version_support.py +35 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_table_configuration.py +40 -0
- snowflake_data_validation-1.23.1/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_get_columns_metadata.sql.j2 +0 -14
- snowflake_data_validation-1.23.1/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_table_metadata_query.sql.j2 +0 -24
- snowflake_data_validation-1.23.1/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_temporary_table_from_view_template.sql.j2 +0 -3
- snowflake_data_validation-1.23.1/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_md5_select.sql.j2 +0 -55
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/.gitignore +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/LICENSE +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/docs/README.md +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/pyproject.toml +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/__main__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/azure_synapse_arguments_manager.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/azure_synapse_cli.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/connector/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_azure_synapse.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_factory_azure_synapse.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/metadata_extractor_azure_synapse.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/model/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/model/azure_synapse_credentials_connection.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/query/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/script_writer_azure_synapse.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/common_cli/cli_partitioning.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/common_cli/cli_sync_validation.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/comparison_orchestrator.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/configuration/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/configuration/configuration_loader.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/configuration/model/configuration_model.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/configuration/model/connection_types.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/configuration/model/connections/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/configuration/model/logging_configuration.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/configuration/model/validation_configuration.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/configuration/model/view_configuration.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/configuration/singleton.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/connector/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/connector/connector_base.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/connector/connector_factory_base.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/connector/connector_failure_tracker.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/executer/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/executer/async_generation_executor.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/executer/async_validation_executor.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/executer/base_validation_executor.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/executer/executor_factory.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/executer/extractor_types.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/executer/source_validation_executor.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/executer/sync_validation_executor.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/extractor/metadata_extractor_base.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/main_cli.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/oracle/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/oracle/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/oracle/extractor/metadata_extractor_oracle.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/oracle/oracle_iso_normalization.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/oracle/query/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/oracle/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/oracle/script_writer/script_writer_oracle.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/orchestration/console_progress_reporter.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/orchestration/html_report/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/orchestration/html_report/html_report_builder.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/orchestration/html_report/report_metadata.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/orchestration/parallel_execution_engine.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/orchestration/table_metadata_processor.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/orchestration/validation_progress_reporter.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/connector/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_factory_postgresql.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_postgresql.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/extractor/metadata_extractor_postgresql.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/model/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/model/postgresql_credentials_connection.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/postgresql_arguments_manager.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/postgresql_cli.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/postgresql_tz_normalization.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/query/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/script_writer/script_writer_postgresql.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/DATA_VALIDATION_API_OVERVIEW.md +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/_internal.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/_teradata_internal.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/async_mode/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/async_mode/file_loader.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/async_mode/script_writer.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/cli/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/cli/commands.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/configuration/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/connectors/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/context/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/data_validation_api.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/enums/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/execution/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/execution/query_executor.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/generators/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/metadata/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/model/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/model/data_validation_exception.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/model/generated_query.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/model/metrics_result_shape.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/model/query_execution_result.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/model/query_generator_factory.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/model/result_set.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/model/validation_result.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/query_generation/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/query_generation/row_validation_queries.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/query_generation/schema_metrics_queries.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/query_validation/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/query_validation/query_comparison.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/reshape/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/reshape/metrics_reshape.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/result_set_validation/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/result_set_validation/result_set_comparison.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/snapshot/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_generation.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_validation.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/utils/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/utils/helpers.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/validation/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/validation/cell_validation.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/validation/metrics_validation.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/validation/row_validation.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/validation/schema_validation.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/query/chunk_md5_tiered.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_modifiers.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/query/query/query_generator_query.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/query/query_arguments_manager.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/connector/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/connector/connector_factory_redshift.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/connector/connector_redshift.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/extractor/metadata_extractor_redshift.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/model/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/model/redshift_credentials_connection.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/query/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/redshift_arguments_manager.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/redshift_cli.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/script_writer/script_writer_redshift.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/snowflake_to_result_set_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/result_set/query/query_generator_result_set.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/result_set/result_set_arguments_manager.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_factory_snowflake.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_snowflake.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/metadata_extractor_snowflake.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_concatenated_template.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_md5_template.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_case_sensitive_columns.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_temporary_table_from_view_template.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/model/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_credentials_connection.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_default_connection.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_named_connection.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/query/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/script_writer/script_writer_snowflake.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/snowflake_arguments_manager.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/snowflake_cli.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/connector/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_factory_sqlite.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_sqlite.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/extractor/metadata_extractor_sqlite.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_compute_md5_sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_sqlite_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/model/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/model/sqlite_connection.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/query/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/script_writer/script_writer_sqlite.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/connector/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_factory_sql_server.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_sql_server.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/metadata_extractor_sqlserver.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_compute_md5_sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_temporary_table_internal_identifier_template.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/model/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/model/sqlserver_credentials_connection.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/query/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/script_writer_sqlserver.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_arguments_manager.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_cli.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/table_partitioning_strategy.md +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/connector/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/connector/connector_factory_teradata.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/connector/connector_teradata.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/extractor/metadata_extractor_teradata.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_compute_md5_sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_concatenated.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_md5.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/model/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/model/teradata_credentials_connection.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/query/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/script_writer/script_writer_teradata.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/teradata_arguments_manager.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/teradata_cli.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/teradata_iso_normalization.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/arguments_manager_base.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/arguments_manager_factory.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/base_output_handler.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/column_grouping.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/configuration_file_editor.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/configuration_file_generator.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/configuration_file_synchronizer.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/connection_pool.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/connector_factory.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/console_output_handler.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/context.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/cpu_optimizer.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/helper.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/helpers/helper_database.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/helpers/helper_dataframe.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/helpers/helper_io.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/helpers/helper_misc.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/helpers/helper_polars_cast.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/helpers/helper_query_result.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/helpers/helper_templates.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/index_key_format.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/iso_dv_common.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/logging_config.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/logging_utils.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/model/chunk.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/model/column_metadata.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/model/custom_templates.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/model/table_context.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/model/templates_loader_manager.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/progress_reporter.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/row_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/run_context.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/shutdown_coordinator.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/snapshot_validation_statements.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/telemetry.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/templates/configuration_file_templates.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/thread_safe_singleton.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/validation_utils.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/accepted_transformation.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/cell_data_validator.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/data_validator_base.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/dataframe_validator_base.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/metrics_data_validator.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/query_validator.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/result_set_validator.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/results_summary_report.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/row_data_validator.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/row_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/schema_data_validator.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/validation_database/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/validation_database/sqlite_validation_connection.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/validation_database/validation_database_connection_base.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/validation_database_manager.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/validation_execution_context.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/validation_report_status.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/.coveragerc +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/conftest.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/integration/.coveragerc +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/integration/Redshift/test_metadata_extractor_integration.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/integration/test_async_generation_integration.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/integration/test_async_validation_integration.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/integration/test_reference_integration.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/integration/test_source_validation_integration.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/integration/test_sync_validation_integration.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/Redshift/cli/test_redshift_cli_general.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/Redshift/cli/test_redshift_cli_generate_validation_scripts.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/Redshift/cli/test_redshift_cli_get_configuration_files.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/Redshift/cli/test_redshift_cli_run_async_validation.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/Redshift/cli/test_redshift_cli_run_validation.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/Redshift/cli/test_redshift_cli_run_validation_ipc.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/Redshift/model/test_redshift_credentials_connection.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/Redshift/script_writer/test_script_writer_redshift.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/Redshift/test_connector_redshift.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/Redshift/test_redshift_arguments_manager.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/Teradata/test_connector_teradata.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/Teradata/test_metadata_extractor_teradata.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/Teradata/test_query_generator_teradata.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/Teradata/test_teradata_cli.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/assets/custom_templates_loader/snowflake_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/assets/custom_templates_loader/snowflake_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/assets/custom_templates_loader/snowflake_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/assets/test_configuration_loader/test_load_configuration_model/conf.yaml +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/assets/test_configuration_loader/test_load_configuration_model_reading_file_exception/conf.yaml +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/assets/test_helpers/dummy_configuration_file.json +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/assets/test_helpers/dummy_connection_source_db.toml +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/assets/test_helpers/dummy_datatypes_normalization_template.yaml +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/assets/test_helpers/dummy_datatypes_template.yaml +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/assets/test_helpers/dummy_metrics_template.yaml +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/assets/test_helpers/dummy_metrics_template_datatypes.yaml +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/assets/test_helpers/dummy_template.csv +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/assets/test_helpers/not_valid_format.yaml +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/assets/test_templates_loader_manager/snowflake_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/assets/test_templates_loader_manager/snowflake_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/azure_synapse/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/azure_synapse/test_azure_synapse_credentials_connection.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/azure_synapse/test_azure_synapse_metadata_extractor.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/azure_synapse/test_azure_synapse_metrics_templates.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/azure_synapse/test_azure_synapse_query_generator.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/azure_synapse/test_connector_azure_synapse.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/azure_synapse/test_connector_factory_azure_synapse.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/oracle/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/oracle/test_oracle_iso_normalization.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/oracle/test_oracle_metadata_extractor.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/oracle/test_oracle_metrics_templates.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/oracle/test_oracle_type_mappings.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/query/test_chunk_md5_tiered.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/sqlite/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/sqlite/test_connector_factory_sqlite.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/sqlite/test_connector_sqlite.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/sqlite/test_metadata_extractor_sqlite.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/sqlite/test_query_generator_sqlite.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/sqlite/test_script_writer_sqlite.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/sqlserver/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_accepted_transformation.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_arguments_manager_base.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_arguments_manager_factory.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_batched_metrics_queries.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_cell_data_validator.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_column_grouping.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_column_metadata.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_column_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_comparison_codec.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_comparison_orchestrator.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_configuration_file_editor.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_configuration_file_synchronizer.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_configuration_loader.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_configuration_model.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_connection_pool.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_connector_failure_tracker.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_connector_snowflake.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_console_progress_reporter.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_cpu_optimizer.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_custom_templates_models.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_data_validator.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_escape_odbc_value.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_executor_factory.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_get_configuration_file.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_helper_dataframe.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_helper_polars_cast.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_helpers.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_html_report_builder.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_index_key_format.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_internal_helpers.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_iso_dv_common.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_logging_config.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_metrics_reshape.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_metrics_result_shape.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_metrics_templates_casts.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_platform_bridge.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_postgresql_tz_normalization.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_query_cell_level_validation.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_query_metrics_level_validation.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_query_to_dataframe.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_query_validator.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_report_metadata.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_result_set_cell_level_validation.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_result_set_column_metrics_validation.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_result_set_snapshot_generation.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_result_set_snapshot_validation.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_result_set_to_dataframe.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_result_set_validator.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_row_data_validator.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_row_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_row_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_shutdown_coordinator.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_snapshot_validation_statements.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_snowflake_arguments_manager.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_snowflake_cli.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_source_validation_executor.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_sql_literal_jinja_filter.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_sqlite_validation_connection.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_sqlserver_arguments_manager.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_sqlserver_cli.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_table_column_metadata_model.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_table_context.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_table_metadata_processor.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_table_snapshot_generation.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_table_snapshot_validation.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_target_platform_factory.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_telemetry.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_templates_loader_manager.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_teradata_iso_normalization.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_timestamp_golden_vectors.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_validation_configuration.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_validation_database_connection.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_validation_execution_context.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_validation_progress_reporter.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_validation_report_status.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_view_configuration.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/utils/__init__.py +0 -0
- {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/utils/test_constants.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: snowflake-data-validation
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.24.2
|
|
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/
|
|
@@ -129,6 +129,8 @@ pip install "snowflake-data-validation[sqlite]"
|
|
|
129
129
|
|
|
130
130
|
> **SQLite prerequisite:** This extra installs [sqlean.py](https://github.com/nalgeon/sqlean), a drop-in `sqlite3` replacement that bundles the [sqlean-crypto](https://github.com/nalgeon/sqlean/blob/main/docs/crypto.md) extension. The `crypto_md5` function provided by this extension is required for row-level MD5 computation during SQLite data validation. Wheels are available for **Linux and macOS** only; Windows is not supported by `sqlean.py`.
|
|
131
131
|
|
|
132
|
+
> **Teradata L3 prerequisite:** Hybrid row validation on Teradata requires a **`HASH_MD5` UDF** installed in the **same database** as the Teradata connection default (the database the worker uses when it connects). Generated SQL calls `HASH_MD5(...)` without qualification; pointing at a UDF in another database is not supported. See [teradata-dv-prerequisites.md](../docs/data-migration-orchestrator/teradata-dv-prerequisites.md) in this repo.
|
|
133
|
+
|
|
132
134
|
For development and testing:
|
|
133
135
|
|
|
134
136
|
```bash
|
|
@@ -216,6 +218,42 @@ For complete command reference, configuration options, and examples, see the [Da
|
|
|
216
218
|
|
|
217
219
|
## Changelog
|
|
218
220
|
|
|
221
|
+
### v1.24.2
|
|
222
|
+
|
|
223
|
+
**New features**
|
|
224
|
+
|
|
225
|
+
- Added character set normalization foundation for cross-platform encoding validation.
|
|
226
|
+
|
|
227
|
+
**Improvements**
|
|
228
|
+
|
|
229
|
+
- Improved float canonical rendering to full precision for L2/L3 validation.
|
|
230
|
+
- Improved numeric canonical rendering with scale-aware handling for T-SQL and Snowflake.
|
|
231
|
+
- Added query modifier support for SQL Server and Synapse.
|
|
232
|
+
|
|
233
|
+
**Bug fixes**
|
|
234
|
+
|
|
235
|
+
- Fixed Teradata L3 row-hash computation.
|
|
236
|
+
|
|
237
|
+
### v1.24.1
|
|
238
|
+
|
|
239
|
+
**New features**
|
|
240
|
+
|
|
241
|
+
- Added charset normalization foundation for cross-platform character encoding validation.
|
|
242
|
+
- Added scale-aware numeric canonical rendering for T-SQL and Snowflake.
|
|
243
|
+
- Added query modifier support for SQL Server and Synapse.
|
|
244
|
+
|
|
245
|
+
**Improvements**
|
|
246
|
+
|
|
247
|
+
- Improved float canonical rendering to full precision for L2/L3 validation.
|
|
248
|
+
|
|
249
|
+
**Bug fixes**
|
|
250
|
+
|
|
251
|
+
- Fixed Teradata L3 row-hash computation.
|
|
252
|
+
|
|
253
|
+
### v1.24.0
|
|
254
|
+
|
|
255
|
+
No user-facing changes in this release.
|
|
256
|
+
|
|
219
257
|
### v1.23.1
|
|
220
258
|
|
|
221
259
|
**New features**
|
|
@@ -43,6 +43,8 @@ pip install "snowflake-data-validation[sqlite]"
|
|
|
43
43
|
|
|
44
44
|
> **SQLite prerequisite:** This extra installs [sqlean.py](https://github.com/nalgeon/sqlean), a drop-in `sqlite3` replacement that bundles the [sqlean-crypto](https://github.com/nalgeon/sqlean/blob/main/docs/crypto.md) extension. The `crypto_md5` function provided by this extension is required for row-level MD5 computation during SQLite data validation. Wheels are available for **Linux and macOS** only; Windows is not supported by `sqlean.py`.
|
|
45
45
|
|
|
46
|
+
> **Teradata L3 prerequisite:** Hybrid row validation on Teradata requires a **`HASH_MD5` UDF** installed in the **same database** as the Teradata connection default (the database the worker uses when it connects). Generated SQL calls `HASH_MD5(...)` without qualification; pointing at a UDF in another database is not supported. See [teradata-dv-prerequisites.md](../docs/data-migration-orchestrator/teradata-dv-prerequisites.md) in this repo.
|
|
47
|
+
|
|
46
48
|
For development and testing:
|
|
47
49
|
|
|
48
50
|
```bash
|
|
@@ -130,6 +132,42 @@ For complete command reference, configuration options, and examples, see the [Da
|
|
|
130
132
|
|
|
131
133
|
## Changelog
|
|
132
134
|
|
|
135
|
+
### v1.24.2
|
|
136
|
+
|
|
137
|
+
**New features**
|
|
138
|
+
|
|
139
|
+
- Added character set normalization foundation for cross-platform encoding validation.
|
|
140
|
+
|
|
141
|
+
**Improvements**
|
|
142
|
+
|
|
143
|
+
- Improved float canonical rendering to full precision for L2/L3 validation.
|
|
144
|
+
- Improved numeric canonical rendering with scale-aware handling for T-SQL and Snowflake.
|
|
145
|
+
- Added query modifier support for SQL Server and Synapse.
|
|
146
|
+
|
|
147
|
+
**Bug fixes**
|
|
148
|
+
|
|
149
|
+
- Fixed Teradata L3 row-hash computation.
|
|
150
|
+
|
|
151
|
+
### v1.24.1
|
|
152
|
+
|
|
153
|
+
**New features**
|
|
154
|
+
|
|
155
|
+
- Added charset normalization foundation for cross-platform character encoding validation.
|
|
156
|
+
- Added scale-aware numeric canonical rendering for T-SQL and Snowflake.
|
|
157
|
+
- Added query modifier support for SQL Server and Synapse.
|
|
158
|
+
|
|
159
|
+
**Improvements**
|
|
160
|
+
|
|
161
|
+
- Improved float canonical rendering to full precision for L2/L3 validation.
|
|
162
|
+
|
|
163
|
+
**Bug fixes**
|
|
164
|
+
|
|
165
|
+
- Fixed Teradata L3 row-hash computation.
|
|
166
|
+
|
|
167
|
+
### v1.24.0
|
|
168
|
+
|
|
169
|
+
No user-facing changes in this release.
|
|
170
|
+
|
|
133
171
|
### v1.23.1
|
|
134
172
|
|
|
135
173
|
**New features**
|
|
@@ -10,19 +10,19 @@
|
|
|
10
10
|
# CASE WHEN (IIF is unsupported on Synapse Dedicated SQL Pool).
|
|
11
11
|
|
|
12
12
|
# ---- Numeric types ----
|
|
13
|
-
BIGINT: FORMAT("{{ col_name }}", '
|
|
14
|
-
INT: FORMAT("{{ col_name }}", '
|
|
15
|
-
SMALLINT: FORMAT("{{ col_name }}", '
|
|
16
|
-
TINYINT: FORMAT("{{ col_name }}", '
|
|
17
|
-
DECIMAL: FORMAT("{{ col_name }}", '
|
|
18
|
-
NUMERIC: FORMAT("{{ col_name }}", '
|
|
19
|
-
MONEY: FORMAT(
|
|
20
|
-
SMALLMONEY: FORMAT(
|
|
21
|
-
FLOAT:
|
|
22
|
-
REAL:
|
|
13
|
+
BIGINT: FORMAT("{{ col_name }}", '{{ numeric_format_mask }}')
|
|
14
|
+
INT: FORMAT("{{ col_name }}", '{{ numeric_format_mask }}')
|
|
15
|
+
SMALLINT: FORMAT("{{ col_name }}", '{{ numeric_format_mask }}')
|
|
16
|
+
TINYINT: FORMAT("{{ col_name }}", '{{ numeric_format_mask }}')
|
|
17
|
+
DECIMAL: FORMAT("{{ col_name }}", '{{ numeric_format_mask }}')
|
|
18
|
+
NUMERIC: FORMAT("{{ col_name }}", '{{ numeric_format_mask }}')
|
|
19
|
+
MONEY: FORMAT("{{ col_name }}", '{{ numeric_format_mask }}')
|
|
20
|
+
SMALLMONEY: FORMAT("{{ col_name }}", '{{ numeric_format_mask }}')
|
|
21
|
+
FLOAT: '{{ float_tme_shim }}'
|
|
22
|
+
REAL: '{{ float_tme_shim }}'
|
|
23
23
|
|
|
24
24
|
# ---- Boolean type ----
|
|
25
|
-
BIT: CASE WHEN "{{ col_name }}" = 1 THEN '
|
|
25
|
+
BIT: CASE WHEN "{{ col_name }}" = 1 THEN 'TRUE' WHEN "{{ col_name }}" = 0 THEN 'FALSE' END
|
|
26
26
|
|
|
27
27
|
# ---- Character types ----
|
|
28
28
|
# TRIM aligns fixed-width CHAR/NCHAR padding and trailing VARCHAR spaces with Snowflake.
|
|
@@ -43,8 +43,8 @@ SMALLDATETIME: FORMAT("{{ col_name }}", 'yyyy-MM-dd''T''HH:mm:ss.000000000')
|
|
|
43
43
|
DATETIMEOFFSET: FORMAT("{{ col_name }}", 'yyyy-MM-dd''T''HH:mm:ss.fffffff') + '00' + FORMAT("{{ col_name }}", 'zzz')
|
|
44
44
|
|
|
45
45
|
# ---- Binary types ----
|
|
46
|
-
BINARY: CONVERT(VARCHAR(MAX), "{{ col_name }}", 2)
|
|
47
|
-
VARBINARY: CONVERT(VARCHAR(MAX), "{{ col_name }}", 2)
|
|
46
|
+
BINARY: UPPER(CONVERT(VARCHAR(MAX), "{{ col_name }}", 2))
|
|
47
|
+
VARBINARY: UPPER(CONVERT(VARCHAR(MAX), "{{ col_name }}", 2))
|
|
48
48
|
|
|
49
49
|
# ---- Other types ----
|
|
50
50
|
UNIQUEIDENTIFIER: LOWER(CONVERT(VARCHAR(36), "{{ col_name }}"))
|
|
@@ -34,8 +34,10 @@ from snowflake.snowflake_data_validation.query.query_generator_base import (
|
|
|
34
34
|
QueryGeneratorBase,
|
|
35
35
|
resolve_table_context_modifiers,
|
|
36
36
|
)
|
|
37
|
+
from snowflake.snowflake_data_validation.sqlserver.query.query_generator_sqlserver import (
|
|
38
|
+
build_sqlserver_float_tme_shim,
|
|
39
|
+
)
|
|
37
40
|
from snowflake.snowflake_data_validation.utils.constants import (
|
|
38
|
-
COL_NAME_NO_QUOTES_PLACEHOLDER,
|
|
39
41
|
Platform,
|
|
40
42
|
)
|
|
41
43
|
from snowflake.snowflake_data_validation.utils.model.table_context import TableContext
|
|
@@ -57,6 +59,12 @@ class QueryGeneratorAzureSynapse(QueryGeneratorBase):
|
|
|
57
59
|
"""Initialize the Azure Synapse query generator."""
|
|
58
60
|
super().__init__(platform=Platform.AZURE_SYNAPSE)
|
|
59
61
|
|
|
62
|
+
def _float_column_reference(self, column) -> str:
|
|
63
|
+
return f'"{column.name}"'
|
|
64
|
+
|
|
65
|
+
def build_float_tme_shim(self, column, col_ref: str) -> str:
|
|
66
|
+
return build_sqlserver_float_tme_shim(col_ref)
|
|
67
|
+
|
|
60
68
|
def _resolve_normalization_templates(self, table_context: TableContext) -> dict[str, str]:
|
|
61
69
|
"""Build a ``{column_name: rendered_expression}`` mapping.
|
|
62
70
|
|
|
@@ -76,7 +84,7 @@ class QueryGeneratorAzureSynapse(QueryGeneratorBase):
|
|
|
76
84
|
normalization_template = datatypes_normalization_templates.get("DEFAULT")
|
|
77
85
|
if normalization_template is None:
|
|
78
86
|
raise ValueError(f"No normalization template found for data type {column.data_type} and no DEFAULT template available.")
|
|
79
|
-
rendered[column.name] =
|
|
87
|
+
rendered[column.name] = self._render_normalization_template(normalization_template, column)
|
|
80
88
|
return rendered
|
|
81
89
|
|
|
82
90
|
def generate_row_md5_select_query(
|
|
@@ -118,27 +118,19 @@ class TableConfiguration(BaseModel):
|
|
|
118
118
|
def _load_source_decomposed_fully_qualified_name(self) -> None:
|
|
119
119
|
self.fully_qualified_name = self.fully_qualified_name.replace('\\"', '"')
|
|
120
120
|
|
|
121
|
-
decomposed_tuple = Helper.get_decomposed_fully_qualified_name(
|
|
122
|
-
self.fully_qualified_name
|
|
123
|
-
)
|
|
121
|
+
decomposed_tuple = Helper.get_decomposed_fully_qualified_name(self.fully_qualified_name)
|
|
124
122
|
|
|
125
123
|
self.source_database = decomposed_tuple[0]
|
|
126
124
|
self.source_schema = decomposed_tuple[1]
|
|
127
125
|
self.source_table = decomposed_tuple[2]
|
|
128
126
|
|
|
129
|
-
def _load_target_fully_qualified_name(
|
|
130
|
-
|
|
131
|
-
) -> None:
|
|
132
|
-
target_capability = TargetPlatformFactory.create(
|
|
133
|
-
target_platform or Platform.SNOWFLAKE
|
|
134
|
-
)
|
|
127
|
+
def _load_target_fully_qualified_name(self, target_platform: Platform | None = None) -> None:
|
|
128
|
+
target_capability = TargetPlatformFactory.create(target_platform or Platform.SNOWFLAKE)
|
|
135
129
|
normalize = target_capability.normalize_target_identifier
|
|
136
130
|
self.target_database = normalize(self.target_database or self.source_database)
|
|
137
131
|
self.target_schema = normalize(self.target_schema or self.source_schema)
|
|
138
132
|
self.target_name = normalize(self.target_name or self.source_table)
|
|
139
|
-
self.target_fully_qualified_name =
|
|
140
|
-
f"{self.target_database}.{self.target_schema}.{self.target_name}"
|
|
141
|
-
)
|
|
133
|
+
self.target_fully_qualified_name = f"{self.target_database}.{self.target_schema}.{self.target_name}"
|
|
142
134
|
|
|
143
135
|
def _set_has_where_clause(self) -> None:
|
|
144
136
|
self.has_where_clause = self.where_clause != ""
|
|
@@ -147,9 +139,18 @@ class TableConfiguration(BaseModel):
|
|
|
147
139
|
self.has_target_where_clause = self.target_where_clause != ""
|
|
148
140
|
|
|
149
141
|
def _check_target_where_clause(self) -> None:
|
|
142
|
+
# Source and target are filtered independently; a single-sided filter compares
|
|
143
|
+
# different row subsets and almost always reports mismatches. Warn either way.
|
|
150
144
|
if self.has_where_clause and not self.has_target_where_clause:
|
|
151
145
|
LOGGER.warning(
|
|
152
|
-
"
|
|
146
|
+
"Source where clause is set but target where clause is missing for table %s. "
|
|
147
|
+
"Set both so the same rows are compared on source and target.",
|
|
148
|
+
self.target_fully_qualified_name,
|
|
149
|
+
)
|
|
150
|
+
elif self.has_target_where_clause and not self.has_where_clause:
|
|
151
|
+
LOGGER.warning(
|
|
152
|
+
"Target where clause is set but source where clause is missing for table %s. "
|
|
153
|
+
"Set both so the same rows are compared on source and target.",
|
|
153
154
|
self.target_fully_qualified_name,
|
|
154
155
|
)
|
|
155
156
|
|
|
@@ -159,9 +160,7 @@ class TableConfiguration(BaseModel):
|
|
|
159
160
|
|
|
160
161
|
local_target_index_column_list = []
|
|
161
162
|
for target_column_name in self.target_index_column_list:
|
|
162
|
-
new_column_name = self.column_mappings.get(
|
|
163
|
-
target_column_name, target_column_name
|
|
164
|
-
)
|
|
163
|
+
new_column_name = self.column_mappings.get(target_column_name, target_column_name)
|
|
165
164
|
local_target_index_column_list.append(new_column_name)
|
|
166
165
|
|
|
167
166
|
self.target_index_column_list = local_target_index_column_list
|
|
@@ -189,8 +188,7 @@ class TableConfiguration(BaseModel):
|
|
|
189
188
|
return
|
|
190
189
|
elif self.max_failed_rows_number < 1:
|
|
191
190
|
raise ValueError(
|
|
192
|
-
f"Invalid value for max failed rows number in table f{self.fully_qualified_name}. "
|
|
193
|
-
"Value must be greater than or equal to 1."
|
|
191
|
+
f"Invalid value for max failed rows number in table f{self.fully_qualified_name}. Value must be greater than or equal to 1."
|
|
194
192
|
)
|
|
195
193
|
|
|
196
194
|
def _normalize_where_clause(self) -> None:
|
|
@@ -198,18 +196,13 @@ class TableConfiguration(BaseModel):
|
|
|
198
196
|
self.where_clause = HelperDatabase.remove_escape_quotes(self.where_clause)
|
|
199
197
|
|
|
200
198
|
if self.has_target_where_clause:
|
|
201
|
-
self.target_where_clause = HelperDatabase.remove_escape_quotes(
|
|
202
|
-
self.target_where_clause
|
|
203
|
-
)
|
|
199
|
+
self.target_where_clause = HelperDatabase.remove_escape_quotes(self.target_where_clause)
|
|
204
200
|
|
|
205
201
|
def _set_is_temporary_table(self) -> None:
|
|
206
202
|
self.is_temporary_table = self.object_type != ObjectType.TABLE
|
|
207
203
|
|
|
208
204
|
def _normalize_column_selection_list(self) -> None:
|
|
209
|
-
self.column_selection_list = [
|
|
210
|
-
HelperDatabase.remove_escape_quotes(col)
|
|
211
|
-
for col in self.column_selection_list
|
|
212
|
-
]
|
|
205
|
+
self.column_selection_list = [HelperDatabase.remove_escape_quotes(col) for col in self.column_selection_list]
|
|
213
206
|
|
|
214
207
|
def _set_internal_identifiers(
|
|
215
208
|
self,
|
|
@@ -641,6 +641,7 @@ class SQLQueriesTemplateGenerator:
|
|
|
641
641
|
fully_qualified_temporary_table_name: str,
|
|
642
642
|
fully_qualified_view_name: str,
|
|
643
643
|
platform: str,
|
|
644
|
+
query_modifiers=None,
|
|
644
645
|
) -> str:
|
|
645
646
|
"""
|
|
646
647
|
Generate the SQL query to materialize a view as a temporary table.
|
|
@@ -649,6 +650,7 @@ class SQLQueriesTemplateGenerator:
|
|
|
649
650
|
fully_qualified_temporary_table_name (str): The fully qualified name of the temporary table.
|
|
650
651
|
fully_qualified_view_name (str): The fully qualified name of the view.
|
|
651
652
|
platform (str): The platform identifier (e.g., Platform.SNOWFLAKE.value, Platform.SQLSERVER.value)
|
|
653
|
+
query_modifiers: Resolved query modifiers for the source view scan.
|
|
652
654
|
|
|
653
655
|
Returns:
|
|
654
656
|
str: SQL query string to materialize the view as a temporary table.
|
|
@@ -660,6 +662,7 @@ class SQLQueriesTemplateGenerator:
|
|
|
660
662
|
template_file,
|
|
661
663
|
fully_qualified_temporary_table_name=fully_qualified_temporary_table_name,
|
|
662
664
|
fully_qualified_view_name=fully_qualified_view_name,
|
|
665
|
+
query_modifiers=query_modifiers,
|
|
663
666
|
)
|
|
664
667
|
except jinja2.exceptions.TemplateNotFound:
|
|
665
668
|
raise ValueError(f"Template not found: {template_file}. Please create it in the {self.template_dir} directory.") from None
|
|
@@ -14,16 +14,16 @@
|
|
|
14
14
|
# ---- Numeric types ----
|
|
15
15
|
# TRIM() strips the leading spaces that TO_CHAR produces, matching Snowflake's FM format output.
|
|
16
16
|
NUMBER: TRIM(TO_CHAR({{ col_name }}, '999999999999999999999999999990.0000'))
|
|
17
|
-
FLOAT:
|
|
18
|
-
BINARY_FLOAT:
|
|
19
|
-
BINARY_DOUBLE:
|
|
17
|
+
FLOAT: '{{ float_tme_shim }}'
|
|
18
|
+
BINARY_FLOAT: '{{ float_tme_shim }}'
|
|
19
|
+
BINARY_DOUBLE: '{{ float_tme_shim }}'
|
|
20
20
|
INTEGER: TRIM(TO_CHAR({{ col_name }}, '999999999999999999999999999990.0000'))
|
|
21
21
|
SMALLINT: TRIM(TO_CHAR({{ col_name }}, '999999999999999999999999999990.0000'))
|
|
22
22
|
# ANSI synonyms — Oracle stores these as NUMBER/INTEGER/FLOAT(63) internally
|
|
23
23
|
DECIMAL: TRIM(TO_CHAR({{ col_name }}, '999999999999999999999999999990.0000'))
|
|
24
24
|
NUMERIC: TRIM(TO_CHAR({{ col_name }}, '999999999999999999999999999990.0000'))
|
|
25
25
|
INT: TRIM(TO_CHAR({{ col_name }}, '999999999999999999999999999990.0000'))
|
|
26
|
-
REAL:
|
|
26
|
+
REAL: '{{ float_tme_shim }}'
|
|
27
27
|
|
|
28
28
|
# ---- Character types ----
|
|
29
29
|
# NCHAR and NVARCHAR2 must be explicitly cast to VARCHAR2 before concatenation.
|
|
@@ -43,12 +43,12 @@ NCLOB: NVL(RTRIM(CAST({{ col_name }} AS VARCHAR2(4000))), '')
|
|
|
43
43
|
LONG: NVL(RTRIM({{ col_name }}), '')
|
|
44
44
|
|
|
45
45
|
# ---- Binary / Large Object types ----
|
|
46
|
-
RAW:
|
|
47
|
-
LONG RAW:
|
|
48
|
-
BLOB:
|
|
46
|
+
RAW: RAWTOHEX({{ col_name }})
|
|
47
|
+
LONG RAW: RAWTOHEX({{ col_name }})
|
|
48
|
+
BLOB: RAWTOHEX(DBMS_LOB.SUBSTR({{ col_name }}, 4000, 1))
|
|
49
49
|
# BFILE is an external file locator; reads the first 4000 bytes via DBMS_LOB.
|
|
50
50
|
# Requires the file to be accessible from the DB server.
|
|
51
|
-
BFILE:
|
|
51
|
+
BFILE: RAWTOHEX(DBMS_LOB.SUBSTR({{ col_name }}, 4000, 1))
|
|
52
52
|
|
|
53
53
|
# ---- Row address types ----
|
|
54
54
|
# ROWID and UROWID are stored as opaque row-address strings; TRIM + NVL is sufficient.
|
|
@@ -48,7 +48,6 @@ from snowflake.snowflake_data_validation.query.query_generator_base import (
|
|
|
48
48
|
resolve_table_context_modifiers,
|
|
49
49
|
)
|
|
50
50
|
from snowflake.snowflake_data_validation.utils.constants import (
|
|
51
|
-
COL_NAME_NO_QUOTES_PLACEHOLDER,
|
|
52
51
|
NULL_HASHING_SENTINEL,
|
|
53
52
|
NULL_HASHING_SENTINEL_KEY,
|
|
54
53
|
Platform,
|
|
@@ -62,6 +61,27 @@ from snowflake.snowflake_data_validation.utils.model.table_context import TableC
|
|
|
62
61
|
LOGGER = logging.getLogger(__name__)
|
|
63
62
|
|
|
64
63
|
|
|
64
|
+
def build_oracle_float_tme_shim(col_ref: str) -> str:
|
|
65
|
+
"""Return inline Oracle SQL that renders *col_ref* in Snowflake ``TME`` shape."""
|
|
66
|
+
base = f"LOWER(TRIM(TO_CHAR({col_ref}, 'TME')))"
|
|
67
|
+
exponent_pos = f"NULLIF(INSTR({base}, 'e'), 0)"
|
|
68
|
+
mantissa = f"SUBSTR({base}, 1, {exponent_pos} - 1)"
|
|
69
|
+
exponent_int = f"CAST(SUBSTR({base}, {exponent_pos} + 1, 50) AS NUMBER)"
|
|
70
|
+
decimal_pos = f"NULLIF(INSTR({mantissa}, '.'), 0)"
|
|
71
|
+
fraction = f"SUBSTR({mantissa}, {decimal_pos} + 1, 50)"
|
|
72
|
+
fraction_trimmed = f"RTRIM({fraction}, '0')"
|
|
73
|
+
mantissa_trimmed = (
|
|
74
|
+
f"CASE WHEN {decimal_pos} IS NULL THEN {mantissa} "
|
|
75
|
+
f"ELSE SUBSTR({mantissa}, 1, {decimal_pos} - 1) || "
|
|
76
|
+
f"CASE WHEN {fraction_trimmed} IS NULL OR {fraction_trimmed} = '' THEN '' ELSE '.' || {fraction_trimmed} END END"
|
|
77
|
+
)
|
|
78
|
+
return (
|
|
79
|
+
f"CASE WHEN {col_ref} IS NULL THEN NULL "
|
|
80
|
+
f"WHEN {exponent_pos} IS NULL THEN UPPER({base}) "
|
|
81
|
+
f"ELSE ({mantissa_trimmed}) || 'E' || CAST({exponent_int} AS VARCHAR2(11)) END"
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
|
|
65
85
|
class QueryGeneratorOracle(QueryGeneratorBase):
|
|
66
86
|
"""Oracle-specific implementation of the query generator.
|
|
67
87
|
|
|
@@ -78,6 +98,9 @@ class QueryGeneratorOracle(QueryGeneratorBase):
|
|
|
78
98
|
self.jinja_env = jinja2.Environment(loader=jinja2.FileSystemLoader(str(templates_dir)))
|
|
79
99
|
self.jinja_env.globals[NULL_HASHING_SENTINEL_KEY] = NULL_HASHING_SENTINEL
|
|
80
100
|
|
|
101
|
+
def build_float_tme_shim(self, column, col_ref: str) -> str:
|
|
102
|
+
return build_oracle_float_tme_shim(col_ref)
|
|
103
|
+
|
|
81
104
|
def generate_extract_md5_rows_chunk_query(self, chunk_id: str, table_context: TableContext) -> str:
|
|
82
105
|
"""Not used in the Oracle CDV pipeline.
|
|
83
106
|
|
|
@@ -130,7 +153,10 @@ class QueryGeneratorOracle(QueryGeneratorBase):
|
|
|
130
153
|
datatypes_normalization_templates,
|
|
131
154
|
table_context,
|
|
132
155
|
)
|
|
133
|
-
renderer_templates[column.name] =
|
|
156
|
+
renderer_templates[column.name] = self.render_normalization_template(
|
|
157
|
+
normalization_template,
|
|
158
|
+
column,
|
|
159
|
+
)
|
|
134
160
|
return renderer_templates
|
|
135
161
|
|
|
136
162
|
def _build_row_md5_select(
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
from shared.query_modifiers.template_context import QueryModifiersTemplateContext
|
|
1
2
|
from snowflake.snowflake_data_validation.configuration.model.view_configuration import (
|
|
2
3
|
ViewConfiguration,
|
|
3
4
|
)
|
|
@@ -49,6 +50,7 @@ class ViewPreProcessor:
|
|
|
49
50
|
fully_qualified_temporary_table_name=view_configuration.internal_fully_qualified_name,
|
|
50
51
|
platform=context.source_platform,
|
|
51
52
|
sql_generator=context.sql_generator,
|
|
53
|
+
query_modifiers=QueryModifiersTemplateContext.empty(),
|
|
52
54
|
)
|
|
53
55
|
|
|
54
56
|
# Execute the materialization (create temporary table)
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# align with ST_ASWKT on the Snowflake side. Native point uses subscripts;
|
|
4
4
|
# PostGIS geometry/geography use ST_AsText when present.
|
|
5
5
|
# CAST(... AS ...) is used instead of :: casts so YAML parses unambiguously.
|
|
6
|
-
# BOOLEAN / BOOL: emit
|
|
6
|
+
# BOOLEAN / BOOL: emit uppercase true/false to match Snowflake.
|
|
7
7
|
# NUMERIC / DECIMAL / approximate floats: align canonical text with Snowflake ``TO_CHAR`` on the
|
|
8
8
|
# mirror (Snowflake normalization templates unchanged here — Postgres adjusts to match).
|
|
9
9
|
# DECIMAL / NUMERIC columns round-trip through NUMERIC(38, 12) before TO_CHAR so Postgres output
|
|
@@ -29,12 +29,12 @@ BIGINT: CASE WHEN "{{ col_name }}" IS NULL THEN NULL WHEN CAST("{{ col_name }}"
|
|
|
29
29
|
BIGSERIAL: CASE WHEN "{{ col_name }}" IS NULL THEN NULL WHEN CAST("{{ col_name }}" AS NUMERIC(38, 12)) = 0 THEN '0.0000' ELSE TRIM(REGEXP_REPLACE(TRIM(TO_CHAR(CAST("{{ col_name }}" AS NUMERIC(38, 12)), 'FM9999999999999999999999999999.0000')), '^\\.', '0.')) END
|
|
30
30
|
BIT: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
31
31
|
BIT VARYING: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
32
|
-
BOOL: TRIM(CASE WHEN "{{ col_name }}" IS TRUE THEN '
|
|
33
|
-
BOOLEAN: TRIM(CASE WHEN "{{ col_name }}" IS TRUE THEN '
|
|
32
|
+
BOOL: TRIM(CASE WHEN "{{ col_name }}" IS TRUE THEN 'TRUE' WHEN "{{ col_name }}" IS FALSE THEN 'FALSE' END)
|
|
33
|
+
BOOLEAN: TRIM(CASE WHEN "{{ col_name }}" IS TRUE THEN 'TRUE' WHEN "{{ col_name }}" IS FALSE THEN 'FALSE' END)
|
|
34
34
|
BOX: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
35
35
|
BPCHAR: RTRIM("{{ col_name }}")
|
|
36
|
-
# BYTEA:
|
|
37
|
-
BYTEA:
|
|
36
|
+
# BYTEA: uppercase hex without prefix (matches Snowflake HEX_ENCODE(...)).
|
|
37
|
+
BYTEA: UPPER(ENCODE("{{ col_name }}", 'hex'))
|
|
38
38
|
CHAR: RTRIM("{{ col_name }}")
|
|
39
39
|
CHARACTER: RTRIM("{{ col_name }}")
|
|
40
40
|
CHARACTER VARYING: RTRIM("{{ col_name }}")
|
|
@@ -45,9 +45,9 @@ DATERANGE: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
|
45
45
|
DECIMAL: CASE WHEN "{{ col_name }}" IS NULL THEN NULL WHEN CAST("{{ col_name }}" AS NUMERIC(38, 12)) = 0 THEN '0.0000' ELSE TRIM(REGEXP_REPLACE(TRIM(TO_CHAR(CAST("{{ col_name }}" AS NUMERIC(38, 12)), 'FM9999999999999999999999999999.0000')), '^\\.', '0.')) END
|
|
46
46
|
DEFAULT: RTRIM(CAST("{{ col_name }}" AS TEXT))
|
|
47
47
|
DOMAIN: RTRIM(CAST("{{ col_name }}" AS TEXT))
|
|
48
|
-
DOUBLE PRECISION:
|
|
48
|
+
DOUBLE PRECISION: '{{ float_tme_shim }}'
|
|
49
49
|
ENUM: RTRIM(CAST("{{ col_name }}" AS TEXT))
|
|
50
|
-
FLOAT:
|
|
50
|
+
FLOAT: '{{ float_tme_shim }}'
|
|
51
51
|
GEOGRAPHY: TRIM(ST_AsText("{{ col_name }}"))
|
|
52
52
|
GEOMETRY: TRIM(ST_AsText("{{ col_name }}"))
|
|
53
53
|
INET: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
@@ -69,7 +69,7 @@ OID: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
|
69
69
|
PATH: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
70
70
|
POINT: TRIM(FORMAT('POINT(%s %s)', ("{{ col_name }}")[0], ("{{ col_name }}")[1]))
|
|
71
71
|
POLYGON: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
72
|
-
REAL:
|
|
72
|
+
REAL: '{{ float_tme_shim }}'
|
|
73
73
|
SERIAL: CASE WHEN "{{ col_name }}" IS NULL THEN NULL WHEN CAST("{{ col_name }}" AS NUMERIC(38, 12)) = 0 THEN '0.0000' ELSE TRIM(REGEXP_REPLACE(TRIM(TO_CHAR(CAST("{{ col_name }}" AS NUMERIC(38, 12)), 'FM9999999999999999999999999999.0000')), '^\\.', '0.')) END
|
|
74
74
|
SMALLINT: CASE WHEN "{{ col_name }}" IS NULL THEN NULL WHEN CAST("{{ col_name }}" AS NUMERIC(38, 12)) = 0 THEN '0.0000' ELSE TRIM(REGEXP_REPLACE(TRIM(TO_CHAR(CAST("{{ col_name }}" AS NUMERIC(38, 12)), 'FM9999999999999999999999999999.0000')), '^\\.', '0.')) END
|
|
75
75
|
SMALLSERIAL: CASE WHEN "{{ col_name }}" IS NULL THEN NULL WHEN CAST("{{ col_name }}" AS NUMERIC(38, 12)) = 0 THEN '0.0000' ELSE TRIM(REGEXP_REPLACE(TRIM(TO_CHAR(CAST("{{ col_name }}" AS NUMERIC(38, 12)), 'FM9999999999999999999999999999.0000')), '^\\.', '0.')) END
|
|
@@ -25,7 +25,6 @@ from snowflake.snowflake_data_validation.query.query_generator_base import (
|
|
|
25
25
|
resolve_table_context_modifiers,
|
|
26
26
|
)
|
|
27
27
|
from snowflake.snowflake_data_validation.utils.constants import (
|
|
28
|
-
COL_NAME_NO_QUOTES_PLACEHOLDER,
|
|
29
28
|
NULL_HASHING_SENTINEL,
|
|
30
29
|
NULL_HASHING_SENTINEL_KEY,
|
|
31
30
|
Platform,
|
|
@@ -36,6 +35,27 @@ from snowflake.snowflake_data_validation.utils.model.table_context import TableC
|
|
|
36
35
|
LOGGER = logging.getLogger(__name__)
|
|
37
36
|
|
|
38
37
|
|
|
38
|
+
def build_postgresql_float_tme_shim(col_ref: str) -> str:
|
|
39
|
+
"""Return inline PostgreSQL SQL that renders *col_ref* in Snowflake ``TME`` shape."""
|
|
40
|
+
base = f"LOWER(TRIM(CAST({col_ref} AS TEXT)))"
|
|
41
|
+
exponent_pos = f"NULLIF(POSITION('e' IN {base}), 0)"
|
|
42
|
+
mantissa_src = f"CASE WHEN {exponent_pos} IS NULL THEN {base} ELSE SUBSTRING({base} FROM 1 FOR {exponent_pos} - 1) END"
|
|
43
|
+
exponent_int = f"CAST(TRIM(SUBSTRING({base} FROM {exponent_pos} + 1)) AS BIGINT)"
|
|
44
|
+
decimal_pos = f"NULLIF(POSITION('.' IN {mantissa_src}), 0)"
|
|
45
|
+
fraction = f"SUBSTRING({mantissa_src} FROM {decimal_pos} + 1)"
|
|
46
|
+
fraction_trimmed = f"RTRIM({fraction}, '0')"
|
|
47
|
+
mantissa_trimmed = (
|
|
48
|
+
f"CASE WHEN {decimal_pos} IS NULL THEN {mantissa_src} "
|
|
49
|
+
f"ELSE SUBSTRING({mantissa_src} FROM 1 FOR {decimal_pos} - 1) || "
|
|
50
|
+
f"CASE WHEN {fraction_trimmed} = '' THEN '' ELSE '.' || {fraction_trimmed} END END"
|
|
51
|
+
)
|
|
52
|
+
return (
|
|
53
|
+
f"CASE WHEN {col_ref} IS NULL THEN NULL "
|
|
54
|
+
f"WHEN {exponent_pos} IS NULL THEN UPPER({mantissa_trimmed}) || 'E0' "
|
|
55
|
+
f"ELSE UPPER({mantissa_trimmed}) || 'E' || TRIM(CAST({exponent_int} AS TEXT)) END"
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
|
|
39
59
|
class QueryGeneratorPostgresql(QueryGeneratorBase):
|
|
40
60
|
"""Query generator for PostgreSQL (chunked MD5 pipeline aligned with Redshift)."""
|
|
41
61
|
|
|
@@ -47,6 +67,15 @@ class QueryGeneratorPostgresql(QueryGeneratorBase):
|
|
|
47
67
|
self.jinja_env = jinja2.Environment(loader=jinja2.FileSystemLoader(str(templates_dir)))
|
|
48
68
|
self.jinja_env.globals[NULL_HASHING_SENTINEL_KEY] = NULL_HASHING_SENTINEL
|
|
49
69
|
|
|
70
|
+
def _float_column_reference(self, column) -> str:
|
|
71
|
+
return f'"{column.name}"'
|
|
72
|
+
|
|
73
|
+
def build_float_tme_shim(self, column, col_ref: str) -> str:
|
|
74
|
+
return build_postgresql_float_tme_shim(col_ref)
|
|
75
|
+
|
|
76
|
+
def _render_normalization_template(self, template: str, column) -> str:
|
|
77
|
+
return super()._render_normalization_template(template, column)
|
|
78
|
+
|
|
50
79
|
def generate_cell_validation_data_query(
|
|
51
80
|
self,
|
|
52
81
|
table_context: TableContext,
|
|
@@ -58,8 +87,10 @@ class QueryGeneratorPostgresql(QueryGeneratorBase):
|
|
|
58
87
|
for column in table_context.columns_to_validate:
|
|
59
88
|
data_type = "VARCHAR" if column.data_type == "TEXT" else column.data_type
|
|
60
89
|
normalization_template = datatypes_normalization_templates[data_type]
|
|
61
|
-
|
|
62
|
-
|
|
90
|
+
datatypes_normalization_renderer_templates[column.name] = self._render_normalization_template(
|
|
91
|
+
normalization_template,
|
|
92
|
+
column,
|
|
93
|
+
)
|
|
63
94
|
|
|
64
95
|
return table_context.sql_generator.generate_cell_validation_data_select_query(
|
|
65
96
|
platform=table_context.platform.value,
|
|
@@ -101,8 +132,10 @@ class QueryGeneratorPostgresql(QueryGeneratorBase):
|
|
|
101
132
|
normalization_template = datatypes_normalization_templates.get("DEFAULT")
|
|
102
133
|
if normalization_template is None:
|
|
103
134
|
raise ValueError(f"No normalization template found for data type {column.data_type} and no DEFAULT template available.")
|
|
104
|
-
|
|
105
|
-
|
|
135
|
+
datatypes_normalization_renderer_templates[column.name] = self._render_normalization_template(
|
|
136
|
+
normalization_template,
|
|
137
|
+
column,
|
|
138
|
+
)
|
|
106
139
|
|
|
107
140
|
column_groups = table_context.column_groups
|
|
108
141
|
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
from __future__ import annotations
|
|
19
19
|
|
|
20
|
+
from shared.query_modifiers.template_context import QueryModifiersTemplateContext
|
|
20
21
|
from snowflake.snowflake_data_validation.configuration.model.table_configuration import (
|
|
21
22
|
TableConfiguration,
|
|
22
23
|
)
|
|
@@ -41,6 +42,7 @@ def generate_view_materialization_query(
|
|
|
41
42
|
fully_qualified_temporary_table_name: str,
|
|
42
43
|
platform: Platform,
|
|
43
44
|
sql_generator: SQLQueriesTemplateGenerator,
|
|
45
|
+
query_modifiers: QueryModifiersTemplateContext | None = None,
|
|
44
46
|
) -> GeneratedQuery:
|
|
45
47
|
"""Generate a query to materialize a view as a temporary table.
|
|
46
48
|
|
|
@@ -55,6 +57,7 @@ def generate_view_materialization_query(
|
|
|
55
57
|
temporary table to create (e.g., "database.schema.temp_table_name").
|
|
56
58
|
platform: The database platform (SNOWFLAKE, SQLSERVER, etc.).
|
|
57
59
|
sql_generator: The SQLQueriesTemplateGenerator instance to use for query generation.
|
|
60
|
+
query_modifiers: Resolved source-side SQL modifiers for the view scan.
|
|
58
61
|
|
|
59
62
|
Returns:
|
|
60
63
|
GeneratedQuery: The generated DDL statement to create the temporary table.
|
|
@@ -70,6 +73,7 @@ def generate_view_materialization_query(
|
|
|
70
73
|
fully_qualified_view_name=fully_qualified_view_name,
|
|
71
74
|
platform=platform,
|
|
72
75
|
sql_generator=sql_generator,
|
|
76
|
+
query_modifiers=query_modifiers,
|
|
73
77
|
)
|
|
74
78
|
return GeneratedQuery(query_string=query_string)
|
|
75
79
|
|
|
@@ -199,9 +203,7 @@ def generate_case_sensitive_columns_query(
|
|
|
199
203
|
|
|
200
204
|
"""
|
|
201
205
|
try:
|
|
202
|
-
database_name = HelperDatabase.normalize_identifier(
|
|
203
|
-
identifier=target_database_name
|
|
204
|
-
)
|
|
206
|
+
database_name = HelperDatabase.normalize_identifier(identifier=target_database_name)
|
|
205
207
|
|
|
206
208
|
schema_name = HelperDatabase.normalize_identifier(identifier=target_schema_name)
|
|
207
209
|
|
|
@@ -15,8 +15,16 @@
|
|
|
15
15
|
|
|
16
16
|
"""Query generation package for database-specific query generators."""
|
|
17
17
|
|
|
18
|
+
from snowflake.snowflake_data_validation.query.charset_normalization import (
|
|
19
|
+
CharacterSetResolver,
|
|
20
|
+
DefaultCharacterSetResolver,
|
|
21
|
+
)
|
|
18
22
|
from snowflake.snowflake_data_validation.query.query_generator_base import (
|
|
19
23
|
QueryGeneratorBase,
|
|
20
24
|
)
|
|
21
25
|
|
|
22
|
-
__all__ = [
|
|
26
|
+
__all__ = [
|
|
27
|
+
"CharacterSetResolver",
|
|
28
|
+
"DefaultCharacterSetResolver",
|
|
29
|
+
"QueryGeneratorBase",
|
|
30
|
+
]
|