snowflake-data-validation 1.45.2__tar.gz → 1.45.3__tar.gz

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