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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (714) hide show
  1. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/PKG-INFO +26 -3
  2. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/README.md +24 -1
  3. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/pyproject.toml +2 -1
  4. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/bigquery/query/query_generator_bigquery.py +55 -18
  5. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/extractor/sql_queries_template_generator.py +35 -1
  6. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/query/query_generator_oracle.py +27 -1
  7. snowflake_data_validation-1.45.3/src/snowflake/snowflake_data_validation/query/normalization_render_context.py +51 -0
  8. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/query_generator_base.py +6 -0
  9. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_column_metrics_templates.yaml +16 -0
  10. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/query/query_generator_redshift.py +18 -0
  11. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_snowflake.py +38 -33
  12. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_column_metrics_templates.yaml +16 -0
  13. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_datatypes_normalization_templates.yaml +10 -8
  14. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_case_sensitive_columns.sql.j2 +4 -4
  15. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_columns_metadata.sql.j2 +3 -3
  16. snowflake_data_validation-1.45.3/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_iceberg_format_version.sql.j2 +2 -0
  17. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_table_metadata_query.sql.j2 +7 -7
  18. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/query/query_generator_snowflake.py +40 -21
  19. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_column_metrics_templates.yaml +4 -2
  20. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_table_metadata_query.sql.j2 +3 -0
  21. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/teradata_iso_normalization.py +1 -2
  22. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/constants.py +22 -0
  23. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/iceberg_dv_common.py +37 -1
  24. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/iso_dv_common.py +3 -1
  25. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/model/table_context.py +3 -0
  26. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/qvci_fallback.py +3 -2
  27. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/teradata_string_rtrim.py +42 -3
  28. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/data_validator_base.py +115 -1
  29. snowflake_data_validation-1.45.3/src/snowflake/snowflake_data_validation/validation/lossy_number_mapping.py +59 -0
  30. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Teradata/test_query_generator_teradata.py +33 -0
  31. snowflake_data_validation-1.45.3/tests/unit/Teradata/test_teradata_table_metadata_float_precision.py +89 -0
  32. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/bigquery/test_query_generator_bigquery.py +84 -0
  33. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/oracle/test_oracle_query_generator.py +47 -0
  34. snowflake_data_validation-1.45.3/tests/unit/query/test_normalization_render_context.py +57 -0
  35. snowflake_data_validation-1.45.3/tests/unit/snowflake/test_snowflake_get_iceberg_format_version.py +73 -0
  36. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_connector_snowflake.py +50 -0
  37. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_data_validator.py +229 -1
  38. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_float_bit_canonical.py +19 -25
  39. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_iceberg_dv_l3_normalization.py +73 -6
  40. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_iso_dv_common.py +3 -1
  41. snowflake_data_validation-1.45.3/tests/unit/test_lossy_number_mapping.py +57 -0
  42. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_metrics_tolerance.py +23 -0
  43. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_postgresql_tz_normalization.py +2 -1
  44. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_query_generator_numeric_scale.py +10 -6
  45. snowflake_data_validation-1.45.3/tests/unit/test_redshift_iceberg_timestamp_metrics.py +94 -0
  46. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_redshift_native_timestamptz_ltz.py +3 -1
  47. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_sql_literal_jinja_filter.py +51 -1
  48. snowflake_data_validation-1.45.3/tests/unit/test_teradata_string_rtrim_policy.py +305 -0
  49. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_timestamp_golden_vectors.py +26 -10
  50. snowflake_data_validation-1.45.1/tests/unit/test_teradata_string_rtrim_policy.py +0 -170
  51. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/.gitignore +0 -0
  52. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/LICENSE +0 -0
  53. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/docs/README.md +0 -0
  54. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/__init__.py +0 -0
  55. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/__init__.py +0 -0
  56. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/azure_synapse_arguments_manager.py +0 -0
  57. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/connector/__init__.py +0 -0
  58. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_azure_synapse.py +0 -0
  59. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_factory_azure_synapse.py +0 -0
  60. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/__init__.py +0 -0
  61. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/metadata_extractor_azure_synapse.py +0 -0
  62. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_cell_validation_data_select.sql.j2 +0 -0
  63. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_column_metrics_templates.yaml +0 -0
  64. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_datatypes_normalization_templates.yaml +0 -0
  65. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_get_columns_metadata.sql.j2 +0 -0
  66. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_count_query.sql.j2 +0 -0
  67. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_md5_select.sql.j2 +0 -0
  68. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_table_metadata_query.sql.j2 +0 -0
  69. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_to_snowflake_datatypes_mapping_template.yaml +0 -0
  70. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/model/__init__.py +0 -0
  71. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/model/azure_synapse_credentials_connection.py +0 -0
  72. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/query/__init__.py +0 -0
  73. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/query/query_generator_azure_synapse.py +0 -0
  74. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/__init__.py +0 -0
  75. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/script_writer_azure_synapse.py +0 -0
  76. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/bigquery/__init__.py +0 -0
  77. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/bigquery/extractor/__init__.py +0 -0
  78. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_cell_validation_data_select.sql.j2 +0 -0
  79. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_column_metrics_templates.yaml +0 -0
  80. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_datatypes_normalization_templates.yaml +0 -0
  81. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_get_columns_metadata.sql.j2 +0 -0
  82. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_count_query.sql.j2 +0 -0
  83. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_md5_select.sql.j2 +0 -0
  84. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_table_metadata_query.sql.j2 +0 -0
  85. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_to_snowflake_datatypes_mapping_template.yaml +0 -0
  86. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/bigquery/query/__init__.py +0 -0
  87. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/comparison_orchestrator.py +0 -0
  88. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/configuration/__init__.py +0 -0
  89. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/configuration/configuration_loader.py +0 -0
  90. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/configuration/model/configuration_model.py +0 -0
  91. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/configuration/model/connection_types.py +0 -0
  92. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/configuration/model/connections/__init__.py +0 -0
  93. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/configuration/model/logging_configuration.py +0 -0
  94. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/configuration/model/table_configuration.py +0 -0
  95. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/configuration/model/validation_configuration.py +0 -0
  96. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/configuration/model/view_configuration.py +0 -0
  97. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/configuration/singleton.py +0 -0
  98. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/connector/__init__.py +0 -0
  99. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/connector/connector_base.py +0 -0
  100. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/connector/connector_factory_base.py +0 -0
  101. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/connector/connector_failure_tracker.py +0 -0
  102. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/__init__.py +0 -0
  103. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/db2_lob_normalization.py +0 -0
  104. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/extractor/__init__.py +0 -0
  105. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/extractor/metadata_extractor_db2.py +0 -0
  106. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_cell_validation_data_select.sql.j2 +0 -0
  107. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_column_metrics_templates.yaml +0 -0
  108. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_datatypes_normalization_templates.yaml +0 -0
  109. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_get_columns_metadata.sql.j2 +0 -0
  110. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_count_query.sql.j2 +0 -0
  111. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_md5_select.sql.j2 +0 -0
  112. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_table_metadata_query.sql.j2 +0 -0
  113. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_to_snowflake_datatypes_mapping_template.yaml +0 -0
  114. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/query/__init__.py +0 -0
  115. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/query/query_generator_db2.py +0 -0
  116. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/script_writer/__init__.py +0 -0
  117. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/db2/script_writer/script_writer_db2.py +0 -0
  118. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/executer/__init__.py +0 -0
  119. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/executer/async_generation_executor.py +0 -0
  120. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/executer/async_validation_executor.py +0 -0
  121. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/executer/base_validation_executor.py +0 -0
  122. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/executer/executor_factory.py +0 -0
  123. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/executer/extractor_types.py +0 -0
  124. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/executer/source_validation_executor.py +0 -0
  125. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/executer/sync_validation_executor.py +0 -0
  126. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/extractor/__init__.py +0 -0
  127. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/extractor/metadata_extractor_base.py +0 -0
  128. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/__init__.py +0 -0
  129. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/extractor/__init__.py +0 -0
  130. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/extractor/metadata_extractor_oracle.py +0 -0
  131. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_cell_validation_data_select.sql.j2 +0 -0
  132. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_column_metrics_templates.yaml +0 -0
  133. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_datatypes_normalization_templates.yaml +0 -0
  134. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_get_columns_metadata.sql.j2 +0 -0
  135. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_count_query.sql.j2 +0 -0
  136. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_md5_select.sql.j2 +0 -0
  137. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_table_metadata_query.sql.j2 +0 -0
  138. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_to_snowflake_datatypes_mapping_template.yaml +0 -0
  139. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/oracle_bfile.py +0 -0
  140. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/oracle_iso_normalization.py +0 -0
  141. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/oracle_lob_normalization.py +0 -0
  142. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/oracle_statement_functions.py +0 -0
  143. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/oracle_vector_extraction.py +0 -0
  144. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/oracle_xmltype.py +0 -0
  145. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/query/__init__.py +0 -0
  146. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/script_writer/__init__.py +0 -0
  147. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/oracle/script_writer/script_writer_oracle.py +0 -0
  148. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/orchestration/html_report/__init__.py +0 -0
  149. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/orchestration/html_report/html_report_builder.py +0 -0
  150. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/orchestration/html_report/report_metadata.py +0 -0
  151. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/orchestration/parallel_execution_engine.py +0 -0
  152. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/orchestration/table_metadata_processor.py +0 -0
  153. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/orchestration/validation_progress_reporter.py +0 -0
  154. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/orchestration/view_preprocessor.py +0 -0
  155. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/__init__.py +0 -0
  156. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/connector/__init__.py +0 -0
  157. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_factory_postgresql.py +0 -0
  158. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_postgresql.py +0 -0
  159. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/__init__.py +0 -0
  160. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/metadata_extractor_postgresql.py +0 -0
  161. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_cell_validation_data_select.sql.j2 +0 -0
  162. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_concatenated_insert_template.sql.j2 +0 -0
  163. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_concatenated_table_template.sql.j2 +0 -0
  164. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_md5_insert_template.sql.j2 +0 -0
  165. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_md5_table_template.sql.j2 +0 -0
  166. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_column_metrics_templates.yaml +0 -0
  167. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_datatypes_normalization_templates.yaml +0 -0
  168. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_extract_md5_rows_chunk.sql.j2 +0 -0
  169. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_get_columns_metadata.sql.j2 +0 -0
  170. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_count_query.sql.j2 +0 -0
  171. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_md5_select.sql.j2 +0 -0
  172. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_table_metadata_query.sql.j2 +0 -0
  173. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_to_snowflake_datatypes_mapping_template.yaml +0 -0
  174. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/model/__init__.py +0 -0
  175. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/model/postgresql_credentials_connection.py +0 -0
  176. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/postgresql_arguments_manager.py +0 -0
  177. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/postgresql_tz_normalization.py +0 -0
  178. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/query/__init__.py +0 -0
  179. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/query/charset_normalization.py +0 -0
  180. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/query/query_generator_postgresql.py +0 -0
  181. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/script_writer/__init__.py +0 -0
  182. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/postgresql/script_writer/script_writer_postgresql.py +0 -0
  183. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/DATA_VALIDATION_API_OVERVIEW.md +0 -0
  184. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/__init__.py +0 -0
  185. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/_internal.py +0 -0
  186. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/_teradata_internal.py +0 -0
  187. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/async_mode/__init__.py +0 -0
  188. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/async_mode/file_loader.py +0 -0
  189. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/async_mode/script_writer.py +0 -0
  190. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/cli/__init__.py +0 -0
  191. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/cli/commands.py +0 -0
  192. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/configuration/__init__.py +0 -0
  193. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/connectors/__init__.py +0 -0
  194. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/context/__init__.py +0 -0
  195. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/data_validation_api.py +0 -0
  196. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/enums/__init__.py +0 -0
  197. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/execution/__init__.py +0 -0
  198. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/execution/query_executor.py +0 -0
  199. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/generators/__init__.py +0 -0
  200. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/metadata/__init__.py +0 -0
  201. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/model/__init__.py +0 -0
  202. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/model/data_validation_exception.py +0 -0
  203. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/model/generated_query.py +0 -0
  204. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/model/metrics_result_shape.py +0 -0
  205. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/model/query_execution_result.py +0 -0
  206. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/model/query_generator_factory.py +0 -0
  207. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/model/result_set.py +0 -0
  208. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/model/validation_progress_callback.py +0 -0
  209. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/model/validation_result.py +0 -0
  210. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/query_generation/__init__.py +0 -0
  211. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/query_generation/metadata_queries.py +0 -0
  212. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/query_generation/row_validation_queries.py +0 -0
  213. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/query_generation/schema_metrics_queries.py +0 -0
  214. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/query_validation/__init__.py +0 -0
  215. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/query_validation/query_comparison.py +0 -0
  216. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/reshape/__init__.py +0 -0
  217. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/reshape/metrics_reshape.py +0 -0
  218. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/result_set_validation/__init__.py +0 -0
  219. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/result_set_validation/result_set_comparison.py +0 -0
  220. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/snapshot/__init__.py +0 -0
  221. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_generation.py +0 -0
  222. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_validation.py +0 -0
  223. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/utils/__init__.py +0 -0
  224. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/utils/helpers.py +0 -0
  225. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/validation/__init__.py +0 -0
  226. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/validation/cell_validation.py +0 -0
  227. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/validation/metrics_validation.py +0 -0
  228. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/validation/row_validation.py +0 -0
  229. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/public/validation/schema_validation.py +0 -0
  230. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/__init__.py +0 -0
  231. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/charset_normalization.py +0 -0
  232. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/chunk_md5_tiered.py +0 -0
  233. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/decimal_text_normalization.py +0 -0
  234. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_column_metrics_templates.yaml +0 -0
  235. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_datatypes_normalization_templates.yaml +0 -0
  236. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_modifiers.sql.j2 +0 -0
  237. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/float_aggregate_reduction.py +0 -0
  238. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/float_bit_normalization.py +0 -0
  239. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/numeric_scale_resolution.py +0 -0
  240. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/query/query_generator_query.py +0 -0
  241. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/query_arguments_manager.py +0 -0
  242. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/sql_type_families.py +0 -0
  243. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/time_precision_resolution.py +0 -0
  244. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/tsql_float_remainder.py +0 -0
  245. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/query/vector_element_kind.py +0 -0
  246. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/__init__.py +0 -0
  247. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/connector/__init__.py +0 -0
  248. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/connector/connector_factory_redshift.py +0 -0
  249. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/connector/connector_redshift.py +0 -0
  250. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/metadata_extractor_redshift.py +0 -0
  251. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_cell_validation_data_select.sql.j2 +0 -0
  252. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_insert_template.sql.j2 +0 -0
  253. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_table_template.sql.j2 +0 -0
  254. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_insert_template.sql.j2 +0 -0
  255. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_table_template.sql.j2 +0 -0
  256. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_datatypes_normalization_templates.yaml +0 -0
  257. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_extract_md5_rows_chunk.sql.j2 +0 -0
  258. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_get_columns_metadata.sql.j2 +0 -0
  259. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_count_query.sql.j2 +0 -0
  260. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_md5_select.sql.j2 +0 -0
  261. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_show_columns_query.sql.j2 +0 -0
  262. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_to_snowflake_datatypes_mapping_template.yaml +0 -0
  263. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/model/__init__.py +0 -0
  264. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/model/redshift_credentials_connection.py +0 -0
  265. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/query/__init__.py +0 -0
  266. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/query/charset_normalization.py +0 -0
  267. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/redshift_arguments_manager.py +0 -0
  268. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/redshift_super_normalization.py +0 -0
  269. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/script_writer/__init__.py +0 -0
  270. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/redshift/script_writer/script_writer_redshift.py +0 -0
  271. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_cell_validation_data_select.sql.j2 +0 -0
  272. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_column_metrics_templates.yaml +0 -0
  273. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_datatypes_normalization_templates.yaml +0 -0
  274. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/snowflake_to_result_set_datatypes_mapping_template.yaml +0 -0
  275. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/result_set/query/query_generator_result_set.py +0 -0
  276. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/result_set/result_set_arguments_manager.py +0 -0
  277. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/script_writer/__init__.py +0 -0
  278. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/script_writer/script_writer_base.py +0 -0
  279. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/__init__.py +0 -0
  280. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_factory_snowflake.py +0 -0
  281. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/metadata_extractor_snowflake.py +0 -0
  282. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/_wkt_despace.sql.j2 +0 -0
  283. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_cell_validation_data_select.sql.j2 +0 -0
  284. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_concatenated_template.sql.j2 +0 -0
  285. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_md5_template.sql.j2 +0 -0
  286. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_extract_md5_rows_chunk.sql.j2 +0 -0
  287. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_count_query.sql.j2 +0 -0
  288. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_md5_select.sql.j2 +0 -0
  289. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_temporary_table_from_view_template.sql.j2 +0 -0
  290. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_to_snowflake_datatypes_mapping_template.yaml +0 -0
  291. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/l3/__init__.py +0 -0
  292. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/l3/pushdown_diff_sql.py +0 -0
  293. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/l3/signature_external_table.py +0 -0
  294. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/l3/warm_start.py +0 -0
  295. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/model/__init__.py +0 -0
  296. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_credentials_connection.py +0 -0
  297. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_default_connection.py +0 -0
  298. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_named_connection.py +0 -0
  299. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/query/__init__.py +0 -0
  300. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/query/charset_normalization.py +0 -0
  301. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/script_writer/__init__.py +0 -0
  302. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/script_writer/script_writer_snowflake.py +0 -0
  303. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/snowflake/snowflake_arguments_manager.py +0 -0
  304. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/__init__.py +0 -0
  305. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/connector/__init__.py +0 -0
  306. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_factory_sqlite.py +0 -0
  307. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_sqlite.py +0 -0
  308. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/__init__.py +0 -0
  309. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/metadata_extractor_sqlite.py +0 -0
  310. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_cell_validation_data_select.sql.j2 +0 -0
  311. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_column_metrics_templates.yaml +0 -0
  312. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_compute_md5_sql.j2 +0 -0
  313. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_datatypes_normalization_templates.yaml +0 -0
  314. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_extract_md5_rows_chunk.sql.j2 +0 -0
  315. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_get_columns_metadata.sql.j2 +0 -0
  316. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_count_query.sql.j2 +0 -0
  317. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_md5_select.sql.j2 +0 -0
  318. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_table_metadata_query.sql.j2 +0 -0
  319. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_snowflake_datatypes_mapping_template.yaml +0 -0
  320. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_sqlite_datatypes_mapping_template.yaml +0 -0
  321. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/model/__init__.py +0 -0
  322. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/model/sqlite_connection.py +0 -0
  323. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/query/__init__.py +0 -0
  324. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/query/query_generator_sqlite.py +0 -0
  325. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/script_writer/__init__.py +0 -0
  326. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlite/script_writer/script_writer_sqlite.py +0 -0
  327. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/__init__.py +0 -0
  328. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/connector/__init__.py +0 -0
  329. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_factory_sql_server.py +0 -0
  330. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_sql_server.py +0 -0
  331. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/__init__.py +0 -0
  332. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/metadata_extractor_sqlserver.py +0 -0
  333. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_cell_validation_data_select.sql.j2 +0 -0
  334. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_column_metrics_templates.yaml +0 -0
  335. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_compute_md5_sql.j2 +0 -0
  336. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_datatypes_normalization_templates.yaml +0 -0
  337. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_extract_md5_rows_chunk.sql.j2 +0 -0
  338. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_columns_metadata.sql.j2 +0 -0
  339. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_temporary_table_internal_identifier_template.sql.j2 +0 -0
  340. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_count_query.sql.j2 +0 -0
  341. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_md5_select.sql.j2 +0 -0
  342. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_table_metadata_query.sql.j2 +0 -0
  343. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_temporary_table_from_view_template.sql.j2 +0 -0
  344. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_to_snowflake_datatypes_mapping_template.yaml +0 -0
  345. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/model/__init__.py +0 -0
  346. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/model/sqlserver_credentials_connection.py +0 -0
  347. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/query/__init__.py +0 -0
  348. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/query/charset_normalization.py +0 -0
  349. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/query/query_generator_sqlserver.py +0 -0
  350. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/__init__.py +0 -0
  351. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/script_writer_sqlserver.py +0 -0
  352. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_arguments_manager.py +0 -0
  353. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_string_length_normalization.py +0 -0
  354. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_tz_normalization.py +0 -0
  355. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_uniqueidentifier_normalization.py +0 -0
  356. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/table_partitioning_strategy.md +0 -0
  357. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/__init__.py +0 -0
  358. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/connector/__init__.py +0 -0
  359. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/connector/connector_factory_teradata.py +0 -0
  360. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/connector/connector_teradata.py +0 -0
  361. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/__init__.py +0 -0
  362. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/metadata_extractor_teradata.py +0 -0
  363. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_cell_validation_data_select.sql.j2 +0 -0
  364. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_compute_md5_sql.j2 +0 -0
  365. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_concatenated.sql.j2 +0 -0
  366. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_md5.sql.j2 +0 -0
  367. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_datatypes_normalization_templates.yaml +0 -0
  368. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_extract_md5_rows_chunk.sql.j2 +0 -0
  369. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_get_columns_metadata.sql.j2 +0 -0
  370. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_count_query.sql.j2 +0 -0
  371. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_md5_select.sql.j2 +0 -0
  372. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_to_snowflake_datatypes_mapping_template.yaml +0 -0
  373. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/model/__init__.py +0 -0
  374. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/model/teradata_credentials_connection.py +0 -0
  375. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/query/__init__.py +0 -0
  376. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/query/charset_normalization.py +0 -0
  377. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/query/query_generator_teradata.py +0 -0
  378. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/script_writer/__init__.py +0 -0
  379. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/script_writer/script_writer_teradata.py +0 -0
  380. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/teradata/teradata_arguments_manager.py +0 -0
  381. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/__init__.py +0 -0
  382. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/arguments_manager_base.py +0 -0
  383. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/arguments_manager_factory.py +0 -0
  384. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/base_output_handler.py +0 -0
  385. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/catalog_column_size.py +0 -0
  386. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/column_grouping.py +0 -0
  387. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/column_partitioning_strategy.py +0 -0
  388. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/configuration_file_editor.py +0 -0
  389. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/configuration_file_generator.py +0 -0
  390. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/configuration_file_synchronizer.py +0 -0
  391. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/connection_pool.py +0 -0
  392. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/connector_factory.py +0 -0
  393. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/console_output_handler.py +0 -0
  394. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/context.py +0 -0
  395. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/cpu_optimizer.py +0 -0
  396. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/dv_tracing.py +0 -0
  397. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/error_classifier.py +0 -0
  398. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/helper.py +0 -0
  399. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/helpers/helper_database.py +0 -0
  400. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/helpers/helper_dataframe.py +0 -0
  401. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/helpers/helper_io.py +0 -0
  402. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/helpers/helper_misc.py +0 -0
  403. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/helpers/helper_polars_cast.py +0 -0
  404. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/helpers/helper_query_result.py +0 -0
  405. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/helpers/helper_templates.py +0 -0
  406. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/index_key_format.py +0 -0
  407. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/interval_common.py +0 -0
  408. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/lob_source_types.py +0 -0
  409. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/logging_config.py +0 -0
  410. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/logging_utils.py +0 -0
  411. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/measure_collation.py +0 -0
  412. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/model/chunk.py +0 -0
  413. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/model/column_metadata.py +0 -0
  414. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/model/column_selection.py +0 -0
  415. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/model/custom_templates.py +0 -0
  416. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/model/table_column_metadata.py +0 -0
  417. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/model/templates_loader_manager.py +0 -0
  418. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/period_common.py +0 -0
  419. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/progress_reporter.py +0 -0
  420. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/row_partitioning_strategy.py +0 -0
  421. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/row_validation_lob_exclusion.py +0 -0
  422. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/run_context.py +0 -0
  423. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/semi_structured_json_canonicalization.py +0 -0
  424. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/shutdown_coordinator.py +0 -0
  425. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/snapshot_validation_statements.py +0 -0
  426. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/telemetry.py +0 -0
  427. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/templates/configuration_file_templates.py +0 -0
  428. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/thread_safe_singleton.py +0 -0
  429. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/validation_utils.py +0 -0
  430. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/vector_common.py +0 -0
  431. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/utils/vector_normalization.py +0 -0
  432. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/__init__.py +0 -0
  433. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/accepted_transformation.py +0 -0
  434. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/cell_data_validator.py +0 -0
  435. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/column_pairing.py +0 -0
  436. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/comparison_codec.py +0 -0
  437. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/dataframe_validator_base.py +0 -0
  438. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/metrics_data_validator.py +0 -0
  439. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/metrics_tolerance.py +0 -0
  440. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/object_type_criterion.py +0 -0
  441. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/__init__.py +0 -0
  442. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/base.py +0 -0
  443. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/db2.py +0 -0
  444. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/redshift.py +0 -0
  445. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/registry.py +0 -0
  446. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/snowflake.py +0 -0
  447. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlite.py +0 -0
  448. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlserver.py +0 -0
  449. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/teradata.py +0 -0
  450. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/query_validator.py +0 -0
  451. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/result_set_validator.py +0 -0
  452. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/results_summary_report.py +0 -0
  453. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/row_data_validator.py +0 -0
  454. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/row_validation_report_buffer.py +0 -0
  455. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/schema_data_validator.py +0 -0
  456. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/validation_database/__init__.py +0 -0
  457. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/validation_database/sqlite_validation_connection.py +0 -0
  458. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/validation_database/validation_database_connection_base.py +0 -0
  459. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/validation_database_manager.py +0 -0
  460. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/validation_execution_context.py +0 -0
  461. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/validation_report_buffer.py +0 -0
  462. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/src/snowflake/snowflake_data_validation/validation/validation_report_status.py +0 -0
  463. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/.coveragerc +0 -0
  464. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/conftest.py +0 -0
  465. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/integration/.coveragerc +0 -0
  466. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/integration/Redshift/test_metadata_extractor_integration.py +0 -0
  467. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/integration/test_async_generation_integration.py +0 -0
  468. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/integration/test_async_validation_integration.py +0 -0
  469. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/integration/test_reference_integration.py +0 -0
  470. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/integration/test_source_validation_integration.py +0 -0
  471. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/integration/test_sync_validation_integration.py +0 -0
  472. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Postgresql/test_postgresql_bit_count_distinct.py +0 -0
  473. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Postgresql/test_postgresql_collation.py +0 -0
  474. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Postgresql/test_postgresql_enum_metadata.py +0 -0
  475. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Postgresql/test_postgresql_json_cell_validation.py +0 -0
  476. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Postgresql/test_postgresql_jsonb_row_hash.py +0 -0
  477. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Postgresql/test_postgresql_numeric_leading_zero.py +0 -0
  478. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Postgresql/test_postgresql_spatial_templates.py +0 -0
  479. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/model/test_redshift_credentials_connection.py +0 -0
  480. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/query/test_query_generator_redshift.py +0 -0
  481. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/script_writer/test_script_writer_redshift.py +0 -0
  482. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/test_connector_redshift.py +0 -0
  483. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/test_redshift_arguments_manager.py +0 -0
  484. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/test_redshift_collation.py +0 -0
  485. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/test_redshift_columns_metadata_template.py +0 -0
  486. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/test_redshift_hllsketch_templates.py +0 -0
  487. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/test_redshift_spatial_templates.py +0 -0
  488. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/test_redshift_split_schema_query.py +0 -0
  489. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/test_redshift_super_normalization.py +0 -0
  490. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/test_redshift_timetz_sentinel_normalization.py +0 -0
  491. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Redshift/test_redshift_varchar_count_distinct.py +0 -0
  492. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Teradata/test_connector_teradata.py +0 -0
  493. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Teradata/test_metadata_extractor_teradata.py +0 -0
  494. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Teradata/test_period_varchar_l1.py +0 -0
  495. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Teradata/test_teradata_collation.py +0 -0
  496. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Teradata/test_teradata_columns_metadata_precision_scale.py +0 -0
  497. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Teradata/test_teradata_row_md5_select_template.py +0 -0
  498. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Teradata/test_teradata_spatial_templates.py +0 -0
  499. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Teradata/test_teradata_view_generate_boundary.py +0 -0
  500. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/Teradata/test_teradata_view_l1_metadata_templates.py +0 -0
  501. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/__init__.py +0 -0
  502. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/assets/custom_templates_loader/snowflake_column_metrics_templates.yaml +0 -0
  503. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/assets/custom_templates_loader/snowflake_datatypes_normalization_templates.yaml +0 -0
  504. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/assets/custom_templates_loader/snowflake_table_metadata_query.sql.j2 +0 -0
  505. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/assets/test_configuration_loader/test_load_configuration_model/conf.yaml +0 -0
  506. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/assets/test_configuration_loader/test_load_configuration_model_reading_file_exception/conf.yaml +0 -0
  507. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/assets/test_helpers/dummy_configuration_file.json +0 -0
  508. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/assets/test_helpers/dummy_connection_source_db.toml +0 -0
  509. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/assets/test_helpers/dummy_datatypes_normalization_template.yaml +0 -0
  510. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/assets/test_helpers/dummy_datatypes_template.yaml +0 -0
  511. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/assets/test_helpers/dummy_metrics_template.yaml +0 -0
  512. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/assets/test_helpers/dummy_metrics_template_datatypes.yaml +0 -0
  513. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/assets/test_helpers/dummy_template.csv +0 -0
  514. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/assets/test_helpers/not_valid_format.yaml +0 -0
  515. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/assets/test_templates_loader_manager/snowflake_column_metrics_templates.yaml +0 -0
  516. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/assets/test_templates_loader_manager/snowflake_datatypes_normalization_templates.yaml +0 -0
  517. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/azure_synapse/__init__.py +0 -0
  518. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/azure_synapse/test_azure_synapse_credentials_connection.py +0 -0
  519. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/azure_synapse/test_azure_synapse_l3_convert_normalization.py +0 -0
  520. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/azure_synapse/test_azure_synapse_metadata_extractor.py +0 -0
  521. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/azure_synapse/test_azure_synapse_metrics_templates.py +0 -0
  522. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/azure_synapse/test_azure_synapse_query_generator.py +0 -0
  523. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/azure_synapse/test_azure_synapse_row_queries.py +0 -0
  524. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/azure_synapse/test_connector_azure_synapse.py +0 -0
  525. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/azure_synapse/test_connector_factory_azure_synapse.py +0 -0
  526. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/bigquery/__init__.py +0 -0
  527. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/bigquery/test_bigquery_l1_string_length.py +0 -0
  528. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/bigquery/test_bigquery_spatial_templates.py +0 -0
  529. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/bigquery/test_query_generator_factory_bigquery.py +0 -0
  530. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/conftest.py +0 -0
  531. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/db2/__init__.py +0 -0
  532. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/db2/test_db2_lob_dv_generation.py +0 -0
  533. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/db2/test_db2_metadata_extractor.py +0 -0
  534. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/db2/test_db2_query_generator.py +0 -0
  535. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/db2/test_db2_registration.py +0 -0
  536. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/db2/test_db2_xml_long_dv_generation.py +0 -0
  537. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/db2/test_db2_xml_long_metrics.py +0 -0
  538. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/oracle/__init__.py +0 -0
  539. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/oracle/test_metadata_extractor_oracle_vector.py +0 -0
  540. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/oracle/test_oracle_configured_index_columns.py +0 -0
  541. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/oracle/test_oracle_iso_normalization.py +0 -0
  542. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/oracle/test_oracle_lob_dv_generation.py +0 -0
  543. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/oracle/test_oracle_lob_normalization.py +0 -0
  544. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/oracle/test_oracle_metadata_extractor.py +0 -0
  545. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/oracle/test_oracle_metrics_templates.py +0 -0
  546. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/oracle/test_oracle_normalization_templates.py +0 -0
  547. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/oracle/test_oracle_query_modifiers.py +0 -0
  548. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/oracle/test_oracle_quoted_identifiers.py +0 -0
  549. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/oracle/test_oracle_type_mappings.py +0 -0
  550. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/query/test_chunk_md5_tiered.py +0 -0
  551. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/query/test_time_fraction_rendering.py +0 -0
  552. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/snowflake/test_snowflake_get_case_sensitive_columns.py +0 -0
  553. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/snowflake/test_snowflake_spatial_metrics_templates.py +0 -0
  554. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlite/__init__.py +0 -0
  555. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlite/test_connector_factory_sqlite.py +0 -0
  556. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlite/test_connector_sqlite.py +0 -0
  557. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlite/test_metadata_extractor_sqlite.py +0 -0
  558. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlite/test_metadata_query_template_sqlite.py +0 -0
  559. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlite/test_query_generator_sqlite.py +0 -0
  560. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlite/test_script_writer_sqlite.py +0 -0
  561. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/__init__.py +0 -0
  562. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_connector_factory_sql_server.py +0 -0
  563. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_metadata_extractor_sqlserver_vector.py +0 -0
  564. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_datetimeoffset_full_ingest_utc.py +0 -0
  565. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_datetimeoffset_metrics_utc.py +0 -0
  566. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_datetimeoffset_physical_target.py +0 -0
  567. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_json.py +0 -0
  568. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_l1_catalog.py +0 -0
  569. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_l1_character_length.py +0 -0
  570. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_l3_convert_normalization.py +0 -0
  571. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_length_metrics_chars.py +0 -0
  572. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_row_count_overflow.py +0 -0
  573. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_row_queries.py +0 -0
  574. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_spatial_l1_metadata.py +0 -0
  575. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_spatial_metrics_templates.py +0 -0
  576. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_string_length_pairing.py +0 -0
  577. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_uniqueidentifier_l3_normalization.py +0 -0
  578. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_sqlserver_xml_image_metrics.py +0 -0
  579. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/sqlserver/test_tsql_integer_stddev_exact.py +0 -0
  580. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_accepted_transformation.py +0 -0
  581. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_arguments_manager_base.py +0 -0
  582. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_arguments_manager_factory.py +0 -0
  583. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_batched_metrics_queries.py +0 -0
  584. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_boolean_binary_canonical_templates.py +0 -0
  585. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_case_sensitive_column_pairing.py +0 -0
  586. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_catalog_column_size.py +0 -0
  587. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_catalog_queries_take_actual_names.py +0 -0
  588. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_cell_data_validator.py +0 -0
  589. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_cell_data_validator_threading.py +0 -0
  590. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_cell_validation_query_generation.py +0 -0
  591. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_charset_normalization.py +0 -0
  592. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_column_grouping.py +0 -0
  593. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_column_metadata.py +0 -0
  594. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_column_normalization_override.py +0 -0
  595. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_column_partitioning_strategy.py +0 -0
  596. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_column_selection.py +0 -0
  597. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_column_selection_actual_names.py +0 -0
  598. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_comparison_codec.py +0 -0
  599. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_comparison_orchestrator.py +0 -0
  600. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_configuration_file_editor.py +0 -0
  601. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_configuration_file_generator.py +0 -0
  602. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_configuration_file_synchronizer.py +0 -0
  603. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_configuration_loader.py +0 -0
  604. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_configuration_model.py +0 -0
  605. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_connection_pool.py +0 -0
  606. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_connector_failure_tracker.py +0 -0
  607. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_cpu_optimizer.py +0 -0
  608. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_custom_templates_models.py +0 -0
  609. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_decimal_text_canonical.py +0 -0
  610. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_dv_tracing.py +0 -0
  611. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_error_classifier.py +0 -0
  612. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_escape_odbc_value.py +0 -0
  613. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_executor_factory.py +0 -0
  614. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_extraction_keeps_catalog_column_spelling.py +0 -0
  615. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_fetch_schema_metadata.py +0 -0
  616. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_float_aggregate_reduction.py +0 -0
  617. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_float_canonical_templates.py +0 -0
  618. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_get_configuration_file.py +0 -0
  619. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_get_target_cols.py +0 -0
  620. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_helper_dataframe.py +0 -0
  621. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_helper_io.py +0 -0
  622. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_helper_polars_cast.py +0 -0
  623. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_helper_polars_cast_threading.py +0 -0
  624. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_helpers.py +0 -0
  625. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_html_report_builder.py +0 -0
  626. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_iceberg_v2_metrics_exclusion.py +0 -0
  627. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_index_key_format.py +0 -0
  628. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_internal_helpers.py +0 -0
  629. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_interval_common.py +0 -0
  630. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_l2_collation_metadata.py +0 -0
  631. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_l2_count_distinct_opt_in_config.py +0 -0
  632. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_logging_config.py +0 -0
  633. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_metric_identifier_rendering.py +0 -0
  634. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_metrics_reshape.py +0 -0
  635. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_metrics_result_shape.py +0 -0
  636. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_metrics_templates_casts.py +0 -0
  637. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_normalize_shape_aware.py +0 -0
  638. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_numeric_scale_resolution.py +0 -0
  639. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_object_type_criterion.py +0 -0
  640. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_parallel_execution_engine_fatal_errors.py +0 -0
  641. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_period_common.py +0 -0
  642. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_platform_bridge.py +0 -0
  643. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_postgresql_normalization_templates.py +0 -0
  644. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_pushdown_diff_sql.py +0 -0
  645. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_query_cell_level_validation.py +0 -0
  646. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_query_executor.py +0 -0
  647. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_query_metrics_level_validation.py +0 -0
  648. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_query_to_dataframe.py +0 -0
  649. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_query_validator.py +0 -0
  650. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_qvci_fallback.py +0 -0
  651. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_qvci_fallback_na_skip.py +0 -0
  652. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_qvci_fallback_triggers.py +0 -0
  653. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_report_metadata.py +0 -0
  654. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_result_set_cell_level_validation.py +0 -0
  655. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_result_set_column_metrics_validation.py +0 -0
  656. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_result_set_snapshot_generation.py +0 -0
  657. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_result_set_snapshot_validation.py +0 -0
  658. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_result_set_to_dataframe.py +0 -0
  659. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_result_set_validator.py +0 -0
  660. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_row_count_bigint_overflow.py +0 -0
  661. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_row_data_validator.py +0 -0
  662. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_row_data_validator_empty_chunk.py +0 -0
  663. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_row_hash_column_delimiter.py +0 -0
  664. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_row_partitioning_strategy.py +0 -0
  665. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_row_validation_lob_exclusion.py +0 -0
  666. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_row_validation_report_buffer.py +0 -0
  667. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_schema_accepted_native_datatypes.py +0 -0
  668. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_schema_column_selection.py +0 -0
  669. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_schema_query_capability.py +0 -0
  670. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_shutdown_coordinator.py +0 -0
  671. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_signature_external_table.py +0 -0
  672. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_signature_row_md5_query.py +0 -0
  673. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_snapshot_validation_statements.py +0 -0
  674. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_snowflake_arguments_manager.py +0 -0
  675. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_snowflake_binary_normalization_templates.py +0 -0
  676. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_snowflake_redshift_super_size_guard.py +0 -0
  677. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_source_validation_executor.py +0 -0
  678. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_spatial_wkt_canonicalization.py +0 -0
  679. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_sql_catalog_template_guard.py +0 -0
  680. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_sqlite_validation_connection.py +0 -0
  681. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_sqlserver_arguments_manager.py +0 -0
  682. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_sqlserver_multi_version_support.py +0 -0
  683. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_sync_executor_qvci_fallback.py +0 -0
  684. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_sync_schema_validation_real_callbacks.py +0 -0
  685. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_sync_validation_executor.py +0 -0
  686. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_table_column_metadata_model.py +0 -0
  687. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_table_configuration.py +0 -0
  688. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_table_context.py +0 -0
  689. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_table_metadata_processor.py +0 -0
  690. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_table_snapshot_generation.py +0 -0
  691. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_table_snapshot_validation.py +0 -0
  692. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_target_platform_factory.py +0 -0
  693. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_telemetry.py +0 -0
  694. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_templates_loader_manager.py +0 -0
  695. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_teradata_iso_normalization.py +0 -0
  696. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_teradata_timetz_metric_domain.py +0 -0
  697. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_teradata_type_code_mapping.py +0 -0
  698. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_trace_bridge.py +0 -0
  699. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_tsql_float_l2_aggregates.py +0 -0
  700. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_validation_configuration.py +0 -0
  701. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_validation_database_connection.py +0 -0
  702. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_validation_execution_context.py +0 -0
  703. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_validation_progress_reporter.py +0 -0
  704. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_validation_report_buffer.py +0 -0
  705. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_validation_report_status.py +0 -0
  706. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_validation_templates_dto.py +0 -0
  707. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_vector_bit_normalization.py +0 -0
  708. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_vector_common.py +0 -0
  709. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_vector_normalization.py +0 -0
  710. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_view_configuration.py +0 -0
  711. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/test_warm_start.py +0 -0
  712. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/utils/__init__.py +0 -0
  713. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/utils/test_constants.py +0 -0
  714. {snowflake_data_validation-1.45.1 → snowflake_data_validation-1.45.3}/tests/unit/utils/test_semi_structured_json_canonicalization.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: snowflake-data-validation
3
- Version: 1.45.1
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
@@ -156,12 +156,16 @@ Compares table structure between source and target:
156
156
 
157
157
  Some differences are reported as `WARNING` and do not fail L1:
158
158
  - Snowflake still holds every source value: a different column order, a Snowflake precision or scale that can hold the source's, and a `NOT NULL` source column whose Snowflake column is nullable (a Snowflake virtual column is always nullable).
159
- - Snowflake may truncate or reject source values, so review it: a source character length longer than Snowflake's.
159
+ - Snowflake may truncate or reject source values, so review it: a source character length longer than Snowflake's, and a source number with no declared precision or scale (Oracle's bare `NUMBER`) on a Snowflake `NUMBER(p,s)`, such as `NUMBER(38,18)`. The warning names the precision and scale Snowflake fixes.
160
160
 
161
161
  A nullable source column on a `NOT NULL` Snowflake column still fails, since Snowflake can reject the source's NULLs.
162
162
 
163
+ An integer column mapped to a `NUMBER` with scale 0 is the exception to the precision warning: SQL Server `INT` (precision 10) in `NUMBER(38,0)` holds every value, so its `NUMERIC_PRECISION` row is `SUCCESS`.
164
+
163
165
  A PostgreSQL user-defined `ENUM` column is validated as `ENUM` against a Snowflake `VARCHAR`. `information_schema` reports every enum as `USER-DEFINED`, so the metadata queries read `pg_type.typtype` to tell enums apart, and report the longest label as the column's length. L2 and L3 compare the label text.
164
166
 
167
+ Snowflake database, schema and table names may contain a backslash or an apostrophe, for example `NAFMAIN\TUSDB102`. Snowflake reads backslash escapes inside a string literal, so the Snowflake metadata queries (table metadata, column metadata, case-sensitive columns and object-type lookups) write each name through `escape_snowflake_sql_literal` / `quote_snowflake_sql_literal` in `shared/queries/sql_literals.py`, which double backslashes as well as single quotes. Use these helpers, not `escape_sql_literal`, for any name embedded in a Snowflake string literal.
168
+
165
169
  ### Metrics Validation
166
170
  Compares statistical metrics for each column:
167
171
  - Row count
@@ -226,6 +230,25 @@ For configuration options and examples, see the [official documentation](https:/
226
230
 
227
231
  ## Changelog
228
232
 
233
+ ### v1.45.3
234
+
235
+ **Bug fixes**
236
+
237
+ - Fixed schema validation reporting SQL Server `INT` columns mapped to `NUMBER(38,0)` as precision differences.
238
+ - Surfaced rounding of scale-less `NUMBER` values as a lossy mapping instead of a hidden match.
239
+ - Fixed schema validation reporting every column as missing when the schema name contains a backslash (for example `DOMAIN\user` schemas).
240
+ - Fixed Teradata `VARCHAR` distinct and empty-value metrics not matching when values have trailing spaces.
241
+ - Fixed Iceberg timestamp comparisons to use `FF6` or `FF9` fractional precision based on the catalog format version.
242
+ - Fixed metrics validation for signed-year `TIMESTAMP` values, including BC and post-9999 dates.
243
+
244
+ ### v1.45.2
245
+
246
+ **Bug fixes**
247
+
248
+ - Fixed hybrid row validation reporting false mismatches for SQL Server `DATETIMEOFFSET` columns landed as `VARCHAR` in Iceberg v3 compatible tables.
249
+ - Fixed schema validation failing an Oracle unconstrained `NUMBER` against a Snowflake `NUMBER(38,18)`; it now reports a warning.
250
+ - Fixed Snowflake target connections not resolving from `connections.toml`.
251
+
229
252
  ### v1.45.1
230
253
 
231
254
  **Improvements**
@@ -65,12 +65,16 @@ Compares table structure between source and target:
65
65
 
66
66
  Some differences are reported as `WARNING` and do not fail L1:
67
67
  - Snowflake still holds every source value: a different column order, a Snowflake precision or scale that can hold the source's, and a `NOT NULL` source column whose Snowflake column is nullable (a Snowflake virtual column is always nullable).
68
- - Snowflake may truncate or reject source values, so review it: a source character length longer than Snowflake's.
68
+ - Snowflake may truncate or reject source values, so review it: a source character length longer than Snowflake's, and a source number with no declared precision or scale (Oracle's bare `NUMBER`) on a Snowflake `NUMBER(p,s)`, such as `NUMBER(38,18)`. The warning names the precision and scale Snowflake fixes.
69
69
 
70
70
  A nullable source column on a `NOT NULL` Snowflake column still fails, since Snowflake can reject the source's NULLs.
71
71
 
72
+ An integer column mapped to a `NUMBER` with scale 0 is the exception to the precision warning: SQL Server `INT` (precision 10) in `NUMBER(38,0)` holds every value, so its `NUMERIC_PRECISION` row is `SUCCESS`.
73
+
72
74
  A PostgreSQL user-defined `ENUM` column is validated as `ENUM` against a Snowflake `VARCHAR`. `information_schema` reports every enum as `USER-DEFINED`, so the metadata queries read `pg_type.typtype` to tell enums apart, and report the longest label as the column's length. L2 and L3 compare the label text.
73
75
 
76
+ Snowflake database, schema and table names may contain a backslash or an apostrophe, for example `NAFMAIN\TUSDB102`. Snowflake reads backslash escapes inside a string literal, so the Snowflake metadata queries (table metadata, column metadata, case-sensitive columns and object-type lookups) write each name through `escape_snowflake_sql_literal` / `quote_snowflake_sql_literal` in `shared/queries/sql_literals.py`, which double backslashes as well as single quotes. Use these helpers, not `escape_sql_literal`, for any name embedded in a Snowflake string literal.
77
+
74
78
  ### Metrics Validation
75
79
  Compares statistical metrics for each column:
76
80
  - Row count
@@ -135,6 +139,25 @@ For configuration options and examples, see the [official documentation](https:/
135
139
 
136
140
  ## Changelog
137
141
 
142
+ ### v1.45.3
143
+
144
+ **Bug fixes**
145
+
146
+ - Fixed schema validation reporting SQL Server `INT` columns mapped to `NUMBER(38,0)` as precision differences.
147
+ - Surfaced rounding of scale-less `NUMBER` values as a lossy mapping instead of a hidden match.
148
+ - Fixed schema validation reporting every column as missing when the schema name contains a backslash (for example `DOMAIN\user` schemas).
149
+ - Fixed Teradata `VARCHAR` distinct and empty-value metrics not matching when values have trailing spaces.
150
+ - Fixed Iceberg timestamp comparisons to use `FF6` or `FF9` fractional precision based on the catalog format version.
151
+ - Fixed metrics validation for signed-year `TIMESTAMP` values, including BC and post-9999 dates.
152
+
153
+ ### v1.45.2
154
+
155
+ **Bug fixes**
156
+
157
+ - Fixed hybrid row validation reporting false mismatches for SQL Server `DATETIMEOFFSET` columns landed as `VARCHAR` in Iceberg v3 compatible tables.
158
+ - Fixed schema validation failing an Oracle unconstrained `NUMBER` against a Snowflake `NUMBER(38,18)`; it now reports a warning.
159
+ - Fixed Snowflake target connections not resolving from `connections.toml`.
160
+
138
161
  ### v1.45.1
139
162
 
140
163
  **Improvements**
@@ -4,6 +4,7 @@ requires = ["hatchling"]
4
4
 
5
5
  [tool.uv]
6
6
  constraint-dependencies = [
7
+ "certifi>=2026.10.23,<2026.11",
7
8
  "virtualenv>=21.7.13,<21.8",
8
9
  ]
9
10
 
@@ -105,7 +106,7 @@ db2 = [
105
106
  # musllinux build, and SDV is published to public PyPI. Inside DMO/DEA the
106
107
  # dependency is already declared, so SDV's logger tree is covered there.
107
108
  scai = [
108
- "snowflake-code-unit-registry>=0.9.2",
109
+ "snowflake-code-unit-registry>=0.9.5",
109
110
  ]
110
111
 
111
112
  [project.urls]
@@ -17,7 +17,9 @@ from __future__ import annotations
17
17
 
18
18
  import logging
19
19
 
20
- from shared.datatypes.bigquery import BigQueryType, serializes_exactly_through_to_json
20
+ from typing import TYPE_CHECKING
21
+
22
+ from shared.datatypes.bigquery import BigQueryType, field_wise_json_text, serializes_exactly_through_to_json
21
23
  from shared.datatypes.common import CommonType
22
24
  from shared.datatypes.snowflake import SnowflakeType
23
25
  from snowflake.snowflake_data_validation.query.decimal_text_normalization import (
@@ -51,6 +53,10 @@ from snowflake.snowflake_data_validation.validation.comparison_codec import (
51
53
  )
52
54
 
53
55
 
56
+ if TYPE_CHECKING: # pragma: no cover - used only for type hints.
57
+ from snowflake.snowflake_data_validation.utils.model.column_metadata import ColumnMetadata
58
+
59
+
54
60
  LOGGER = logging.getLogger(__name__)
55
61
 
56
62
  _WIDE_NUMERIC_BASE_TYPES = frozenset({BigQueryType.BIGNUMERIC, BigQueryType.BIGDECIMAL})
@@ -264,32 +270,63 @@ class QueryGeneratorBigQuery(QueryGeneratorBase):
264
270
  raise ValueError(f"No normalization template found for data type {column.data_type} and no DEFAULT template available.")
265
271
  return normalization_template
266
272
 
273
+ def _field_wise_normalization(self, column: ColumnMetadata) -> str | None:
274
+ """Return the L3 text of an ARRAY / STRUCT mixing INT64 and decimals, else None.
275
+
276
+ Data migration writes such a column's JSON text field by field, so this hashes that
277
+ text, keys ordered by PARSE_JSON as for other nests. The text spells every declared
278
+ field name, and a name may hold a template placeholder, so it is written with the
279
+ column already in place and never rendered as a template.
280
+ """
281
+ column_ref = f"`{self._normalization_column_name(column)}`"
282
+ field_wise = field_wise_json_text(column.data_type, column_ref)
283
+ if field_wise is None:
284
+ return None
285
+ return f"NULLIF(TO_JSON_STRING(PARSE_JSON({field_wise})), 'null')"
286
+
287
+ def _column_normalization(
288
+ self,
289
+ column: ColumnMetadata,
290
+ table_context: TableContext,
291
+ column_normalization_map: dict[str, str] | None,
292
+ ) -> str:
293
+ """Return the column's rendered L3 normalization.
294
+
295
+ A user's normalization, a per-column rule or an override of the column's base type
296
+ (``STRUCT``, ``ARRAY``), wins over the built-in field-wise text.
297
+ """
298
+ field_wise = self._field_wise_normalization(column)
299
+ if field_wise is not None and not has_custom_column_normalization(
300
+ column.name,
301
+ self.normalize_bigquery_type(column.data_type),
302
+ column_normalization_map,
303
+ table_context.templates_loader_manager,
304
+ ):
305
+ return field_wise
306
+ normalization_template = self._resolve_datatype_normalization_template(
307
+ column,
308
+ table_context.templates_loader_manager.datatypes_normalization_templates,
309
+ table_context,
310
+ )
311
+ normalization_template = resolve_column_normalization_template(
312
+ column.name,
313
+ normalization_template,
314
+ column_normalization_map,
315
+ )
316
+ # Resolve ``{{ col_name }}`` and, for numeric types, the scale-aware
317
+ # ``{{ numeric_format_mask }}`` (BigQuery emits a printf ``%.Nf``).
318
+ return self._render_normalization_template(normalization_template, column)
319
+
267
320
  def _build_datatypes_normalization_renderer_templates(
268
321
  self,
269
322
  table_context: TableContext,
270
323
  column_codec_map: dict[str, ComparisonCodec] | None = None,
271
324
  column_normalization_map: dict[str, str] | None = None,
272
325
  ) -> dict[str, str]:
273
- datatypes_normalization_templates = table_context.templates_loader_manager.datatypes_normalization_templates
274
326
  renderer_columns = self._row_md5_normalization_columns(table_context)
275
327
  renderer_templates: dict[str, str] = {}
276
328
  for column in renderer_columns:
277
- normalization_template = self._resolve_datatype_normalization_template(
278
- column,
279
- datatypes_normalization_templates,
280
- table_context,
281
- )
282
- normalization_template = resolve_column_normalization_template(
283
- column.name,
284
- normalization_template,
285
- column_normalization_map,
286
- )
287
- # Resolve ``{{ col_name }}`` and, for numeric types, the scale-aware
288
- # ``{{ numeric_format_mask }}`` (BigQuery emits a printf ``%.Nf``).
289
- renderer_templates[column.name] = self._render_normalization_template(
290
- normalization_template,
291
- column,
292
- )
329
+ renderer_templates[column.name] = self._column_normalization(column, table_context, column_normalization_map)
293
330
  renderer_templates = apply_text_codec_to_renderer_templates(
294
331
  self.platform,
295
332
  renderer_templates,
@@ -26,7 +26,7 @@ import snowflake.snowflake_data_validation as sdv_pkg
26
26
 
27
27
  from shared.identifiers.managers import identifier_manager
28
28
  from shared.identifiers.sql_identifier import SqlIdentifier
29
- from shared.queries.sql_literals import escape_sql_literal
29
+ from shared.queries.sql_literals import escape_snowflake_sql_literal, escape_sql_literal
30
30
  from shared.query_modifiers.strict import check_query_modifiers_strict
31
31
  from shared.query_modifiers.template_context import QueryModifiersTemplateContext
32
32
  from snowflake.snowflake_data_validation.utils.constants import (
@@ -132,6 +132,7 @@ class SQLQueriesTemplateGenerator:
132
132
  # Identifiers are written in Python (write_sql_name, column_sql_names)
133
133
  # and handed to the templates already written; only literals are escaped here.
134
134
  self.env.filters["escape_sql_literal"] = escape_sql_literal
135
+ self.env.filters["escape_snowflake_sql_literal"] = escape_snowflake_sql_literal
135
136
  # Single source of truth for the NULL sentinel used by L3 row-MD5 and
136
137
  # cell-validation normalization. Exposed to every template so the
137
138
  # COALESCE fallback can keep a real SQL NULL distinct from "".
@@ -351,6 +352,39 @@ class SQLQueriesTemplateGenerator:
351
352
  except Exception as e:
352
353
  raise Exception(f"Error generating template: {e}") from e
353
354
 
355
+ def get_iceberg_format_version(self, database_name: str, schema_name: str, table_name: str, platform: str) -> str:
356
+ """Generate the query that reads one target table's Iceberg format version.
357
+
358
+ Args:
359
+ database_name (str): Database that contains the table.
360
+ schema_name (str): Schema that contains the table.
361
+ table_name (str): Table whose ``ICEBERG_VERSION`` parameter is read.
362
+ platform (str): Platform identifier (``Platform.SNOWFLAKE.value``).
363
+
364
+ Returns:
365
+ str: The SQL query. The ``value`` column is ``ICEBERG_FORMAT_VERSION_V2``
366
+ or ``ICEBERG_FORMAT_VERSION_V3``.
367
+
368
+ Raises:
369
+ ValueError: If the template file is not found.
370
+ Exception: If an error occurs during template rendering.
371
+
372
+ """
373
+ template_file = f"{platform}_get_iceberg_format_version.sql.j2"
374
+ try:
375
+ return self._render(
376
+ template_file,
377
+ database_sql=write_sql_name(database_name, platform),
378
+ schema_sql=write_sql_name(schema_name, platform),
379
+ table_sql=write_sql_name(table_name, platform),
380
+ )
381
+ except jinja2.exceptions.TemplateNotFound:
382
+ raise ValueError(
383
+ f"Template not found for platform: {platform}. Please create {template_file} in the {self.template_dir} directory."
384
+ ) from None
385
+ except Exception as e:
386
+ raise Exception(f"Error generating template: {e}") from e
387
+
354
388
  def generate_compute_md5_query(
355
389
  self,
356
390
  platform: str,
@@ -77,6 +77,7 @@ from snowflake.snowflake_data_validation.utils.constants import (
77
77
  ROW_HASH_COLUMN_DELIMITER,
78
78
  ROW_HASH_COLUMN_DELIMITER_KEY,
79
79
  Platform,
80
+ renders_full_precision,
80
81
  )
81
82
  from snowflake.snowflake_data_validation.utils.iso_dv_common import (
82
83
  get_paired_target_column_types,
@@ -156,6 +157,28 @@ def build_oracle_numeric_canonical_expr(col_ref: str, format_mask: str) -> str:
156
157
  )
157
158
 
158
159
 
160
+ def build_oracle_full_precision_numeric_expr(col_ref: str, format_mask: str) -> str:
161
+ """Render a value that fits the mask's scale through the mask, any other at its stored precision.
162
+
163
+ For a bare NUMBER the target scale was never checked against the data. A value
164
+ the target could hold renders exactly like :func:`build_oracle_numeric_canonical_expr`,
165
+ the text Snowflake prints. A value with more fractional digits renders with
166
+ ``TM9`` (shortest exact text, scientific only past 64 characters, which no
167
+ NUMBER(38, s) value reaches), so the target's rounding shows as a cell diff.
168
+ """
169
+ scale = _oracle_scale_from_fm_mask(format_mask)
170
+ full_text = f"TRIM(REGEXP_REPLACE(TRIM(REGEXP_REPLACE(TRIM(TO_CHAR({col_ref}, 'TM9')), '^-\\.', '-0.')), '^\\.', '0.'))"
171
+ return (
172
+ f"CASE WHEN {col_ref} IS NULL THEN NULL "
173
+ f"WHEN {col_ref} = ROUND({col_ref}, {scale}) THEN {build_oracle_numeric_canonical_expr(col_ref, format_mask)} "
174
+ f"ELSE {full_text} END"
175
+ )
176
+
177
+
178
+ def _renders_full_precision(column: object) -> bool:
179
+ return renders_full_precision(getattr(column, "properties", None))
180
+
181
+
159
182
  class QueryGeneratorOracle(QueryGeneratorBase):
160
183
  """Oracle-specific implementation of the query generator.
161
184
 
@@ -250,7 +273,10 @@ class QueryGeneratorOracle(QueryGeneratorBase):
250
273
  """Wrap numeric ``TO_CHAR`` output to restore the FM-suppressed leading zero."""
251
274
  if NUMERIC_FORMAT_MASK_PLACEHOLDER in template and "TO_CHAR" in template and self._is_numeric_normalization_type(column.data_type):
252
275
  mask = self._build_numeric_format_mask(self._resolve_numeric_scale(column))
253
- 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,
@@ -181,7 +181,13 @@ class ConnectorSnowflake(BaseConnector):
181
181
  raise ConnectionError(f"Failed to establish Snowflake connection: {e}") from e
182
182
 
183
183
  def _load_named_connection(self, connection_name: str) -> dict:
184
- """Load connection parameters from config.toml or connections.toml file.
184
+ """Load connection parameters from connections.toml or config.toml.
185
+
186
+ Directories are searched in order (``~/.snowflake``, then the working
187
+ directory). Within one directory a ``connections.toml``, when it exists,
188
+ replaces ``config.toml``'s connections -- the rule
189
+ ``snowflake.connector`` and the Snow CLI apply -- so this opens the same
190
+ definition of a name as ``snow sql`` and the test-runner's resolver.
185
191
 
186
192
  Args:
187
193
  connection_name: Name of the connection in the config file
@@ -193,40 +199,39 @@ class ConnectorSnowflake(BaseConnector):
193
199
  typer.BadParameter: If connection not found or file doesn't exist
194
200
 
195
201
  """
196
- # Check standard locations for config.toml (new) and connections.toml (legacy)
197
- config_paths = [
198
- Path.home() / ".snowflake" / "config.toml",
199
- Path.home() / ".snowflake" / "connections.toml",
200
- Path.cwd() / "config.toml",
201
- Path.cwd() / "connections.toml",
202
- ]
203
-
204
- for config_path in config_paths:
205
- if config_path.exists():
206
- try:
207
- config = toml.load(config_path)
208
- # Check for nested structure (config.toml format): connections.name
209
- if "connections" in config and connection_name in config["connections"]:
210
- LOGGER.debug(
211
- "Loaded connection '%s' from %s (nested)",
212
- connection_name,
213
- config_path,
214
- )
215
- return config["connections"][connection_name]
216
- # Check for flat structure (legacy format): name
217
- elif connection_name in config:
218
- LOGGER.debug(
219
- "Loaded connection '%s' from %s (flat)",
220
- connection_name,
221
- config_path,
222
- )
223
- return config[connection_name]
224
- except Exception as e:
225
- LOGGER.warning("Failed to load config from %s: %s", config_path, e)
202
+ config_dirs = [Path.home() / ".snowflake", Path.cwd()]
203
+ searched: list[Path] = []
204
+
205
+ for config_dir in config_dirs:
206
+ connections_path = config_dir / "connections.toml"
207
+ config_path = connections_path if connections_path.exists() else config_dir / "config.toml"
208
+ searched.append(config_path)
209
+ if not config_path.exists():
210
+ continue
211
+ try:
212
+ config = toml.load(config_path)
213
+ # Check for nested structure (config.toml format): connections.name
214
+ if "connections" in config and connection_name in config["connections"]:
215
+ LOGGER.debug(
216
+ "Loaded connection '%s' from %s (nested)",
217
+ connection_name,
218
+ config_path,
219
+ )
220
+ return config["connections"][connection_name]
221
+ # Check for flat structure (connections.toml format): name
222
+ elif connection_name in config:
223
+ LOGGER.debug(
224
+ "Loaded connection '%s' from %s (flat)",
225
+ connection_name,
226
+ config_path,
227
+ )
228
+ return config[connection_name]
229
+ except Exception as e:
230
+ LOGGER.warning("Failed to load config from %s: %s", config_path, e)
226
231
 
227
232
  raise typer.BadParameter(
228
- f"Connection '{connection_name}' not found in config.toml or connections.toml. "
229
- f"Searched locations: {', '.join(str(p) for p in config_paths)}"
233
+ f"Connection '{connection_name}' not found in connections.toml or config.toml. "
234
+ f"Searched locations: {', '.join(str(p) for p in searched)}"
230
235
  )
231
236
 
232
237
  def _get_default_connection_params(self) -> dict:
@@ -249,6 +249,22 @@ VARCHAR_TIMESTAMP:
249
249
  metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
250
250
  metric_return_datatype: NUMBER
251
251
 
252
+ # Signed-year ISO text (Redshift Iceberg, SNOW-4353618): TRY_TO_TIMESTAMP_NTZ
253
+ # returns NULL for negative and 5+ digit years, so parse from parts like the
254
+ # Iceberg column comment's cast back (DMO iceberg_column_comment.py).
255
+ VARCHAR_TIMESTAMP_SIGNED:
256
+ min:
257
+ metric_query: 'MIN(TIMESTAMP_NTZ_FROM_PARTS(IFF(TRY_TO_NUMBER(REGEXP_SUBSTR(TO_VARCHAR(TRY_TO_DATE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+-[0-9]{2}-[0-9]{2})'', 1, 1, ''e'', 1)), ''YYYY-MM-DD''), ''^(-?[0-9]+)-'', 1, 1, ''e'', 1), 38, 0) = TRY_TO_NUMBER(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+)-'', 1, 1, ''e'', 1), 38, 0), TRY_TO_DATE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+-[0-9]{2}-[0-9]{2})'', 1, 1, ''e'', 1)), NULL), TRY_TO_TIME(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''T([0-9]{2}:[0-9]{2}:[0-9]{2}(\\.[0-9]+)?)'', 1, 1, ''e'', 1))))'
258
+ metric_return_datatype: VARCHAR
259
+ metric_normalization: TO_CHAR({{ metric_query }}, 'YYYY-MM-DD"T"HH24:MI:SS.FF9')
260
+ max:
261
+ metric_query: 'MAX(TIMESTAMP_NTZ_FROM_PARTS(IFF(TRY_TO_NUMBER(REGEXP_SUBSTR(TO_VARCHAR(TRY_TO_DATE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+-[0-9]{2}-[0-9]{2})'', 1, 1, ''e'', 1)), ''YYYY-MM-DD''), ''^(-?[0-9]+)-'', 1, 1, ''e'', 1), 38, 0) = TRY_TO_NUMBER(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+)-'', 1, 1, ''e'', 1), 38, 0), TRY_TO_DATE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+-[0-9]{2}-[0-9]{2})'', 1, 1, ''e'', 1)), NULL), TRY_TO_TIME(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''T([0-9]{2}:[0-9]{2}:[0-9]{2}(\\.[0-9]+)?)'', 1, 1, ''e'', 1))))'
262
+ metric_return_datatype: VARCHAR
263
+ metric_normalization: TO_CHAR({{ metric_query }}, 'YYYY-MM-DD"T"HH24:MI:SS.FF9')
264
+ count_null:
265
+ metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
266
+ metric_return_datatype: NUMBER
267
+
252
268
  # Order by UTC time-of-day. A plain MIN of the parsed instant uses today's date
253
269
  # and can cross midnight, so the formatted value would keep the wrong offset.
254
270
  VARCHAR_TIME_TZ:
@@ -11,20 +11,22 @@ NUMBER: TO_CHAR("{{ col_name }}", '{{ numeric_format_mask }}')
11
11
  # truncates the same way on every engine; a CAST to TIME(p) would round.
12
12
  TIME: LEFT(TO_CHAR("{{ col_name }}", 'HH24:MI:SS.FF9'), {{ time_text_length }})
13
13
  TIME WITH TIME ZONE: LEFT(TO_CHAR("{{ col_name }}", 'HH24:MI:SS.FF9'), {{ time_text_length }})
14
- 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