snowflake-data-validation 1.45.4__tar.gz → 1.46.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (718) hide show
  1. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/PKG-INFO +18 -3
  2. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/README.md +15 -0
  3. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/pyproject.toml +2 -2
  4. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/azure_synapse/query/query_generator_azure_synapse.py +4 -4
  5. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_column_metrics_templates.yaml +5 -0
  6. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/db2/query/query_generator_db2.py +38 -9
  7. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/reshape/metrics_reshape.py +6 -4
  8. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/query/float_bit_normalization.py +3 -20
  9. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/query/normalization_render_context.py +15 -3
  10. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/query/query_generator_base.py +9 -4
  11. snowflake_data_validation-1.46.0/src/snowflake/snowflake_data_validation/query/tsql_float_bits.py +66 -0
  12. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_cell_validation_data_select.sql.j2 +1 -1
  13. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/result_set/query/query_generator_result_set.py +10 -0
  14. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_column_metrics_templates.yaml +8 -4
  15. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/snowflake/l3/pushdown_diff_sql.py +9 -1
  16. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/snowflake/query/query_generator_snowflake.py +7 -1
  17. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_table_metadata_query.sql.j2 +3 -1
  18. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlserver/query/query_generator_sqlserver.py +4 -4
  19. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_table_metadata_query.sql.j2 +1 -1
  20. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/constants.py +27 -0
  21. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_polars_cast.py +13 -0
  22. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/iceberg_dv_common.py +2 -2
  23. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/model/templates_loader_manager.py +8 -1
  24. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/validation/metrics_data_validator.py +54 -13
  25. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/validation/metrics_tolerance.py +59 -4
  26. snowflake_data_validation-1.46.0/tests/unit/Teradata/test_teradata_table_metadata_object_type.py +93 -0
  27. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/azure_synapse/test_azure_synapse_row_queries.py +3 -3
  28. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/query/test_normalization_render_context.py +12 -0
  29. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/sqlserver/test_sqlserver_datetimeoffset_physical_target.py +0 -2
  30. snowflake_data_validation-1.46.0/tests/unit/sqlserver/test_sqlserver_l1_character_maximum_length.py +87 -0
  31. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/sqlserver/test_sqlserver_row_queries.py +47 -2
  32. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/sqlserver/test_sqlserver_spatial_l1_metadata.py +1 -1
  33. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_cell_validation_query_generation.py +8 -8
  34. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_data_validator.py +12 -6
  35. snowflake_data_validation-1.46.0/tests/unit/test_decfloat_l2_min_max.py +240 -0
  36. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_float_bit_canonical.py +38 -17
  37. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_helper_polars_cast.py +47 -0
  38. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_iceberg_dv_l3_normalization.py +44 -0
  39. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_metrics_reshape.py +20 -0
  40. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_metrics_tolerance.py +33 -0
  41. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_pushdown_diff_sql.py +15 -0
  42. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_query_cell_level_validation.py +18 -0
  43. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_result_set_cell_level_validation.py +74 -0
  44. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_result_set_validator.py +42 -0
  45. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_templates_loader_manager.py +63 -1
  46. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/.gitignore +0 -0
  47. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/LICENSE +0 -0
  48. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/docs/README.md +0 -0
  49. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/__init__.py +0 -0
  50. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/azure_synapse/__init__.py +0 -0
  51. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/azure_synapse/azure_synapse_arguments_manager.py +0 -0
  52. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/__init__.py +0 -0
  53. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_azure_synapse.py +0 -0
  54. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_factory_azure_synapse.py +0 -0
  55. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/__init__.py +0 -0
  56. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/metadata_extractor_azure_synapse.py +0 -0
  57. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_cell_validation_data_select.sql.j2 +0 -0
  58. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_column_metrics_templates.yaml +0 -0
  59. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_datatypes_normalization_templates.yaml +0 -0
  60. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_get_columns_metadata.sql.j2 +0 -0
  61. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_count_query.sql.j2 +0 -0
  62. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_md5_select.sql.j2 +0 -0
  63. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_table_metadata_query.sql.j2 +0 -0
  64. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_to_snowflake_datatypes_mapping_template.yaml +0 -0
  65. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/azure_synapse/model/__init__.py +0 -0
  66. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/azure_synapse/model/azure_synapse_credentials_connection.py +0 -0
  67. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/azure_synapse/query/__init__.py +0 -0
  68. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/__init__.py +0 -0
  69. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/script_writer_azure_synapse.py +0 -0
  70. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/bigquery/__init__.py +0 -0
  71. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/__init__.py +0 -0
  72. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_cell_validation_data_select.sql.j2 +0 -0
  73. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_column_metrics_templates.yaml +0 -0
  74. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_datatypes_normalization_templates.yaml +0 -0
  75. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_get_columns_metadata.sql.j2 +0 -0
  76. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_count_query.sql.j2 +0 -0
  77. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_md5_select.sql.j2 +0 -0
  78. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_table_metadata_query.sql.j2 +0 -0
  79. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_to_snowflake_datatypes_mapping_template.yaml +0 -0
  80. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/bigquery/query/__init__.py +0 -0
  81. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/bigquery/query/query_generator_bigquery.py +0 -0
  82. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/comparison_orchestrator.py +0 -0
  83. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/configuration/__init__.py +0 -0
  84. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/configuration/configuration_loader.py +0 -0
  85. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/configuration/model/configuration_model.py +0 -0
  86. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/configuration/model/connection_types.py +0 -0
  87. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/configuration/model/connections/__init__.py +0 -0
  88. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/configuration/model/logging_configuration.py +0 -0
  89. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/configuration/model/table_configuration.py +0 -0
  90. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/configuration/model/validation_configuration.py +0 -0
  91. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/configuration/model/view_configuration.py +0 -0
  92. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/configuration/singleton.py +0 -0
  93. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/connector/__init__.py +0 -0
  94. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/connector/connector_base.py +0 -0
  95. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/connector/connector_factory_base.py +0 -0
  96. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/connector/connector_failure_tracker.py +0 -0
  97. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/db2/__init__.py +0 -0
  98. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/db2/db2_lob_normalization.py +0 -0
  99. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/db2/extractor/__init__.py +0 -0
  100. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/db2/extractor/metadata_extractor_db2.py +0 -0
  101. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_cell_validation_data_select.sql.j2 +0 -0
  102. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_datatypes_normalization_templates.yaml +0 -0
  103. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_get_columns_metadata.sql.j2 +0 -0
  104. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_count_query.sql.j2 +0 -0
  105. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_md5_select.sql.j2 +0 -0
  106. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_table_metadata_query.sql.j2 +0 -0
  107. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_to_snowflake_datatypes_mapping_template.yaml +0 -0
  108. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/db2/query/__init__.py +0 -0
  109. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/db2/script_writer/__init__.py +0 -0
  110. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/db2/script_writer/script_writer_db2.py +0 -0
  111. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/executer/__init__.py +0 -0
  112. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/executer/async_generation_executor.py +0 -0
  113. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/executer/async_validation_executor.py +0 -0
  114. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/executer/base_validation_executor.py +0 -0
  115. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/executer/executor_factory.py +0 -0
  116. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/executer/extractor_types.py +0 -0
  117. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/executer/source_validation_executor.py +0 -0
  118. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/executer/sync_validation_executor.py +0 -0
  119. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/extractor/__init__.py +0 -0
  120. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/extractor/metadata_extractor_base.py +0 -0
  121. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/extractor/sql_queries_template_generator.py +0 -0
  122. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/oracle/__init__.py +0 -0
  123. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/oracle/extractor/__init__.py +0 -0
  124. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/oracle/extractor/metadata_extractor_oracle.py +0 -0
  125. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_cell_validation_data_select.sql.j2 +0 -0
  126. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_column_metrics_templates.yaml +0 -0
  127. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_datatypes_normalization_templates.yaml +0 -0
  128. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_get_columns_metadata.sql.j2 +0 -0
  129. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_count_query.sql.j2 +0 -0
  130. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_md5_select.sql.j2 +0 -0
  131. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_table_metadata_query.sql.j2 +0 -0
  132. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_to_snowflake_datatypes_mapping_template.yaml +0 -0
  133. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/oracle/oracle_bfile.py +0 -0
  134. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/oracle/oracle_iso_normalization.py +0 -0
  135. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/oracle/oracle_lob_normalization.py +0 -0
  136. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/oracle/oracle_statement_functions.py +0 -0
  137. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/oracle/oracle_vector_extraction.py +0 -0
  138. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/oracle/oracle_xmltype.py +0 -0
  139. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/oracle/query/__init__.py +0 -0
  140. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/oracle/query/query_generator_oracle.py +0 -0
  141. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/oracle/script_writer/__init__.py +0 -0
  142. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/oracle/script_writer/script_writer_oracle.py +0 -0
  143. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/__init__.py +0 -0
  144. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/html_report_builder.py +0 -0
  145. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/report_metadata.py +0 -0
  146. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/orchestration/parallel_execution_engine.py +0 -0
  147. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/orchestration/table_metadata_processor.py +0 -0
  148. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/orchestration/validation_progress_reporter.py +0 -0
  149. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/orchestration/view_preprocessor.py +0 -0
  150. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/postgresql/__init__.py +0 -0
  151. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/postgresql/connector/__init__.py +0 -0
  152. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_factory_postgresql.py +0 -0
  153. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_postgresql.py +0 -0
  154. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/__init__.py +0 -0
  155. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/metadata_extractor_postgresql.py +0 -0
  156. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_cell_validation_data_select.sql.j2 +0 -0
  157. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_concatenated_insert_template.sql.j2 +0 -0
  158. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_concatenated_table_template.sql.j2 +0 -0
  159. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_md5_insert_template.sql.j2 +0 -0
  160. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_md5_table_template.sql.j2 +0 -0
  161. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_column_metrics_templates.yaml +0 -0
  162. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_datatypes_normalization_templates.yaml +0 -0
  163. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_extract_md5_rows_chunk.sql.j2 +0 -0
  164. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_get_columns_metadata.sql.j2 +0 -0
  165. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_count_query.sql.j2 +0 -0
  166. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_md5_select.sql.j2 +0 -0
  167. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_table_metadata_query.sql.j2 +0 -0
  168. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_to_snowflake_datatypes_mapping_template.yaml +0 -0
  169. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/postgresql/model/__init__.py +0 -0
  170. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/postgresql/model/postgresql_credentials_connection.py +0 -0
  171. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/postgresql/postgresql_arguments_manager.py +0 -0
  172. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/postgresql/postgresql_tz_normalization.py +0 -0
  173. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/postgresql/query/__init__.py +0 -0
  174. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/postgresql/query/charset_normalization.py +0 -0
  175. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/postgresql/query/query_generator_postgresql.py +0 -0
  176. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/postgresql/script_writer/__init__.py +0 -0
  177. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/postgresql/script_writer/script_writer_postgresql.py +0 -0
  178. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/DATA_VALIDATION_API_OVERVIEW.md +0 -0
  179. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/__init__.py +0 -0
  180. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/_internal.py +0 -0
  181. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/_teradata_internal.py +0 -0
  182. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/async_mode/__init__.py +0 -0
  183. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/async_mode/file_loader.py +0 -0
  184. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/async_mode/script_writer.py +0 -0
  185. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/cli/__init__.py +0 -0
  186. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/cli/commands.py +0 -0
  187. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/configuration/__init__.py +0 -0
  188. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/connectors/__init__.py +0 -0
  189. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/context/__init__.py +0 -0
  190. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/data_validation_api.py +0 -0
  191. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/enums/__init__.py +0 -0
  192. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/execution/__init__.py +0 -0
  193. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/execution/query_executor.py +0 -0
  194. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/generators/__init__.py +0 -0
  195. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/metadata/__init__.py +0 -0
  196. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/model/__init__.py +0 -0
  197. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/model/data_validation_exception.py +0 -0
  198. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/model/generated_query.py +0 -0
  199. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/model/metrics_result_shape.py +0 -0
  200. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/model/query_execution_result.py +0 -0
  201. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/model/query_generator_factory.py +0 -0
  202. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/model/result_set.py +0 -0
  203. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/model/validation_progress_callback.py +0 -0
  204. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/model/validation_result.py +0 -0
  205. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/query_generation/__init__.py +0 -0
  206. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/query_generation/metadata_queries.py +0 -0
  207. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/query_generation/row_validation_queries.py +0 -0
  208. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/query_generation/schema_metrics_queries.py +0 -0
  209. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/query_validation/__init__.py +0 -0
  210. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/query_validation/query_comparison.py +0 -0
  211. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/reshape/__init__.py +0 -0
  212. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/result_set_validation/__init__.py +0 -0
  213. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/result_set_validation/result_set_comparison.py +0 -0
  214. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/snapshot/__init__.py +0 -0
  215. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_generation.py +0 -0
  216. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_validation.py +0 -0
  217. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/utils/__init__.py +0 -0
  218. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/utils/helpers.py +0 -0
  219. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/validation/__init__.py +0 -0
  220. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/validation/cell_validation.py +0 -0
  221. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/validation/metrics_validation.py +0 -0
  222. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/validation/row_validation.py +0 -0
  223. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/public/validation/schema_validation.py +0 -0
  224. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/query/__init__.py +0 -0
  225. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/query/charset_normalization.py +0 -0
  226. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/query/chunk_md5_tiered.py +0 -0
  227. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/query/decimal_text_normalization.py +0 -0
  228. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_column_metrics_templates.yaml +0 -0
  229. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_datatypes_normalization_templates.yaml +0 -0
  230. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_modifiers.sql.j2 +0 -0
  231. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/query/float_aggregate_reduction.py +0 -0
  232. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/query/numeric_scale_resolution.py +0 -0
  233. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/query/query/query_generator_query.py +0 -0
  234. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/query/query_arguments_manager.py +0 -0
  235. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/query/sql_type_families.py +0 -0
  236. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/query/time_precision_resolution.py +0 -0
  237. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/query/tsql_float_remainder.py +0 -0
  238. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/query/vector_element_kind.py +0 -0
  239. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/redshift/__init__.py +0 -0
  240. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/redshift/connector/__init__.py +0 -0
  241. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/redshift/connector/connector_factory_redshift.py +0 -0
  242. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/redshift/connector/connector_redshift.py +0 -0
  243. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/redshift/extractor/metadata_extractor_redshift.py +0 -0
  244. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_cell_validation_data_select.sql.j2 +0 -0
  245. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_insert_template.sql.j2 +0 -0
  246. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_table_template.sql.j2 +0 -0
  247. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_insert_template.sql.j2 +0 -0
  248. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_table_template.sql.j2 +0 -0
  249. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_column_metrics_templates.yaml +0 -0
  250. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_datatypes_normalization_templates.yaml +0 -0
  251. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_extract_md5_rows_chunk.sql.j2 +0 -0
  252. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_get_columns_metadata.sql.j2 +0 -0
  253. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_count_query.sql.j2 +0 -0
  254. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_md5_select.sql.j2 +0 -0
  255. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_show_columns_query.sql.j2 +0 -0
  256. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_to_snowflake_datatypes_mapping_template.yaml +0 -0
  257. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/redshift/model/__init__.py +0 -0
  258. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/redshift/model/redshift_credentials_connection.py +0 -0
  259. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/redshift/query/__init__.py +0 -0
  260. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/redshift/query/charset_normalization.py +0 -0
  261. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/redshift/query/query_generator_redshift.py +0 -0
  262. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/redshift/redshift_arguments_manager.py +0 -0
  263. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/redshift/redshift_super_normalization.py +0 -0
  264. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/redshift/script_writer/__init__.py +0 -0
  265. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/redshift/script_writer/script_writer_redshift.py +0 -0
  266. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_column_metrics_templates.yaml +0 -0
  267. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_datatypes_normalization_templates.yaml +0 -0
  268. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/snowflake_to_result_set_datatypes_mapping_template.yaml +0 -0
  269. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/result_set/result_set_arguments_manager.py +0 -0
  270. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/script_writer/__init__.py +0 -0
  271. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/script_writer/script_writer_base.py +0 -0
  272. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/snowflake/__init__.py +0 -0
  273. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_factory_snowflake.py +0 -0
  274. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_snowflake.py +0 -0
  275. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/metadata_extractor_snowflake.py +0 -0
  276. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/_wkt_despace.sql.j2 +0 -0
  277. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_cell_validation_data_select.sql.j2 +0 -0
  278. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_concatenated_template.sql.j2 +0 -0
  279. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_md5_template.sql.j2 +0 -0
  280. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_datatypes_normalization_templates.yaml +0 -0
  281. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_extract_md5_rows_chunk.sql.j2 +0 -0
  282. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_case_sensitive_columns.sql.j2 +0 -0
  283. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_columns_metadata.sql.j2 +0 -0
  284. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_iceberg_format_version.sql.j2 +0 -0
  285. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_count_query.sql.j2 +0 -0
  286. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_md5_select.sql.j2 +0 -0
  287. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_table_metadata_query.sql.j2 +0 -0
  288. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_temporary_table_from_view_template.sql.j2 +0 -0
  289. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_to_snowflake_datatypes_mapping_template.yaml +0 -0
  290. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/snowflake/l3/__init__.py +0 -0
  291. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/snowflake/l3/signature_external_table.py +0 -0
  292. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/snowflake/l3/warm_start.py +0 -0
  293. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/snowflake/model/__init__.py +0 -0
  294. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_credentials_connection.py +0 -0
  295. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_default_connection.py +0 -0
  296. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_named_connection.py +0 -0
  297. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/snowflake/query/__init__.py +0 -0
  298. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/snowflake/query/charset_normalization.py +0 -0
  299. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/snowflake/script_writer/__init__.py +0 -0
  300. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/snowflake/script_writer/script_writer_snowflake.py +0 -0
  301. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/snowflake/snowflake_arguments_manager.py +0 -0
  302. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlite/__init__.py +0 -0
  303. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlite/connector/__init__.py +0 -0
  304. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_factory_sqlite.py +0 -0
  305. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_sqlite.py +0 -0
  306. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/__init__.py +0 -0
  307. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/metadata_extractor_sqlite.py +0 -0
  308. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_cell_validation_data_select.sql.j2 +0 -0
  309. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_column_metrics_templates.yaml +0 -0
  310. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_compute_md5_sql.j2 +0 -0
  311. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_datatypes_normalization_templates.yaml +0 -0
  312. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_extract_md5_rows_chunk.sql.j2 +0 -0
  313. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_get_columns_metadata.sql.j2 +0 -0
  314. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_count_query.sql.j2 +0 -0
  315. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_md5_select.sql.j2 +0 -0
  316. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_table_metadata_query.sql.j2 +0 -0
  317. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_snowflake_datatypes_mapping_template.yaml +0 -0
  318. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_sqlite_datatypes_mapping_template.yaml +0 -0
  319. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlite/model/__init__.py +0 -0
  320. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlite/model/sqlite_connection.py +0 -0
  321. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlite/query/__init__.py +0 -0
  322. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlite/query/query_generator_sqlite.py +0 -0
  323. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlite/script_writer/__init__.py +0 -0
  324. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlite/script_writer/script_writer_sqlite.py +0 -0
  325. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlserver/__init__.py +0 -0
  326. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/__init__.py +0 -0
  327. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_factory_sql_server.py +0 -0
  328. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_sql_server.py +0 -0
  329. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/__init__.py +0 -0
  330. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/metadata_extractor_sqlserver.py +0 -0
  331. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_cell_validation_data_select.sql.j2 +0 -0
  332. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_column_metrics_templates.yaml +0 -0
  333. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_compute_md5_sql.j2 +0 -0
  334. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_datatypes_normalization_templates.yaml +0 -0
  335. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_extract_md5_rows_chunk.sql.j2 +0 -0
  336. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_columns_metadata.sql.j2 +0 -0
  337. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_temporary_table_internal_identifier_template.sql.j2 +0 -0
  338. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_count_query.sql.j2 +0 -0
  339. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_md5_select.sql.j2 +0 -0
  340. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_temporary_table_from_view_template.sql.j2 +0 -0
  341. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_to_snowflake_datatypes_mapping_template.yaml +0 -0
  342. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlserver/model/__init__.py +0 -0
  343. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlserver/model/sqlserver_credentials_connection.py +0 -0
  344. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlserver/query/__init__.py +0 -0
  345. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlserver/query/charset_normalization.py +0 -0
  346. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/__init__.py +0 -0
  347. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/script_writer_sqlserver.py +0 -0
  348. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_arguments_manager.py +0 -0
  349. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_string_length_normalization.py +0 -0
  350. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_tz_normalization.py +0 -0
  351. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_uniqueidentifier_normalization.py +0 -0
  352. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/table_partitioning_strategy.md +0 -0
  353. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/teradata/__init__.py +0 -0
  354. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/teradata/connector/__init__.py +0 -0
  355. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/teradata/connector/connector_factory_teradata.py +0 -0
  356. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/teradata/connector/connector_teradata.py +0 -0
  357. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/teradata/extractor/__init__.py +0 -0
  358. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/teradata/extractor/metadata_extractor_teradata.py +0 -0
  359. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_cell_validation_data_select.sql.j2 +0 -0
  360. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_column_metrics_templates.yaml +0 -0
  361. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_compute_md5_sql.j2 +0 -0
  362. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_concatenated.sql.j2 +0 -0
  363. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_md5.sql.j2 +0 -0
  364. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_datatypes_normalization_templates.yaml +0 -0
  365. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_extract_md5_rows_chunk.sql.j2 +0 -0
  366. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_get_columns_metadata.sql.j2 +0 -0
  367. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_count_query.sql.j2 +0 -0
  368. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_md5_select.sql.j2 +0 -0
  369. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_to_snowflake_datatypes_mapping_template.yaml +0 -0
  370. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/teradata/model/__init__.py +0 -0
  371. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/teradata/model/teradata_credentials_connection.py +0 -0
  372. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/teradata/query/__init__.py +0 -0
  373. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/teradata/query/charset_normalization.py +0 -0
  374. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/teradata/query/query_generator_teradata.py +0 -0
  375. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/teradata/script_writer/__init__.py +0 -0
  376. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/teradata/script_writer/script_writer_teradata.py +0 -0
  377. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/teradata/teradata_arguments_manager.py +0 -0
  378. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/teradata/teradata_iso_normalization.py +0 -0
  379. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/__init__.py +0 -0
  380. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/arguments_manager_base.py +0 -0
  381. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/arguments_manager_factory.py +0 -0
  382. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/base_output_handler.py +0 -0
  383. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/catalog_column_size.py +0 -0
  384. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/column_grouping.py +0 -0
  385. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/column_partitioning_strategy.py +0 -0
  386. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_editor.py +0 -0
  387. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_generator.py +0 -0
  388. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_synchronizer.py +0 -0
  389. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/connection_pool.py +0 -0
  390. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/connector_factory.py +0 -0
  391. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/console_output_handler.py +0 -0
  392. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/context.py +0 -0
  393. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/cpu_optimizer.py +0 -0
  394. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/dv_tracing.py +0 -0
  395. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/error_classifier.py +0 -0
  396. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/helper.py +0 -0
  397. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_database.py +0 -0
  398. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_dataframe.py +0 -0
  399. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_io.py +0 -0
  400. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_misc.py +0 -0
  401. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_query_result.py +0 -0
  402. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_templates.py +0 -0
  403. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/index_key_format.py +0 -0
  404. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/interval_common.py +0 -0
  405. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/iso_dv_common.py +0 -0
  406. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/lob_source_types.py +0 -0
  407. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/logging_config.py +0 -0
  408. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/logging_utils.py +0 -0
  409. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/measure_collation.py +0 -0
  410. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/model/chunk.py +0 -0
  411. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/model/column_metadata.py +0 -0
  412. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/model/column_selection.py +0 -0
  413. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/model/custom_templates.py +0 -0
  414. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/model/table_column_metadata.py +0 -0
  415. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/model/table_context.py +0 -0
  416. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/period_common.py +0 -0
  417. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/progress_reporter.py +0 -0
  418. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/qvci_fallback.py +0 -0
  419. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/row_partitioning_strategy.py +0 -0
  420. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/row_validation_lob_exclusion.py +0 -0
  421. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/run_context.py +0 -0
  422. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/semi_structured_json_canonicalization.py +0 -0
  423. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/shutdown_coordinator.py +0 -0
  424. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/snapshot_validation_statements.py +0 -0
  425. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/telemetry.py +0 -0
  426. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/templates/configuration_file_templates.py +0 -0
  427. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/teradata_string_rtrim.py +0 -0
  428. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/thread_safe_singleton.py +0 -0
  429. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/validation_utils.py +0 -0
  430. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/vector_common.py +0 -0
  431. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/utils/vector_normalization.py +0 -0
  432. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/validation/__init__.py +0 -0
  433. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/validation/accepted_transformation.py +0 -0
  434. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/validation/cell_data_validator.py +0 -0
  435. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/validation/column_pairing.py +0 -0
  436. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/validation/comparison_codec.py +0 -0
  437. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/validation/data_validator_base.py +0 -0
  438. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/validation/dataframe_validator_base.py +0 -0
  439. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/validation/lossy_number_mapping.py +0 -0
  440. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/validation/object_type_criterion.py +0 -0
  441. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/__init__.py +0 -0
  442. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/base.py +0 -0
  443. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/db2.py +0 -0
  444. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/redshift.py +0 -0
  445. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/registry.py +0 -0
  446. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/snowflake.py +0 -0
  447. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlite.py +0 -0
  448. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlserver.py +0 -0
  449. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/teradata.py +0 -0
  450. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/validation/query_validator.py +0 -0
  451. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/validation/result_set_validator.py +0 -0
  452. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/validation/results_summary_report.py +0 -0
  453. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/validation/row_data_validator.py +0 -0
  454. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/validation/row_validation_report_buffer.py +0 -0
  455. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/validation/schema_data_validator.py +0 -0
  456. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/validation/validation_database/__init__.py +0 -0
  457. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/validation/validation_database/sqlite_validation_connection.py +0 -0
  458. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/validation/validation_database/validation_database_connection_base.py +0 -0
  459. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/validation/validation_database_manager.py +0 -0
  460. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/validation/validation_execution_context.py +0 -0
  461. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/validation/validation_report_buffer.py +0 -0
  462. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/src/snowflake/snowflake_data_validation/validation/validation_report_status.py +0 -0
  463. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/.coveragerc +0 -0
  464. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/conftest.py +0 -0
  465. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/integration/.coveragerc +0 -0
  466. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/integration/Redshift/test_metadata_extractor_integration.py +0 -0
  467. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/integration/test_async_generation_integration.py +0 -0
  468. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/integration/test_async_validation_integration.py +0 -0
  469. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/integration/test_reference_integration.py +0 -0
  470. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/integration/test_source_validation_integration.py +0 -0
  471. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/integration/test_sync_validation_integration.py +0 -0
  472. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/Postgresql/test_postgresql_bit_count_distinct.py +0 -0
  473. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/Postgresql/test_postgresql_collation.py +0 -0
  474. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/Postgresql/test_postgresql_enum_metadata.py +0 -0
  475. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/Postgresql/test_postgresql_json_cell_validation.py +0 -0
  476. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/Postgresql/test_postgresql_jsonb_row_hash.py +0 -0
  477. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/Postgresql/test_postgresql_numeric_leading_zero.py +0 -0
  478. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/Postgresql/test_postgresql_spatial_templates.py +0 -0
  479. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/Redshift/model/test_redshift_credentials_connection.py +0 -0
  480. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/Redshift/query/test_query_generator_redshift.py +0 -0
  481. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/Redshift/script_writer/test_script_writer_redshift.py +0 -0
  482. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/Redshift/test_connector_redshift.py +0 -0
  483. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/Redshift/test_redshift_arguments_manager.py +0 -0
  484. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/Redshift/test_redshift_collation.py +0 -0
  485. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/Redshift/test_redshift_columns_metadata_template.py +0 -0
  486. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/Redshift/test_redshift_hllsketch_templates.py +0 -0
  487. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/Redshift/test_redshift_spatial_templates.py +0 -0
  488. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/Redshift/test_redshift_split_schema_query.py +0 -0
  489. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/Redshift/test_redshift_super_normalization.py +0 -0
  490. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/Redshift/test_redshift_timetz_sentinel_normalization.py +0 -0
  491. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/Redshift/test_redshift_varchar_count_distinct.py +0 -0
  492. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/Teradata/test_connector_teradata.py +0 -0
  493. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/Teradata/test_metadata_extractor_teradata.py +0 -0
  494. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/Teradata/test_period_varchar_l1.py +0 -0
  495. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/Teradata/test_query_generator_teradata.py +0 -0
  496. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/Teradata/test_teradata_collation.py +0 -0
  497. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/Teradata/test_teradata_columns_metadata_precision_scale.py +0 -0
  498. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/Teradata/test_teradata_row_md5_select_template.py +0 -0
  499. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/Teradata/test_teradata_spatial_templates.py +0 -0
  500. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/Teradata/test_teradata_table_metadata_float_precision.py +0 -0
  501. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/Teradata/test_teradata_unicode_character_length.py +0 -0
  502. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/Teradata/test_teradata_view_generate_boundary.py +0 -0
  503. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/Teradata/test_teradata_view_l1_metadata_templates.py +0 -0
  504. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/__init__.py +0 -0
  505. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/assets/custom_templates_loader/snowflake_column_metrics_templates.yaml +0 -0
  506. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/assets/custom_templates_loader/snowflake_datatypes_normalization_templates.yaml +0 -0
  507. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/assets/custom_templates_loader/snowflake_table_metadata_query.sql.j2 +0 -0
  508. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/assets/test_configuration_loader/test_load_configuration_model/conf.yaml +0 -0
  509. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/assets/test_configuration_loader/test_load_configuration_model_reading_file_exception/conf.yaml +0 -0
  510. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/assets/test_helpers/dummy_configuration_file.json +0 -0
  511. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/assets/test_helpers/dummy_connection_source_db.toml +0 -0
  512. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/assets/test_helpers/dummy_datatypes_normalization_template.yaml +0 -0
  513. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/assets/test_helpers/dummy_datatypes_template.yaml +0 -0
  514. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/assets/test_helpers/dummy_metrics_template.yaml +0 -0
  515. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/assets/test_helpers/dummy_metrics_template_datatypes.yaml +0 -0
  516. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/assets/test_helpers/dummy_template.csv +0 -0
  517. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/assets/test_helpers/not_valid_format.yaml +0 -0
  518. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/assets/test_templates_loader_manager/snowflake_column_metrics_templates.yaml +0 -0
  519. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/assets/test_templates_loader_manager/snowflake_datatypes_normalization_templates.yaml +0 -0
  520. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/azure_synapse/__init__.py +0 -0
  521. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/azure_synapse/test_azure_synapse_credentials_connection.py +0 -0
  522. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/azure_synapse/test_azure_synapse_l3_convert_normalization.py +0 -0
  523. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/azure_synapse/test_azure_synapse_metadata_extractor.py +0 -0
  524. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/azure_synapse/test_azure_synapse_metrics_templates.py +0 -0
  525. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/azure_synapse/test_azure_synapse_query_generator.py +0 -0
  526. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/azure_synapse/test_connector_azure_synapse.py +0 -0
  527. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/azure_synapse/test_connector_factory_azure_synapse.py +0 -0
  528. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/bigquery/__init__.py +0 -0
  529. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/bigquery/test_bigquery_l1_string_length.py +0 -0
  530. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/bigquery/test_bigquery_spatial_templates.py +0 -0
  531. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/bigquery/test_query_generator_bigquery.py +0 -0
  532. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/bigquery/test_query_generator_factory_bigquery.py +0 -0
  533. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/conftest.py +0 -0
  534. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/db2/__init__.py +0 -0
  535. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/db2/test_db2_lob_dv_generation.py +0 -0
  536. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/db2/test_db2_metadata_extractor.py +0 -0
  537. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/db2/test_db2_query_generator.py +0 -0
  538. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/db2/test_db2_registration.py +0 -0
  539. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/db2/test_db2_xml_long_dv_generation.py +0 -0
  540. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/db2/test_db2_xml_long_metrics.py +0 -0
  541. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/oracle/__init__.py +0 -0
  542. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/oracle/test_metadata_extractor_oracle_vector.py +0 -0
  543. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/oracle/test_oracle_configured_index_columns.py +0 -0
  544. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/oracle/test_oracle_iso_normalization.py +0 -0
  545. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/oracle/test_oracle_lob_dv_generation.py +0 -0
  546. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/oracle/test_oracle_lob_normalization.py +0 -0
  547. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/oracle/test_oracle_metadata_extractor.py +0 -0
  548. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/oracle/test_oracle_metrics_templates.py +0 -0
  549. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/oracle/test_oracle_normalization_templates.py +0 -0
  550. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/oracle/test_oracle_query_generator.py +0 -0
  551. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/oracle/test_oracle_query_modifiers.py +0 -0
  552. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/oracle/test_oracle_quoted_identifiers.py +0 -0
  553. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/oracle/test_oracle_type_mappings.py +0 -0
  554. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/query/test_chunk_md5_tiered.py +0 -0
  555. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/query/test_time_fraction_rendering.py +0 -0
  556. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/snowflake/test_snowflake_get_case_sensitive_columns.py +0 -0
  557. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/snowflake/test_snowflake_get_iceberg_format_version.py +0 -0
  558. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/snowflake/test_snowflake_spatial_metrics_templates.py +0 -0
  559. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/sqlite/__init__.py +0 -0
  560. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/sqlite/test_connector_factory_sqlite.py +0 -0
  561. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/sqlite/test_connector_sqlite.py +0 -0
  562. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/sqlite/test_metadata_extractor_sqlite.py +0 -0
  563. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/sqlite/test_metadata_query_template_sqlite.py +0 -0
  564. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/sqlite/test_query_generator_sqlite.py +0 -0
  565. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/sqlite/test_script_writer_sqlite.py +0 -0
  566. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/sqlserver/__init__.py +0 -0
  567. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/sqlserver/test_connector_factory_sql_server.py +0 -0
  568. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/sqlserver/test_metadata_extractor_sqlserver_vector.py +0 -0
  569. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/sqlserver/test_sqlserver_datetimeoffset_full_ingest_utc.py +0 -0
  570. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/sqlserver/test_sqlserver_datetimeoffset_metrics_utc.py +0 -0
  571. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/sqlserver/test_sqlserver_json.py +0 -0
  572. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/sqlserver/test_sqlserver_l1_catalog.py +0 -0
  573. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/sqlserver/test_sqlserver_l1_character_length.py +0 -0
  574. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/sqlserver/test_sqlserver_l3_convert_normalization.py +0 -0
  575. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/sqlserver/test_sqlserver_length_metrics_chars.py +0 -0
  576. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/sqlserver/test_sqlserver_row_count_overflow.py +0 -0
  577. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/sqlserver/test_sqlserver_spatial_metrics_templates.py +0 -0
  578. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/sqlserver/test_sqlserver_string_length_pairing.py +0 -0
  579. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/sqlserver/test_sqlserver_uniqueidentifier_l3_normalization.py +0 -0
  580. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/sqlserver/test_sqlserver_xml_image_metrics.py +0 -0
  581. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/sqlserver/test_tsql_integer_stddev_exact.py +0 -0
  582. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_accepted_transformation.py +0 -0
  583. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_arguments_manager_base.py +0 -0
  584. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_arguments_manager_factory.py +0 -0
  585. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_batched_metrics_queries.py +0 -0
  586. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_boolean_binary_canonical_templates.py +0 -0
  587. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_case_sensitive_column_pairing.py +0 -0
  588. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_catalog_column_size.py +0 -0
  589. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_catalog_queries_take_actual_names.py +0 -0
  590. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_cell_data_validator.py +0 -0
  591. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_cell_data_validator_threading.py +0 -0
  592. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_charset_normalization.py +0 -0
  593. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_column_grouping.py +0 -0
  594. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_column_metadata.py +0 -0
  595. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_column_normalization_override.py +0 -0
  596. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_column_partitioning_strategy.py +0 -0
  597. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_column_selection.py +0 -0
  598. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_column_selection_actual_names.py +0 -0
  599. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_comparison_codec.py +0 -0
  600. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_comparison_orchestrator.py +0 -0
  601. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_configuration_file_editor.py +0 -0
  602. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_configuration_file_generator.py +0 -0
  603. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_configuration_file_synchronizer.py +0 -0
  604. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_configuration_loader.py +0 -0
  605. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_configuration_model.py +0 -0
  606. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_connection_pool.py +0 -0
  607. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_connector_failure_tracker.py +0 -0
  608. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_connector_snowflake.py +0 -0
  609. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_cpu_optimizer.py +0 -0
  610. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_custom_templates_models.py +0 -0
  611. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_decimal_text_canonical.py +0 -0
  612. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_dv_tracing.py +0 -0
  613. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_error_classifier.py +0 -0
  614. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_escape_odbc_value.py +0 -0
  615. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_executor_factory.py +0 -0
  616. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_extraction_keeps_catalog_column_spelling.py +0 -0
  617. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_fetch_schema_metadata.py +0 -0
  618. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_float_aggregate_reduction.py +0 -0
  619. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_float_canonical_templates.py +0 -0
  620. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_get_configuration_file.py +0 -0
  621. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_get_target_cols.py +0 -0
  622. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_helper_dataframe.py +0 -0
  623. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_helper_io.py +0 -0
  624. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_helper_polars_cast_threading.py +0 -0
  625. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_helpers.py +0 -0
  626. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_html_report_builder.py +0 -0
  627. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_iceberg_v2_metrics_exclusion.py +0 -0
  628. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_index_key_format.py +0 -0
  629. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_internal_helpers.py +0 -0
  630. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_interval_common.py +0 -0
  631. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_iso_dv_common.py +0 -0
  632. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_l2_collation_metadata.py +0 -0
  633. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_l2_count_distinct_opt_in_config.py +0 -0
  634. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_logging_config.py +0 -0
  635. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_lossy_number_mapping.py +0 -0
  636. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_metric_identifier_rendering.py +0 -0
  637. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_metrics_result_shape.py +0 -0
  638. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_metrics_templates_casts.py +0 -0
  639. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_normalize_shape_aware.py +0 -0
  640. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_numeric_scale_resolution.py +0 -0
  641. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_object_type_criterion.py +0 -0
  642. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_parallel_execution_engine_fatal_errors.py +0 -0
  643. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_period_common.py +0 -0
  644. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_platform_bridge.py +0 -0
  645. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_postgresql_normalization_templates.py +0 -0
  646. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_postgresql_tz_normalization.py +0 -0
  647. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_query_executor.py +0 -0
  648. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_query_generator_numeric_scale.py +0 -0
  649. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_query_metrics_level_validation.py +0 -0
  650. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_query_to_dataframe.py +0 -0
  651. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_query_validator.py +0 -0
  652. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_qvci_fallback.py +0 -0
  653. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_qvci_fallback_na_skip.py +0 -0
  654. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_qvci_fallback_triggers.py +0 -0
  655. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_redshift_iceberg_timestamp_metrics.py +0 -0
  656. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_redshift_native_timestamptz_ltz.py +0 -0
  657. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_report_metadata.py +0 -0
  658. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_result_set_column_metrics_validation.py +0 -0
  659. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_result_set_snapshot_generation.py +0 -0
  660. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_result_set_snapshot_validation.py +0 -0
  661. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_result_set_to_dataframe.py +0 -0
  662. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_row_count_bigint_overflow.py +0 -0
  663. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_row_data_validator.py +0 -0
  664. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_row_data_validator_empty_chunk.py +0 -0
  665. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_row_hash_column_delimiter.py +0 -0
  666. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_row_partitioning_strategy.py +0 -0
  667. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_row_validation_lob_exclusion.py +0 -0
  668. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_row_validation_report_buffer.py +0 -0
  669. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_schema_accepted_native_datatypes.py +0 -0
  670. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_schema_column_selection.py +0 -0
  671. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_schema_query_capability.py +0 -0
  672. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_shutdown_coordinator.py +0 -0
  673. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_signature_external_table.py +0 -0
  674. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_signature_row_md5_query.py +0 -0
  675. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_snapshot_validation_statements.py +0 -0
  676. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_snowflake_arguments_manager.py +0 -0
  677. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_snowflake_binary_normalization_templates.py +0 -0
  678. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_snowflake_redshift_super_size_guard.py +0 -0
  679. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_source_validation_executor.py +0 -0
  680. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_spatial_wkt_canonicalization.py +0 -0
  681. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_sql_catalog_template_guard.py +0 -0
  682. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_sql_literal_jinja_filter.py +0 -0
  683. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_sqlite_validation_connection.py +0 -0
  684. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_sqlserver_arguments_manager.py +0 -0
  685. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_sqlserver_multi_version_support.py +0 -0
  686. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_sync_executor_qvci_fallback.py +0 -0
  687. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_sync_schema_validation_real_callbacks.py +0 -0
  688. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_sync_validation_executor.py +0 -0
  689. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_table_column_metadata_model.py +0 -0
  690. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_table_configuration.py +0 -0
  691. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_table_context.py +0 -0
  692. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_table_metadata_processor.py +0 -0
  693. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_table_snapshot_generation.py +0 -0
  694. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_table_snapshot_validation.py +0 -0
  695. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_target_platform_factory.py +0 -0
  696. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_telemetry.py +0 -0
  697. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_teradata_iso_normalization.py +0 -0
  698. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_teradata_string_rtrim_policy.py +0 -0
  699. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_teradata_timetz_metric_domain.py +0 -0
  700. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_teradata_type_code_mapping.py +0 -0
  701. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_timestamp_golden_vectors.py +0 -0
  702. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_trace_bridge.py +0 -0
  703. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_tsql_float_l2_aggregates.py +0 -0
  704. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_validation_configuration.py +0 -0
  705. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_validation_database_connection.py +0 -0
  706. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_validation_execution_context.py +0 -0
  707. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_validation_progress_reporter.py +0 -0
  708. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_validation_report_buffer.py +0 -0
  709. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_validation_report_status.py +0 -0
  710. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_validation_templates_dto.py +0 -0
  711. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_vector_bit_normalization.py +0 -0
  712. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_vector_common.py +0 -0
  713. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_vector_normalization.py +0 -0
  714. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_view_configuration.py +0 -0
  715. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/test_warm_start.py +0 -0
  716. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/utils/__init__.py +0 -0
  717. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/tests/unit/utils/test_constants.py +0 -0
  718. {snowflake_data_validation-1.45.4 → snowflake_data_validation-1.46.0}/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.4
3
+ Version: 1.46.0
4
4
  Summary: Snowflake Data Validation
5
5
  Project-URL: Bug Tracker, https://github.com/snowflake-eng/migrations-data-validation/issues
6
6
  Project-URL: Source code, https://github.com/snowflake-eng/migrations-data-validation/
@@ -38,7 +38,7 @@ Requires-Dist: pydantic-yaml>=1.4.0
38
38
  Requires-Dist: pydantic>=2.0
39
39
  Requires-Dist: pyyaml>=6.0
40
40
  Requires-Dist: ruamel-yaml>=0.18.0
41
- Requires-Dist: snowflake-connector-python<5,>=4.7.1
41
+ Requires-Dist: snowflake-connector-python<5,>=4.7.3
42
42
  Requires-Dist: toml>=0.10.2
43
43
  Requires-Dist: typer>=0.15.3
44
44
  Requires-Dist: typing-extensions>=4.13.2
@@ -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.5; extra == 'scai'
82
+ Requires-Dist: snowflake-code-unit-registry>=0.9.7; extra == 'scai'
83
83
  Provides-Extra: sqlite
84
84
  Requires-Dist: sqlean-py>=3.45.0; extra == 'sqlite'
85
85
  Provides-Extra: sqlserver
@@ -230,6 +230,21 @@ For configuration options and examples, see the [official documentation](https:/
230
230
 
231
231
  ## Changelog
232
232
 
233
+ ### v1.46.0
234
+
235
+ **Bug fixes**
236
+
237
+ - Fixed L2 `DECFLOAT` `MIN` and `MAX` being compared as `FLOAT`, which let differences past about 16 significant digits pass.
238
+ - Fixed high-precision decimals being rounded twice when cast to `Float64`, so identical values failed by one unit in the last place.
239
+ - Fixed SQL Server `FLOAT` and `REAL` row validation using `TRIM()`, which SQL Server 2016 does not support.
240
+ - Fixed result-set comparison failing for column names that contain a double quote.
241
+ - Fixed SQL Server row validation of wide tables failing with "expression services limit has been reached".
242
+ - Fixed L2 validation of an empty source and empty target table not being reported as valid.
243
+ - Fixed direct row validation failing tables whose rows are full duplicates when the row drill-down finds no differences.
244
+ - Fixed SQL Server Iceberg L3 validation reporting mismatches between 9-digit source and 6-digit target fractional seconds.
245
+ - Fixed Teradata object-type mapping: tables with no primary index are now validated as tables, and triggers are no longer mapped as tables.
246
+ - Fixed schema validation failing for SQL Server `image` columns.
247
+
233
248
  ### v1.45.4
234
249
 
235
250
  **Improvements**
@@ -139,6 +139,21 @@ For configuration options and examples, see the [official documentation](https:/
139
139
 
140
140
  ## Changelog
141
141
 
142
+ ### v1.46.0
143
+
144
+ **Bug fixes**
145
+
146
+ - Fixed L2 `DECFLOAT` `MIN` and `MAX` being compared as `FLOAT`, which let differences past about 16 significant digits pass.
147
+ - Fixed high-precision decimals being rounded twice when cast to `Float64`, so identical values failed by one unit in the last place.
148
+ - Fixed SQL Server `FLOAT` and `REAL` row validation using `TRIM()`, which SQL Server 2016 does not support.
149
+ - Fixed result-set comparison failing for column names that contain a double quote.
150
+ - Fixed SQL Server row validation of wide tables failing with "expression services limit has been reached".
151
+ - Fixed L2 validation of an empty source and empty target table not being reported as valid.
152
+ - Fixed direct row validation failing tables whose rows are full duplicates when the row drill-down finds no differences.
153
+ - Fixed SQL Server Iceberg L3 validation reporting mismatches between 9-digit source and 6-digit target fractional seconds.
154
+ - Fixed Teradata object-type mapping: tables with no primary index are now validated as tables, and triggers are no longer mapped as tables.
155
+ - Fixed schema validation failing for SQL Server `image` columns.
156
+
142
157
  ### v1.45.4
143
158
 
144
159
  **Improvements**
@@ -36,7 +36,7 @@ dependencies = [
36
36
  "connectorx>=0.3.0",
37
37
  "cryptography>=50.0.0",
38
38
  "deepdiff>=8.0.0",
39
- "snowflake-connector-python>=4.7.1,<5",
39
+ "snowflake-connector-python>=4.7.3,<5",
40
40
  "pandas>=2.2.3",
41
41
  "polars>=1.0.0",
42
42
  "pyarrow>=14.0.0",
@@ -106,7 +106,7 @@ db2 = [
106
106
  # musllinux build, and SDV is published to public PyPI. Inside DMO/DEA the
107
107
  # dependency is already declared, so SDV's logger tree is covered there.
108
108
  scai = [
109
- "snowflake-code-unit-registry>=0.9.5",
109
+ "snowflake-code-unit-registry>=0.9.7",
110
110
  ]
111
111
 
112
112
  [project.urls]
@@ -34,9 +34,6 @@ from typing import TYPE_CHECKING
34
34
 
35
35
  from shared.identifiers.managers import identifier_manager
36
36
  from shared.identifiers.sql_identifier import SqlIdentifier
37
- from snowflake.snowflake_data_validation.query.float_bit_normalization import (
38
- build_binary64_canonical_expr,
39
- )
40
37
  from snowflake.snowflake_data_validation.query.numeric_scale_resolution import (
41
38
  float_bit_input_expr,
42
39
  )
@@ -44,6 +41,9 @@ from snowflake.snowflake_data_validation.query.query_generator_base import (
44
41
  QueryGeneratorBase,
45
42
  resolve_table_context_modifiers,
46
43
  )
44
+ from snowflake.snowflake_data_validation.query.tsql_float_bits import (
45
+ build_tsql_float_bit_canonical_expr,
46
+ )
47
47
  from snowflake.snowflake_data_validation.query.tsql_float_remainder import (
48
48
  TsqlFloatMetricModifierMixin,
49
49
  )
@@ -77,7 +77,7 @@ LOGGER = logging.getLogger(__name__)
77
77
 
78
78
  def build_azure_synapse_float_bit_canonical_expr(col_ref: str) -> str:
79
79
  """Return the exact binary64 tuple used for Azure Synapse float validation."""
80
- return build_binary64_canonical_expr(col_ref, dialect=Platform.AZURE_SYNAPSE.value)
80
+ return build_tsql_float_bit_canonical_expr(col_ref)
81
81
 
82
82
 
83
83
  class QueryGeneratorAzureSynapse(TsqlFloatMetricModifierMixin, QueryGeneratorBase):
@@ -338,13 +338,18 @@ DOUBLE PRECISION:
338
338
  metric_return_datatype: FLOAT
339
339
  metric_column_modifier: ' - 2097143 * (CAST("{{ col_name }}" AS DECIMAL(31,0)) / 2097143)'
340
340
 
341
+ # min/max are emitted as exact canonical decimal text (``{{ decfloat_shim }}``
342
+ # over the aggregate), matching Snowflake DECFLOAT's: binary64 keeps only ~16
343
+ # of DECFLOAT's 34 digits.
341
344
  DECFLOAT:
342
345
  min:
343
346
  metric_query: MIN("{{ col_name }}")
344
347
  metric_return_datatype: FLOAT
348
+ metric_normalization: "{{ decfloat_shim }}"
345
349
  max:
346
350
  metric_query: MAX("{{ col_name }}")
347
351
  metric_return_datatype: FLOAT
352
+ metric_normalization: "{{ decfloat_shim }}"
348
353
  count_distinct:
349
354
  metric_query: COUNT(DISTINCT "{{ col_name }}")
350
355
  metric_return_datatype: INTEGER
@@ -28,6 +28,7 @@ below give DB2 its own DB2-valid rendering that still matches Snowflake
28
28
  from pathlib import Path
29
29
 
30
30
  import jinja2
31
+ import pandas as pd
31
32
 
32
33
  from shared.datatypes.common import CommonType
33
34
  from shared.datatypes.db2 import Db2Type
@@ -49,6 +50,8 @@ from snowflake.snowflake_data_validation.query.query_generator_base import (
49
50
  )
50
51
  from snowflake.snowflake_data_validation.query.sql_type_families import SNOWFLAKE_FLOAT_TYPE_NAMES
51
52
  from snowflake.snowflake_data_validation.utils.constants import (
53
+ DECFLOAT_SHIM_PLACEHOLDER,
54
+ METRIC_QUERY_PLACEHOLDER,
52
55
  NULL_HASHING_SENTINEL,
53
56
  NULL_HASHING_SENTINEL_KEY,
54
57
  ROW_HASH_COLUMN_DELIMITER,
@@ -59,6 +62,7 @@ from snowflake.snowflake_data_validation.utils.iso_dv_common import (
59
62
  get_paired_target_column_types,
60
63
  normalize_snowflake_base_type,
61
64
  )
65
+ from snowflake.snowflake_data_validation.utils.model.column_metadata import ColumnMetadata
62
66
  from snowflake.snowflake_data_validation.utils.model.table_context import TableContext
63
67
 
64
68
 
@@ -66,6 +70,9 @@ from snowflake.snowflake_data_validation.utils.model.table_context import TableC
66
70
  # leading zero for |v| < 1 (matching Snowflake TO_VARCHAR).
67
71
  _DB2_INTEGER_NINES = 31
68
72
 
73
+ # MIN/MAX of a DECFLOAT mirrored as a Snowflake FLOAT, in place of its exact text.
74
+ DB2_DECFLOAT_AS_FLOAT_METRIC_NORMALIZATION = f"CAST({METRIC_QUERY_PLACEHOLDER} AS DOUBLE)"
75
+
69
76
 
70
77
  def build_db2_float_bit_canonical_expr(col_ref: str) -> str:
71
78
  """Return the exact binary64 tuple used for DB2 float validation.
@@ -153,21 +160,43 @@ class QueryGeneratorDb2(QueryGeneratorOracle):
153
160
  datatypes_normalization_templates: dict[str, str],
154
161
  table_context: TableContext,
155
162
  ) -> str:
156
- """Hash a DECFLOAT mirrored as a Snowflake FLOAT as binary64, as that target does.
157
-
158
- DMO creates DECFLOAT; only a user-mapped target lands on FLOAT, and it
159
- holds ~16 digits, so the exact decimal text could never match it.
160
- """
161
- if self._parse_type_precision_scale(column.data_type or "")[0] == Db2Type.DECFLOAT:
162
- target_type = get_paired_target_column_types(table_context).get(column.name)
163
- if isinstance(target_type, str) and normalize_snowflake_base_type(target_type) in SNOWFLAKE_FLOAT_TYPE_NAMES:
164
- return datatypes_normalization_templates[CommonType.FLOAT]
163
+ """Hash a DECFLOAT mirrored as a Snowflake FLOAT as binary64, as that target does."""
164
+ if self._decfloat_lands_in_float(column, table_context):
165
+ return datatypes_normalization_templates[CommonType.FLOAT]
165
166
  return super()._resolve_datatype_normalization_template(
166
167
  column,
167
168
  datatypes_normalization_templates,
168
169
  table_context,
169
170
  )
170
171
 
172
+ def _resolve_metric_normalization(
173
+ self,
174
+ col: ColumnMetadata,
175
+ metric_name: str,
176
+ row: pd.Series,
177
+ table_context: TableContext,
178
+ ) -> str | None:
179
+ """Measure a DECFLOAT mirrored as a Snowflake FLOAT in binary64, as that target does.
180
+
181
+ Only the stock exact-text MIN/MAX is swapped, so the DECFLOAT row's custom
182
+ removals and queries still apply.
183
+ """
184
+ normalization = super()._resolve_metric_normalization(col, metric_name, row, table_context)
185
+ if normalization and DECFLOAT_SHIM_PLACEHOLDER in normalization and self._decfloat_lands_in_float(col, table_context):
186
+ return DB2_DECFLOAT_AS_FLOAT_METRIC_NORMALIZATION
187
+ return normalization
188
+
189
+ def _decfloat_lands_in_float(self, column: ColumnMetadata, table_context: TableContext) -> bool:
190
+ """Return True for a DECFLOAT column whose Snowflake mirror is FLOAT.
191
+
192
+ DMO creates DECFLOAT; only a user-mapped target lands on FLOAT, and it
193
+ holds ~16 digits, so the exact decimal text could never match it.
194
+ """
195
+ if self._parse_type_precision_scale(column.data_type or "")[0] != Db2Type.DECFLOAT:
196
+ return False
197
+ target_type = get_paired_target_column_types(table_context).get(column.name)
198
+ return isinstance(target_type, str) and normalize_snowflake_base_type(target_type) in SNOWFLAKE_FLOAT_TYPE_NAMES
199
+
171
200
  # ------------------------------------------------------------------
172
201
  # text_comparison_mode: apply the per-column text codec (raw/logical)
173
202
  #
@@ -45,8 +45,8 @@ def _to_str(value: object) -> object:
45
45
  into a plain ``str``. This guarantees the long-format DataFrame
46
46
  contains only strings and ``pd.NA`` — no mixed native types that
47
47
  would break ``sort_values`` inside ``normalize_dataframe``.
48
- ``MetricsDataValidator`` already applies ``is_numeric`` /
49
- ``float()`` for tolerance checks, so string values work correctly.
48
+ ``MetricsDataValidator`` parses numeric text for its tolerance checks,
49
+ exactly when both sides are exact, so string values work correctly.
50
50
  """
51
51
  if value is None:
52
52
  return None
@@ -114,8 +114,10 @@ def reshape_wide_metrics_result(
114
114
 
115
115
  # Single row is guaranteed by the wide-SELECT contract. If a driver
116
116
  # ever returns more rows (e.g. GROUP BY accident) we use the first.
117
- # ``tolist()`` yields Python-native types (Timestamp -> datetime, etc.)
118
- row_values = wide_df.iloc[0].tolist()
117
+ # Each cell is read as its own column's value: a row of only numeric
118
+ # dtypes would otherwise be upcast to float64 as a whole, rounding an
119
+ # integer MIN/MAX past 2**53 that the comparator measures exactly.
120
+ row_values = wide_df.iloc[:1].astype(object).iloc[0].tolist()
119
121
 
120
122
  rows_by_col: dict[str, dict[str, object]] = {
121
123
  col_name: {m: pd.NA for m in metric_columns} for col_name in ordered_col_names
@@ -80,23 +80,9 @@ SNOWFLAKE_BINARY64_SQL = Binary64SqlDialect(
80
80
  neg_inf_literals=("-inf", "-infinity"),
81
81
  )
82
82
 
83
- # SQL Server / Azure Synapse dedicated pool: LOG is natural log; LEAST/GREATEST
84
- # need SQL Server 2022+. POWER(2.0, n) is DECIMAL arithmetic (2.0 is
85
- # decimal(2,1)), so 2.0^-4 becomes 0.1. Force FLOAT: POWER(CONVERT(FLOAT, 2), n).
86
- # LOG(0) raises divide-by-zero even inside CASE; NULLIF the abs input.
87
- # CAST(... AS VARCHAR) is VARCHAR(30), which is enough for these integers.
88
- SQLSERVER_BINARY64_SQL = Binary64SqlDialect(
89
- log2="LOG(NULLIF({abs}, 0)) / LOG(CONVERT(FLOAT, 2))",
90
- power2="POWER(CONVERT(FLOAT, 2), {exp})",
91
- integer_type="BIGINT",
92
- string_type="VARCHAR(50)",
93
- concat="concat",
94
- use_least_greatest=False,
95
- text_value="LOWER(LTRIM(RTRIM(CONVERT(VARCHAR(50), {value}, 2))))",
96
- nan_literals=("nan",),
97
- pos_inf_literals=("inf", "infinity"),
98
- neg_inf_literals=("-inf", "-infinity"),
99
- )
83
+ # SQL Server and Azure Synapse read the tuple from the stored bits instead
84
+ # (``tsql_float_bits``): the LOG/POWER search below repeats the column about a
85
+ # hundred times, and T-SQL row hashes compile into one size-limited expression.
100
86
 
101
87
  # Redshift and PostgreSQL can share Snowflake's spelling
102
88
  # (LN / POWER / BIGINT / ||).
@@ -196,9 +182,6 @@ BINARY64_SQL_BY_DIALECT: dict[str, Binary64SqlDialect] = {
196
182
  "snowflake": SNOWFLAKE_BINARY64_SQL,
197
183
  "redshift": SNOWFLAKE_BINARY64_SQL,
198
184
  "postgresql": SNOWFLAKE_BINARY64_SQL,
199
- "sqlserver": SQLSERVER_BINARY64_SQL,
200
- # Dedicated SQL pool is T-SQL: same LOG/POWER(FLOAT) spelling as SQL Server.
201
- "azure_synapse": SQLSERVER_BINARY64_SQL,
202
185
  "oracle": ORACLE_BINARY64_SQL,
203
186
  "sqlite": SQLITE_BINARY64_SQL,
204
187
  "db2": DB2_BINARY64_SQL,
@@ -26,11 +26,23 @@ class NormalizationRenderContext:
26
26
  has_custom_normalization: bool = False
27
27
 
28
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."""
29
+ def from_table_context(
30
+ cls,
31
+ table_context: TableContext,
32
+ *,
33
+ source_timestamp_fraction_digits: int | None = None,
34
+ ) -> NormalizationRenderContext:
35
+ """Resolve the per-table inputs; ``for_column`` adds the per-column paired type.
36
+
37
+ ``source_timestamp_fraction_digits`` is the paired source's fixed timestamp
38
+ text width; it replaces the Iceberg spec's digits when given.
39
+ """
40
+ fraction_digits = source_timestamp_fraction_digits
41
+ if fraction_digits is None:
42
+ fraction_digits = IcebergProfile.from_table_context(table_context).fraction_digits
31
43
  return cls(
32
44
  paired_source_platform=table_context.paired_source_platform,
33
- iceberg_fraction_digits=IcebergProfile.from_table_context(table_context).fraction_digits,
45
+ iceberg_fraction_digits=fraction_digits,
34
46
  )
35
47
 
36
48
  def for_column(
@@ -182,12 +182,15 @@ class QueryGeneratorBase(ABC):
182
182
  f"DECFLOAT normalization is not supported for platform {self.platform.value!r}",
183
183
  )
184
184
 
185
- def _expand_decfloat_placeholder(self, template: str, column) -> str:
186
- """Replace ``{{ decfloat_shim }}`` when present."""
185
+ def _expand_decfloat_placeholder(self, template: str, column, col_ref: str | None = None) -> str:
186
+ """Replace ``{{ decfloat_shim }}`` when present, over *col_ref* (default: the column itself)."""
187
187
  if DECFLOAT_SHIM_PLACEHOLDER not in template:
188
188
  return template
189
189
  try:
190
- shim = self.build_decfloat_shim(column, self._float_column_reference(column))
190
+ shim = self.build_decfloat_shim(
191
+ column,
192
+ col_ref if col_ref is not None else self._float_column_reference(column),
193
+ )
191
194
  except NotImplementedError as exc:
192
195
  raise ValueError(
193
196
  f"{{ decfloat_shim }} is not supported for platform {self.platform.value!r}",
@@ -225,7 +228,7 @@ class QueryGeneratorBase(ABC):
225
228
 
226
229
  The shipped templates spell the column ``"{{ col_name }}"``; custom ones may
227
230
  use a bare ``{{ col_name }}``. Dialects whose writer delimits the name itself
228
- (Snowflake, SQL Server, Synapse) render either as one complete identifier.
231
+ (Snowflake, SQL Server, Synapse, result set) render either as one complete identifier.
229
232
  """
230
233
  written = self._write_sql_identifier(identifier)
231
234
  rendered = template.replace(self._quoted_metric_identifier_placeholder(), written)
@@ -947,6 +950,8 @@ class QueryGeneratorBase(ABC):
947
950
  if normalization is None and row.get(EXPLICIT_METRIC_NORMALIZATION_COLUMN_KEY):
948
951
  normalization = row[NORMALIZATION_COLUMN_KEY]
949
952
  if pd.notna(normalization) and normalization:
953
+ # A DECFLOAT aggregate keeps every digit as canonical text over the aggregate.
954
+ normalization = self._expand_decfloat_placeholder(normalization, col, METRIC_QUERY_PLACEHOLDER)
950
955
  if NUMERIC_FORMAT_MASK_PLACEHOLDER in normalization:
951
956
  mask = self._build_numeric_format_mask(self._resolve_numeric_scale(col))
952
957
  normalization = normalization.replace(NUMERIC_FORMAT_MASK_PLACEHOLDER, mask)
@@ -0,0 +1,66 @@
1
+ # Copyright 2026 Snowflake Inc.
2
+ # SPDX-License-Identifier: Apache-2.0
3
+
4
+ """Read a T-SQL FLOAT's IEEE-754 fields from its stored bits.
5
+
6
+ SQL Server and the Azure Synapse dedicated SQL pool share this spelling of the
7
+ ``sign|exponent|significand`` tuple that Snowflake FLOAT emits.
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ from snowflake.snowflake_data_validation.query.float_bit_normalization import (
13
+ IEEE754_BINARY64_FRACTION_BITS,
14
+ IEEE754_BINARY64_MIN_EXPONENT,
15
+ )
16
+
17
+
18
+ _BINARY64_EXPONENT_BIAS = 1023
19
+ _BINARY64_MAX_BIASED_EXPONENT = 2047
20
+ # Mask for the 11 exponent bits in the first two big-endian bytes (0x7FF0).
21
+ _BINARY64_EXPONENT_MASK_IN_HIGH_WORD = 0x7FF0
22
+ _BINARY64_EXPONENT_SHIFT_IN_HIGH_WORD = 16
23
+ _BINARY64_FRACTION_MASK = (1 << IEEE754_BINARY64_FRACTION_BITS) - 1
24
+ _BINARY64_IMPLICIT_BIT = 1 << IEEE754_BINARY64_FRACTION_BITS
25
+
26
+
27
+ def build_tsql_float_bit_canonical_expr(col_ref: str) -> str:
28
+ """Return the exact binary64 tuple for a SQL Server or Azure Synapse float.
29
+
30
+ Emits the same ``sign|exponent|significand`` strings as
31
+ ``build_binary64_canonical_expr``, but reads the fields from the stored
32
+ bits: ``CAST(float AS BINARY(8))`` is the big-endian IEEE-754 encoding.
33
+ The LOG/POWER exponent search the other dialects use repeats the column
34
+ about a hundred times, and T-SQL compiles every normalized column of a row
35
+ hash into one expression with a size limit ("An expression services limit
36
+ has been reached"), which a few dozen FLOAT columns exceed. Integer
37
+ literals above INT range are DECIMAL in T-SQL, so the 64-bit masks are
38
+ cast to BIGINT for the ``&`` operator.
39
+ """
40
+ # The inner cast keeps a REAL argument from encoding as four bytes.
41
+ bits = f"CAST(CAST({col_ref} AS FLOAT) AS BINARY(8))"
42
+ biased_exponent = (
43
+ f"((CAST(SUBSTRING({bits}, 1, 2) AS INT) & {_BINARY64_EXPONENT_MASK_IN_HIGH_WORD})"
44
+ f" / {_BINARY64_EXPONENT_SHIFT_IN_HIGH_WORD})"
45
+ )
46
+ fraction = f"(CAST({bits} AS BIGINT) & CAST({_BINARY64_FRACTION_MASK} AS BIGINT))"
47
+ # Subnormals have a zero biased exponent, a fixed -1022 exponent and no implicit bit.
48
+ exponent = (
49
+ f"CASE WHEN {biased_exponent} = 0 THEN {IEEE754_BINARY64_MIN_EXPONENT} "
50
+ f"ELSE {biased_exponent} - {_BINARY64_EXPONENT_BIAS} END"
51
+ )
52
+ significand = (
53
+ f"{fraction} + CASE WHEN {biased_exponent} = 0 THEN CAST(0 AS BIGINT) "
54
+ f"ELSE CAST({_BINARY64_IMPLICIT_BIT} AS BIGINT) END"
55
+ )
56
+ special_value = (
57
+ f"CASE WHEN {fraction} <> 0 THEN 'NAN' WHEN {col_ref} < 0 THEN '-INF' ELSE '+INF' END"
58
+ )
59
+ sign = f"CASE WHEN {col_ref} < 0 THEN '1' ELSE '0' END"
60
+ return (
61
+ f"CASE WHEN {col_ref} IS NULL THEN NULL "
62
+ f"WHEN {col_ref} = 0 THEN '0|0|0' "
63
+ f"WHEN {biased_exponent} = {_BINARY64_MAX_BIASED_EXPONENT} THEN {special_value} "
64
+ f"ELSE CONCAT({sign}, '|', CAST({exponent} AS VARCHAR(50)), '|', "
65
+ f"CAST({significand} AS VARCHAR(50))) END"
66
+ )
@@ -1,5 +1,5 @@
1
1
  SELECT
2
2
  {% for column in column_collection %}
3
- COALESCE({{ datatypes_normalization_renderer_templates[column.name] }}, '{{ null_hashing_sentinel }}') AS "{{ column.name }}"{% if not loop.last %},{% endif %}
3
+ COALESCE({{ datatypes_normalization_renderer_templates[column.name] }}, '{{ null_hashing_sentinel }}') AS {{ column_sql_names[column.name] }}{% if not loop.last %},{% endif %}
4
4
  {% endfor %}
5
5
  FROM self
@@ -19,6 +19,15 @@ class QueryGeneratorResultSet(QueryGeneratorBase):
19
19
  """Initialize the ResultSet query generator."""
20
20
  super().__init__(platform=Platform.RESULT_SET)
21
21
 
22
+ def _render_normalization_template_identifier(self, template: str, identifier: str) -> str:
23
+ """Insert *identifier* into a normalization template as one complete, quoted identifier.
24
+
25
+ Both the quoted ``"{{ col_name }}"`` and a bare ``{{ col_name }}`` placeholder are
26
+ replaced with the name as written by ``_write_sql_identifier``, so an inner double
27
+ quote is doubled and a custom template cannot split or break the statement.
28
+ """
29
+ return self._render_written_identifier_template(template, identifier)
30
+
22
31
  def generate_extract_md5_rows_chunk_query(self, chunk_id: str, table_context: TableContext) -> str:
23
32
  """Generate the SQL query to extract the MD5 rows for a specific chunk.
24
33
 
@@ -97,6 +106,7 @@ class QueryGeneratorResultSet(QueryGeneratorBase):
97
106
  has_where_clause=False,
98
107
  where_clause="",
99
108
  order_by_columns=[],
109
+ write_identifier=self._write_sql_identifier,
100
110
  )
101
111
 
102
112
  return query
@@ -49,17 +49,21 @@ FLOAT:
49
49
  metric_return_datatype: FLOAT
50
50
  metric_column_modifier: "% 2097143"
51
51
 
52
- # DECFLOAT mirror of the DB2 DECFLOAT metric block. min/max stay uncast like
53
- # DB2's MIN/MAX. The avg/sum/stddev shape matches the Snowflake NUMBER block
54
- # (CAST ... AS FLOAT), so the aggregate runs in binary64 and matches DB2's
55
- # CAST(... AS FLOAT) on the source side.
52
+ # DECFLOAT mirror of the DB2 DECFLOAT metric block. min/max are emitted as the
53
+ # same canonical decimal text as DB2's (``{{ decfloat_shim }}`` over the
54
+ # aggregate), since binary64 keeps only ~16 of DECFLOAT's 34 digits. The
55
+ # avg/sum/stddev shape matches the Snowflake NUMBER block (CAST ... AS FLOAT),
56
+ # so the aggregate runs in binary64 and matches DB2's CAST(... AS FLOAT) on the
57
+ # source side.
56
58
  DECFLOAT:
57
59
  min:
58
60
  metric_query: MIN("{{ col_name }}")
59
61
  metric_return_datatype: FLOAT
62
+ metric_normalization: "{{ decfloat_shim }}"
60
63
  max:
61
64
  metric_query: MAX("{{ col_name }}")
62
65
  metric_return_datatype: FLOAT
66
+ metric_normalization: "{{ decfloat_shim }}"
63
67
  count_distinct:
64
68
  metric_query: COUNT(DISTINCT "{{ col_name }}")
65
69
  metric_return_datatype: NUMBER
@@ -117,7 +117,13 @@ def _joined_cte(pk_column_names: Sequence[str]) -> str:
117
117
 
118
118
 
119
119
  def _category_case_sql() -> str:
120
- """Map joined aggregates to Result enum values (duplicates first)."""
120
+ """Map joined aggregates to Result enum values (duplicates first).
121
+
122
+ A key repeated the same number of times on both sides, with every copy
123
+ hashing to one ROW_MD5 that both sides share, is the same multiset of
124
+ rows (a keyless table indexed on all its columns, for instance). It is no
125
+ anomaly, so it gets no category and does not fail the table.
126
+ """
121
127
  dup_both = Result.DUPLICATE_BOTH_SIDES.value
122
128
  dup_src = Result.DUPLICATE_SOURCE.value
123
129
  dup_tgt = Result.DUPLICATE_TARGET.value
@@ -126,6 +132,8 @@ def _category_case_sql() -> str:
126
132
  mismatch = Result.MISMATCH.value
127
133
  return (
128
134
  "CASE\n"
135
+ " WHEN SRC_CNT > 1 AND SRC_CNT = TGT_CNT AND SRC_MD5 = TGT_MD5\n"
136
+ " AND NOT SRC_HASH_COLLISION AND NOT TGT_HASH_COLLISION THEN NULL\n"
129
137
  f" WHEN COALESCE(SRC_CNT, 0) > 1 AND COALESCE(TGT_CNT, 0) > 1 THEN '{dup_both}'\n"
130
138
  f" WHEN COALESCE(SRC_CNT, 0) > 1 THEN '{dup_src}'\n"
131
139
  f" WHEN COALESCE(TGT_CNT, 0) > 1 THEN '{dup_tgt}'\n"
@@ -88,6 +88,7 @@ from snowflake.snowflake_data_validation.utils.constants import (
88
88
  NORMALIZATION_COLUMN_KEY,
89
89
  NUMERIC_FORMAT_MASK_PLACEHOLDER,
90
90
  Platform,
91
+ fixed_source_timestamp_text_fraction_digits,
91
92
  )
92
93
  from snowflake.snowflake_data_validation.utils.iceberg_dv_common import (
93
94
  IcebergProfile,
@@ -426,7 +427,12 @@ class QueryGeneratorSnowflake(QueryGeneratorBase):
426
427
  ) -> dict[str, str]:
427
428
  datatypes_normalization_templates = table_context.templates_loader_manager.datatypes_normalization_templates
428
429
  paired_source_types = get_paired_source_column_types(table_context)
429
- base_context = NormalizationRenderContext.from_table_context(table_context)
430
+ base_context = NormalizationRenderContext.from_table_context(
431
+ table_context,
432
+ source_timestamp_fraction_digits=fixed_source_timestamp_text_fraction_digits(
433
+ table_context.paired_source_platform,
434
+ ),
435
+ )
430
436
  renderer_templates: dict[str, str] = {}
431
437
  renderer_columns = self._row_md5_normalization_columns(table_context)
432
438
  for column in renderer_columns:
@@ -10,7 +10,9 @@ WITH rc_cte AS (
10
10
  -- For nvarchar(max)/nchar(max), divide by 2 for 2-byte encoding (approx. 1 billion characters).
11
11
  -- For varchar(max)/char(max), approx. 2 billion characters.
12
12
  CASE
13
- WHEN C.DATA_TYPE IN ('varbinary', 'binary') THEN NULL
13
+ -- Binary types have no character length; Snowflake BINARY reports none
14
+ -- either. image (deprecated) otherwise reports its 2147483647 maximum.
15
+ WHEN C.DATA_TYPE IN ('varbinary', 'binary', 'image') THEN NULL
14
16
  -- Spatial CLR types are not character types; INFORMATION_SCHEMA still
15
17
  -- reports CHARACTER_MAXIMUM_LENGTH = -1 (unbounded sentinel). Treat as
16
18
  -- N/A so L1 matches Snowflake GEOGRAPHY/GEOMETRY (also NULL/N/A).
@@ -34,9 +34,6 @@ from shared.datatypes.snowflake import SnowflakeType
34
34
  from shared.identifiers.managers import identifier_manager
35
35
  from shared.identifiers.sql_identifier import SqlIdentifier
36
36
  from shared.sqlserver.version_detection import detect_sql_server_version
37
- from snowflake.snowflake_data_validation.query.float_bit_normalization import (
38
- build_binary64_canonical_expr,
39
- )
40
37
  from snowflake.snowflake_data_validation.query.numeric_scale_resolution import (
41
38
  float_bit_input_expr,
42
39
  )
@@ -44,6 +41,9 @@ from snowflake.snowflake_data_validation.query.query_generator_base import (
44
41
  QueryGeneratorBase,
45
42
  resolve_table_context_modifiers,
46
43
  )
44
+ from snowflake.snowflake_data_validation.query.tsql_float_bits import (
45
+ build_tsql_float_bit_canonical_expr,
46
+ )
47
47
  from snowflake.snowflake_data_validation.query.tsql_float_remainder import (
48
48
  TsqlFloatMetricModifierMixin,
49
49
  )
@@ -81,7 +81,7 @@ LOGGER = logging.getLogger(__name__)
81
81
 
82
82
  def build_sqlserver_float_bit_canonical_expr(col_ref: str) -> str:
83
83
  """Return the exact binary64 tuple used for SQL Server float validation."""
84
- return build_binary64_canonical_expr(col_ref, dialect=Platform.SQLSERVER.value)
84
+ return build_tsql_float_bit_canonical_expr(col_ref)
85
85
 
86
86
 
87
87
  def build_sqlserver_vector_bit_shim(col_ref: str, element) -> str:
@@ -103,8 +103,8 @@ WITH rc_cte AS (
103
103
  SELECT CASE t.TableKind
104
104
  WHEN 'T' THEN 'TABLE'
105
105
  WHEN 'V' THEN 'VIEW'
106
+ WHEN 'O' THEN 'TABLE'
106
107
  WHEN 'Q' THEN 'TABLE'
107
- WHEN 'G' THEN 'TABLE'
108
108
  ELSE 'UNKNOWN'
109
109
  END
110
110
  FROM DBC.TablesV t
@@ -75,6 +75,33 @@ def platform_skips_view_materialization(platform: Platform) -> bool:
75
75
  return platform in _VIEW_MATERIALIZATION_SKIP_PLATFORMS
76
76
 
77
77
 
78
+ # Fraction digits of a nanosecond-precision timestamp.
79
+ NANOSECOND_FRACTION_DIGITS = 9
80
+
81
+ # Source platforms whose L3 timestamp text carries a fixed number of fraction digits
82
+ # whatever their paired Snowflake target stores. The T-SQL templates pad DATETIME,
83
+ # DATETIME2 and DATETIMEOFFSET to nine digits, and the Oracle and DB2 templates render
84
+ # DATE and TIMESTAMP with FF9. The Snowflake generator renders an Iceberg v2 mirror at
85
+ # the same width, so stored microseconds pad with zeros and a source digit past the
86
+ # sixth lost to TIMESTAMP_NTZ(6) still shows. Sources not listed follow the Iceberg
87
+ # spec's digits. This is a platform capability rather than a source generator
88
+ # attribute because the Snowflake generator would have to reach the source generators
89
+ # through QueryGeneratorFactory, which imports it.
90
+ _FIXED_SOURCE_TIMESTAMP_TEXT_FRACTION_DIGITS: dict[Platform, int] = {
91
+ Platform.SQLSERVER: NANOSECOND_FRACTION_DIGITS,
92
+ Platform.AZURE_SYNAPSE: NANOSECOND_FRACTION_DIGITS,
93
+ Platform.ORACLE: NANOSECOND_FRACTION_DIGITS,
94
+ Platform.DB2: NANOSECOND_FRACTION_DIGITS,
95
+ }
96
+
97
+
98
+ def fixed_source_timestamp_text_fraction_digits(paired_source_platform: Platform | None) -> int | None:
99
+ """Return the paired source's fixed L3 timestamp text digits, or None when it follows the target."""
100
+ if paired_source_platform is None:
101
+ return None
102
+ return _FIXED_SOURCE_TIMESTAMP_TEXT_FRACTION_DIGITS.get(paired_source_platform)
103
+
104
+
78
105
  class ExecutionMode(Enum):
79
106
  """Enumeration of available execution modes."""
80
107
 
@@ -88,6 +88,17 @@ def _parse_time_series(series: pl.Series) -> pl.Series:
88
88
  return series.str.to_time(strict=False)
89
89
 
90
90
 
91
+ def _decimal_to_float64(col_expr: pl.Expr) -> pl.Expr:
92
+ """Round each decimal once, to its nearest double, as ``float(Decimal)`` does.
93
+
94
+ Polars' Decimal -> Float64 cast (1.x, which scai ships) converts the unscaled
95
+ integer to a double, then divides by ``10**scale``: a second rounding that can
96
+ land one ulp off, so a ``Decimal`` (Snowflake's connector) and a ``float`` (a
97
+ JSON baseline) of the same value stop comparing equal.
98
+ """
99
+ return col_expr.cast(pl.String).cast(pl.Float64)
100
+
101
+
91
102
  def _native_cast_expression(col_name: str, current_type: pl.DataType, target_type: pl.DataType) -> pl.Expr:
92
103
  """Build the cast for every target that needs no Python callback."""
93
104
  col_expr = pl.col(col_name)
@@ -97,6 +108,8 @@ def _native_cast_expression(col_name: str, current_type: pl.DataType, target_typ
97
108
  return _null_out_sentinel_strings(col_expr).str.to_datetime(strict=False).cast(pl.Date, strict=False)
98
109
  if target_type == pl.Boolean and is_string:
99
110
  return col_expr.str.to_lowercase().is_in(["true", "1", "yes"])
111
+ if target_type.is_float() and current_type.is_decimal():
112
+ return _decimal_to_float64(col_expr).cast(target_type, strict=False)
100
113
  return col_expr.cast(target_type, strict=False)
101
114
 
102
115